Seite 1 von 1

Howto - Servicemeldungen (per zPNP)

Verfasst: 27.07.2021, 07:27
von dtp
Nachfolgend möchte ich euch mein das zPNP nutzende Programm samt Skript zum Senden von Servicemeldungen vorstellen. Das Servicemeldungen-Skript basiert im Kern auf dem von @alchy erzeugten Allinclusive-Skript, wurde von mir aber in vielen Teilen modifiziert.
CCU PRG Servicemeldungen.png
CCU PRG Servicemeldungen.png (24.19 KiB) 3524 mal betrachtet
Im Grunde genommen muss man hier nichts weiter machen, um die entsprechenden Servicemeldungen als Push-Nachrichten über das zPNP zu erhalten. Manchmal möchte man jedoch bestimmte Meldungen ausschließen. So werden z.B. bei HMIP-Heizungsgruppen immer zwei Meldungen erzeugt, wenn es ein Problem mit einem Heizungs- oder Wandthermostat gibt. Eine Meldung für den Thermostaten und eine zweite für die Heizungsgruppe. Daher kann es sinnvoll sein, eine der beiden Meldungen zu unterdrücken. Im Skript besteht die Möglichkeit, bestimmte Geräte, Gerätetypen und/oder Meldungstypen auszuschließen. Dazu gibt es zwei lokale Variablen "exDevicesList" und "exDeviceTypesList".

"exDevicesList" wird in der Form "Gerätname|Meldungstyp\t Gerätename|Meldungstyp" befüllt, also z.B.

Code: Alles auswählen

string exDevicesList = "DG Dach Wettersensor|UNREACH\t
                        UG Büro Fenster|ERROR_SABOTAGE";
wenn man Kommunikationsstörungen des Wettersensors und Sabotage-Meldungen des Fensterkontakts unterdrücken möchte. Lässt man den Meldungstyp weg, so werden sämtliche Servicemeldungen eines Geräts unterdrückt.

"exDeviceTypesList" wird in der Form "Gerätetyp|Meldungstyp\t Gerätetyp|Meldungstyp" befüllt, also z.B.

Code: Alles auswählen

string exDeviceTypesList= "HM-Sec-Key|UNREACH\t
                        HMiP-HEATING";
wenn man von allen Fensterkontakten des Typs "HM-Sec-Key" keine Kommunikationsstörungs- und Sabotagemeldungen und von allen Heizungsgruppen gar keine Servicemeldungen mehr erhalten möchte. Auch hier gilt, dass der Meldetyp optional ist.

Weiterhin sendet das Skript eine Push-Nachricht nach Beseitigung der Servicemeldungen. Da das natürlich unsinnig wäre für die unterdrückten Meldungen, wurde eine Systemvariable "CCU SV Servicemeldungen Vorliste" eingeführt, die man unter der lokalen Variablen "svServicesListPrev" beliebig benennen kann. Diese Systemvariable wird automatisch angelegt, wenn man das Skript erstmalig aufruft. Sie enthält eine Liste aller vorherigen Servicemeldungen außer den ausgeschlossenen. Die Verwendung der Systemvariablen "CCU SV Servicemeldungen Vorliste" ist optional. Nur wenn sie definiert wurde, erhält man Benachrichtigungen über die Beseitigung aller Servicemeldungen.

Die Liste bietet zudem den Vorteil, einen Überblick über das eine Servicemeldung auslösenden Gerät sowie dessen Geräte- und Meldungstyp zu erhalten. Wenn man also bestimmte Meldungen unterdrücken möchte, braucht man die entsprechenden Daten hier nur zu kopieren und in die obigen lokalen Variablen einfügen.

Batteriebetriebene HM- und HMIP-Geräte

Nachfolgend eine Liste aller im Skript berücksichtigten HM- und HMIP-Batterie-Devices, deren LowBat-Zustand erfasst wird:

Code: Alles auswählen

