From 6ff3b10bed6711466ac0bc3817dea9b546e94cce Mon Sep 17 00:00:00 2001 From: Baenker Date: Wed, 19 Jun 2019 21:49:25 +0200 Subject: [PATCH] Update Servicemeldungen.js --- Servicemeldungen.js | 3237 +++++++++++++++++-------------------------- 1 file changed, 1290 insertions(+), 1947 deletions(-) diff --git a/Servicemeldungen.js b/Servicemeldungen.js index f217132..857ba92 100644 --- a/Servicemeldungen.js +++ b/Servicemeldungen.js @@ -1,188 +1,348 @@ -// jshint maxerr:3000 -/************************** -* Verschickt eine Pushmittteilung bei auftretenden Servicemeldungen bei Homematic-Geräten -* -* 28.01.19 V1.00 Erste Version -* 30.01.19 V1.01 Bei LowBAT Meldungen wird nun auch der Typ und somit die nötigen Batterien ermittelt -* UNREACH hinzugefügt -* STICKY_UNREACH hinzugefügt -* CONFIG_PENDING hinzugefügt -* 31.01.19 V1.02 Pushnachricht optimiert bei LOWBAT -* 01.02.19 V1.03 UPDATE_PENDING hinzugefügt -* DEVICE_IN_BOOTLOADER hinzugefügt -* ERROR hinzugefügt -* FAULT_REPORTING hinzugefügt -* Debugging erweitert -* 01.02.19 V1.04 Fehler behoben bei ERROR und FAULT_REPORTING -* 02.02.19 V1.05 Status Texte für ERROR und FAULT_Reporting hinzugefügt -* Pushmitteilung optimiert für ERROR und FAULT_Reporting -* Anpassung Debugtexte -* Prio ist pro Fehlertyp einstellbar -* 03.02.19 V1.06 Batterien ermitteln in eigene function ausgelagert -* LOW_BAT aufgenommen -* SABOTAGE aufgenommen -* Neu Configmöglichkeit onetime für einmaliges prüfem -* Neue Configmöglichkeit observation für Dauerhafte Überwachung -* Fehler CONFIG_PENDING behoben -* 04.02.19 V1.07 Logging Fehler behoben -* Logging optimiert -* Es werden alle Homematic-Instanzen überprüft -* In der Konfig gibt es nun Variablen zum schreiben der Anzahl von Serviemeldungen //derzeit aber noch keine Nutzung -* 05.02.19 V1.08 Bei Sabotage wurde nicht die Variable für die Prio berücksichtigt -* geändert von Kanal 1 auf 0 var cacheSelectorSABOTAGE = $('channel[state.id=hm-rpc.*.0.SABOTAGE_ALARM$]'); -* Batterieliste aktualisiert -* Wenn Batterie nicht ermittelbar erfogt ein Hinweis im Log -* Neue Konfig Möglichkeit um Nachrichtentext in Objekte zu schreiben (erstmal Testweise nur in LOWBAT) -* Ergebnis in Datenfleder schreiben zum testen in LOWBAT eingefügt -* 06.02.19 V1.09 Serviemeldung ERROR_CODE aufgenommen -* Wenn Script manuell gestartet wurde wurde kein Ergebnis geloggt wenn eine Servicemeldung vorliegt und Debug = false war -* Logging optimiert -* Es wird keine Push mehr verschickt wenn eine Servicemeldung vorliegt und das Script manuell gestartet wird -* 07.02.19 V1.10 Function func_Batterie komplett umgeschrieben, da je nach Gerätetyp die falsche Batterie ermittelt werden konnte -* 11.02.19 V1.11 Sticky_unreach Servicemeldungen werden bestätigt sofern in Konfiguration eingestellt -* 12.02.19 V1.12 Unterdrückung bei Cuxd Geräte kam die Meldung im Log das man sich melden soll wegen fehlenden Batterietyp -* Der aktuelle IST-Stand der Servicemeldungen lässt sich pro Typ in Objekte schreiben -* 13.02.19 V1.13 Push kann nun auch per Telegram verschickt werden -* Fehler Sticky_Unreach konnte nicht bestätigt werden -* Gesamtzahl aller Servicemeldungen kann in ein Objekt geschrieben werden z. B. für VIS -* neue Geräte in der Batterieliste hinzugefügt -* Überprüfung Batterietyp immer mit Großbuchstaben damit unterschiedliche Schreibweise kein Problem ist -* Korrektur Formatierung Pushnachricht -* 16.02.19 V1.14 Update Batterienliste -* Übersetzung Error_Code 1 für HmIP-SWD hinzugefügt -* 19.02.19 V1.15 Telegramtexte ohne font-Tag -* Update Batterieliste -* 26.02.19 V1,16 ERROR_NON_FLAT_POSITIONING_ALARM aufgenommen +/******************************************************* +* 29.03.19 V1.20 Komplett umgeschrieben +* UNREACH, STICKY_UNREACH, SABOTAGE hinzugefügt +* 01.04.19 V1.21 Error hinzugefügt +* 02.04.19 V1.22 Übersetung Errormeldungen eingefügt +* Unterdrückung des Logeintrags wenn kein Datenpunkt zu einen bestimmten Servicetyp vorhanden ist. Wird nur beim manuellen Starten ausgegeben +* 04.04.19 V1.23 LOWBAT, LOW_BAT und ERROR_NON_FLAT_POSITIONING hinzugefügt +* 11.04.19 V1.24 Replace von ae zu ä usw hinzugefügt (erstmal nur wenn durch obj ausgeführt) +* Status_text in eigene Function ausgelaggert +* datum seit in eigene function ausgelaggert +* FAULT_REPORTING und DEVICE_IN_BOOTLOADER hinzugefügt +* Alle globalen Variablen auf const und let geändert +* Alle Nebenfuntionen auf let und const geändert * Update Batterieliste -* Bugfix Sabotagemeldung per Telegram -* neuer Paramter 'with_time' -* 27.02.19 V.17 Fehler behoben wodurch das gesamte Script nicht richtig lief -* Batterieupdate -* Versand der Servicemeldung per e-Mail -* 03.03.19 V1.17a Batterieupdate -* Fehler font behoben -* Logging optimiert wenn eine Servicemeldung mit observation = true passiert -* 04.03.19 V1.18 Warnhinweis im Script bei der Function Device_in_Bootloader entfernt -* Warnhinweis im Script bei der Function ERROR_NON_FLAT_POSITIONING entfernt -* Bisher wurde die Gerätebezeichnung nicht ermittelt wenn der Kanalname ohne "Doppeltpunkt Kanalnummer" beschriftet war -* 05.03.19 V1.19 User kann in Telegram benutzt werden -* Batterieupdate -* 11.04.19 V1.20 Batterieupdate -**************************/ -var logging = true; //Sollte immer auf true stehen. Bei false wird garnicht protokolliert -var debugging = false; //true protokolliert viele zusätzliche Infos +* Fehler bei Sticky_Unreach beseitigt +* 17.04.19 V1.25 Timer der Push verzögert verändert. +* 23.04.19 V1.26 Texte in Array eingebaut +* Timer verändert +* 28.04.19 V1.27 Timer verändert +* 11.05.19 V1.28 Timer verändert +* 13.05.19 V1.29 bestehender Timer wird abgebrochen und stattdessen neue Push verschickt +* Config_PENDING und UPDATE_PENDING aufgenommen +* Es wird die höchste Prio je nach Servicemeldung für Pushover gewählt. +* 14.05.19 V1.30 Paramter with_time wird wieder berücksichtigt +* 24.05.19 V1.31 Paramter write_message wird wieder berücksichtigt +* Paramter write_state wird berücksichtigt für LOWBAT, LOW_BAT, UNREACH und STICKY_UNREACH die anderen folgen später +* Datenpunkte DEVICE_IN_BOOTLOADER wurde nicht überwacht nur ausgewertet +* 27.05.19 V1.32 Paramter write_state wird komplett berücksichtigt +* Erster Versuch doppelte Servicemelungen zu unterdrücken +* alte Variabe datum_neu übersehen +* 28.05.19 V1.33 Neuer Versuch doppelte zu unterdrücken (nur als log) etwas mehr logging +* 29.05.19 V1.34 Neuer Versuch doppelte zu unterdrücken +* 31.05.19 V1.35 Neuer Versuch +* 01.06.19 V1.36 doppelte Servicemeldungen werden unterdrückt. Logging reduziert +* 06.06.19 V1.37 Neuer Versuch. Mehr Logging +* 07.06.19 V1.38 und bzw oder Fehler entfernt. +* 09.06.19 V1.39 Zwei Abfragen seperat +* 10.06.19 V1.40 Abfrage vertauscht +* 15.06.19 V1.41 Einschränkung auf UNREACH und Sticky Unreach +* 18.06.19 V1.42 meldung_neu und meldung_alt werden nur unter bestimmten Umständen gefüllt +* 19.06.19 V1.43 Logging verändert. Evtl noch ein Problem bei der Unterdrückung doppelter Meldungen wenn schon ein Timer besteht +* +* Andere theoretisch mögliche LOWBAT_REPORTING, U_SOURCE_FAIL, USBH_POWERFAIL, STICKY_SABOTAGE, ERROR_REDUCED, ERROR_SABOTAGE +*******************************************************/ +const Version = 1.43; +const logging = true; //Sollte immer auf true stehen. Bei false wird garnicht protokolliert +const debugging = false; //true protokolliert viele zusätzliche Infos -var autoAck = true; //Löschen bestätigbarer Kommunikationsstörungen (true = an, false = aus) +const autoAck = true; //Löschen bestätigbarer Kommunikationsstörungen (true = an, false = aus) -var observation = true; //Dauerhafte Überwachung der Geräte auf Servicemeldungen aktiv (true = aktiv // false =inaktiv) -var onetime = true; //Prüft beim Script Start ob derzeit Geräte eine Servicemeldung haben -var with_time = false; //Hängt die Uhrzeit an die Serviemeldung +const observation = true; //Dauerhafte Überwachung der Geräte auf Servicemeldungen aktiv (true = aktiv // false =inaktiv) +const onetime = true; //Prüft beim Script Start ob derzeit Geräte eine Servicemeldung haben +const with_time = false; //Hängt die Uhrzeit an die Serviemeldung -//pro Fehlertyp kann eine andere Prio genutzt werden -var prio_LOWBAT = 0; -var prio_UNREACH = 0; -var prio_STICKY_UNREACH = 0; -var prio_CONFIG_PENDING = 0; -var prio_UPDATE_PENDING = 0; -var prio_DEVICE_IN_BOOTLOADER = 0; -var prio_ERROR = 0; -var prio_ERROR_CODE = 0; -var prio_FAULT_REPORTING = 0; -var prio_SABOTAGE= 0; -var prio_ERROR_NON_FLAT_POSITIONING = 0; +//Geräte die nicht überwacht werden sollen. Komma getrennt erfassen +const no_observation = 'LEQ092862x9, XXX'; -//Variablen für Servicemeldung in Objekt schreiben // Wenn einer Meldung auftritt wird diese in ein Textfeld geschrieben. Auf dieses kann man dann reagieren -//und z. B. die Nachricht per Telegram verschicken oder in vis anzeigen -var write_message = false; // true schreibt beim auftreten einer Servicemeldung die Serviemeldung in ein Objekt -var id_Text_Servicemeldung = ''; // Objekt wo die Servicemeldung hingeschrieben werden soll +//pro Fehlertyp kann eine andere Prio genutzt werden +const prio_LOWBAT = 0; +const prio_UNREACH = 0; +const prio_STICKY_UNREACH = 0; +const prio_CONFIG_PENDING = 0; +const prio_UPDATE_PENDING = 0; +const prio_DEVICE_IN_BOOTLOADER = 0; +const prio_ERROR = 0; +const prio_ERROR_CODE = 0; +const prio_FAULT_REPORTING = 0; +const prio_SABOTAGE= 0; +const prio_ERROR_NON_FLAT_POSITIONING = 0; + +//Variablen für Servicemeldung in Objekt schreiben // Wenn einer Meldung auftritt wird diese in ein Textfeld geschrieben. z. B. für vis +const write_message = false; // true schreibt beim auftreten einer Servicemeldung die Serviemeldung in ein Objekt +const id_Text_Servicemeldung = ''; // Objekt wo die Servicemeldung hingeschrieben werden soll //Variablen für Pushover -var sendpush = true; //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt -var _prio; -var _titel; -var _message; -var _device = 'TPhone'; //Welches Gerät soll die Nachricht bekommen -//var _device = 'All'; +const sendpush = true; //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt +const pushover_Instanz0 = 'pushover.0'; // Pushover instance für Pio = 0 +const pushover_Instanz1 = 'pushover.1'; // Pushover instance für Pio = 1 +const pushover_Instanz2 = 'pushover.2'; // Pushover instance für Pio = 2 +const pushover_Instanz3 = 'pushover.3'; // Pushover instance für Pio = -1 oder -2 +let prio = -2; //nicht verändern die höchste Prio nach Fehlertyp wird verwendet +let titel; +let message; +let device = 'TPhone'; //Welches Gerät soll die Nachricht bekommen +//let _device = 'All'; //Variablen für Telegram -var sendtelegram = false; //true = verschickt per Telegram Nachrchten // false = Telegram wird nicht benutzt -var user_telegram = ''; //User der die Nachricht bekommen soll +const sendtelegram = false; //true = verschickt per Telegram Nachrchten // false = Telegram wird nicht benutzt +const user_telegram = ''; //User der die Nachricht bekommen soll //Variable zum verschicken der Servicemeldungen per eMail -var sendmail = false; //true = verschickt per email Nachrchten // false = email wird nicht benutzt +const sendmail = false; //true = verschickt per email Nachrchten // false = email wird nicht benutzt //Ergebnis in Datenfelder schreiben -var write_state = true; //Schreibt die Ergebnisse der Servicemeldungen in Datenfelder. (true = schreiben, false, kein schreiben) +const write_state = true; //Schreibt die Ergebnisse der Servicemeldungen in Datenfelder. (true = schreiben, false, kein schreiben) //nicht benutzte Felder einfach leer lassen --> var id_IST_XXX = ''; -var id_IST_LOWBAT = 'Systemvariable.0.Servicemeldungen.Anzahl_LOWBAT'/*Anzahl LOWBAT*/; -var id_IST_LOW_BAT = ''; -//var id_IST_G_LOWBAT = ''; -var id_IST_UNREACH = "Systemvariable.0.Servicemeldungen.Anzahl_UNREACH"/*Anzahl_UNREACH*/; -var id_IST_STICKY_UNREACH = "Systemvariable.0.Servicemeldungen.Anzahl_STICKY_UNREACH"/*Anzahl_STICKY_UNREACH*/; -var id_IST_CONFIG_PENDING = ''; -var id_IST_UPDATE_PENDING = ''; -var id_IST_DEVICE_IN_BOOTLOADER = ''; -var id_IST_ERROR = ''; -var id_IST_ERROR_NON_FLAT_POSITIONING = ''; -var id_IST_ERROR_CODE = ''; -var id_IST_FAULT_REPORTING = ''; -var id_IST_SABOTAGE = ''; -var id_IST_Gesamt = "Systemvariable.0.Servicemeldungen.Anzahl_GESAMT"/*Anzahl_GESAMT*/; - +const id_IST_LOWBAT = 'Systemvariable.0.Servicemeldungen.Anzahl_LOWBAT'/*Anzahl LOWBAT*/; +const id_IST_LOW_BAT = ''; +const id_IST_UNREACH = 'Systemvariable.0.Servicemeldungen.Anzahl_UNREACH'/*Anzahl_UNREACH*/; +const id_IST_STICKY_UNREACH = 'Systemvariable.0.Servicemeldungen.Anzahl_STICKY_UNREACH'/*Anzahl_STICKY_UNREACH*/; +const id_IST_CONFIG_PENDING = ''; +const id_IST_UPDATE_PENDING = ''; +const id_IST_DEVICE_IN_BOOTLOADER = ''; +const id_IST_ERROR = ''; +const id_IST_ERROR_NON_FLAT_POSITIONING = ''; +const id_IST_ERROR_CODE = ''; +const id_IST_FAULT_REPORTING = ''; +const id_IST_SABOTAGE = ''; +const id_IST_Gesamt = "Systemvariable.0.Servicemeldungen.Anzahl_GESAMT"/*Anzahl_GESAMT*/; //Ab hier eigentliches Script -//var cacheSelectorLOWBAT = $('channel[state.id=hm-rpc.0.*.0.LOWBAT_ALARM$]'); -var cacheSelectorLOWBAT = $('channel[state.id=hm-rpc.*.0.LOWBAT_ALARM$]'); -var cacheSelectorLOW_BAT = $('channel[state.id=hm-rpc.*.0.LOW_BAT_ALARM$]'); -var cacheSelectorUNREACH = $('channel[state.id=hm-rpc.*.0.UNREACH_ALARM$]'); -var cacheSelectorSTICKY_UNREACH = $('channel[state.id=hm-rpc.*.0.STICKY_UNREACH_ALARM$]'); -var cacheSelectorCONFIG_PENDING = $('channel[state.id=hm-rpc.*.0.CONFIG_PENDING_ALARM$]'); -var cacheSelectorUPDATE_PENDING = $('channel[state.id=hm-rpc.*.0.UPDATE_PENDING_ALARM$]'); -var cacheSelectorDEVICE_IN_BOOTLOADER = $('channel[state.id=hm-rpc.*.0.DEVICE_IN_BOOTLOADER_ALARM$]'); -var cacheSelectorERROR = $('channel[state.id=hm-rpc.*.1.ERROR$]'); -var cacheSelectorERROR_CODE = $('channel[state.id=hm-rpc.*.ERROR_CODE$]'); -var cacheSelectorFAULT_REPORTING = $('channel[state.id=hm-rpc.*.4.FAULT_REPORTING$]'); -var cacheSelectorSABOTAGE = $('channel[state.id=hm-rpc.*.0.SABOTAGE_ALARM$]'); -var cacheSelectorERROR_NON_FLAT_POSITIONING = $('channel[state.id=hm-rpc.*.0.ERROR_NON_FLAT_POSITIONING_ALARM$]'); - -function send_pushover_V4 (_device, _message, _titel, _prio) { - var pushover_Instanz = 'pushover.0'; - if (_prio === 0){pushover_Instanz = 'pushover.0'} - else if (_prio == 1){pushover_Instanz = 'pushover.1'} - else if (_prio == 2){pushover_Instanz = 'pushover.2'} - else {pushover_Instanz = 'pushover.3'} - sendTo(pushover_Instanz, { - device: _device, - message: _message, - title: _titel, - priority: _prio, +const SelectorLOWBAT = $('channel[state.id=hm-rpc.*.0.LOWBAT_ALARM$]'); +const SelectorLOW_BAT = $('channel[state.id=hm-rpc.*.0.LOW_BAT_ALARM$]'); +const SelectorUNREACH = $('channel[state.id=hm-rpc.*.0.UNREACH_ALARM$]'); +const SelectorSTICKY_UNREACH = $('channel[state.id=hm-rpc.*.0.STICKY_UNREACH_ALARM$]'); +const SelectorCONFIG_PENDING = $('channel[state.id=hm-rpc.*.0.CONFIG_PENDING_ALARM$]'); +const SelectorUPDATE_PENDING = $('channel[state.id=hm-rpc.*.0.UPDATE_PENDING_ALARM$]'); +const SelectorDEVICE_IN_BOOTLOADER = $('channel[state.id=hm-rpc.*.0.DEVICE_IN_BOOTLOADER_ALARM$]'); +const SelectorERROR = $('channel[state.id=hm-rpc.*.1.ERROR$]'); +const SelectorERROR_CODE = $('channel[state.id=hm-rpc.*.ERROR_CODE$]'); +const SelectorFAULT_REPORTING = $('channel[state.id=hm-rpc.*.4.FAULT_REPORTING$]'); +const SelectorSABOTAGE = $('channel[state.id=hm-rpc.*.0.SABOTAGE_ALARM$]'); +const SelectorERROR_NON_FLAT_POSITIONING = $('channel[state.id=hm-rpc.*.0.ERROR_NON_FLAT_POSITIONING_ALARM$]'); + +let timer = null; +let meldung_alt = ' '; +let meldung_neu = ' '; + +function send_pushover (device, message, titel, prio) { + //Version V4.01 vom 10.04.19 + let pushover_Instanz; + if (prio === 0){pushover_Instanz = pushover_Instanz0;} + else if (prio == 1){pushover_Instanz = pushover_Instanz1;} + else if (prio == 2){pushover_Instanz = pushover_Instanz2;} + else {pushover_Instanz = pushover_Instanz3;} + sendTo(pushover_Instanz, { + device: device, + message: message, + title: titel, + priority: prio, retry: 60, expire: 600, html: 1 }); } -function send_telegram (_message, user_telegram) { +function send_telegram (messgae, user_telegram) { sendTo('telegram.0', { - text: _message, + text: messgae, user: user_telegram, parse_mode: 'HTML' }); } -function send_mail (_message) { +function send_mail (messgae) { sendTo("email", { //from: "iobroker@mydomain.com", //to: "aabbcc@gmail.com", subject: "Servicemeldung", - text: _message + text: messgae }); } +function replaceAll(string, token, newtoken) { + if(token!=newtoken) + while(string.indexOf(token) > -1) { + string = string.replace(token, newtoken); + } + return string; +} + +function func_translate_status(meldungsart, native_type, status){ + let status_text; + if(meldungsart == 'UNREACH_ALARM' || meldungsart == 'STICKY_UNREACH_ALARM'){ + if(status === 0){ + status_text = 'keine Kommunikationsfehler'; + } + else if (status == 1){ + status_text = 'Kommunikation gestört'; + } + else if (status == 2){ + status_text = 'Kommunikation war gestört'; + } + } + else if(meldungsart == 'SABOTAGE_ALARM'){ + if(status === 0){ + status_text = 'Keine Sabotage'; + } + else if(status === 1){ + status_text = 'Sabotage'; + } + else if(status === 2){ + status_text = 'Sabotage aufgehoben'; + } + } + else if(meldungsart == 'ERROR'){ + if((native_type == 'HM-Sec-RHS') || (native_type == 'HM-Sec-RHS-2') || (native_type == 'HM-Sec-SC') || (native_type == 'HM-Sec-SC-2') || + (native_type == 'HM-Sec-SCo') || (native_type == 'HM-Sec-MD') || (native_type == 'HM-Sec-MDIR') || (native_type == 'HM-Sec-MDIR-2')){ + if(status == 7){ + status_text = 'Sabotage'; + } + else { + status_text = 'ERROR mit dem Wert: ' +status; + } + } + else if ((native_type=='HM-Sec-Key') || (native_type=='HM-Sec-Key-S') || (native_type=='HM-Sec-Key-O')){ + if(status == 1){ + status_text = 'Einkuppeln fehlgeschlagen'; + } + else if(status == 2){ + status_text = 'Motorlauf abgebrochen'; + } + else { + status_text = 'ERROR mit dem Wert: ' +status; + } + } + else if (native_type=='HM-CC-VD'){ + if(status == 1){ + status_text = 'Ventil Antrieb blockiert'; + } + else if(status == 2){ + status_text = 'Ventil nicht montiert'; + } + else if(status == 3){ + status_text = 'Stellbereich zu klein'; + } + else if(status == 4){ + status_text = 'Batteriezustand niedrig'; + } + else { + status_text = 'ERROR mit dem Wert: ' +status; + } + } + else { + status_text = meldungsart +' mit dem Wert: ' +status; + } + } + else if(meldungsart == 'LOWBAT_ALARM' || meldungsart == 'LOW_BAT_ALARM'){ + if(status === 0){ + status_text = 'Batterie ok'; + } + else if (status == 1){ + status_text = 'Batterie niedrig'; + } + else if (status == 2){ + status_text = 'Batterie ok'; + } + + } + else if(meldungsart == 'ERROR_NON_FLAT_POSITIONING_ALARM'){ + if(status === 0){ + status_text = 'Keine Meldung'; + } + else if(status === 1){ + status_text = 'Gerät wurde angehoben.'; + } + else if(status === 2){ + status_text = 'Gerät wurde angehoben. Bestätigt'; + } + + } + else if(meldungsart == 'CONFIG_PENDING_ALARM'){ + if(status === 0){ + status_text = 'keine Meldung'; + } + else if (status == 1){ + status_text = 'Konfigurationsdaten stehen zur Übertragung an'; + } + else if (status == 2){ + status_text = 'Konfigurationsdaten standen zur Übertragung an'; + } + + } + else if(meldungsart == 'UPDATE_PENDING_ALARM'){ + if(status === 0){ + status_text = 'kein Update verfügbar'; + } + else if (status == 1){ + status_text = 'Update verfügbar'; + } + else if (status == 2){ + status_text = 'Update wurde eingespielt'; + } + + } + else if(meldungsart == 'DEVICE_IN_BOOTLOADER_ALARM'){ + if(status === 0){ + status_text = 'Keine Meldung'; + } + else if(status === 1){ + status_text = 'Gerät startet neu'; + } + else if(status === 2){ + status_text = 'Gerät wurde neu getsartet'; + } + } + else if(meldungsart == 'FAULT_REPORTING_ALARM'){ + if(native_type == 'HM-CC-RT-DN'){ + if(status === 0){ + status_text = 'keine Störung'; + } + else if(status == 1){ + status_text = 'Ventil blockiert'; + } + else if(status == 2){ + status_text = 'Einstellbereich Ventil zu groß'; + } + else if(status == 3){ + status_text = 'Einstellbereich Ventil zu klein'; + } + else if(status == 4){ + status_text = 'Kommunikationsfehler'; + } + else if(status == 6){ + status_text = 'Spannung Batterien/Akkus gering'; + } + else if(status == 7){ + status_text = 'Fehlstellung Ventil'; + } + else{ + status_text = meldungsart+' mit dem Wert: ' +status; + } + } + else{ + status_text = meldungsart+' mit dem Wert: ' +status; + } + + } + return(status_text); +} +function func_get_datum(id){ + let datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + let datum_seit; + if(datum < '01.01.71 01:00:00'){ + datum_seit = ''; + + }else{ + datum_seit= ' --- seit: ' +datum +' Uhr'; + } + return(datum_seit); +} function func_Batterie(native_type){ let Batterie = 'unbekannt'; @@ -308,19 +468,19 @@ function func_Batterie(native_type){ } function func_IST_Gesamt(){ - var IST_LOWBAT = 0; - var IST_LOW_BAT = 0; - var IST_UNREACH = 0; - var IST_STICKY_UNREACH = 0; - var IST_CONFIG_PENDING = 0; - var IST_UPDATE_PENDING = 0; - var IST_DEVICE_IN_BOOTLOADER = 0; - var IST_ERROR = 0; - var IST_ERROR_NON_FLAT_POSITIONING = 0; - var IST_ERROR_CODE = 0; - var IST_FAULT_REPORTING = 0; - var IST_SABOTAGE = 0; - var IST_Gesamt = 0; + let IST_LOWBAT = 0; + let IST_LOW_BAT = 0; + let IST_UNREACH = 0; + let IST_STICKY_UNREACH = 0; + let IST_CONFIG_PENDING = 0; + let IST_UPDATE_PENDING = 0; + let IST_DEVICE_IN_BOOTLOADER = 0; + let IST_ERROR = 0; + let IST_ERROR_NON_FLAT_POSITIONING = 0; + let IST_ERROR_CODE = 0; + let IST_FAULT_REPORTING = 0; + let IST_SABOTAGE = 0; + let IST_Gesamt = 0; if(write_state){ @@ -379,2133 +539,1316 @@ function func_IST_Gesamt(){ } } -function LOWBAT(obj) { - var meldungsart = 'LOWBAT'; +function Servicemeldung(obj) { + var common_name; + var obj; + var id_name; + var native_type; + var meldungsart; var Gesamt = 0; + var Gesamt_UNREACH = 0; + var Gesamt_STICKY_UNREACH = 0; + var Gesamt_SABOTAGE = 0; + var Gesamt_ERROR = 0; + var Gesamt_LOWBAT = 0; + var Gesamt_LOW_BAT = 0; + var Gesamt_ERROR_NON_FLAT_POSITIONING = 0; + var Gesamt_CONFIG_PENDING = 0; + var Gesamt_UPDATE_PENDING = 0; + var Gesamt_DEVICE_IN_BOOTLOADER = 0; + var Gesamt_FAULT_REPORTING = 0; var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; + var Betroffen_UNREACH = 0; + var Betroffen_STICKY_UNREACH = 0; + var Betroffen_SABOTAGE = 0; + var Betroffen_ERROR = 0; + var Betroffen_LOWBAT = 0; + var Betroffen_LOW_BAT = 0; + var Betroffen_ERROR_NON_FLAT_POSITIONING = 0; + var Betroffen_CONFIG_PENDING = 0; + var Betroffen_UPDATE_PENDING = 0; + var Betroffen_DEVICE_IN_BOOTLOADER = 0; + var Betroffen_FAULT_REPORTING = 0; + + var servicemeldung = []; + var formatiert_servicemeldung = []; + var messgae_tmp = ''; + var messgae_tmp1 = ''; var log_manuell = false; - - + if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); + common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); + id_name = obj.id.split('.')[2]; + native_type = getObject(obj.id.substring(0, obj.id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = obj.id.split('.')[4]; var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'Batterie ok'; - } - else if (status == 1){ - status_text = 'Batterie niedrig'; + var status_text = func_translate_status(meldungsart, native_type, status); + + common_name = replaceAll(common_name, '.', ' '); // Umwandeln aller "." in Leerzeichen + common_name = replaceAll(common_name, 'ae', 'ä'); // Sonderzeichen umwandeln für bessere Text- und Sprachausgabe + common_name = replaceAll(common_name, 'ue', 'ü'); + common_name = replaceAll(common_name, 'oe', 'ö'); + common_name = replaceAll(common_name, 'ss', 'ß'); + + if(no_observation.search(id_name) == -1){ + log('Neue Servicemeldung: ' +common_name +' ('+id_name +') --- ' +native_type +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); } - else if (status == 2){ - status_text = 'Batterie ok'; + else{ + if(debugging){ + log('[DEBUG] ' +'Neue Servicemeldung außerhalb der Überwachung: ' +common_name +' ('+id_name +') --- ' +native_type +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); + } } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); + + } else { if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); + log('Function wird gestartet.'); } log_manuell = true; - } - - cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT + } + + + SelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; var status = getState(id).val; - var status_text; - if(status === 0){ - status_text = 'Batterie ok'; - } - else if (status == 1){ - status_text = 'Batterie niedrig'; - } - else if (status == 2){ - status_text = 'Batterie ok'; - } - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; - var Batterie = func_Batterie(native_type); - var meldungsart = id.split('.')[4]; + var status_text = func_translate_status(meldungsart, native_type, status); + var Batterie = func_Batterie(native_type); + var datum_seit = func_get_datum(id); if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie; - _message_tmp1 = common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + ++Betroffen_LOWBAT + if(prio < prio_LOWBAT){prio = prio_LOWBAT;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie); + } + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie); } + } ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_LOWBAT if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu +' ---' +Batterie); + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +' --- ' +Batterie); } //wenn Batterie unbekannt dann Log if(Batterie == 'unbekannt' && native_type !==''){ log('Bitte melden: ' + common_name +' ('+id_name+') --- '+native_type +' --- Batterietyp fehlt im Script'); } - else{ - if(debugging){ - log('Keine Geräte mit unbekannter Batterie vorhanden'); - } - } - + }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); - - } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_LOWBAT; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_LOWBAT){ - setState(id_IST_LOWBAT,Betroffen); - func_IST_Gesamt(); + + // Schleife ist durchlaufen. + if(Gesamt_LOWBAT === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt LOWBAT.'); + } + } + else{ + if(Betroffen_LOWBAT > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_LOWBAT +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_LOWBAT +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_LOWBAT){ + setState(id_IST_LOWBAT,Betroffen_LOWBAT); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für LOWBAT nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ log('Variable write_state steht auf false'); } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } + } } else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } - } - } - else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); - } - else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_LOWBAT +' Geräte mit dem Datenpunkt LOWBAT.'); + } - } - if(write_state){ - if(id_IST_LOWBAT){ - setState(id_IST_LOWBAT,0); - func_IST_Gesamt(); - + if(write_state){ + if(id_IST_LOWBAT){ + setState(id_IST_LOWBAT,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für LOWBAT nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ log('Variable write_state steht auf false'); } + } } } - -} - -function LOW_BAT(obj) { - var meldungsart = 'LOW_BAT'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'Batterie ok'; - } - else if (status == 1){ - status_text = 'Batterie niedrig'; - } - else if (status == 2){ - status_text = 'Batterie ok'; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorLOW_BAT.each(function (id, i) { + SelectorLOW_BAT.each(function (id, i) { // Schleife für jedes gefundenen Element + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; var status = getState(id).val; - var status_text; - if(status === 0){ - status_text = 'Batterie ok'; - } - else if (status == 1){ - status_text = 'Batterie niedrig'; - } - else if (status == 2){ - status_text = 'Batterie ok'; - } - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + var status_text = func_translate_status(meldungsart, native_type, status); var Batterie = func_Batterie(native_type); - var meldungsart = id.split('.')[4]; - + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); + if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie; - _message_tmp1 = common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + ++Betroffen_LOW_BAT + if(prio < prio_LOWBAT){prio = prio_LOWBAT;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie +datum_seit); + } + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie); } + } ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_LOW_BAT if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu +' ---' +Batterie); + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +' --- ' +Batterie); } //wenn Batterie unbekannt dann Log if(Batterie == 'unbekannt' && native_type !==''){ log('Bitte melden: ' + common_name +' ('+id_name+') --- '+native_type +' --- Batterietyp fehlt im Script'); } - else{ - if(debugging){ - log('Keine Geräte mit unbekannter Batterie vorhanden'); - } - } - + }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); + + // Schleife ist durchlaufen. + if(Gesamt_LOW_BAT === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt LOWBAT.'); } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_LOWBAT; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_LOW_BAT){ - setState(id_IST_LOW_BAT,Betroffen); - func_IST_Gesamt(); + } + else{ + if(Betroffen_LOW_BAT > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_LOW_BAT +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_LOW_BAT +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_LOW_BAT){ + setState(id_IST_LOW_BAT,Betroffen_LOW_BAT); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für LOW_BAT nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ log('Variable write_state steht auf false'); } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } + } } else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } - } - } - else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); - } - else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); - } + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_LOW_BAT +' Geräte mit dem Datenpunkt LOW_BAT.'); - } - if(write_state){ - if(id_IST_LOW_BAT){ - setState(id_IST_LOW_BAT,0); - func_IST_Gesamt(); + } + if(write_state){ + if(id_IST_LOW_BAT){ + setState(id_IST_LOW_BAT,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für LOW_BAT nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } } - -} - -function UNREACH(obj) { - var meldungsart = 'UNREACH'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'keine Kommunikationsfehler'; - } - else if (status == 1){ - status_text = 'Kommunikation gestört'; - } - else if (status == 2){ - status_text = 'Kommunikation war gestört'; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorUNREACH.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT - var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) - var status_text; - if(status === 0){ - status_text = 'keine Kommunikationsfehler'; - } - else if (status == 1){ - status_text = 'Kommunikation gestört'; - } - else if (status == 2){ - status_text = 'Kommunikation war gestört'; - } - - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + SelectorUNREACH.each(function (id, i) { // Schleife für jedes gefundenen Element + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; + var status = getState(id).val; + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); - if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt + if (status === 1) { ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - Kommunikation gestört. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - Kommunikation gestört.'; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + ++Betroffen_UNREACH; + if(prio < prio_UNREACH){prio = prio_UNREACH;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Kommunikation gestört.' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Kommunikation gestört.' +datum_seit); } + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Kommunikation gestört.'); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Kommunikation gestört.'); + } + - - } - ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_UNREACH; + if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); + log('Geräte Nr. ' +(i + 1) +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } - }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ) ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); + }); + + // Schleife ist durchlaufen. + if(Gesamt_UNREACH === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt UNREACH.'); } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_UNREACH; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_UNREACH){ - setState(id_IST_UNREACH,Betroffen); - func_IST_Gesamt(); + } + else{ + if(Betroffen_UNREACH > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_UNREACH +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_UNREACH +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_UNREACH){ + setState(id_IST_UNREACH,Betroffen_UNREACH); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für UNREACH nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ log('Variable write_state steht auf false'); } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } + } } else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } - } - } - else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); - } - else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_UNREACH +' Geräte mit dem Datenpunkt UNREACH.'); + } - } - if(write_state){ - if(id_IST_UNREACH){ - setState(id_IST_UNREACH,0); - func_IST_Gesamt(); + if(write_state){ + if(id_IST_UNREACH){ + setState(id_IST_UNREACH,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für UNREACH nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } } - -} - -function STICKY_UNREACH(obj) { - var meldungsart = 'STICKY_UNREACH'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'keine Kommunikationsfehler'; - } - else if (status == 1){ - status_text = 'Kommunikation gestört'; - } - else if (status == 2){ - status_text = 'Kommunikation war gestört'; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - - } - - cacheSelectorSTICKY_UNREACH.each(function (id, i) { - var status = getState(id).val; - var status_text; - if(status === 0){ - status_text = 'keine bestätigbare Kommunikationsstörung vorhanden'; - } - else if (status == 1){ - status_text = 'bestätigbare Kommunikationsstörung'; - } - else if (status == 2){ - status_text = 'bestätigbare Kommunikationsstörung wurde gelöscht'; - } - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + SelectorSTICKY_UNREACH.each(function (id, i) { + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; + var status = getState(id).val; + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen + ++Betroffen_STICKY_UNREACH; + if(prio < prio_STICKY_UNREACH){prio = prio_STICKY_UNREACH;} + //text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen + if(autoAck){ - setStateDelayed(id,2,5000); - _message_tmp = common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. '; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + setStateDelayed(id,2,180000); //60.000 = 1 Minute + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. ' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. ' +datum_seit); } + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. '); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. '); + } + } else { - _message_tmp = common_name +' ('+id_name +')' + ' - bestätigbare Kommunikationsstörung.'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - bestätigbare Kommunikationsstörung.'; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - bestätigbare Kommunikationsstörung.'); + servicemeldung.push(common_name +' ('+id_name +')' + ' - bestätigbare Kommunikationsstörung.'); + messgae_tmp = common_name +' ('+id_name +')' + ' - bestätigbare Kommunikationsstörung.'; + messgae_tmp1 = common_name +' ('+id_name +')' + ' - bestätigbare Kommunikationsstörung.'; + if(with_time && datum_seit !== ''){ + messgae_tmp = messgae_tmp +datum_seit; + messgae_tmp1 = messgae_tmp1 +datum_seit; } } } ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_STICKY_UNREACH; + if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); + log('Geräte Nr. ' +(i + 1) +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } }); - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); + // Schleife ist durchlaufen. + if(Gesamt_STICKY_UNREACH === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt STICKY_UNREACH.'); } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = 0; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_STICKY_UNREACH){ - setState(id_IST_STICKY_UNREACH,Betroffen); - func_IST_Gesamt(); + } + else{ + if(Betroffen_STICKY_UNREACH > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_STICKY_UNREACH +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_STICKY_UNREACH +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_STICKY_UNREACH){ + setState(id_IST_STICKY_UNREACH,Betroffen_STICKY_UNREACH); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für STICKY_UNREACH nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } else{ - if(debugging){ + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_STICKY_UNREACH +' Geräte mit dem Datenpunkt STICKY_UNREACH.'); + + } + if(write_state){ + if(id_IST_STICKY_UNREACH){ + setState(id_IST_STICKY_UNREACH,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für STICKY_UNREACH nicht gefüllt'); + + } + } + + } + else{ + if(debugging){ log('Variable write_state steht auf false'); } + } } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } + } + + SelectorSABOTAGE.each(function (id, i) { + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; + var status = getState(id).val; + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); + + if (status === 1) { + ++Betroffen; + ++Betroffen_SABOTAGE; + if(prio < prio_SABOTAGE){prio = prio_SABOTAGE;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - ' +status_text +'. ' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - ' +status_text +'.' +datum_seit); + } + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - ' +status_text +'. '); + servicemeldung.push(common_name +' ('+id_name +')' + ' - ' +status_text +'.'); + } + + } + ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_SABOTAGE; + if(debugging){ + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } - else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } + + }); + + // Schleife ist durchlaufen. + if(Gesamt_SABOTAGE === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt SABOTAGE.'); } } else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); + if(Betroffen_SABOTAGE > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_SABOTAGE +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_SABOTAGE +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_SABOTAGE){ + setState(id_IST_SABOTAGE,Betroffen_SABOTAGE); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für SABOTAGE nicht gefüllt'); + + } + } + } else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); + if(debugging){ + log('Variable write_state steht auf false'); + + } } } - if(write_state){ - if(id_IST_STICKY_UNREACH){ - setState(id_IST_STICKY_UNREACH,0); - func_IST_Gesamt(); + else{ + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_SABOTAGE +' Geräte mit dem Datenpunkt SABOTAGE.'); + + } + if(write_state){ + if(id_IST_SABOTAGE){ + setState(id_IST_SABOTAGE,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für SABOTAGE nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } } - -} - -function CONFIG_PENDING(obj) { - var meldungsart = 'CONFIG_PENDING'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'keine Meldung'; - } - else if (status == 1){ - status_text = 'Konfigurationsdaten stehen zur Übertragung an'; - } - else if (status == 2){ - status_text = 'Konfigurationsdaten standen zur Übertragung an'; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorCONFIG_PENDING.each(function (id, i) { + SelectorERROR.each(function (id, i) { + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; var status = getState(id).val; - var status_text; - if(status === 0){ - status_text = 'keine Meldung'; - } - else if (status == 1){ - status_text = 'Konfigurationsdaten stehen zur Übertragung an'; - } - else if (status == 2){ - status_text = 'Konfigurationsdaten standen zur Übertragung an'; - } - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); - if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt + if (status > 0) { // wenn Zustand größer 0, dann wird die Anzahl der Geräte hochgezählt ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - Konfigurationsdaten stehen zur Übertragung an. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - Konfigurationsdaten stehen zur Übertragung an. '; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + ++Betroffen_ERROR; + if(prio < prio_ERROR){prio = prio_ERROR;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - '+status_text +'. ' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - '+status_text +datum_seit); } - - + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - '+status_text +'. '); + servicemeldung.push(common_name +' ('+id_name +')' + ' - '+status_text); + } + + } - ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_ERROR if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); - } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_UPDATE_PENDING; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_CONFIG_PENDING){ - setState(id_IST_CONFIG_PENDING,Betroffen); - func_IST_Gesamt(); - } - else{ - if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ - log('Variable write_state steht auf false'); - - } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } - } - else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } + + // Schleife ist durchlaufen. + if(Gesamt_ERROR === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt ERROR.'); } } else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); - } - else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); - } - } - if(write_state){ - if(id_IST_CONFIG_PENDING){ - setState(id_IST_CONFIG_PENDING,0); - } - else{ - if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + if(Betroffen_ERROR > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_ERROR +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_ERROR +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_ERROR){ + setState(id_IST_ERROR,Betroffen_ERROR); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für ERROR nicht gefüllt'); - } - } - - } - } - - -} - -function UPDATE_PENDING(obj) { - var meldungsart = 'UPDATE_PENDING'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'kein Update verfügbar'; - } - else if (status == 1){ - status_text = 'Update verfügbar'; - } - else if (status == 2){ - status_text = 'Update wurde eingespielt'; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorUPDATE_PENDING.each(function (id, i) { - var status = getState(id).val; - var status_text; - if(status === 0){ - status_text = 'kein Update verfügbar'; - } - else if (status == 1){ - status_text = 'Update verfügbar'; - } - else if (status == 2){ - status_text = 'Update wurde eingespielt'; - } - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + } + } - if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt - ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - Update verfügbar. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - Update verfügbar. '; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; - } - - - } - ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status - if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); - } - - }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); - } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_UPDATE_PENDING; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_UPDATE_PENDING){ - setState(id_IST_UPDATE_PENDING,Betroffen); - func_IST_Gesamt(); } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ log('Variable write_state steht auf false'); } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } + } } else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } - } - } - else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); - } - else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_ERROR +' Geräte mit dem Datenpunkt ERROR.'); + } - } - if(write_state){ - if(id_IST_UPDATE_PENDING){ - setState(id_IST_UPDATE_PENDING,0); - func_IST_Gesamt(); + if(write_state){ + if(id_IST_ERROR){ + setState(id_IST_ERROR,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für ERROR nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } } - -} - -function DEVICE_IN_BOOTLOADER(obj) { - var meldungsart = 'DEVICE_IN_BOOTLOADER'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'Keine Meldung'; - } - else if(status === 1){ - status_text = 'Gerät startet neu'; - } - else if(status === 2){ - status_text = 'Gerät wurde neu getsartet'; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorDEVICE_IN_BOOTLOADER.each(function (id, i) { - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + SelectorERROR_NON_FLAT_POSITIONING.each(function (id, i) { + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; var status = getState(id).val; - var status_text; - if(status === 0){ - status_text = 'Keine Meldung'; - } - else if(status === 1){ - status_text = 'Gerät startet neu'; - } - else if(status === 2){ - status_text = 'Gerät wurde neu getsartet'; - } + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); + if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - Gerät startet neu. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - Gerät startet neu.'; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; - } - - - } - ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status - if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); - } - - }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); - } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_DEVICE_IN_BOOTLOADER; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_DEVICE_IN_BOOTLOADER){ - setState(id_IST_DEVICE_IN_BOOTLOADER,Betroffen); - func_IST_Gesamt(); - } - else{ - if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ - log('Variable write_state steht auf false'); - - } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } - } - else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } - } - } - else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); + ++Betroffen_ERROR_NON_FLAT_POSITIONING + if(prio < prio_ERROR_NON_FLAT_POSITIONING){prio = prio_ERROR_NON_FLAT_POSITIONING;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - wurde angehoben. ' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - wurde angehoben.' +datum_seit); } else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); - } - } - if(write_state){ - if(id_IST_DEVICE_IN_BOOTLOADER){ - setState(id_IST_DEVICE_IN_BOOTLOADER,0); - func_IST_Gesamt(); - } - else{ - if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - wurde angehoben. '); + servicemeldung.push(common_name +' ('+id_name +')' + ' - wurde angehoben.'); } + - } - } - - -} - -function ERROR(obj) { - var meldungsart = 'ERROR'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'Keinen Fehler'; - } - else { - status_text = meldungsart +' mit dem Wert: ' +status; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorERROR.each(function (id, i) { - var status = getState(id).val; - var status_text; - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; - if((native_type == 'HM-Sec-RHS') || (native_type == 'HM-Sec-RHS-2') || (native_type == 'HM-Sec-SC') || (native_type == 'HM-Sec-SC-2') || - (native_type == 'HM-Sec-SCo') || (native_type == 'HM-Sec-MD') || (native_type == 'HM-Sec-MDIR') || (native_type == 'HM-Sec-MDIR-2')){ - if(status == 7){ - status_text = 'Sabotage'; - } - else { - status_text = 'ERROR mit dem Wert: ' +status; - } - } - else if ((native_type=='HM-Sec-Key') || (native_type=='HM-Sec-Key-S') || (native_type=='HM-Sec-Key-O')){ - if(status == 1){ - status_text = 'Einkuppeln fehlgeschlagen'; - } - else if(status == 2){ - status_text = 'Motorlauf abgebrochen'; - } - else { - status_text = 'ERROR mit dem Wert: ' +status; - } - } - else if (native_type=='HM-CC-VD'){ - if(status == 1){ - status_text = 'Ventil Antrieb blockiert'; - } - else if(status == 2){ - status_text = 'Ventil nicht montiert'; - } - else if(status == 3){ - status_text = 'Stellbereich zu klein'; - } - else if(status == 4){ - status_text = 'Batteriezustand niedrig'; - } - else { - status_text = 'ERROR mit dem Wert: ' +status; - } - } - else { - status_text = meldungsart +' mit dem Wert: ' +status; - } - if (status > 0) { // wenn Zustand größer 0, dann wird die Anzahl der Geräte hochgezählt - ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - '+status_text +'. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - '+status_text; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; - } - - } ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_ERROR_NON_FLAT_POSITIONING if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } - }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); - } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_ERROR; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_ERROR){ - setState(id_IST_ERROR,Betroffen); - func_IST_Gesamt(); - } - else{ - if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ - log('Variable write_state steht auf false'); - - } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } - } - else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } + }); + + // Schleife ist durchlaufen. + if(Gesamt_ERROR_NON_FLAT_POSITIONING === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt ERROR_NON_FLAT_POSITIONING.'); } } else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); - } - else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); - } - } - if(write_state){ - if(id_IST_ERROR){ - setState(id_IST_ERROR,0); - func_IST_Gesamt(); - } - else{ - if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + if(Betroffen_ERROR_NON_FLAT_POSITIONING > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_ERROR_NON_FLAT_POSITIONING +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_ERROR_NON_FLAT_POSITIONING +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_ERROR_NON_FLAT_POSITIONING){ + setState(id_IST_ERROR_NON_FLAT_POSITIONING,Betroffen_ERROR_NON_FLAT_POSITIONING); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für ERROR_NON_FLAT_POSITIONING nicht gefüllt'); - } - } - - } - } - - -} - -function ERROR_CODE(obj) { - var meldungsart = 'ERROR_CODE'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'Keinen Fehler'; - } + } + } - else { - status_text = meldungsart +' mit dem Wert: ' +status; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorERROR_CODE.each(function (id, i) { - var status = getState(id).val; - var status_text; - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; - if(status === 0){ - status_text = 'Keinen Fehler'; - } - else if(native_type == 'HmIP-SWD'){ - if(status == 1){ - status_text = 'Wassermelder wurde bewegt.'; - } - } - else { - status_text = meldungsart +' mit dem Wert: ' +status; - } - - if (status > 0) { // wenn Zustand größer 0, dann wird die Anzahl der Geräte hochgezählt - ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - '+status_text +'. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - '+status_text; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; - } - - - } - ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status - if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); - } - - }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); - } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_ERROR_CODE; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_ERROR_CODE){ - setState(id_IST_ERROR_CODE,Betroffen); - func_IST_Gesamt(); } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ log('Variable write_state steht auf false'); } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } + } } else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } - } - } - else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); - } - else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_ERROR_NON_FLAT_POSITIONING +' Geräte mit dem Datenpunkt ERROR_NON_FLAT_POSITIONING.'); + } - } - if(write_state){ - if(id_IST_ERROR_CODE){ - setState(id_IST_ERROR_CODE,0); - func_IST_Gesamt(); + if(write_state){ + if(id_IST_ERROR_NON_FLAT_POSITIONING){ + setState(id_IST_ERROR_NON_FLAT_POSITIONING,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für ERROR_NON_FLAT_POSITIONING nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } } - -} - -function FAULT_REPORTING(obj) { - var meldungsart = 'FAULT_REPORTING'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'Keinen Fehler'; - } - else { - status_text = meldungsart +' mit dem Wert: ' +status; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function wird gestartet. (FAULT_REPORTING)'); - } - log_manuell = true; - } - - cacheSelectorFAULT_REPORTING.each(function (id, i) { + SelectorFAULT_REPORTING.each(function (id, i) { + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; var status = getState(id).val; - var status_text; - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; - if(native_type == 'HM-CC-RT-DN'){ - if(status === 0){ - status_text = 'keine Störung'; - } - else if(status == 1){ - status_text = 'Ventil blockiert'; - } - else if(status == 2){ - status_text = 'Einstellbereich Ventil zu groß'; - } - else if(status == 3){ - status_text = 'Einstellbereich Ventil zu klein'; - } - else if(status == 4){ - status_text = 'Kommunikationsfehler'; - } - else if(status == 6){ - status_text = 'Spannung Batterien/Akkus gering'; - } - else if(status == 7){ - status_text = 'Fehlstellung Ventil'; - } - else{ - status_text = meldungsart+' mit dem Wert: ' +status; - } - } - else{ - status_text = meldungsart+' mit dem Wert: ' +status; - } + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); + if (status > 0) { // wenn Zustand größer 0, dann wird die Anzahl der Geräte hochgezählt ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - ' +status_text +'. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - ' +status_text +'.'; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + ++Betroffen_FAULT_REPORTING; + if(prio < prio_FAULT_REPORTING){prio = prio_FAULT_REPORTING;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - ' +status_text +'. ' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - ' +status_text +'.' +datum_seit); } + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - ' +status_text +'. '); + servicemeldung.push(common_name +' ('+id_name +')' + ' - ' +status_text +'.'); + } + } ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_FAULT_REPORTING; if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon FAULT_REPORTING zutreffend) ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); - } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_FAULT_REPORTING; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_FAULT_REPORTING){ - setState(id_IST_FAULT_REPORTING,Betroffen); - func_IST_Gesamt(); - } - else{ - if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); - - } - } - - } - else{ - if(debugging){ - log('Variable write_state steht auf false'); - - } - } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } - } - else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } + + // Schleife ist durchlaufen. + if(Gesamt_FAULT_REPORTING === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt FAULT_REPORTING.'); } } else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); + if(Betroffen_FAULT_REPORTING > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_FAULT_REPORTING +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_FAULT_REPORTING +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_FAULT_REPORTING){ + setState(id_IST_FAULT_REPORTING,Betroffen_FAULT_REPORTING); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für FAULT_REPORTING nicht gefüllt'); + + } + } + } else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); + if(debugging){ + log('Variable write_state steht auf false'); + + } } } - if(write_state){ - if(id_IST_FAULT_REPORTING){ - setState(id_IST_FAULT_REPORTING,0); - func_IST_Gesamt(); + else{ + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_FAULT_REPORTING +' Geräte mit dem Datenpunkt FAULT_REPORTING.'); + + } + if(write_state){ + if(id_IST_FAULT_REPORTING){ + setState(id_IST_FAULT_REPORTING,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für FAULT_REPORTING nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } } - -} - -function SABOTAGE(obj) { - var meldungsart = 'SABOTAGE'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'Keine Sabotage'; - } - else if(status === 1){ - status_text = 'Sabotage'; - } - else if(status === 2){ - status_text = 'Sabotage aufgehoben'; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorSABOTAGE.each(function (id, i) { + SelectorDEVICE_IN_BOOTLOADER.each(function (id, i) { + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; var status = getState(id).val; - var status_text; - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; - if(status === 0){ - status_text = 'Keine Sabotage'; - } - else if(status === 1){ - status_text = 'Sabotage'; - } - else if(status === 2){ - status_text = 'Sabotage aufgehoben'; - } - if (status === 1) { + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); + + if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - ' +status_text +'. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - ' +status_text +'.'; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + ++Betroffen_DEVICE_IN_BOOTLOADER; + if(prio < prio_DEVICE_IN_BOOTLOADER){prio = prio_DEVICE_IN_BOOTLOADER;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Gerät startet neu. ' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Gerät startet neu.' +datum_seit); } - - + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Gerät startet neu. '); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Gerät startet neu.'); + } + } ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_DEVICE_IN_BOOTLOADER if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); + + // Schleife ist durchlaufen. + if(Gesamt_DEVICE_IN_BOOTLOADER === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt DEVICE_IN_BOOTLOADER.'); } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_SABOTAGE; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_SABOTAGE){ - setState(id_IST_SABOTAGE,Betroffen); - func_IST_Gesamt(); + } + else{ + if(Betroffen_DEVICE_IN_BOOTLOADER > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_DEVICE_IN_BOOTLOADER +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_DEVICE_IN_BOOTLOADER +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_DEVICE_IN_BOOTLOADER){ + setState(id_IST_DEVICE_IN_BOOTLOADER,Betroffen_DEVICE_IN_BOOTLOADER); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für DEVICE_IN_BOOTLOADER nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } else{ - if(debugging){ + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_DEVICE_IN_BOOTLOADER +' Geräte mit dem Datenpunkt DEVICE_IN_BOOTLOADER.'); + + } + if(write_state){ + if(id_IST_DEVICE_IN_BOOTLOADER){ + setState(id_IST_DEVICE_IN_BOOTLOADER,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für DEVICE_IN_BOOTLOADER nicht gefüllt'); + + } + } + + } + else{ + if(debugging){ log('Variable write_state steht auf false'); } + } } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } + } + + SelectorCONFIG_PENDING.each(function (id, i) { + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; + var status = getState(id).val; + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); + + + if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt + ++Betroffen; + ++Betroffen_CONFIG_PENDING; + if(prio < prio_CONFIG_PENDING){prio = prio_CONFIG_PENDING;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Konfigurationsdaten stehen zur Übertragung an. ' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Konfigurationsdaten stehen zur Übertragung an. ' +datum_seit); + } + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Konfigurationsdaten stehen zur Übertragung an. '); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Konfigurationsdaten stehen zur Übertragung an. '); + } + + } + ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_CONFIG_PENDING; + if(debugging){ + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } - else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } + + }); + + // Schleife ist durchlaufen. + if(Gesamt_CONFIG_PENDING === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt CONFIG_PENDING.'); } } else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); + if(Betroffen_CONFIG_PENDING > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_CONFIG_PENDING +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_CONFIG_PENDING +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_CONFIG_PENDING){ + setState(id_IST_CONFIG_PENDING,Betroffen_CONFIG_PENDING); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für CONFIG_PENDING nicht gefüllt'); + + } + } + } else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); + if(debugging){ + log('Variable write_state steht auf false'); + + } } - } - if(write_state){ - if(id_IST_SABOTAGE){ - setState(id_IST_SABOTAGE,0); - func_IST_Gesamt(); + else{ + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_CONFIG_PENDING +' Geräte mit dem Datenpunkt CONFIG_PENDING.'); + + } + if(write_state){ + if(id_IST_CONFIG_PENDING){ + setState(id_IST_CONFIG_PENDING,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für CONFIG_PENDING nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } } - -} - -function ERROR_NON_FLAT_POSITIONING(obj) { - var meldungsart = 'ERROR_NON_FLAT_POSITIONING'; - var native_type = ''; - var Gesamt = 0; - var Betroffen = 0; - var text = []; - var _message_tmp = ''; - var _message_tmp1 = ''; - var log_manuell = false; - - - if (obj) { - var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':')); - var status = obj.newState.val; - var status_text; - if(status === 0){ - status_text = 'Keine Meldung'; - } - else if(status === 1){ - status_text = 'Gerät wurde angehoben.'; - } - else if(status === 2){ - status_text = 'Gerät wurde angehoben. Bestätigt'; - } - var id_name = obj.id.split('.')[2]; - log('Neue Servicemeldung: ' +common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); - } - else { - if(debugging){ - log('Function ' +meldungsart +' wird gestartet.'); - } - log_manuell = true; - } - - cacheSelectorERROR_NON_FLAT_POSITIONING.each(function (id, i) { - var obj = getObject(id); - //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); - var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; - var id_name = id.split('.')[2]; - var meldungsart = id.split('.')[4]; + SelectorUPDATE_PENDING.each(function (id, i) { + common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name; + id_name = id.split('.')[2]; + obj = getObject(id); + native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + meldungsart = id.split('.')[4]; var status = getState(id).val; - var status_text; - if(status === 0){ - status_text = 'Keine Meldung'; - } - else if(status === 1){ - status_text = 'Gerät wurde angehoben.'; - } - else if(status === 2){ - status_text = 'Gerät wurde angehoben. Bestätigt.'; - } - var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); - var datum_neu; - var datum_seit; - if(datum < '01.01.71 01:00:00'){ - datum_seit = ''; - datum_neu = ''; - }else{ - datum_seit= ' --- seit: '; - datum_neu = datum +' Uhr'; - } - var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; + var status_text = func_translate_status(meldungsart, native_type, status); + //var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss"); + var datum_seit = func_get_datum(id); + if (status === 1) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++Betroffen; - text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen - _message_tmp = common_name +' ('+id_name +')' + ' - wurde angehoben. '+'\n'; - _message_tmp1 = common_name +' ('+id_name +')' + ' - wurde angehoben.'; - if(with_time && datum_neu !== ''){ - _message_tmp = _message_tmp +datum_seit +datum_neu; - _message_tmp1 = _message_tmp1 +datum_seit +datum_neu; + ++Betroffen_UPDATE_PENDING; + if(prio < prio_UPDATE_PENDING){prio = prio_UPDATE_PENDING;} + if(with_time && datum_seit !== ''){ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Gerät startet neu. ' +datum_seit); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Gerät startet neu. ' +datum_seit); + } + else{ + formatiert_servicemeldung.push(common_name +' ('+id_name +')' + ' - Gerät startet neu. '); + servicemeldung.push(common_name +' ('+id_name +')' + ' - Gerät startet neu. '); } + } - ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status + ++Gesamt_UPDATE_PENDING; if(debugging){ - log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu); + log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit); } }); - - // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben - if(Betroffen > 0){ - if(debugging || log_manuell){ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen +' Servicemeldung(en).'); + + // Schleife ist durchlaufen. + if(Gesamt_UPDATE_PENDING === 0){ + if(debugging || log_manuell){ + log('Keine Geräte gefunden mit dem Datenpunkt UPDATE_PENDING.'); } - if(Betroffen >1){ - if(logging){ - log('Übersicht aller Servicemeldungen für den Meldungstyp: ' +meldungsart +': '+ text.join(', ')); - } - } - //Push verschicken - if(sendpush && !log_manuell){ - _prio = prio_ERROR_NON_FLAT_POSITIONING; - _titel = 'Servicemeldung'; - _message = _message_tmp; - send_pushover_V4(_device, _message, _titel, _prio); - } - if(sendtelegram && !log_manuell){ - _message = _message_tmp1; - send_telegram(_message, user_telegram); - } - if(sendmail && !log_manuell){ - _message = _message_tmp1; - send_mail(_message); - } - if(write_state){ - if(id_IST_ERROR_NON_FLAT_POSITIONING){ - setState(id_IST_ERROR_NON_FLAT_POSITIONING,Betroffen); - func_IST_Gesamt(); + } + else{ + if(Betroffen_UPDATE_PENDING > 0){ + if(debugging || log_manuell){ + log('Es gibt: '+Gesamt_UPDATE_PENDING +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_UPDATE_PENDING +' Servicemeldung(en).'); + } + if(write_state){ + if(id_IST_UPDATE_PENDING){ + setState(id_IST_UPDATE_PENDING,Betroffen_UPDATE_PENDING); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für UPDATE_PENDING nicht gefüllt'); + + } + } + } else{ if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + log('Variable write_state steht auf false'); } } - } else{ - if(debugging){ + if((debugging) || (onetime && log_manuell)){ + log('Es gibt: '+Gesamt_UPDATE_PENDING +' Geräte mit dem Datenpunkt UPDATE_PENDING.'); + + } + if(write_state){ + if(id_IST_UPDATE_PENDING){ + setState(id_IST_UPDATE_PENDING,0); + func_IST_Gesamt(); + } + else{ + if(debugging){ + log('id_IST Feld für UPDATE_PENDING nicht gefüllt'); + + } + } + + } + else{ + if(debugging){ log('Variable write_state steht auf false'); } + } } - if(write_message){ - if(id_Text_Servicemeldung){ - setState(id_Text_Servicemeldung,_message_tmp); - } + } + + + //Verarbeitung aller Datenpunkte + + if(Betroffen > 0 && native_type !=='HmIP-HEATING'){ + + + if(meldung_neu != servicemeldung.join(' , ')){ + meldung_alt = meldung_neu; + meldung_neu = servicemeldung.join(' , '); + if(debugging){ + log('meldung alt und neu geändert'); + } + } else{ - if(debugging){ - log('Variable write_message steht auf false'); - - } + log('Else Teil Meldung_neu'); + meldung_neu = 'Test'; } - } - else{ - if((debugging) || (onetime && log_manuell)){ - if(Gesamt === 0){ - log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.'); + + if(meldung_alt.indexOf(meldung_neu) == -1){ + if(logging){ + log('Die Servicemeldung alt und neu sind unterschiedlich. Es wird eine Push verschickt') + log('Meldung neu: ' +meldung_neu); + log('Meldung alt: ' +meldung_alt); } - else{ - log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.'); + } + else{ + if(logging){ + log('Die Servicemeldung alt und neu sind identisch. Es wird keine Push verschickt.') + log('Meldung neu: ' +meldung_neu); + log('Meldung alt: ' +meldung_alt); } } - if(write_state){ - if(id_IST_ERROR_NON_FLAT_POSITIONING){ - setState(id_IST_ERROR_NON_FLAT_POSITIONING,0); - func_IST_Gesamt(); + if(timer){ + clearTimeout(timer); + timer = null; + if(logging){ + log('Es gibt bereits eine Servicemeldung. Abruch des Timers .'); + } - else{ - if(debugging){ - log('id_IST Feld für '+meldungsart +' nicht gefüllt'); + if(debugging){ + log('Übersicht aller Servicemeldungen: '+ servicemeldung.join(', ')); + } + //Push verschicken + if(no_observation.search(id_name) == -1){ + if(sendpush && !log_manuell){ + prio = 0; + titel = 'Servicemeldung'; + message = formatiert_servicemeldung.join('\n'); + send_pushover(device, message, titel, prio); + } + if(sendtelegram && !log_manuell){ + message = servicemeldung.join('\n'); + send_telegram(message, user_telegram); + } + if(sendmail && !log_manuell){ + message = servicemeldung.join('\n'); + send_mail(message); + } + if(write_message){ + if(id_Text_Servicemeldung){ + setState(id_Text_Servicemeldung,servicemeldung.join(',')); + } + } + else{ + if(debugging){ + log('Variable write_message steht auf false'); - } + } + } } + } + else{ + timer = setTimeout(function() { + timer = null; + if(logging){ + log('Timer abgelaufen. Verarbeitung der Servicemeldung'); + + } + + if(debugging || log_manuell){ + log('Es werden: '+Gesamt +' Datenpunkte überwacht. Derzeit: '+Betroffen +' Servicemeldung(en).'); + } + if(Betroffen == 1){ + if(debugging){ + log('Es gibt eine Servicemeldung: ' + servicemeldung.join(', ')); + } + } + if(Betroffen >1){ + if(debugging){ + log('Übersicht aller Servicemeldungen: '+ servicemeldung.join(', ')); + } + } + //Push verschicken + if(no_observation.search(id_name) == -1){ + if(meldung_alt.indexOf(meldung_neu) == -1){ + + //log('Meldung unterschiedlich'); + //log('Meldung neu: ' +meldung_neu); + //log('Meldung alt: ' +meldung_alt); + if(sendpush && !log_manuell){ + prio = 0; + titel = 'Servicemeldung'; + message = formatiert_servicemeldung.join('\n'); + send_pushover(device, message, titel, prio); + } + if(sendtelegram && !log_manuell){ + message = servicemeldung.join('\n'); + send_telegram(message, user_telegram); + } + if(sendmail && !log_manuell){ + message = servicemeldung.join('\n'); + send_mail(message); + } + if(write_message){ + if(id_Text_Servicemeldung){ + setState(id_Text_Servicemeldung,servicemeldung.join(', ')); + } + } + else{ + if(debugging){ + log('Variable write_message steht auf false'); + + } + } + } + } + if(meldung_alt.indexOf(meldung_neu) != -1){ + if(logging){ + log('Pushnachricht unterdrückt, da es über diese Servicemeldung bereits eine Push gab.'); + //log('Meldung neu: ' +meldung_neu); + //log('Meldung alt: ' +meldung_alt); + } + } + }, 3 * 1000); // 3 Sekunden Verzögerung + } + + } + else{ + meldung_alt = 'Derzeit keine Servicemedungen.'; + if(debugging){ + log('Meldung alt aus dem else-Teil: '+meldung_alt); + } + if((debugging) || (onetime && log_manuell)){ + log(+Gesamt +' Datenpunkte werden insgesamt vom Script ' +name +' (Version: '+Version +') überwacht. Instance: '+instance); + + + } + if(write_message){ + if(id_Text_Servicemeldung){ + setState(id_Text_Servicemeldung,''); + } } + } - + } //Auslösen durch Zustandsänderung if(observation){ - cacheSelectorLOWBAT.on(function(obj) { - LOWBAT(obj); + SelectorUNREACH.on(function(obj) { + Servicemeldung(obj); }); - - cacheSelectorLOW_BAT.on(function(obj) { - LOW_BAT(obj); + SelectorSTICKY_UNREACH.on(function(obj) { + Servicemeldung(obj); }); - - cacheSelectorUNREACH.on(function(obj) { - UNREACH(obj); + SelectorSABOTAGE.on(function(obj) { + Servicemeldung(obj); }); - - cacheSelectorSTICKY_UNREACH.on(function(obj) { - STICKY_UNREACH(obj); + SelectorERROR.on(function(obj) { + Servicemeldung(obj); }); - - cacheSelectorCONFIG_PENDING.on(function(obj) { - CONFIG_PENDING(obj); + SelectorLOWBAT.on(function(obj) { + Servicemeldung(obj); }); - - cacheSelectorUPDATE_PENDING.on(function(obj) { - UPDATE_PENDING(obj); + SelectorLOW_BAT.on(function(obj) { + Servicemeldung(obj); }); - - cacheSelectorDEVICE_IN_BOOTLOADER.on(function(obj) { - DEVICE_IN_BOOTLOADER(obj); - }); - - cacheSelectorERROR.on(function(obj) { - ERROR(obj); - }); - - //cacheSelectorERROR_CODE.on(function(obj) { - // ERROR_CODE(obj); - //}); - - cacheSelectorFAULT_REPORTING.on(function(obj) { - FAULT_REPORTING(obj); + SelectorERROR_NON_FLAT_POSITIONING.on(function(obj) { + Servicemeldung(obj); }); - cacheSelectorSABOTAGE.on(function(obj) { - SABOTAGE(obj); + SelectorFAULT_REPORTING.on(function(obj) { + Servicemeldung(obj); }); - cacheSelectorERROR_NON_FLAT_POSITIONING.on(function(obj) { - ERROR_NON_FLAT_POSITIONING(obj); - }); + SelectorCONFIG_PENDING.on(function(obj) { + Servicemeldung(obj); + }); + SelectorUPDATE_PENDING.on(function(obj) { + Servicemeldung(obj); + }); + SelectorDEVICE_IN_BOOTLOADER.on(function(obj) { + Servicemeldung(obj); + }); + } - - if(onetime){ //beim Start - LOWBAT(); - LOW_BAT(); - UNREACH(); - STICKY_UNREACH(); - CONFIG_PENDING(); - UPDATE_PENDING(); - DEVICE_IN_BOOTLOADER(); - ERROR(); - //ERROR_CODE(); - FAULT_REPORTING(); - SABOTAGE(); - ERROR_NON_FLAT_POSITIONING(); -} - - + Servicemeldung(); + +}