# Tabellenkalkulation

### Grundkonzept

### Konfiguration

Die Konfiguration definiert, mit welcher BuildingPro Suites-Instanz verbunden werden soll und welche Berichte mit welcher Vorlage erstellt werden.

#### BuildingPro Suites-Instanz

<pre class="language-json"><code class="lang-json">{"eliona_handler": {
<strong>    "host": "experimental.eliona.io",
</strong>    "api": "[https://experimental.eliona.io/api/v2](https://experimental.eliona.io/api/v2)",
    "tenant_id": 1,
    "api_key": "slidfglsadbföabg$$äasfnasilbg"}
}
</code></pre>

| Konfiguration | Beschreibung                                                                                                                                                              | Beispiel                                                              | Hinweis                                   |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------- |
| `host`        | Adresse der BuildingPro Suites-Instanz ohne HTTPS.                                                                                                                        | develop.eliona.cloud                                                  | Optional. Idealerweise als .env-Variable. |
| `api`         | Adresse der verwendeten API. In diesem Fall ist es immer `/api/v2`. Hier mit HTTPS.                                                                                       | <https://www.google.com/search?q=https://develop.eliona.cloud/api/v2> | Optional. Idealerweise als .env-Variable. |
| `tenant_id`   | Mandantennummer der verwendeten BuildingPro Suites-Instanz. (Diese erhalten Sie, wenn Sie den Mandanten in den Einstellungen bearbeiten und in die Adressleiste schauen.) |                                                                       | Erforderlich                              |
| `api_key`     | Der API-Schlüssel für die Verbindung zur BuildingPro Suites-Instanz.                                                                                                      | ...                                                                   | Optional. Idealerweise als .env-Variable. |
| `dbTimeZone`  | Die Zeitzone der Datenbank.                                                                                                                                               | Europe/Zurich                                                         | Optional. Idealerweise als .env-Variable. |

### Berichte

Die Berichtskonfiguration befindet sich innerhalb einer Liste. Diese kann daher einen oder mehrere Berichte enthalten. Jeder Bericht benötigt mindestens diese Konfigurationen.

```json
"reportConfig": [
    {
        "name": "Monatsbericht Level 1",
        "schedule": "monthly",
        "type": "DataEntry",
        "templateFile": "./storage/reports/templates/Template_Report_Level_1.xlsx",
        "sheet": "Sheet1",
        "separator":";",
        "firstRow": "0",
        "fromTemplate": true,
        "reportPath": "Report_Level1.xlsx",
        "tempPath": ""
    },
    {
        "name": "Monatsbericht Level 2",
        "schedule": "monthly",
        "type": "DataEntry",
        "templateFile": "./storage/reports/templates/Template_Report_Level_2.xlsx",
        "sheet": "Sheet1",
        "separator":";",
        "firstRow": "0",
        "fromTemplate": true,
        "reportPath": "Report_Level2.xlsx",
        "tempPath": ""
    }
]
```

| Konfiguration  | Beschreibung                                                                                                                                                                                                                                                                               | Beispiel                                                                                                                          |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| `name`         | Name der Berichtdefinition.                                                                                                                                                                                                                                                                | "Bericht Level 1 monatlich"                                                                                                       |
| `schedule`     | Aufrufhäufigkeit.                                                                                                                                                                                                                                                                          | = yearly (Jahresbericht wird im Januar gesendet) = monthly (Monatsbericht wird jeden Monat gesendet)                              |
| `type`         | Definition des Berichtstyps. Dies bestimmt, welcher Typ für die Berichterstellung verwendet wird.                                                                                                                                                                                          | = "DataListSequential" (Liste untereinander) = "DataListParallel" (Liste parallel) = "DataEntry" (Einzelne Einträge in der Zelle) |
| `templateFile` | Pfad zur Vorlagendatei.                                                                                                                                                                                                                                                                    | ./templates/syn\_001.xlsx                                                                                                         |
| `sheet`        | Tabellenname bei Verwendung von Excel-Tabellen.                                                                                                                                                                                                                                            | Table1, Sheet1                                                                                                                    |
| `fileType`     | Legt das Dateiformat fest, das zum Speichern und Lesen der Daten verwendet werden soll.                                                                                                                                                                                                    | csv, xls, xlsx                                                                                                                    |
| `separator`    | Trennzeichen, das beim Lesen und Speichern von CSV-Dateien verwendet werden soll.                                                                                                                                                                                                          | ";" // "," // " "                                                                                                                 |
| `firstRow`     | Erste Zeile, die beim Lesen der Vorlagenkonfiguration und beim Speichern der Daten mit `fromTemplate` aktiv.                                                                                                                                                                               |                                                                                                                                   |
| `fromTemplate` | Gibt an, ob die Datei neu erstellt oder aus der Vorlage übernommen werden soll. Eine .csv-Datei sollte nicht zum Anhängen von Daten verwendet werden. Mit einer XLSX-Datei kann die Formatierung mit dieser Option beibehalten werden. (Formeln, Zellformatierungen usw. bleiben erhalten) | true / false. Bitte achten Sie auf die Schreibweise.                                                                              |
| `reportPath`   | Speicherpfad einschließlich des Namens des Berichts.                                                                                                                                                                                                                                       | ./report\_XY\_001.xlsx                                                                                                            |