block9   = "HM-LC-SW1-BA-PCB|HM-LC-SW4-PCB|HM-LC-SW4-WM|HM-MOD-EM-8|HM-MOD-RE-8|HM-OU-CM-PCB|HM-SEN-RD-O|";
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|";
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-DLS|HMIP-FCI1|";
lr14x2   = "HM-OU-CFM-TW|HM-SEC-SIR-WM|";
lr14x3   = "HMIP-MP3P|";
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|HMIP-KRCK|";
lr3x2    = "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-TC-IT-WM-W-EU|HM-WDS30-T-O|HM-WDS30-OT2-SM|HMIP-STH|HMIP-STHD|HMIP-WRC2|HMIP-WRC6|HMIP-WT|HMIP-WTH|HMIP-WTH-2|HMIP-SAM|HMIP-SWDO-I|HMIP-SMI55|HMIP-SMI55-2|HMIP-SCI|HMIP-WRCD|HMIP-DSD-PCB|HMIP-WRCR|HMIP-STV|HMIP-SWDM|HMIP-WKP|HMIP-FCI6|";
lr3x3    = "HM-PB-4DIS-WM|HM-PB-4DIS-WM-2|HM-RC-DIS-H-X-EU|HM-SEN-LI-O|";
lr3x3a   = "HM-RC-19|HM-RC-19-B|HM-RC-12|HM-RC-12-B|HM-RC-12-W|";
lr44x2   = "HM-SEC-RHS|HM-SEC-SC|HM-SEC-SC2|HM-SEC-SC-2|HMIP-WRCC2|";
lr6x2    = "HM-CC-RT-DN|HM-CC-VD|HM-CC-TC|HM-DIS-TD-T|HM-SEC-WDS|HM-SEC-WDS-2|HM-WDS10-TH-O|HM-WDS30-OT2-SM-2|HM-WDS40-TH-I|HM-WDS40-TH-I-2|HB-UW-SEN-THPL-I|HMIP-ETRV|HMIP-ETRV-2|HMIP-ETRV-C|HMIP-ETRV-C-2|HMIP-SLO|HMIP-SMI|HMIP-SMO|HMIP-SMO-2|HMIP-SMO-A|HMIP-SMO-A-2|HMIP-SPI|HMIP-STHD|HMIP-STHO|HMIP-STHO-A|HMIP-SPDR|HMIP-SWD|ETRV-HMIP-B-UK|HMIP-STE2-PCB|HMIP-WGC|HMIP-STI|";
lr6x3    = "HM-SEC-MDIR|HM-SEC-MDIR-2|HM-SEC-MDIR-3|HM-SEC-KEY|HM-SEC-KEY-S|HM-SEC-KEY-O|HM-SEC-SD|HM-SEN-MDIR|HM-SEN-MDIR-O|HM-SEN-MDIR-O-2|HM-SEN-WA-OD|HM-WDS100-C6-O|HM-WDS100-C6-O-2|HMIP-ASIR|HMIP-ASIR-B1|HMIP-ASIR-O|HMIP-ASIR-2|HMIP-SWO-B|HMIP-SWO-PL|HMIP-DLD|";
lr6x4    = "HM-CCU-1|HM-ES-TX-WM|HM-WDC7000|";
fixed    = "HM-SEC-SD-2|HMIP-SWSD|HMIP-MIO16-PCB|HMIP-PCBS|HMIP-PCBS2|HMIP-PCBS-BAT|HMIP-MOD-RC8|HMIP-MOD-OC8|HMIP-USBSM|HMIP-FWI|HMIP-SFD|ELV-SH-WSC|";
recharge = "HM-SEC-WIN|HM-SEC-SFA-SM|";


Wie man sehen kann, werden hier im Unterschied zu der von eQ-3 benutzten Nomenklatur nur Großbuchstaben verwendet. Dies erleichtert den Umgang mit den Gerätetypen, weil eQ-3 leider nicht immer einheitlich mit Groß- und Kleinbuchstaben arbeitet. Unter "exDeviceTypesList" könnt ihr wahlweise Klein- oder Großbuchstaben oder eine gemischen Schreibweise für die Geräte- und die Meldungstpyen einsetzen. Diese werden innerhalb des Skript immer in Großbuchstaben umgewandelt.

ACHTUNG: Die Gerätnamen unter "exDevicesList" sind weiterhin "Case Sensitive"!

Falls noch jemand ein Gerät findet, was nicht in der Liste ist, immer her damit!
Servicemeldungen325.hsc
(19.8 KiB) 133-mal heruntergeladen
Bis dann,

Thorsten

Re: Howto - Servicemeldungen (per zPNP)

Verfasst: 27.07.2021, 07:46
von dtp
Anzeige der Servicemeldungen in ioBroker vis

Die Servicemeldungen lassen sich übrigens recht einfach in vis anzeigen. Das sieht dann z.B. für eine Sabotagemeldung und nach ihrem Entfernen so aus:
vis_Servicemeldungen.gif
Dazu bedarf es lediglich eines kleinen Javaskripts.

Code: Alles auswählen

createState('vis.Servicemeldungen', 0, {
  type: 'string',
  read: true,
  write: true,
  desc: 'vis Servicemeldungen',
  def: ''
});

