From 93894378c8e1df09184f5cc45f07add107d63d47 Mon Sep 17 00:00:00 2001
From: Baenker
Date: Sun, 10 Feb 2019 18:09:15 +0100
Subject: [PATCH] Update Servicemeldungen.js
---
Servicemeldungen.js | 1585 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 1585 insertions(+)
diff --git a/Servicemeldungen.js b/Servicemeldungen.js
index 8b13789..23ce4b0 100644
--- a/Servicemeldungen.js
+++ b/Servicemeldungen.js
@@ -1 +1,1586 @@
+// jshint maxerr:2000
+/**************************
+* 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
+**************************/
+var logging = true;
+var debugging = false;
+
+var autoAck = false; //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
+
+//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;
+
+//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 = true; // true schreibt beim auftreten einer Servicemeldung die Serviemeldung in ein Objekt
+var id_Text_Servicemeldung = '';
+
+//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';
+
+//Ergebnis in Datenfelder schreiben
+var 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 = '';
+var id_IST_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_CODE = '';
+var id_IST_FAULT_REPORTING = '';
+var id_IST_SABOTAGE = '';
+var id_IST_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$]');
+
+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,
+ retry: 60,
+ expire: 600,
+ html: 1
+ });
+}
+
+function func_Batterie(native_type){
+ var Batterie = 'unbekannt';
+ var cr2016 = ['HM-RC-4', 'HM-RC-4-B', 'HM-RC-Key3', 'HM-RC-Key3-B', 'HM-RC-P1', 'HM-RC-Sec3', 'HM-RC-Sec3-B', 'ZEL STG RM HS 4'];
+ var cr2032 = ['HM-PB-2-WM', 'HM-PB-4-WM', 'HM-PBI-4-FM', 'HM-SCI-3-FM', 'HM-Sec-TiS', 'HM-SwI-3-FM', 'HmIP-FCI1'];
+ var lr14x2 = ['HM-Sec-Sir-WM', 'HM-OU-CFM-TW'];
+ var lr44x2 = ['HM-Sec-SC', 'HM-Sec-SC2LHM-Sec-SC-2', 'HM-Sec-RHS'];
+ var lr6x2 = ['HM-CC-VD', 'HM-CC-RT-DN', 'HM-Sec-WDS', 'HM-Sec-WDS-2', 'HM-CC-TC', 'HM-Dis-TD-T', 'HB-UW-Sen-THPL-I', 'HM-WDS40-TH-I', 'HM-WDS40-TH-I-2', 'HM-WDS10-TH-O', 'HmIP-SMI', 'HMIP-eTRV', 'HM-WDS30-OT2-SM-2', 'HmIP-SMO', 'HmIP-SMO-A', 'HmIP-SPI', 'HmIP-eTRV-2', 'HmIP-SPDR', 'HmIP-SWD', 'HmIP-STHO-A'];
+ var lr6x3 = ['HmIP-SWO-PL', 'HM-Sec-MDIR', 'HM-Sec-MDIR-2', 'HM-Sec-SD', 'HM-Sec-Key', 'HM-Sec-Key-S', 'HM-Sec-Key-O', 'HM-Sen-Wa-Od', 'HM-Sen-MDIR', 'HM-Sen-MDIR-O', 'HM-Sen-MDIR-O-2', 'HM-WDS100-C6-O', 'HM-WDS100-C6-O-2', 'HM-WDS100-C6-O-2', 'HmIP-ASIR', 'HmIP-SWO-B'];
+ var lr6x4 = ['HM-CCU-1', 'HM-ES-TX-WM', 'HM-WDC7000'];
+ var lr3x1 = ['HM-RC-4-2', 'HM-RC-4-3', 'HM-RC-Key4-2', 'HM-RC-Key4-3', 'HM-RC-Sec4-2', 'HM-RC-Sec4-3', 'HM-Sec-RHS-2', 'HM-Sec-SCo', 'HmIP-KRC4', 'HmIP-KRCA', 'HmIP-RC8', 'HmIP-SRH', 'HmIP-SWDO', ' HmIP-DBB'];
+ var lr3x2 = ['HM-TC-IT-WM-W-EU', 'HM-Dis-WM55', 'HM-Dis-EP-WM55', 'HM-PB-2-WM55', 'HM-PB-2-WM55-2', 'HM-PB-6-WM55', 'HM-PBI-2-FM', 'HM-RC-8', 'HM-Sen-DB-PCB', 'HM-Sen-EP', 'HM-Sen-MDIR-SM', 'HM-Sen-MDIR-WM55', 'HM-WDS30-T-O', 'HM-WDS30-OT2-SM', 'HmIP-STH', 'HmIP-STHD', 'HmIP-WRC2', 'HmIP-WRC6', 'HmIP-WTH', 'HmIP-WTH-2', 'HmIP-SAM', 'HmIP-SLO', 'HMIP-SWDO-I', 'HmIP-FCI6', ' HmIP-SMI55'];
+ var lr3x3 = ['"HM-PB-4Dis-WM', 'HM-PB-4Dis-WM-2', 'HM-RC-Dis-H-x-EU', 'HM-Sen-LI-O'];
+ var lr3x3a = ['"HM-RC-19', 'HM-RC-19-B', 'HM-RC-12', 'HM-RC-12-B', 'HM-RC-12-W'];
+ var block9 = ['HM-LC-Sw1-Ba-PCB', 'HM-LC-Sw4-PCB', 'HM-MOD-EM-8', 'HM-MOD-Re-8', 'HM-Sen-RD-O', 'HM-OU-CM-PCB', 'HM-LC-Sw4-WM'];
+ var fixed = ['HM-Sec-SD-2', 'HmIP-SWSD'];
+ var ohne = ['HM-LC-Sw1PBU-FM'];
+ var recharge = ['HM-Sec-Win', 'HM-Sec-SFA-SM'];
+
+
+ for (var i = 0; i < cr2016.length; i++) {
+ if (cr2016[i] == native_type) {
+ Batterie = '1x CR2016';
+ break;
+ }
+ }
+ for (i = 0; i < cr2032.length; i++) {
+ if (cr2032[i] == native_type) {
+ Batterie = '1x CR2032';
+ break;
+ }
+ }
+ for (i = 0; i < lr14x2.length; i++) {
+ if (lr14x2[i] == native_type) {
+ Batterie = '2x LR14';
+ break;
+ }
+ }
+ for (i = 0; i Spannung Batterien/Akkus gering. '+Batterie+'\n';
+
+ }
+ ++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 +' ---' +Batterie);
+ }
+ //wenn Batterie unbekannt dann Log
+ if(Batterie == 'unbekannt'){
+ 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(write_state){
+ if(id_IST_LOWBAT){
+ setState(id_IST_LOWBAT,Betroffen);
+ }
+ 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)){
+ 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_LOWBAT){
+ setState(id_IST_LOWBAT,0);
+ }
+ 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 Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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) {
+ 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 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];
+
+ 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 = _message_tmp +common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie+'\n';
+
+ }
+ ++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 +' ---' +Batterie);
+ }
+ //wenn Batterie unbekannt dann Log
+ if(Batterie == 'unbekannt'){
+ 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);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function UNREACH(obj) {
+ var meldungsart = 'UNREACH';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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 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 = _message_tmp +common_name +' ('+id_name +')' + ' - Kommunikation gestört. '+'\n';
+
+
+
+ }
+ ++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){
+ 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_UNREACH;
+ _titel = 'Servicemeldung';
+ _message = _message_tmp;
+ send_pushover_V4(_device, _message, _titel, _prio);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function STICKY_UNREACH(obj) {
+ var meldungsart = 'STICKY_UNREACH';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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 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
+ if(autoAck){
+ _message_tmp = _message_tmp +common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. '+'\n';
+ }
+ else {
+ _message_tmp = _message_tmp +common_name +' ('+id_name +')' + ' - bestätigbare Kommunikationsstörung. '+'\n';
+ }
+
+ }
+ ++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){
+ 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 = 0;
+ _titel = 'Servicemeldung';
+ _message = _message_tmp;
+ send_pushover_V4(_device, _message, _titel, _prio);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function CONFIG_PENDING(obj) {
+ var meldungsart = 'CONFIG_PENDING';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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) {
+ 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 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 = _message_tmp +common_name +' ('+id_name +')' + ' - Konfigurationsdaten stehen zur Übertragung an. '+'\n';
+
+
+ }
+ ++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){
+ 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);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function UPDATE_PENDING(obj) {
+ var meldungsart = 'UPDATE_PENDING';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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 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 = _message_tmp +common_name +' ('+id_name +')' + ' - Update verfügbar. '+'\n';
+
+
+ }
+ ++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){
+ 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);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function DEVICE_IN_BOOTLOADER(obj) {
+ var meldungsart = 'DEVICE_IN_BOOTLOADER';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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';
+ }
+ 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;
+ }
+
+ cacheSelectorDEVICE_IN_BOOTLOADER.each(function (id, i) {
+ 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';
+ }
+ else {
+ status_text = meldungsart +' mit dem Wert: ' +status;
+ }
+ var obj = getObject(id);
+ var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':'));
+ 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 = _message_tmp +common_name +' ('+id_name +')' + ' - Gerät startet neu. '+'\n';
+
+
+ }
+ ++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){
+ 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);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function ERROR(obj) {
+ var meldungsart = 'ERROR';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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 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 = _message_tmp +common_name +' ('+id_name +')' + ' - '+status_text +'. '+'\n';
+
+
+ }
+ ++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){
+ 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);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function ERROR_CODE(obj) {
+ var meldungsart = 'ERROR_CODE';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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 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;
+ 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 = _message_tmp +common_name +' ('+id_name +')' + ' - '+status_text +'. '+'\n';
+
+
+ }
+ ++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){
+ 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);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function FAULT_REPORTING(obj) {
+ var meldungsart = 'FAULT_REPORTING';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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) {
+ 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 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;
+ }
+ 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 = _message_tmp +common_name +' ('+id_name +')' + ' - ' +status_text +'. '+'\n';
+
+
+ }
+ ++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 (Anzahl, davon FAULT_REPORTING zutreffend) 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_FAULT_REPORTING;
+ _titel = 'Servicemeldung';
+ _message = _message_tmp;
+ send_pushover_V4(_device, _message, _titel, _prio);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+ }
+ }
+
+
+}
+
+function SABOTAGE(obj) {
+ var meldungsart = 'SABOTAGE';
+ var Gesamt = 0;
+ var Betroffen = 0;
+ var text = [];
+ var _message_tmp = ' ';
+ 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';
+ }
+ 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;
+ }
+
+ cacheSelectorSABOTAGE.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 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';
+ }
+ else {
+ status_text = meldungsart +' mit dem Wert: ' +status;
+ }
+ if (status === 1) {
+ ++Betroffen;
+ text.push(common_name +' ('+id_name +')'); // Zu Array hinzufügen
+ _message_tmp = _message_tmp +common_name +' ('+id_name +')' + ' - ' +status_text +'. '+'\n';
+
+
+ }
+ ++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){
+ 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_SABOTAGE;
+ _titel = 'Servicemeldung';
+ _message = _message_tmp;
+ send_pushover_V4(_device, _message, _titel, _prio);
+ }
+ }
+ else{
+ if((debugging) || (onetime)){
+ if(Gesamt === 0){
+ log('Keine Geräte gefunden mit dem Datenpunkt ' +meldungsart +'.');
+ }
+ else{
+ log('Es gibt: '+Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+'.');
+ }
+
+ }
+ }
+
+
+}
+
+//Auslösen durch Zustandsänderung
+if(observation){
+ cacheSelectorLOWBAT.on(function(obj) {
+ LOWBAT(obj);
+ });
+
+ cacheSelectorLOW_BAT.on(function(obj) {
+ LOW_BAT(obj);
+ });
+
+ cacheSelectorUNREACH.on(function(obj) {
+ UNREACH(obj);
+ });
+
+ cacheSelectorSTICKY_UNREACH.on(function(obj) {
+ STICKY_UNREACH(obj);
+ });
+
+ cacheSelectorCONFIG_PENDING.on(function(obj) {
+ CONFIG_PENDING(obj);
+ });
+
+ cacheSelectorUPDATE_PENDING.on(function(obj) {
+ UPDATE_PENDING(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);
+ });
+ cacheSelectorSABOTAGE.on(function(obj) {
+ SABOTAGE(obj);
+ });
+}
+
+
+
+
+if(onetime){
+ //beim Start
+ LOWBAT();
+ LOW_BAT();
+ UNREACH();
+ STICKY_UNREACH();
+ CONFIG_PENDING();
+ UPDATE_PENDING();
+ DEVICE_IN_BOOTLOADER();
+ ERROR();
+ ERROR_CODE();
+ FAULT_REPORTING();
+ SABOTAGE();
+}