Skip to content

Commit

Permalink
Merge branch 'master' into feature/cyclic-send-variable-time
Browse files Browse the repository at this point in the history
  • Loading branch information
Sunnyka98 committed Nov 19, 2024
2 parents 2407241 + 5a5d232 commit b6c0f54
Show file tree
Hide file tree
Showing 12 changed files with 91 additions and 105 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/style.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ jobs:
- name: Checkout module
uses: actions/checkout@master
- name: Check style
uses: symcon/action-style@master
uses: symcon/action-style@v3
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
.idea
.DS_Store
.idea/
.phpunit.*
.php_cs.cache
.php-cs-fixer.cache
2 changes: 1 addition & 1 deletion .style
Submodule .style updated 2 files
+34 −30 .php-cs-fixer.php
+71 −71 json-check.php
86 changes: 2 additions & 84 deletions CSVZipExport/README.md
Original file line number Diff line number Diff line change
@@ -1,86 +1,4 @@
# CSVZipExport
Dieses Modul bietet die Möglichkeit, die aggregierten Werte einer Variable als CSV-Datei in einem ZIP-Archiv zu exportieren.
[Link zur deutschen Dokumentation](https://www.symcon.de/de/service/dokumentation/modulreferenz/csv-zip-export/)

### Inhaltsverzeichnis

1. [Funktionsumfang](#1-funktionsumfang)
2. [Voraussetzungen](#2-voraussetzungen)
3. [Software-Installation](#3-software-installation)
4. [Einrichten der Instanzen in IP-Symcon](#4-einrichten-der-instanzen-in-ip-symcon)
5. [Statusvariablen und Profile](#5-statusvariablen-und-profile)
6. [WebFront](#6-webfront)
7. [PHP-Befehlsreferenz](#7-php-befehlsreferenz)

### 1. Funktionsumfang

* Exportieren von aggregierten Daten einer Variable
* Daten in CSV-Datei ein einem ZIP-Archiv exportieren
* Auflistung aller geloggten Variablen
* Zeitraum der Aggregierung frei wählbar
* Aggregierungsstufe kann ausgewählt werden
* Zyklisches erstellen und versenden eines Archivs

### 2. Voraussetzungen

- IP-Symcon ab Version 5.5

### 3. Software-Installation

* Über den Module Store das 'CSVZipExport'-Modul installieren.
* Alternativ über das Module Control folgende URL hinzufügen `https://github.com/symcon/CSVZipExport/`

### 4. Einrichten der Instanzen in IP-Symcon

Unter 'Instanz hinzufügen' ist das 'CSVZipExport'-Modul unter dem Hersteller '(Gerät)' aufgeführt.

__Konfigurationsseite__:

Name | Beschreibung
---------------------------- | ------------------
Filter | Filtriert die Auswahl der geloggten Variablen
Geloggte Variablen | Auswahl der Variable welche exportiert werden soll
Start der Aggregation | Beginn des Aggregationszeitraums
Ende der Aggregation | Ende des Aggregationszeitraums
Aggregationsstufe | Stufe der Aggregation
Exportieren | Die aggregierten Daten der Variable werden exportiert
Zyklisches senden aktivieren | Aktiviert die Versendung per E-Mail
SMPT-Instanz | Auswahl der E-Mail-Instanz
E-Mail Intervall | Intervall in welchem die E-Mail versendet wird. Bei "Wöchtenlich" wird die E-Mail am Montag versendet und bei "Monatlich" wird die E-Mail jeweils am 1. des Monats versendet zum jeweilig gewählten Zeitpunkt
Zeitpunkt der Mail | Zeitpunkt zu welchem die E-Mail versendet werden soll
Jetzt Mail senden | Sendet manuell eine Mail

### 5. Statusvariablen und Profile

Die Statusvariablen/Kategorien werden automatisch angelegt. Das Löschen einzelner kann zu Fehlfunktionen führen.

#### Statusvariablen

Es werden keine zusätzlichen Statusvariablen erstellt.

#### Profile
Es werden keine zusätzlichen Profile erstellt.

### 6. WebFront

Dieses Modul bietet keinerlei Funktion im Webfront.

### 7. PHP-Befehlsreferenze
`string CSV_Export(integer $InstanzID, integer $ArchiveVariable, integer $AggregationStage, integer $AggregationStart, integer $AggregationEnd);`
Erzeugt ein Zip-Archiv basierend auf den gegebenen Parametern und liefert den relativen Pfad des Archivs als Rückgabewert.

Beispiel:
`CSV_Export(12345, 54321, 4, 2293574400, 3127161600);`


`void CSV_SendMail(integer $InstanzID);`
Senden durch eine SMTP Instaz eine Mail mit einer erzeugten Zip-Datei

Beispiel:
`CSV_SendMail(12345);`


`void CSV_DeleteZip(integer $InstanzID);`
Entfernt die generierte Datei.

Beispiel:
`CSV_DeleteZip(12345);`
[Link to the english documentation](https://www.symcon.de/en/service/documentation/module-reference/csv-zip-export/)
15 changes: 15 additions & 0 deletions CSVZipExport/form.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,21 @@
"width": "700px",
"requiredLogging": 1
},
{
"type": "Select",
"caption": "Decimal Separator",
"name": "DecimalSeparator",
"options": [
{
"caption": "Comma",
"value": ","
},
{
"caption": "Dot",
"value": "."
}
]
},
{
"type": "SelectDateTime",
"caption": "Aggregation Start",
Expand Down
6 changes: 5 additions & 1 deletion CSVZipExport/locale.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@
"Summary of %s (%s to %s)": "Zusammenfassung von %s (%s bis %s)",
"In the appendix you can find the created CSV-File.": "Im Anhang finden Sie die erstellte CSV-Datei.",
"The selected SMTP-Instance doesn't exist": "Die ausgewählte SMTP-Instanz existiert nicht",
"Variable is not selected": "Variable ist nicht ausgewählt"
"Decimal Separator": "Dezimaltrennzeichen",
"Variable is not selected": "Variable ist nicht ausgewählt",
"https://www.symcon.de/en/service/documentation/module-reference/csv-zip-export/": "https://www.symcon.de/de/service/dokumentation/modulreferenz/csv-zip-export/",
"Dot": "Punkt",
"Comma": "Komma"
}
}
}
2 changes: 1 addition & 1 deletion CSVZipExport/module.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
"childRequirements": [],
"implemented": [],
"prefix": "CSV",
"url": "https://github.com/symcon/CSVZipExport"
"url": "https://www.symcon.de/en/service/documentation/module-reference/csv-zip-export/"
}
52 changes: 49 additions & 3 deletions CSVZipExport/module.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public function Create()
$this->RegisterPropertyInteger('SMTPInstance', 0);
$this->RegisterPropertyBoolean('IntervalStatus', false);
$this->RegisterPropertyString('MailTime', '{"hour":12,"minute":0,"second":0}');
$this->RegisterPropertyString('DecimalSeparator', ',');

//Timer
$this->RegisterTimer('DeleteZipTimer', 0, 'CSV_DeleteZip($_IPS[\'TARGET\']);');
Expand Down Expand Up @@ -92,20 +93,43 @@ public function UserExport(int $ArchiveVariable, int $AggregationStage, string $
public function Export(int $ArchiveVariable, int $AggregationStage, int $startTimeStamp, int $endTimeStamp)
{
$archiveControlID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
$startTimeStamp = 0;
$endTimeStamp = 0;

switch ($AggregationStage) {
case 0: //Hourly
case 5: //1-Minute
case 6: //5-Minute
case 7: //raw datas
$startTimeStamp = $this->TransferTime($AggregationStart, true, false);
$endTimeStamp = $this->TransferTime($AggregationEnd, false, false);
break;
case 1: //Daily
case 2: //Weekly
case 3: //Monthly
case 4: //Yearly
$startTimeStamp = $this->TransferTime($AggregationStart, true, true);
$endTimeStamp = $this->TransferTime($AggregationEnd, false, true);
break;
}

//Generate zip with aggregated values
$tmpfile = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $this->GenerateFileName($ArchiveVariable);
$zip = new ZipArchive();
if ($zip->open($tmpfile, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
$separator = $this->ReadPropertyString('DecimalSeparator');
if ($zip->open($tempfile, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
$content = '';
if ($AggregationStage != 7) {
$loggedValues = AC_GetAggregatedValues($archiveControlID, $ArchiveVariable, $AggregationStage, $startTimeStamp, $endTimeStamp, 0);
for ($j = 0; $j < count($loggedValues); $j++) {
$content .= date('d.m.Y H:i:s', $loggedValues[$j]['TimeStamp']) . ';' . $loggedValues[$j]['Avg'] . "\n";
$value = is_numeric($loggedValues[$j]['Avg']) ? str_replace('.', $separator, '' . $loggedValues[$j]['Avg']) : $loggedValues[$j]['Avg'];
$content .= date('d.m.Y H:i:s', $loggedValues[$j]['TimeStamp']) . ';' . $value . "\n";
}
} else {
$loggedValues = AC_GetLoggedValues($archiveControlID, $ArchiveVariable, $startTimeStamp, $endTimeStamp, 0);
for ($j = 0; $j < count($loggedValues); $j++) {
$content .= date('d.m.Y H:i:s', $loggedValues[$j]['TimeStamp']) . ';' . $loggedValues[$j]['Value'] . "\n";
$value = is_numeric($loggedValues[$j]['Value']) ? str_replace('.', $separator, '' . $loggedValues[$j]['Value']) : $loggedValues[$j]['Value'];
$content .= date('d.m.Y H:i:s', $loggedValues[$j]['TimeStamp']) . ';' . $value . "\n";
}
}
$zip->addFromString($this->GenerateFileName($ArchiveVariable, '.csv'), $content);
Expand Down Expand Up @@ -235,6 +259,28 @@ private function GenerateFileName($variableID, $extension = '.zip')
return $variableID . '_' . preg_replace('/[\"\<\>\?\|\\/\:\/]/', '_', IPS_GetName($variableID)) . $extension;
}

//Transfer json string to timestamp
private function TransferTime($jsonTime, bool $start, bool $ignoreTime)
{
$time = json_decode($jsonTime, true);

$customTime = '';
if ($ignoreTime) {
switch ($start) {
case true:
$customTime = '00:00:00';
break;
case false:
$customTime = '23:59:59';
break;
}
} else {
$customTime = sprintf('%02d:%02d:%02d', $time['hour'], $time['minute'], $time['second']);
}

return strtotime(sprintf('%02d', $time['day']) . '-' . sprintf('%02d', $time['month']) . '-' . sprintf('%04d', $time['year']) . ' ' . $customTime);
}

private function ExtractTimestamp($property)
{
$timeProperty = json_decode($this->ReadPropertyString($property), true);
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ _Das Modul „Smart Energy Box“ wurde in Kooperation zwischen der Symcon GmbH,

Folgende Module beinhaltet das CSVZipExport Repository:

- __CSVZipExport__ ([Dokumentation](CSVZipExport))
- __CSVZipExport__ ([Dokumentation](https://www.symcon.de/de/service/dokumentation/modulreferenz/csv-zip-export))

Dieses Modul bietet die Möglichkeit, die aggregierten Werte einer Variable als CSV-Datei in einem ZIP-Archiv zu exportieren.
2 changes: 1 addition & 1 deletion library.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"compatibility": {
"version": "5.0"
},
"version": "1.2",
"version": "1.4",
"build": 0,
"date": 0
}
1 change: 0 additions & 1 deletion tests/.phpunit.result.cache

This file was deleted.

21 changes: 11 additions & 10 deletions tests/phpunit.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
<php>
<const name="PHPUNIT_TESTSUITE" value="true"/>
</php>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">../CSVZipExport</directory>
</whitelist>
</filter>
</phpunit>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.1/phpunit.xsd" cacheDirectory=".phpunit.cache">
<coverage/>
<php>
<const name="PHPUNIT_TESTSUITE" value="true"/>
</php>
<source>
<include>
<directory suffix=".php">../CSVZipExport</directory>
</include>
</source>
</phpunit>

0 comments on commit b6c0f54

Please sign in to comment.