on("hm-rega.0.2093", function(obj){
  var message = obj.state.val;
  if(message.search("Servicemeldung") > 0){
    message = message.replace(/%0A/g, '<br>');
    setState("vis.Servicemeldungen", message);
    setState("vis.0.control.command", '{"instance": "*", "data": "08CCU", "command": "changeView"}');
  } 
});
Mit "vis.0.control.command" kann man automatisch auf den entsprechenden View (bei mir "08CCU") wechseln. Wer das nicht braucht, der löscht die Zeile einfach oder kommentiert sie aus. Der Datenpunkt "2093" ist die ISE_ID für die auf meiner CCU3 erstellte Systemvariable "CCU SV Push Text". Das Skript fragt bei Änderung dieser Systemvariablen den String "Servicemeldung" ab und zeigt im vis-Widget "basic - String (unescaped)" über das Objekt "javascript.0.vis.Servicemeldungen" alles an, was diesen String enthält.

Soll die Visualisierung z.B. drei Minutan nach einer neuen Servicemeldung und 30 Sekunden nach dem Verschwinden der letzten Servicemeldung automatisch wieder zur Startseite zurückkehren, dann einfach das nachfolgende Javaskript erstellten.

Code: Alles auswählen

var timer1 = null, timer2 = null;

on("vis.0.control.data", function(obj){
  if(obj.state.val === "iPad/08CCU"){
    if(getState("hm-rega.0.maintenance").val !== 0){
      if(timer1) clearTimeout(timer1);
      timer1 = setTimeout(function(){
        setState("vis.0.control.command", '{"instance": "*", "data": "01Haus", "command": "changeView"}');
      }, 3 * 60000); // autoamtische Rückkehr auf Homeview nach 3 Minuten
    }
    else{
      if(timer2) clearTimeout(timer2);
      timer2 = setTimeout(function(){
        setState("vis.0.control.command", '{"instance": "*", "data": "01Haus", "command": "changeView"}');
      }, 30 * 1000); // autoamtische Rückkehr auf Homeview nach 30 Sekunden
    }
  }
});
Der View-Name für die Servicemeldungen (im obigen Beispiel "iPad/08CCU") muss dann noch entpsrechend der Anzeige im Datenpunkt "vis.0.control.data" geändert werden. Zudem noch den Startview-Namen (im obigen Beispiel "01Haus") anpassen. Fertig.

Re: Howto - Servicemeldungen (per zPNP)

Verfasst: 01.06.2022, 10:11
von dtp
Neue Version 3.2.4 mit folgenden zusätzlich aufgenommenen HMIP-Geräten:

HmIP-DLS, HmIP-WKP, HmIP-SWDM, HmIP-SMO-2, HmIP-SMO-A-2, HmIP-SMI55-2, HmIP-FCI1, HmIP-FCI6, HmIP-SFD, HmIP-STI, HmIP-FWI, ELV-SH-WSC

Re: Howto - Servicemeldungen (per zPNP)

Verfasst: 22.11.2022, 10:56
von stan23
dtp hat geschrieben:
01.06.2022, 10:11
Neue Version 3.2.4
Hi Thorsten,

in Zeile 89 ist ein Fehler in der Variablenbezeichnung:
numServices = dom.GetObject("$src$").Value(); numSercicesPrev = dom.GetObject("$src$").LastValue();
Damit funktioniert die Berechnung des valueDiff nicht.

Re: Howto - Servicemeldungen (per zPNP)

Verfasst: 30.11.2022, 19:38
von dtp
Danke. Hab's korrigiert in Version 3.2.5.

Re: Howto - Servicemeldungen (per zPNP)

Verfasst: 22.06.2023, 13:39
von Drago Museveni
Hallo Torsten,
ich kriege leider keine Nachrichten via zPNP über Servicemeldungen. zPNP ist sauber eingerichtet und funktioniert, ich nutze es für Tür- und Fensteröffnungen. Woran kann es liegen? Ich habe das Programm genau wie im Screenshot angegeben eingerichtet und das aktuelle Skript rein kopiert - damit sollte ich doch "good to go" sein?
Fragende Grüße

Re: Howto - Servicemeldungen (per zPNP)

Verfasst: 05.07.2023, 14:32
von dtp
Sorry, dass ich das jetzt erst sehe. Bin aktuell nicht so häufig hier. Vielleicht kannst du mir mal einen Screenshot deines Programms und das von dir verwendete Skript per PN zusenden. Dann sollte sich das klären lassen.