From b78383ef94ffead9eb8be1fcf0db0caadc95e58d Mon Sep 17 00:00:00 2001
From: Baenker
Date: Thu, 11 Apr 2019 19:29:02 +0200
Subject: [PATCH] Create Servicemeldungen_beta.js
---
Servicemeldungen_beta.js | 1149 ++++++++++++++++++++++++++++++++++++++
1 file changed, 1149 insertions(+)
create mode 100644 Servicemeldungen_beta.js
diff --git a/Servicemeldungen_beta.js b/Servicemeldungen_beta.js
new file mode 100644
index 0000000..05db6e1
--- /dev/null
+++ b/Servicemeldungen_beta.js
@@ -0,0 +1,1149 @@
+/*******************************************************
+* 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
+* Fehler bei Sticky_Unreach beseitigt
+*
+* Derzeit fehlen: CONFIG_PENDING, UPDATE_PENDING vom alten Script
+* Andere theoretisch mögliche LOWBAT_REPORTING, U_SOURCE_FAIL, USBH_POWERFAIL, STICKY_SABOTAGE, ERROR_REDUCED, ERROR_SABOTAGE
+*******************************************************/
+const Version = 1.24;
+const logging = true; //Sollte immer auf true stehen. Bei false wird garnicht protokolliert
+const debugging = false; //true protokolliert viele zusätzliche Infos
+
+const autoAck = true; //Löschen bestätigbarer Kommunikationsstörungen (true = an, false = aus)
+
+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
+
+//Geräte die nicht überwacht werden sollen. Komma getrennt erfassen
+const no_observation = 'LEQ092862x9, XXX';
+
+//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. Auf dieses kann man dann reagieren
+//und z. B. die Nachricht per Telegram verschicken oder in vis anzeigen
+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
+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;
+let titel;
+let message;
+let device = 'TPhone'; //Welches Gerät soll die Nachricht bekommen
+//let _device = 'All';
+
+//Variablen für Telegram
+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
+const sendmail = false; //true = verschickt per email Nachrchten // false = email wird nicht benutzt
+
+//Ergebnis in Datenfelder 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 = '';
+const id_IST_LOWBAT = 'Systemvariable.0.Servicemeldungen.Anzahl_LOWBAT'/*Anzahl LOWBAT*/;
+const id_IST_LOW_BAT = '';
+//const id_IST_G_LOWBAT = '';
+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
+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$]');
+
+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 (messgae, user_telegram) {
+ sendTo('telegram.0', {
+ text: messgae,
+ user: user_telegram,
+ parse_mode: 'HTML'
+ });
+
+}
+
+function send_mail (messgae) {
+ sendTo("email", {
+ //from: "iobroker@mydomain.com",
+ //to: "aabbcc@gmail.com",
+ subject: "Servicemeldung",
+ 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';
+ let 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'];
+ let 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'];
+ let lr14x2 = ['HM-Sec-Sir-WM', 'HM-OU-CFM-TW', 'HM-OU-CFM-Pl'];
+ let lr44x2 = ['HM-Sec-SC', 'HM-Sec-SC2L', 'HM-Sec-SC-2', 'HM-Sec-RHS'];
+ let 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', 'HmIP-eTRV-B', 'HmIP-PCBS-BAT','HmIP-STHO'];
+ let 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'];
+ let lr6x4 = ['HM-CCU-1', 'HM-ES-TX-WM', 'HM-WDC7000'];
+ let 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'];
+ let 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', 'HM-PB-2-FM', 'HmIP-SWDM'];
+ let lr3x3 = ['HM-PB-4Dis-WM', 'HM-PB-4Dis-WM-2', 'HM-RC-Dis-H-x-EU', 'HM-Sen-LI-O'];
+ let lr3x3a = ['HM-RC-19', 'HM-RC-19-B', 'HM-RC-12', 'HM-RC-12-B', 'HM-RC-12-W'];
+ let lr14x3 = ['HmIP-MP3P'];
+ let 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'];
+ let fixed = ['HM-Sec-SD-2', 'HmIP-SWSD'];
+ let ohne = ['HM-LC-Sw1PBU-FM', 'HM-LC-Sw1-Pl-DN-R1', 'HM-LC-Sw1-DR', 'HM-LC-RGBW-WM', 'HM-LC-Sw1-Pl-CT-R1', 'HmIP-HEATING', 'HM-LC-Sw1-FM', 'HM-LC-Sw2-FM', 'HM-LC-Sw4-DR', 'HM-LC-Sw1-Pl', 'HM-LC-Sw1-Pl-2', 'HM-LC-Sw4-Ba-PCB', 'HM-LC-Sw1-SM', 'HM-LC-Sw4-SM', 'HM-Sys-sRP-Pl', 'LC-Sw2PBU-FM'];
+ let recharge = ['HM-Sec-Win', 'HM-Sec-SFA-SM'];
+
+
+ for (var i = 0; i < cr2016.length; i++) {
+ if (cr2016[i].toUpperCase() == native_type.toUpperCase()) {
+ Batterie = '1x CR2016';
+ break;
+ }
+ }
+ for (i = 0; i < cr2032.length; i++) {
+ if (cr2032[i].toUpperCase() == native_type.toUpperCase()) {
+ Batterie = '1x CR2032';
+ break;
+ }
+ }
+ for (i = 0; i < lr14x2.length; i++) {
+ if (lr14x2[i].toUpperCase() == native_type.toUpperCase()) {
+ Batterie = '2x LR14';
+ break;
+ }
+ }
+ for (i = 0; i Spannung Batterien/Akkus gering. '+Batterie;
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie;
+ 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_LOWBAT
+ if(debugging){
+ 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');
+ }
+
+ });
+
+ // 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).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_LOWBAT +' Geräte mit dem Datenpunkt LOWBAT.');
+
+ }
+ }
+ }
+
+ 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 = func_translate_status(meldungsart, native_type, status);
+ var Batterie = func_Batterie(native_type);
+ //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_LOW_BAT
+ text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen
+ messgae_tmp = common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie;
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - Spannung Batterien/Akkus gering. '+Batterie;
+ 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_LOW_BAT
+ if(debugging){
+ 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');
+ }
+
+ });
+
+ // Schleife ist durchlaufen.
+ if(Gesamt_LOW_BAT === 0){
+ if(debugging || log_manuell){
+ log('Keine Geräte gefunden mit dem Datenpunkt LOWBAT.');
+ }
+ }
+ 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).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_LOW_BAT +' Geräte mit dem Datenpunkt LOW_BAT.');
+
+ }
+ }
+ }
+
+ 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) {
+ ++Betroffen;
+ ++Betroffen_UNREACH;
+ text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen
+ messgae_tmp = common_name +' ('+id_name +')' + ' - Kommunikation gestört. '+'\n';
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - Kommunikation gestört.';
+ 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_UNREACH;
+
+ if(debugging){
+ log('Geräte Nr. ' +(i + 1) +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit);
+ }
+
+ });
+
+ // Schleife ist durchlaufen.
+ if(Gesamt_UNREACH === 0){
+ if(debugging || log_manuell){
+ log('Keine Geräte gefunden mit dem Datenpunkt UNREACH.');
+ }
+ }
+ 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).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_UNREACH +' Geräte mit dem Datenpunkt UNREACH.');
+
+ }
+ }
+ }
+
+ 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;
+ ++Betroffen_STICKY_UNREACH;
+ text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen
+ if(autoAck){
+ setStateDelayed(id,2,5000);
+ messgae_tmp = common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. '+'\n';
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - Meldung über bestätigbare Kommunikationsstörung gelöscht. ';
+ if(with_time && datum_seit !== ''){
+ messgae_tmp = messgae_tmp +datum_seit;
+ messgae_tmp1 = messgae_tmp1 +datum_seit;
+ }
+ }
+ else {
+ 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 + 1) +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit);
+ }
+
+ });
+
+ // Schleife ist durchlaufen.
+ if(Gesamt_STICKY_UNREACH === 0){
+ if(debugging || log_manuell){
+ log('Keine Geräte gefunden mit dem Datenpunkt STICKY_UNREACH.');
+ }
+ }
+ 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).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_STICKY_UNREACH +' Geräte mit dem Datenpunkt STICKY_UNREACH.');
+
+ }
+ }
+ }
+
+ 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;
+ text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen
+ messgae_tmp = common_name +' ('+id_name +')' + ' - ' +status_text +'. '+'\n';
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - ' +status_text +'.';
+ 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_SABOTAGE;
+ if(debugging){
+ log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit);
+ }
+
+ });
+
+ // Schleife ist durchlaufen.
+ if(Gesamt_SABOTAGE === 0){
+ if(debugging || log_manuell){
+ log('Keine Geräte gefunden mit dem Datenpunkt SABOTAGE.');
+ }
+ }
+ else{
+ if(Betroffen_SABOTAGE > 0){
+ if(debugging || log_manuell){
+ log('Es gibt: '+Gesamt_SABOTAGE +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_SABOTAGE +' Servicemeldung(en).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_SABOTAGE +' Geräte mit dem Datenpunkt SABOTAGE.');
+
+ }
+ }
+ }
+
+ 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 = 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;
+ ++Betroffen_ERROR;
+ text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen
+ messgae_tmp = common_name +' ('+id_name +')' + ' - '+status_text +'. '+'\n';
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - '+status_text;
+ 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_ERROR
+ if(debugging){
+ log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit);
+ }
+
+ });
+
+ // Schleife ist durchlaufen.
+ if(Gesamt_ERROR === 0){
+ if(debugging || log_manuell){
+ log('Keine Geräte gefunden mit dem Datenpunkt ERROR.');
+ }
+ }
+ else{
+ if(Betroffen_ERROR > 0){
+ if(debugging || log_manuell){
+ log('Es gibt: '+Gesamt_ERROR +' Geräte mit dem Datenpunkt ' +meldungsart+'. Derzeit: '+Betroffen_ERROR +' Servicemeldung(en).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_ERROR +' Geräte mit dem Datenpunkt ERROR.');
+
+ }
+ }
+ }
+
+ 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 = 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_ERROR_NON_FLAT_POSITIONING
+ text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen
+ messgae_tmp = common_name +' ('+id_name +')' + ' - wurde angehoben. '+'\n';
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - wurde angehoben.';
+ 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_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);
+ }
+
+ });
+
+ // 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(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).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_ERROR_NON_FLAT_POSITIONING +' Geräte mit dem Datenpunkt ERROR_NON_FLAT_POSITIONING.');
+
+ }
+ }
+ }
+
+ 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 = func_translate_status(meldungsart, native_type, status);
+ var Batterie = func_Batterie(native_type);
+ //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;
+ ++Betroffen_FAULT_REPORTING;
+ text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen
+ messgae_tmp = common_name +' ('+id_name +')' + ' - ' +status_text +'. '+'\n';
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - ' +status_text +'.';
+ 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_FAULT_REPORTING;
+ if(debugging){
+ log('Geräte Nr. ' +i +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit);
+ }
+
+ });
+
+ // Schleife ist durchlaufen.
+ if(Gesamt_FAULT_REPORTING === 0){
+ if(debugging || log_manuell){
+ log('Keine Geräte gefunden mit dem Datenpunkt FAULT_REPORTING.');
+ }
+ }
+ else{
+ 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).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_FAULT_REPORTING +' Geräte mit dem Datenpunkt FAULT_REPORTING.');
+
+ }
+ }
+ }
+
+ 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 = func_translate_status(meldungsart, native_type, status);
+ var Batterie = func_Batterie(native_type);
+ //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_DEVICE_IN_BOOTLOADER
+ text.push(common_name +' ('+id_name +') --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text); // Zu Array hinzufügen
+ messgae_tmp = common_name +' ('+id_name +')' + ' - Gerät startet neu. '+'\n';
+ messgae_tmp1 = common_name +' ('+id_name +')' + ' - Gerät startet neu.';
+ 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_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);
+ }
+
+ });
+
+ // Schleife ist durchlaufen.
+ if(Gesamt_DEVICE_IN_BOOTLOADER === 0){
+ if(debugging || log_manuell){
+ log('Keine Geräte gefunden mit dem Datenpunkt DEVICE_IN_BOOTLOADER.');
+ }
+ }
+ 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).');
+ }
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log('Es gibt: '+Gesamt_DEVICE_IN_BOOTLOADER +' Geräte mit dem Datenpunkt DEVICE_IN_BOOTLOADER.');
+
+ }
+ }
+ }
+
+ //Verarbeitung aller Datenpunkte
+ if(Betroffen > 0 && native_type !=='HmIP-HEATING'){
+ if(debugging || log_manuell){
+ log('Es werden: '+Gesamt +' Datenpunkte überwacht. Derzeit: '+Betroffen +' Servicemeldung(en).');
+ }
+ if(Betroffen == 1){
+ if(debugging){
+ log('Es gibt eine Servicemeldung: ' + text.join(', '));
+ }
+ }
+ if(Betroffen >1){
+ if(logging){
+ log('Übersicht aller Servicemeldungen: '+ text.join(', '));
+ }
+ }
+ //Push verschicken
+ if(no_observation.search(id_name) == -1){
+ if(sendpush && !log_manuell){
+ prio = 0;
+ titel = 'Servicemeldung';
+ message = text.join(', ');
+ send_pushover(device, message, titel, prio);
+ }
+ if(sendtelegram && !log_manuell){
+ message = text.join(', ');
+ send_telegram(message, user_telegram);
+ }
+ if(sendmail && !log_manuell){
+ message = text.join(', ');
+ send_mail(message);
+ }
+ }
+
+ }
+ else{
+ if((debugging) || (onetime && log_manuell)){
+ log(+Gesamt +' Datenpunkte werden insgesamt vom Script ' +name +' (Version: '+Version +') überwacht. Instance: '+instance);
+
+
+ }
+
+ }
+
+
+}
+
+//Auslösen durch Zustandsänderung
+if(observation){
+ SelectorUNREACH.on(function(obj) {
+ Servicemeldung(obj);
+ });
+ SelectorSTICKY_UNREACH.on(function(obj) {
+ Servicemeldung(obj);
+ });
+ SelectorSABOTAGE.on(function(obj) {
+ Servicemeldung(obj);
+ });
+ SelectorERROR.on(function(obj) {
+ Servicemeldung(obj);
+ });
+ SelectorLOWBAT.on(function(obj) {
+ Servicemeldung(obj);
+ });
+ SelectorLOW_BAT.on(function(obj) {
+ Servicemeldung(obj);
+ });
+ SelectorERROR_NON_FLAT_POSITIONING.on(function(obj) {
+ Servicemeldung(obj);
+ });
+ SelectorFAULT_REPORTING.on(function(obj) {
+ Servicemeldung(obj);
+ });
+
+}
+
+
+if(onetime){
+ //beim Start
+ Servicemeldung();
+
+}