### Vorlagen

Die Vorlagen sollten im Excel-Format gespeichert werden und müssen die Konfiguration der Assets enthalten. Der Link zu den Assets/Attributen in BuildingPro Suites sieht so aus:

`{"assetGai":"H01 District Heating Energy Meter IWB", "attribute":"Energy", "raster":"MONTH", "mode":"sum"}`

Die benötigten Informationen werden hier im JSON-Format eingetragen.

| Schlüssel     | Beispielwert                                              | Hinweis                                                                                                                                                                                               |
| ------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `"assetGai"`  |                                                           | GAI des verwendeten Assets.                                                                                                                                                                           |
| `"attribute"` |                                                           | Hier werden die Attribute des zu lesenden Asset-Typs eingetragen.                                                                                                                                     |
| `"raster"`    | M1 , M5, M10, M15 H1, H2, H4, H8, H12 DAY WEEK MONTH YEAR | Je nach zu erstellendem Bericht muss hier das Raster eingetragen werden. Für einen Monatsbericht muss das Raster MONTH verwendet werden.                                                              |
| `"mode"`      | last first sum average                                    | Der aus dem Raster zu lesende Modus. Für Attribute, die einen Durchschnittswert haben, muss "average" verwendet werden. Attribute mit einer Summe oder kumulativen Summierung müssen "sum" verwenden. |

In Google Sheets exportieren

### Berechnungen

Berechnungen werden in Excel durchgeführt. Hier können alle Excel-Funktionen verwendet werden. Es ist möglich, Werte aus derselben Tabelle zu referenzieren und Werte aus BuildingPro Suites zu verwenden. Bei der Verwendung von Werten aus BuildingPro Suites verwenden Sie einfach den JSON-Teil für die Referenzierung.

*Beispiel: Hier wird ein Zellinhalt von einem BuildingPro Suites-Asset-Attribut subtrahiert.*

`= ({"assetGai":"K01 Grid Energy Meter 1005", "attribute":"Energy", "raster":"MONTH", "mode":"sum"} - J6)`

ACHTUNG: Die Eingabe einer solchen Formel wird von Excel verhindert. Dazu muss das Format der Zelle angepasst werden. Nach der Eingabe der Formel kann der Zelltyp wieder zurückgesetzt werden. Es wird empfohlen, das Zahlenformat zu wählen.

### DataListSequential (Liste untereinander)

Wurde bisher nicht verwendet. War nur für einen Mandanten in der Angebotsphase vorgesehen.

### DataListParallel (Liste parallel)

*Beispieltabelle:*

*Vorlagebeispiel:*

| *Zeitstempel*                                    | *\[m³] Volumen IWB Service Water Cooling System 1004*                      | *\[°C] Kühlsystem 1004 Wassertemperatur Rücklauf WAR*                               | *\[] IWB Service Water Cooling System 1004 Verbindung OK*                   |
| ------------------------------------------------ | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| {"timeStamp":"%Y-%m-%d %H:%M:%S", "raster":"H1"} | {"assetGai":"IWB Cooling System 1004", "attribute":"Volume", "mode":"sum"} | {"assetGai":"IWB Cooling System 1004", "attribute":"Temperature", "mode":"average"} | {"assetGai":"IWB Cooling System 1004", "attribute":"Status", "mode":"last"} |

