iobroker.goodwe-sems 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Stefan Bühler
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,170 @@
1
+ ![Logo](admin/goodwe-sems.png)
2
+
3
+ # ioBroker.goodwe-sems
4
+
5
+ [![NPM version](https://img.shields.io/npm/v/iobroker.goodwe-sems.svg)](https://www.npmjs.com/package/iobroker.goodwe-sems)
6
+ [![Downloads](https://img.shields.io/npm/dm/iobroker.goodwe-sems.svg)](https://www.npmjs.com/package/iobroker.goodwe-sems)
7
+ ![Test and Release](https://github.com/bueste/ioBroker.goodwe-sems/actions/workflows/test-and-release.yml/badge.svg)
8
+
9
+ Liest Wechselrichter-, Batterie- und Energiefluss-Daten aus dem **GoodWe SEMS Portal (Cloud)** – für Anlagen, die (z. B. weil kein LAN-Zugriff auf den Wechselrichter besteht) **nicht** mit dem lokalen [ioBroker.goodwe](https://github.com/FossyTom/ioBroker.goodwe)-Adapter (Modbus/UDP, Port 8899) abgefragt werden können.
10
+
11
+ Login erfolgt mit dem **ganz normalen SEMS-Portal-Konto** (dasselbe wie unter semsportal.com / in der SEMS-App). Ein GoodWe-"Organization"/OpenAPI-Konto wird **nicht** benötigt.
12
+
13
+ ## Inhaltsverzeichnis
14
+
15
+ - [Warum dieser Adapter?](#warum-dieser-adapter)
16
+ - [API-Herkunft und Grenzen (bitte lesen)](#api-herkunft-und-grenzen-bitte-lesen)
17
+ - [Installation](#installation)
18
+ - [Konfiguration](#konfiguration)
19
+ - [Objekt-/State-Struktur](#objekt-state-struktur)
20
+ - [Fehlerbehandlung, Backoff und Rate-Limits](#fehlerbehandlung-backoff-und-rate-limits)
21
+ - [Pushover-Benachrichtigungen](#pushover-benachrichtigungen)
22
+ - [Sicherheit & Datenschutz](#sicherheit--datenschutz)
23
+ - [Entwicklung](#entwicklung)
24
+ - [Changelog](#changelog)
25
+ - [Lizenz](#lizenz)
26
+
27
+ ## Warum dieser Adapter?
28
+
29
+ GoodWe ET/EH/BH/BT-Wechselrichter lassen sich normalerweise lokal per Modbus/UDP auslesen (siehe [ioBroker.goodwe](https://github.com/FossyTom/ioBroker.goodwe)). Steht kein LAN-Zugriff auf den Wechselrichter zur Verfügung (z. B. weil nur ein WLAN/LTE-Stick mit dem SEMS-Portal verbunden ist und das Zielnetz nicht erreichbar ist), bleibt nur der Umweg über die Cloud: das **SEMS Portal** (semsportal.com), über das die Anlage ohnehin schon überwacht wird.
30
+
31
+ ## API-Herkunft und Grenzen (bitte lesen)
32
+
33
+ GoodWe bietet offiziell drei APIs an (siehe [GoodWe API Technical Document](https://community.goodwe.com/solution/API)):
34
+
35
+ - **OpenAPI** – nur für SEMS-*Organization*-Konten, erfordert Freischaltung durch GoodWe.
36
+ - **Real-time Data Monitoring API** – für Drittanbieter, erfordert Lizenzvertrag + Geräte-Whitelist.
37
+ - **Batch Remote Control Interface** – Kafka-basiert, nur Fernsteuerung.
38
+
39
+ Für ein **normales** SEMS-Portal-Konto (wie es die meisten Privatanwender haben) ist keine davon zugänglich. Dieser Adapter spricht stattdessen dieselbe **undokumentierte HTTPS-API**, die auch die offizielle SEMS-App/Webseite verwendet (Login via `CrossLogin`/`SEMS+ cross-login`, Datenabfrage via `GetMonitorDetailByPowerstationId`). Diese Endpunkte wurden nicht von GoodWe für Drittnutzung freigegeben oder dokumentiert; die Implementierung basiert auf eigener Analyse sowie den quelloffenen Referenzprojekten:
40
+
41
+ - [pygoodwe](https://github.com/yaleman/pygoodwe) (MIT)
42
+ - [goodwe-sems-home-assistant](https://github.com/TimSoethout/goodwe-sems-home-assistant)
43
+ - [openHAB SEMSPortal-Binding](https://www.openhab.org/addons/bindings/semsportal/)
44
+
45
+ **Konsequenzen:**
46
+
47
+ - GoodWe kann die API jederzeit ohne Vorankündigung ändern - der Adapter kann dadurch (temporär) ausfallen.
48
+ - Es gibt **kein dokumentiertes Echtzeit-/Push-Verfahren** (Websocket/SignalR) für Drittanbieter. Ein `msgSocketAdr`-Feld taucht in älteren Login-Antworten auf, wird aber von keinem der oben genannten Referenzprojekte tatsächlich genutzt - es wäre reines Reverse-Engineering ohne belastbare Dokumentation und ein deutlich höheres Risiko (Kontosperrung, instabile Verbindung). Dieser Adapter pollt daher bewusst per HTTPS in konfigurierbarem Intervall (Default 5 Minuten) statt eine ungetestete Websocket-Verbindung vorzutäuschen.
49
+ - Es wurde ein **Rate-Limit-Code (`GY0429`)** beobachtet (u. a. in der Home-Assistant-Integration dokumentiert). Der Adapter erkennt diesen Code und pausiert automatisch (Default 5 Minuten Cool-down), statt das Konto durch wiederholte Anfragen zu gefährden.
50
+ - Nutzung erfolgt auf eigenes Risiko, siehe [LICENSE](LICENSE) (MIT, ohne Gewährleistung).
51
+
52
+ ## Installation
53
+
54
+ Solange der Adapter noch nicht im offiziellen ioBroker-Repository gelistet ist:
55
+
56
+ ```
57
+ cd /opt/iobroker
58
+ npm install https://github.com/bueste/ioBroker.goodwe-sems/tarball/main
59
+ iobroker add goodwe-sems
60
+ ```
61
+
62
+ ## Konfiguration
63
+
64
+ | Feld | Beschreibung |
65
+ |---|---|
66
+ | SEMS-Konto / Passwort | Dieselben Zugangsdaten wie auf semsportal.com. Passwort wird von ioBroker verschlüsselt gespeichert. |
67
+ | Anlagen-ID (optional) | Leer lassen für automatische Erkennung (`GetPowerStationIdByOwner`). Bei mehreren Anlagen pro Konto: ID manuell aus der Portal-URL übernehmen (`.../powerstation/powerstatussnmin/<ID>`). |
68
+ | Poll-Intervall | Default 300 s. Der Adapter erzwingt ein Minimum von 60 s, unabhängig von der Konfiguration. |
69
+ | Pushover | Siehe [Pushover-Benachrichtigungen](#pushover-benachrichtigungen). |
70
+
71
+ ## Objekt-/State-Struktur
72
+
73
+ ```
74
+ goodwe-sems.0.info.connection SEMS Portal erreichbar (bool)
75
+ goodwe-sems.0.info.lastSuccess Zeitstempel letzter erfolgreicher Poll
76
+ goodwe-sems.0.info.lastError Letzte Fehlermeldung
77
+ goodwe-sems.0.info.consecutiveErrors Anzahl aufeinanderfolgender Fehlversuche
78
+ goodwe-sems.0.info.rateLimited SEMS Portal limitiert aktuell (bool)
79
+ goodwe-sems.0.info.activePollInterval Aktuell wirksames Intervall inkl. Backoff (s)
80
+ goodwe-sems.0.info.rawResponse Rohe JSON-Antwort (nur wenn Debug-Option aktiv)
81
+
82
+ goodwe-sems.0.Station.Name / .Capacity / .Address / .Latitude / .Longitude / .PortalTimestamp / .Status / .StationId
83
+ goodwe-sems.0.KPI.CurrentPower / .TodayGeneration / .MonthGeneration / .TotalGeneration / .TodayIncome / .TotalIncome / .Currency
84
+ goodwe-sems.0.PowerFlow.PV / .Load / .Grid / .Battery / .LoadStatus / .GridStatus / .PvStatus / .BatteryStatus
85
+ goodwe-sems.0.Battery.SOC / .Status
86
+ goodwe-sems.0.EVCharger.* (nur wenn vom Portal gemeldet)
87
+
88
+ goodwe-sems.0.Inverters.<Seriennummer>.Name / .Model / .Status / .WarningCode
89
+ goodwe-sems.0.Inverters.<Seriennummer>.CurrentPower / .TodayGeneration / .TotalGeneration / .Temperature
90
+ goodwe-sems.0.Inverters.<Seriennummer>.PV1..4.Voltage / .Current
91
+ goodwe-sems.0.Inverters.<Seriennummer>.AC_L1..3.Voltage / .Current / .Frequency
92
+ goodwe-sems.0.Inverters.<Seriennummer>.Battery.SOC / .Voltage / .Current
93
+ ```
94
+
95
+ Bei zwei Wechselrichtern (wie in der ursprünglichen Anforderung) entstehen automatisch zwei `Inverters.<SN>.*`-Zweige - die Anzahl ist nicht fest codiert, sondern richtet sich nach dem, was das Portal für das jeweilige Konto zurückliefert.
96
+
97
+ Felder, die das Portal liefert, aber dieser Adapter (noch) nicht kennt, gehen nicht verloren: Mit aktivierter Debug-Option landet die komplette Rohantwort in `info.rawResponse` (JSON), sodass sie inspiziert und bei Bedarf per PR ergänzt werden können.
98
+
99
+ ## Fehlerbehandlung, Backoff und Rate-Limits
100
+
101
+ - Jeder Poll-Zyklus ist vollständig try/catch-abgesichert; ein einzelner Fehler kann die Polling-Schleife nicht dauerhaft stoppen.
102
+ - Fehlerklassen (`SemsAuthError`, `SemsRateLimitError`, `SemsNetworkError`, `SemsProtocolError`) steuern das Verhalten gezielt:
103
+ - **Rate-Limit (`GY0429`)** → sofortige Pause (Default 300 s), `info.rateLimited = true`.
104
+ - **Login-Fehler** → exponentielles Backoff (bis 1 h Deckel), damit falsche Zugangsdaten das Konto nicht zusätzlich belasten.
105
+ - **Netzwerk-/Protokollfehler** → moderates Backoff.
106
+ - Nach konfigurierbar vielen aufeinanderfolgenden Fehlversuchen (Default 3) gilt die Anlage als "offline" und es wird - falls aktiviert - eine Pushover-Meldung ausgelöst.
107
+ - Alles wird zusätzlich strukturiert ins ioBroker-Log geschrieben (`error`/`warn`/`debug` je nach Schweregrad).
108
+
109
+ ## Pushover-Benachrichtigungen
110
+
111
+ Konfigurierbar in drei Modi:
112
+
113
+ 1. **Über eine bestehende `ioBroker.pushover`-Instanz** (`sendTo`) - empfohlen, keine doppelte Zugangsdatenverwaltung.
114
+ 2. **Direkt über die Pushover-API** (eigener User-Key + API-/App-Token, verschlüsselt gespeichert) - funktioniert auch ohne separate Pushover-Instanz.
115
+ 3. **Beides gleichzeitig.**
116
+
117
+ Ausgelöst wird bei: SEMS-Login-Fehler, SEMS-Rate-Limit, länger andauerndem Ausfall, unerwartetem Adapterfehler - jeweils einzeln aktivierbar. Eine interne Sperrfrist (Default 1 h pro Kategorie) verhindert Spam bei andauernden Störungen.
118
+
119
+ ## Sicherheit & Datenschutz
120
+
121
+ - SEMS-Passwort und Pushover-API-Token sind in `io-package.json` als `encryptedNative`/`protectedNative` markiert und werden von ioBroker verschlüsselt abgelegt, nicht im Klartext geloggt (Kontoname wird in Log-Meldungen maskiert, z. B. `st***@gmail.com`).
122
+ - Der Adapter führt **ausschließlich lesende** Zugriffe aus (`GetMonitorDetailByPowerstationId`, `GetPowerStationIdByOwner`). Es gibt bewusst **keine** Fernsteuerungs-/Schreibfunktion (`SaveRemoteControlInverter`) - das wäre ein deutlich größeres Sicherheits- und Haftungsrisiko und war nicht Teil der Anforderung.
123
+ - Keine Drittanbieter-Abhängigkeiten für den HTTP-Zugriff: Es wird das in Node.js ≥18 eingebaute `fetch` verwendet statt einer zusätzlichen HTTP-Bibliothek - kleinere Angriffsfläche, weniger Supply-Chain-Risiko.
124
+ - Alle Netzwerkfehler werden typisiert abgefangen; es werden keine ungeprüften Daten aus der API-Antwort ausgeführt (`eval`, `Function`, o. ä. werden nirgends verwendet).
125
+
126
+ ## Entwicklung
127
+
128
+ ```
129
+ npm install
130
+ npm run lint
131
+ npm test # Unit-Tests (lib/mapping.js, lib/semsApi.js, lib/notify.js) + Package-Konsistenz-Check
132
+ ```
133
+
134
+ Empfehlung vor jedem Release zusätzlich lokal:
135
+
136
+ ```
137
+ npx @iobroker/adapter-checker@latest .
138
+ ```
139
+
140
+ Pull Requests willkommen, insbesondere um zusätzliche, vom Portal gelieferte Felder zu ergänzen (siehe `info.rawResponse` mit aktivierter Debug-Option) oder Übersetzungen zu verbessern.
141
+
142
+ ## Changelog
143
+
144
+ ### **WORK IN PROGRESS**
145
+
146
+ - (bueste) initial release: SEMS-Portal-Login (SEMS+ mit Legacy-Fallback), automatische Anlagen-Erkennung, vollständiges Monitoring (Station/KPI/PowerFlow/Battery/EV-Charger/pro Wechselrichter), Rate-Limit-Handling, Backoff, Pushover-Alarmierung, Admin6-JSON-Config, i18n (11 Sprachen), Unit-Tests.
147
+
148
+ ## Lizenz
149
+
150
+ MIT License
151
+
152
+ Copyright (c) 2026 Stefan Bühler
153
+
154
+ Permission is hereby granted, free of charge, to any person obtaining a copy
155
+ of this software and associated documentation files (the "Software"), to deal
156
+ in the Software without restriction, including without limitation the rights
157
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
158
+ copies of the Software, and to permit persons to whom the Software is
159
+ furnished to do so, subject to the following conditions:
160
+
161
+ The above copyright notice and this permission notice shall be included in all
162
+ copies or substantial portions of the Software.
163
+
164
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
165
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
166
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
167
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
168
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
169
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
170
+ SOFTWARE.
Binary file
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Rohe JSON-Antwort speichern (Debug)",
3
+ "debugRawResponseHelp": "Schreibt die komplette letzte SEMS-API-Antwort nach info.rawResponse. Nützlich, um Felder zu finden, die dieser Adapter noch nicht abbildet. Standardmässig aus.",
4
+ "hintLoginText": "Melde dich mit deinem normalen SEMS-Portal-Konto an (dasselbe wie auf semsportal.com oder in der SEMS-App). Ein SEMS-\"Organization\"/OpenAPI-Konto wird nicht benötigt.",
5
+ "hintPollingText": "Das SEMS-Portal ist nicht für Drittzugriffe dokumentiert und limitiert Konten bei zu aggressivem Polling nachweislich. 5 Minuten sind ein sicherer Standardwert; der Adapter erzwingt ein Minimum von 60s und drosselt automatisch nach Fehlern oder einer Rate-Limit-Antwort.",
6
+ "hintPushoverText": "Kritische Ereignisse (Login-Fehler, SEMS-Rate-Limit, längere Ausfälle, unerwartete Adapterfehler) können zusätzlich zum ioBroker-Log per Pushover aufs Handy geschickt werden.",
7
+ "maxConsecutiveErrors": "Fehlversuche bis \"Anlage offline\"-Meldung",
8
+ "maxConsecutiveErrorsHelp": "Anzahl aufeinanderfolgender fehlgeschlagener Poll-Zyklen, bevor info.connection als echter Ausfall gilt und (falls aktiviert) eine Pushover-Meldung gesendet wird.",
9
+ "notifyHeader": "Meldung senden bei",
10
+ "notifyOnAdapterError": "Unerwartetem Adapterfehler",
11
+ "notifyOnLoginFailure": "SEMS-Login-Fehler",
12
+ "notifyOnRateLimit": "SEMS-Rate-Limit erreicht",
13
+ "notifyOnStationOffline": "Länger andauerndem Ausfall",
14
+ "pollInterval": "Abfrage-Intervall (Sekunden)",
15
+ "pollIntervalHelp": "Minimum 60s, empfohlen 300s (5 Min).",
16
+ "pollingTab": "Abfrage-Intervall",
17
+ "powerStationId": "Anlagen-ID (optional)",
18
+ "powerStationIdHelp": "Leer lassen für automatische Erkennung der Anlage dieses Kontos. Bei mehreren Anlagen pro Konto: ID explizit setzen (zu finden in der SEMS-Portal-URL nach dem Login, z. B. semsportal.com/powerstation/powerstatussnmin/<ID>).",
19
+ "priorityEmergency": "Notfall (wiederholt bis Bestätigung)",
20
+ "priorityHigh": "Hoch (ignoriert Ruhezeiten)",
21
+ "priorityLow": "Niedrig (kein Ton)",
22
+ "priorityNormal": "Normal",
23
+ "pushoverApiToken": "Pushover API-/App-Token",
24
+ "pushoverInstance": "Pushover-Adapterinstanz",
25
+ "pushoverInstanceHelp": "z. B. pushover.0",
26
+ "pushoverMode": "Pushover-Versand",
27
+ "pushoverModeBoth": "Beides",
28
+ "pushoverModeDirect": "Direkt über die Pushover-API",
29
+ "pushoverModeHelp": "Wie Pushover-Meldungen versendet werden.",
30
+ "pushoverModeInstance": "Über bestehende ioBroker.pushover-Instanz",
31
+ "pushoverModeNone": "Deaktiviert (nur Log)",
32
+ "pushoverPriority": "Pushover-Priorität",
33
+ "pushoverTab": "Pushover-Meldungen",
34
+ "pushoverUserKey": "Pushover User-Key",
35
+ "requestTimeout": "Anfrage-Timeout (Sekunden)",
36
+ "requestTimeoutHelp": "Pro HTTP-Anfrage an das SEMS-Portal.",
37
+ "semsAccount": "SEMS-Konto (E-Mail)",
38
+ "semsAccountHelp": "Die E-Mail-Adresse, mit der du dich auf semsportal.com anmeldest.",
39
+ "semsPassword": "SEMS-Passwort",
40
+ "semsPasswordHelp": "Wird von ioBroker verschlüsselt gespeichert.",
41
+ "stationOfflineMinutes": "Sperrfrist Ausfall-Meldung (Minuten)",
42
+ "stationOfflineMinutesHelp": "Nur informativ - wird im Text der Ausfall-Meldung angezeigt."
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Store raw JSON response (debug)",
3
+ "debugRawResponseHelp": "Writes the full last SEMS API response into info.rawResponse. Useful to discover fields this adapter does not map yet. Off by default.",
4
+ "hintLoginText": "Log in with your normal SEMS Portal account (the same you use at semsportal.com or in the SEMS app). No SEMS \"organization\"/OpenAPI account is required.",
5
+ "hintPollingText": "The SEMS Portal is not documented for third-party use and has been observed to rate-limit accounts that poll too aggressively. 5 minutes is a safe default; the adapter enforces a hard floor of 60s and automatically backs off after errors or a rate-limit response.",
6
+ "hintPushoverText": "Critical events (login failures, SEMS rate-limiting, prolonged outages, unexpected adapter errors) can be pushed to your phone via Pushover, in addition to always being written to the ioBroker log.",
7
+ "maxConsecutiveErrors": "Failures before \"station offline\" alert",
8
+ "maxConsecutiveErrorsHelp": "Number of consecutive failed poll cycles before info.connection is considered a real outage and (if enabled) a Pushover alert is sent.",
9
+ "notifyHeader": "Send alert on",
10
+ "notifyOnAdapterError": "Unexpected adapter error",
11
+ "notifyOnLoginFailure": "SEMS login failure",
12
+ "notifyOnRateLimit": "SEMS rate-limit hit",
13
+ "notifyOnStationOffline": "Prolonged outage",
14
+ "pollInterval": "Poll interval (seconds)",
15
+ "pollIntervalHelp": "Minimum 60s, recommended 300s (5 min).",
16
+ "pollingTab": "Polling",
17
+ "powerStationId": "Power station ID (optional)",
18
+ "powerStationIdHelp": "Leave empty to auto-detect the plant owned by this account. Multiple plants on one account: set the ID explicitly (found in the SEMS portal URL after login, e.g. semsportal.com/powerstation/powerstatussnmin/<ID>).",
19
+ "priorityEmergency": "Emergency (repeated until confirmed)",
20
+ "priorityHigh": "High (bypass quiet hours)",
21
+ "priorityLow": "Low (no sound)",
22
+ "priorityNormal": "Normal",
23
+ "pushoverApiToken": "Pushover API/application token",
24
+ "pushoverInstance": "Pushover adapter instance",
25
+ "pushoverInstanceHelp": "e.g. pushover.0",
26
+ "pushoverMode": "Pushover delivery",
27
+ "pushoverModeBoth": "Both",
28
+ "pushoverModeDirect": "Directly via Pushover API",
29
+ "pushoverModeHelp": "How Pushover notifications are sent.",
30
+ "pushoverModeInstance": "Via existing ioBroker.pushover instance",
31
+ "pushoverModeNone": "Disabled (log only)",
32
+ "pushoverPriority": "Pushover priority",
33
+ "pushoverTab": "Pushover alerts",
34
+ "pushoverUserKey": "Pushover user key",
35
+ "requestTimeout": "Request timeout (seconds)",
36
+ "requestTimeoutHelp": "Per HTTP request to the SEMS Portal.",
37
+ "semsAccount": "SEMS account (e-mail)",
38
+ "semsAccountHelp": "The e-mail address you use to log in at semsportal.com.",
39
+ "semsPassword": "SEMS password",
40
+ "semsPasswordHelp": "Stored encrypted by ioBroker.",
41
+ "stationOfflineMinutes": "Outage alert cool-down (minutes)",
42
+ "stationOfflineMinutesHelp": "Informational only - shown in the outage notification text."
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Guardar respuesta JSON en bruto (depuración)",
3
+ "debugRawResponseHelp": "Escribe la última respuesta completa de la API SEMS en info.rawResponse. Desactivado por defecto.",
4
+ "hintLoginText": "Inicia sesión con tu cuenta normal de SEMS Portal (la misma que usas en semsportal.com o en la app SEMS). No se requiere una cuenta SEMS \"organization\"/OpenAPI.",
5
+ "hintPollingText": "El portal SEMS no está documentado para uso de terceros y puede limitar cuentas con solicitudes demasiado frecuentes. 5 minutos es un valor predeterminado seguro; el adaptador impone un mínimo de 60s.",
6
+ "hintPushoverText": "Los eventos críticos pueden enviarse por Pushover, además de registrarse siempre en el log de ioBroker.",
7
+ "maxConsecutiveErrors": "Fallos antes de alerta \"planta offline\"",
8
+ "maxConsecutiveErrorsHelp": "Número de ciclos de consulta fallidos consecutivos antes de considerarlo una interrupción real.",
9
+ "notifyHeader": "Enviar alerta al",
10
+ "notifyOnAdapterError": "Error inesperado del adaptador",
11
+ "notifyOnLoginFailure": "Fallo de inicio de sesión SEMS",
12
+ "notifyOnRateLimit": "Límite de solicitudes SEMS alcanzado",
13
+ "notifyOnStationOffline": "Interrupción prolongada",
14
+ "pollInterval": "Intervalo de consulta (segundos)",
15
+ "pollIntervalHelp": "Mínimo 60s, recomendado 300s (5 min).",
16
+ "pollingTab": "Intervalo de consulta",
17
+ "powerStationId": "ID de la planta (opcional)",
18
+ "powerStationIdHelp": "Déjalo vacío para la detección automática. Con varias plantas, indica el ID manualmente (visible en la URL del portal SEMS tras iniciar sesión).",
19
+ "priorityEmergency": "Emergencia",
20
+ "priorityHigh": "Alta",
21
+ "priorityLow": "Baja (sin sonido)",
22
+ "priorityNormal": "Normal",
23
+ "pushoverApiToken": "Token de API/App Pushover",
24
+ "pushoverInstance": "Instancia del adaptador Pushover",
25
+ "pushoverInstanceHelp": "p. ej. pushover.0",
26
+ "pushoverMode": "Envío Pushover",
27
+ "pushoverModeBoth": "Ambos",
28
+ "pushoverModeDirect": "Directamente mediante la API de Pushover",
29
+ "pushoverModeHelp": "Cómo se envían las notificaciones Pushover.",
30
+ "pushoverModeInstance": "Mediante una instancia existente de ioBroker.pushover",
31
+ "pushoverModeNone": "Desactivado (solo log)",
32
+ "pushoverPriority": "Prioridad Pushover",
33
+ "pushoverTab": "Alertas Pushover",
34
+ "pushoverUserKey": "Pushover User-Key",
35
+ "requestTimeout": "Tiempo de espera de la solicitud (segundos)",
36
+ "requestTimeoutHelp": "Por solicitud HTTP al portal SEMS.",
37
+ "semsAccount": "Cuenta SEMS (correo)",
38
+ "semsAccountHelp": "La dirección de correo con la que inicias sesión en semsportal.com.",
39
+ "semsPassword": "Contraseña SEMS",
40
+ "semsPasswordHelp": "Se almacena cifrada.",
41
+ "stationOfflineMinutes": "Espera entre alertas de interrupción (minutos)",
42
+ "stationOfflineMinutesHelp": "Solo informativo."
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Enregistrer la réponse JSON brute (debug)",
3
+ "debugRawResponseHelp": "Écrit la dernière réponse complète de l'API SEMS dans info.rawResponse. Désactivé par défaut.",
4
+ "hintLoginText": "Connectez-vous avec votre compte SEMS Portal habituel (le même que sur semsportal.com ou dans l'appli SEMS). Un compte SEMS \"organization\"/OpenAPI n'est pas requis.",
5
+ "hintPollingText": "Le portail SEMS n'est pas documenté pour un usage tiers et peut limiter les comptes trop sollicités. 5 minutes est une valeur par défaut sûre ; l'adaptateur impose un minimum de 60s.",
6
+ "hintPushoverText": "Les événements critiques peuvent être envoyés via Pushover, en plus du journal ioBroker.",
7
+ "maxConsecutiveErrors": "Échecs avant alerte \"centrale hors ligne\"",
8
+ "maxConsecutiveErrorsHelp": "Nombre de cycles d'interrogation consécutifs en échec avant de considérer une vraie panne.",
9
+ "notifyHeader": "Envoyer une alerte en cas de",
10
+ "notifyOnAdapterError": "Erreur inattendue de l'adaptateur",
11
+ "notifyOnLoginFailure": "Échec de connexion SEMS",
12
+ "notifyOnRateLimit": "Limite de requêtes SEMS atteinte",
13
+ "notifyOnStationOffline": "Panne prolongée",
14
+ "pollInterval": "Intervalle d'interrogation (secondes)",
15
+ "pollIntervalHelp": "Minimum 60s, recommandé 300s (5 min).",
16
+ "pollingTab": "Intervalle d'interrogation",
17
+ "powerStationId": "ID de la centrale (optionnel)",
18
+ "powerStationIdHelp": "Laisser vide pour la détection automatique. Plusieurs centrales : indiquer l'ID manuellement (visible dans l'URL du portail SEMS après connexion).",
19
+ "priorityEmergency": "Urgence",
20
+ "priorityHigh": "Haute",
21
+ "priorityLow": "Basse (sans son)",
22
+ "priorityNormal": "Normale",
23
+ "pushoverApiToken": "Jeton API/App Pushover",
24
+ "pushoverInstance": "Instance de l'adaptateur Pushover",
25
+ "pushoverInstanceHelp": "p. ex. pushover.0",
26
+ "pushoverMode": "Envoi Pushover",
27
+ "pushoverModeBoth": "Les deux",
28
+ "pushoverModeDirect": "Directement via l'API Pushover",
29
+ "pushoverModeHelp": "Comment les notifications Pushover sont envoyées.",
30
+ "pushoverModeInstance": "Via une instance ioBroker.pushover existante",
31
+ "pushoverModeNone": "Désactivé (journal uniquement)",
32
+ "pushoverPriority": "Priorité Pushover",
33
+ "pushoverTab": "Alertes Pushover",
34
+ "pushoverUserKey": "Pushover User-Key",
35
+ "requestTimeout": "Délai d'expiration (secondes)",
36
+ "requestTimeoutHelp": "Par requête HTTP vers le portail SEMS.",
37
+ "semsAccount": "Compte SEMS (e-mail)",
38
+ "semsAccountHelp": "Adresse e-mail utilisée pour se connecter sur semsportal.com.",
39
+ "semsPassword": "Mot de passe SEMS",
40
+ "semsPasswordHelp": "Stocké de façon chiffrée.",
41
+ "stationOfflineMinutes": "Délai entre alertes de panne (minutes)",
42
+ "stationOfflineMinutesHelp": "Information uniquement."
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Salva risposta JSON grezza (debug)",
3
+ "debugRawResponseHelp": "Scrive l'ultima risposta completa dell'API SEMS in info.rawResponse. Disattivato di default.",
4
+ "hintLoginText": "Accedi con il tuo normale account SEMS Portal (lo stesso usato su semsportal.com o nell'app SEMS). Non è richiesto un account SEMS \"organization\"/OpenAPI.",
5
+ "hintPollingText": "Il portale SEMS non è documentato per l'uso di terze parti e può limitare gli account con richieste troppo frequenti. 5 minuti è un valore predefinito sicuro; l'adattatore impone un minimo di 60s.",
6
+ "hintPushoverText": "Gli eventi critici possono essere inviati via Pushover, oltre a essere sempre scritti nel log di ioBroker.",
7
+ "maxConsecutiveErrors": "Errori prima dell'avviso \"impianto offline\"",
8
+ "maxConsecutiveErrorsHelp": "Numero di cicli di polling falliti consecutivi prima di considerare un vero guasto.",
9
+ "notifyHeader": "Invia avviso per",
10
+ "notifyOnAdapterError": "Errore imprevisto dell'adattatore",
11
+ "notifyOnLoginFailure": "Errore di login SEMS",
12
+ "notifyOnRateLimit": "Limite richieste SEMS raggiunto",
13
+ "notifyOnStationOffline": "Guasto prolungato",
14
+ "pollInterval": "Intervallo di polling (secondi)",
15
+ "pollIntervalHelp": "Minimo 60s, consigliato 300s (5 min).",
16
+ "pollingTab": "Intervallo di polling",
17
+ "powerStationId": "ID impianto (opzionale)",
18
+ "powerStationIdHelp": "Lascia vuoto per il rilevamento automatico. Con più impianti, imposta l'ID manualmente (visibile nell'URL del portale SEMS dopo il login).",
19
+ "priorityEmergency": "Emergenza",
20
+ "priorityHigh": "Alta",
21
+ "priorityLow": "Bassa (senza suono)",
22
+ "priorityNormal": "Normale",
23
+ "pushoverApiToken": "Token API/App Pushover",
24
+ "pushoverInstance": "Istanza dell'adattatore Pushover",
25
+ "pushoverInstanceHelp": "es. pushover.0",
26
+ "pushoverMode": "Invio Pushover",
27
+ "pushoverModeBoth": "Entrambi",
28
+ "pushoverModeDirect": "Direttamente tramite l'API Pushover",
29
+ "pushoverModeHelp": "Come vengono inviate le notifiche Pushover.",
30
+ "pushoverModeInstance": "Tramite un'istanza ioBroker.pushover esistente",
31
+ "pushoverModeNone": "Disattivato (solo log)",
32
+ "pushoverPriority": "Priorità Pushover",
33
+ "pushoverTab": "Avvisi Pushover",
34
+ "pushoverUserKey": "Pushover User-Key",
35
+ "requestTimeout": "Timeout richiesta (secondi)",
36
+ "requestTimeoutHelp": "Per ogni richiesta HTTP al portale SEMS.",
37
+ "semsAccount": "Account SEMS (e-mail)",
38
+ "semsAccountHelp": "L'indirizzo e-mail usato per accedere a semsportal.com.",
39
+ "semsPassword": "Password SEMS",
40
+ "semsPasswordHelp": "Memorizzata in modo crittografato.",
41
+ "stationOfflineMinutes": "Attesa tra avvisi di guasto (minuti)",
42
+ "stationOfflineMinutesHelp": "Solo informativo."
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Ruwe JSON-respons opslaan (debug)",
3
+ "debugRawResponseHelp": "Schrijft het laatste volledige SEMS API-antwoord naar info.rawResponse. Standaard uit.",
4
+ "hintLoginText": "Log in met uw normale SEMS Portal-account (hetzelfde als op semsportal.com of in de SEMS-app). Een SEMS \"organization\"/OpenAPI-account is niet nodig.",
5
+ "hintPollingText": "Het SEMS-portaal is niet gedocumenteerd voor gebruik door derden en kan accounts met te frequente aanvragen limiteren. 5 minuten is een veilige standaardwaarde; de adapter hanteert een minimum van 60s.",
6
+ "hintPushoverText": "Kritieke gebeurtenissen kunnen via Pushover naar uw telefoon worden gestuurd, naast het ioBroker-log.",
7
+ "maxConsecutiveErrors": "Fouten tot \"installatie offline\"-melding",
8
+ "maxConsecutiveErrorsHelp": "Aantal opeenvolgende mislukte pollcycli voordat dit als echte storing geldt.",
9
+ "notifyHeader": "Melding versturen bij",
10
+ "notifyOnAdapterError": "Onverwachte adapterfout",
11
+ "notifyOnLoginFailure": "SEMS-inlogfout",
12
+ "notifyOnRateLimit": "SEMS-ratelimit bereikt",
13
+ "notifyOnStationOffline": "Langdurige storing",
14
+ "pollInterval": "Poll-interval (seconden)",
15
+ "pollIntervalHelp": "Minimaal 60s, aanbevolen 300s (5 min).",
16
+ "pollingTab": "Polling-interval",
17
+ "powerStationId": "Installatie-ID (optioneel)",
18
+ "powerStationIdHelp": "Leeg laten voor automatische detectie. Bij meerdere installaties: ID handmatig instellen (te vinden in de SEMS-portal-URL na het inloggen).",
19
+ "priorityEmergency": "Noodgeval",
20
+ "priorityHigh": "Hoog",
21
+ "priorityLow": "Laag (geen geluid)",
22
+ "priorityNormal": "Normaal",
23
+ "pushoverApiToken": "Pushover API-/App-token",
24
+ "pushoverInstance": "Pushover-adapterinstantie",
25
+ "pushoverInstanceHelp": "bijv. pushover.0",
26
+ "pushoverMode": "Pushover-verzending",
27
+ "pushoverModeBoth": "Beide",
28
+ "pushoverModeDirect": "Rechtstreeks via de Pushover-API",
29
+ "pushoverModeHelp": "Hoe Pushover-meldingen worden verzonden.",
30
+ "pushoverModeInstance": "Via bestaande ioBroker.pushover-instantie",
31
+ "pushoverModeNone": "Uitgeschakeld (alleen log)",
32
+ "pushoverPriority": "Pushover-prioriteit",
33
+ "pushoverTab": "Pushover-meldingen",
34
+ "pushoverUserKey": "Pushover User-Key",
35
+ "requestTimeout": "Time-out aanvraag (seconden)",
36
+ "requestTimeoutHelp": "Per HTTP-aanvraag aan het SEMS-portaal.",
37
+ "semsAccount": "SEMS-account (e-mail)",
38
+ "semsAccountHelp": "Het e-mailadres waarmee u inlogt op semsportal.com.",
39
+ "semsPassword": "SEMS-wachtwoord",
40
+ "semsPasswordHelp": "Wordt versleuteld opgeslagen.",
41
+ "stationOfflineMinutes": "Wachttijd storingsmelding (minuten)",
42
+ "stationOfflineMinutesHelp": "Alleen informatief."
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Zapisz surową odpowiedź JSON (debug)",
3
+ "debugRawResponseHelp": "Zapisuje ostatnią pełną odpowiedź API SEMS w info.rawResponse. Domyślnie wyłączone.",
4
+ "hintLoginText": "Zaloguj się przy użyciu zwykłego konta SEMS Portal (tego samego co na semsportal.com lub w aplikacji SEMS). Konto SEMS \"organization\"/OpenAPI nie jest wymagane.",
5
+ "hintPollingText": "Portal SEMS nie jest udokumentowany do użytku zewnętrznego i może ograniczać konta zbyt często odpytywane. 5 minut to bezpieczna wartość domyślna; adapter wymusza minimum 60s.",
6
+ "hintPushoverText": "Krytyczne zdarzenia mogą być wysyłane przez Pushover, oprócz zawsze zapisywanych w logu ioBroker.",
7
+ "maxConsecutiveErrors": "Błędy przed alertem \"instalacja offline\"",
8
+ "maxConsecutiveErrorsHelp": "Liczba kolejnych nieudanych cykli odpytywania przed uznaniem tego za rzeczywistą awarię.",
9
+ "notifyHeader": "Wyślij alert przy",
10
+ "notifyOnAdapterError": "Nieoczekiwanym błędzie adaptera",
11
+ "notifyOnLoginFailure": "Błędzie logowania SEMS",
12
+ "notifyOnRateLimit": "Osiągnięciu limitu żądań SEMS",
13
+ "notifyOnStationOffline": "Długotrwałej awarii",
14
+ "pollInterval": "Interwał odpytywania (sekundy)",
15
+ "pollIntervalHelp": "Minimum 60s, zalecane 300s (5 min).",
16
+ "pollingTab": "Interwał odpytywania",
17
+ "powerStationId": "ID instalacji (opcjonalnie)",
18
+ "powerStationIdHelp": "Pozostaw puste dla automatycznego wykrywania. Przy kilku instalacjach ustaw ID ręcznie (widoczne w adresie URL portalu SEMS po zalogowaniu).",
19
+ "priorityEmergency": "Alarmowy",
20
+ "priorityHigh": "Wysoki",
21
+ "priorityLow": "Niski (bez dźwięku)",
22
+ "priorityNormal": "Normalny",
23
+ "pushoverApiToken": "Token API/App Pushover",
24
+ "pushoverInstance": "Instancja adaptera Pushover",
25
+ "pushoverInstanceHelp": "np. pushover.0",
26
+ "pushoverMode": "Wysyłka Pushover",
27
+ "pushoverModeBoth": "Oba",
28
+ "pushoverModeDirect": "Bezpośrednio przez API Pushover",
29
+ "pushoverModeHelp": "Sposób wysyłania powiadomień Pushover.",
30
+ "pushoverModeInstance": "Przez istniejącą instancję ioBroker.pushover",
31
+ "pushoverModeNone": "Wyłączone (tylko log)",
32
+ "pushoverPriority": "Priorytet Pushover",
33
+ "pushoverTab": "Powiadomienia Pushover",
34
+ "pushoverUserKey": "Pushover User-Key",
35
+ "requestTimeout": "Limit czasu żądania (sekundy)",
36
+ "requestTimeoutHelp": "Na jedno żądanie HTTP do portalu SEMS.",
37
+ "semsAccount": "Konto SEMS (e-mail)",
38
+ "semsAccountHelp": "Adres e-mail używany do logowania na semsportal.com.",
39
+ "semsPassword": "Hasło SEMS",
40
+ "semsPasswordHelp": "Przechowywane w postaci zaszyfrowanej.",
41
+ "stationOfflineMinutes": "Odstęp między alertami awarii (minuty)",
42
+ "stationOfflineMinutesHelp": "Tylko informacyjnie."
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Guardar resposta JSON bruta (depuração)",
3
+ "debugRawResponseHelp": "Grava a última resposta completa da API SEMS em info.rawResponse. Desativado por padrão.",
4
+ "hintLoginText": "Inicie sessão com a sua conta normal do Portal SEMS (a mesma usada em semsportal.com ou na app SEMS). Não é necessária uma conta SEMS \"organization\"/OpenAPI.",
5
+ "hintPollingText": "O Portal SEMS não é documentado para uso por terceiros e pode limitar contas com consultas muito frequentes. 5 minutos é um valor padrão seguro; o adaptador aplica um mínimo de 60s.",
6
+ "hintPushoverText": "Eventos críticos podem ser enviados via Pushover, além de sempre serem gravados no log do ioBroker.",
7
+ "maxConsecutiveErrors": "Falhas até alerta de \"central offline\"",
8
+ "maxConsecutiveErrorsHelp": "Número de ciclos de consulta falhados consecutivos antes de considerar uma falha real.",
9
+ "notifyHeader": "Enviar alerta em",
10
+ "notifyOnAdapterError": "Erro inesperado do adaptador",
11
+ "notifyOnLoginFailure": "Falha de login SEMS",
12
+ "notifyOnRateLimit": "Limite de pedidos SEMS atingido",
13
+ "notifyOnStationOffline": "Falha prolongada",
14
+ "pollInterval": "Intervalo de consulta (segundos)",
15
+ "pollIntervalHelp": "Mínimo 60s, recomendado 300s (5 min).",
16
+ "pollingTab": "Intervalo de consulta",
17
+ "powerStationId": "ID da central (opcional)",
18
+ "powerStationIdHelp": "Deixe em branco para deteção automática. Com várias centrais, defina o ID manualmente (visível na URL do portal SEMS após o login).",
19
+ "priorityEmergency": "Emergência",
20
+ "priorityHigh": "Alta",
21
+ "priorityLow": "Baixa (sem som)",
22
+ "priorityNormal": "Normal",
23
+ "pushoverApiToken": "Token de API/App Pushover",
24
+ "pushoverInstance": "Instância do adaptador Pushover",
25
+ "pushoverInstanceHelp": "ex.: pushover.0",
26
+ "pushoverMode": "Envio Pushover",
27
+ "pushoverModeBoth": "Ambos",
28
+ "pushoverModeDirect": "Diretamente via API Pushover",
29
+ "pushoverModeHelp": "Como as notificações Pushover são enviadas.",
30
+ "pushoverModeInstance": "Via instância existente do ioBroker.pushover",
31
+ "pushoverModeNone": "Desativado (apenas log)",
32
+ "pushoverPriority": "Prioridade Pushover",
33
+ "pushoverTab": "Alertas Pushover",
34
+ "pushoverUserKey": "Pushover User-Key",
35
+ "requestTimeout": "Tempo limite do pedido (segundos)",
36
+ "requestTimeoutHelp": "Por pedido HTTP ao Portal SEMS.",
37
+ "semsAccount": "Conta SEMS (e-mail)",
38
+ "semsAccountHelp": "Endereço de e-mail usado para entrar em semsportal.com.",
39
+ "semsPassword": "Senha SEMS",
40
+ "semsPasswordHelp": "Armazenada de forma encriptada.",
41
+ "stationOfflineMinutes": "Intervalo entre alertas de falha (minutos)",
42
+ "stationOfflineMinutesHelp": "Apenas informativo."
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "debugRawResponse": "Сохранять сырой JSON-ответ (отладка)",
3
+ "debugRawResponseHelp": "Записывает последний полный ответ SEMS API в info.rawResponse. По умолчанию выключено.",
4
+ "hintLoginText": "Войдите с обычной учётной записью портала SEMS (той же, что на semsportal.com или в приложении SEMS). Учётная запись SEMS \"Organization\"/OpenAPI не требуется.",
5
+ "hintPollingText": "Портал SEMS не документирован для сторонних обращений и может ограничивать частые запросы. 5 минут - безопасное значение по умолчанию; адаптер применяет минимум 60с и автоматически снижает частоту при ошибках.",
6
+ "hintPushoverText": "Критические события можно отправлять через Pushover в дополнение к логу ioBroker.",
7
+ "maxConsecutiveErrors": "Ошибок до уведомления \"станция недоступна\"",
8
+ "maxConsecutiveErrorsHelp": "Количество последовательных неудачных опросов перед уведомлением об отключении.",
9
+ "notifyHeader": "Отправлять уведомление при",
10
+ "notifyOnAdapterError": "Непредвиденной ошибке адаптера",
11
+ "notifyOnLoginFailure": "Ошибка входа SEMS",
12
+ "notifyOnRateLimit": "Достигнут лимит запросов SEMS",
13
+ "notifyOnStationOffline": "Длительном отключении",
14
+ "pollInterval": "Интервал опроса (секунды)",
15
+ "pollIntervalHelp": "Минимум 60с, рекомендуется 300с (5 мин).",
16
+ "pollingTab": "Опрос",
17
+ "powerStationId": "ID электростанции (опционально)",
18
+ "powerStationIdHelp": "Оставьте пустым для автоматического определения. При нескольких станциях укажите ID вручную (из URL портала SEMS после входа).",
19
+ "priorityEmergency": "Экстренный",
20
+ "priorityHigh": "Высокий",
21
+ "priorityLow": "Низкий (без звука)",
22
+ "priorityNormal": "Обычный",
23
+ "pushoverApiToken": "Pushover API/App-токен",
24
+ "pushoverInstance": "Экземпляр адаптера Pushover",
25
+ "pushoverInstanceHelp": "например, pushover.0",
26
+ "pushoverMode": "Доставка Pushover",
27
+ "pushoverModeBoth": "Оба варианта",
28
+ "pushoverModeDirect": "Напрямую через API Pushover",
29
+ "pushoverModeHelp": "Способ отправки уведомлений Pushover.",
30
+ "pushoverModeInstance": "Через существующий экземпляр ioBroker.pushover",
31
+ "pushoverModeNone": "Отключено (только лог)",
32
+ "pushoverPriority": "Приоритет Pushover",
33
+ "pushoverTab": "Уведомления Pushover",
34
+ "pushoverUserKey": "Pushover User-Key",
35
+ "requestTimeout": "Тайм-аут запроса (секунды)",
36
+ "requestTimeoutHelp": "На один HTTP-запрос к порталу SEMS.",
37
+ "semsAccount": "Учётная запись SEMS (e-mail)",
38
+ "semsAccountHelp": "Адрес электронной почты для входа на semsportal.com.",
39
+ "semsPassword": "Пароль SEMS",
40
+ "semsPasswordHelp": "Хранится в зашифрованном виде.",
41
+ "stationOfflineMinutes": "Пауза уведомления об отключении (мин)",
42
+ "stationOfflineMinutesHelp": "Только информативно."
43
+ }