### DataEntry (Einzelne Einträge in der Zelle)

*Beispieltabelle:*

*Vorlagebeispiel:*

| Von Datum                     | Bis Datum                   | Verbrauch                                                                                                                      |
| ----------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| {"timeStampStart":"%Y-%m-%d"} | {"timeStampEnd":"%Y-%m-%d"} | {"assetGai":"Drinking Water Cold WRO 1007P UG-8.OG Fresh Water Station", "attribute":"Volume", "raster":"MONTH", "mode":"sum"} |
| {"timeStampStart":"%Y-%m-%d"} | {"timeStampEnd":"%Y-%m-%d"} | {"assetGai":"Softened Water Gastro Supply Fresh Water", "attribute":"Volume", "raster":"MONTH", "mode":"sum"}                  |
| {"timeStampStart":"%Y-%m-%d"} | {"timeStampEnd":"%Y-%m-%d"} | = {"assetGai":"H02 Energy Meter BWW 1005", "attribute":"Energy", "raster":"MONTH", "mode":"sum"} \* 1000                       |
| {"timeStampStart":"%Y-%m-%d"} | {"timeStampEnd":"%Y-%m-%d"} | = (1 - ((J4) / ((J2+J3)\*64 + 68000)))\*100                                                                                    |

### Manuelle Erstellung eines Berichts

Zur manuellen Erstellung eines Berichts kann der Docker-Container geöffnet und die App.py mit Argumenten aufgerufen werden. Es gibt ein Hilfe-Menü, das mit -h aufgerufen werden kann.

```bash
(env311) spreadsheet-report-app % python ./src/spreadsheet-reportapp/spreadsheet_report_app.py -h
usage: spreadsheet_report_app.py [-h] [-d DATE] [-c CONFIG] [-u USER] [-r REPORT] [-o OUTPUT]
Optionen:
-h, --help zeigt diese Hilfemeldung an und beendet das Programm
-d DATE, --date DATE Datum im Format: tt.mm.jjjj
-c CONFIG, --config CONFIG Pfad zur verwendeten Konfigurationsdatei. Zum Beispiel: "./config/config.json"
-u USER, --user USER Angeforderter Benutzername. Der Name kann aus der Datei config.json gelesen werden.
-r REPORT, --report REPORT Angeforderter Berichtsname. Der Name kann aus der Datei config.json gelesen werden.
-o OUTPUT, --output OUTPUT Export-Dateipfad. Wenn leer, wird unter "./temp/file_name" gespeichert
(env311) spreadsheet-report-app %
```

| Argument     | Beschreibung                                                                                                                                                                                                                                                                                                    | Beispiel                                     |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| -h, --help   | Zeigt den Hilfetext an.                                                                                                                                                                                                                                                                                         | python sp...app.py -h                        |
| -d, --date   | Eingabe des gewünschten Berichtsdatums im Format "tt.mm.jjjj". Für Monatsberichte sind Monat und Jahr wichtig. Für Jahresberichte ist das Jahr wichtig.                                                                                                                                                         | python sp...app.py -d "01.01.2021"           |
| -c, --config | Pfad zur Einstellungsdatei. Diese wird benötigt, um die Berichte und Benutzereinstellungen zu laden. Wenn dies leer gelassen wird, wird das Standardverzeichnis verwendet.                                                                                                                                      | python sp...app.py -c "./config/config.json" |
| -u, --user   | Wählen Sie entweder einen Benutzer oder eine Berichtskonfiguration aus. Abhängig von der vorhandenen Konfiguration, welche verfügbar sind. Im Falle eines Benutzers werden alle Berichte des Benutzers erstellt. Im Falle eines Berichts wird der einzelne Bericht erstellt. Es muss jedoch einer gesetzt sein. | python sp...app.py -u                        |
| -r, --report |                                                                                                                                                                                                                                                                                                                 | python sp...app.py -r                        |
| -o, --output | Ausgabepfad für die erstellten Berichte. Wenn dieser Parameter leer gelassen wird, wird das Verzeichnis "./tmp\_reports/manual\_created/" verwendet.                                                                                                                                                            | python sp...app.py -h "./tmp\_files/export/" |
