Servicemeldungen SV v2.30 (stable)

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
blackhole
Beiträge: 1341
Registriert: 21.07.2015, 14:03

Servicemeldungen SV v2.30 (stable)

Beitrag von blackhole » 28.06.2016, 15:04

Hallo zusammen,


ich stelle hiermit eine stark reduzierte, modifizierte "Light-Version" von alchys "Servicemeldungen *allinclusive*" unter dem Namen "Servicemeldungen SV" ("Stripped Version") als Bereicherung zur freien Verfügung.


Motivation

Da ich in meinen WebUI-Programmen/Skripten die "Hauptfunktion" und "Meldungen verschicken" strikt trenne ("Meldungsprogramme" reagieren immer auf eine Systemvariable, die das "Hauptprogramm" befüllt), habe ich das Skript "Servicemeldungen *allinclusive*" meiner Systematik entsprechend modifiziert.

Es wurden primär die Meldungsvarianten (Push, Mail) entfernt, ein Debug-Modus hinzugefügt, mein "Coding-Style" (Einrückungen, Variablenbezeichnungen etc.) angewandt und kleinere textliche Veränderungen vorgenommen. Weiterhin bleibt der Inhalt der angegebenen Systemvariable bis zum Auftreten einer neuen Meldung bewusst erhalten (auch bei automatischer Bestätigung der Servicemeldung). Hierdurch ergibt sich ein anderer Ansatz: Ca. 50% des Originalcodes sind entfernt worden, es ist kein "all inclusive Skript" mehr. Eine Halbierung der benötigten Variablen, aufgeräumter Code und entfernte Doppeldeklarationen sind noch ein paar Nebeneffekte der Reduzierung.

Servicemeldungen SV kann für Anwender, die ebenfalls "Hauptprogramm" und "Meldungen verschicken" separiert haben, interessant sein, aber auch für Benutzer, die lediglich das Quittieren von Meldungen und/oder die Systemvariable von "Servicemeldungen *allinclusive*" benutzt haben.

Grund für die Veröffentlichung ist der (OSS-)Gedanke, dass andere von meiner Arbeit profitieren können, wie ich von der Arbeit Dritter profitiert habe.


Skript

Code: Alles auswählen

! Servicemeldungen SV v2.30
!------------------------------------------------------------------------------------------------
! Servicemeldungen werden ausgelesen und in eine Systemvariable geschrieben. Kurzanleitung:
! Neues Programm in der CCU wie folgt erstellen. WENN Systemzustand: Servicemeldungen im
! Wertebereich größer als 0 bei Aktualisierung auslösen, DANN mit einer Sekunde Verzögerung
! "Skript" auswählen, das Skript einfügen, Voreinstellungen vornehmen und mit "OK" bestätigen.
!------------------------------------------------------------------------------------------------
! Servicemeldungen bei Kommunikationsstörungen "war gestört" wird durch das Script bestätigt
! (voreinstellbar). Im Falle einer Batterieleermeldung, wird der Gerätename, der Batterietyp
! sowie die Anzahl der Batterien, sonst bei einer anderen Servicemeldung wird der Gerätename
! und der Fehler (übersetzt) in Variable gespeichert. Bitte noch "unbekannte" Geräte mitteilen.
!------------------------------------------------------------------------------------------------
! Servicemeldungen SV wurde modifiziert von blackhole. Das Skript basiert auf:
! Servicemeldungen *allinclusive* von Alchy
!------------------------------------------------------------------------------------------------

!------------------------------------------------------------------------------------------------
! Voreinstellungen hier vornehmen
!------------------------------------------------------------------------------------------------

!Nötige CCU-Systemvariable (Zeichenkette)
!Die in der CCU anzulegende Systemvariable steht nachfolgend in Anführungszeichen.
var sysvarname = "Name der Systemvariable";

!Servicemeldungen "Kommunikation war gestört" automatisch bestätigen?
!Gültige Werte sind "ja" und "nein" (Default: ja)
var autoconfirm = "ja";

!Trennungszeichen zwischen Meldungen
!Gültige Werte sind beliebige Zeichen. Zeilenumbruch mit "\n". (Default: " ")
string divider = " ";

!HM-Geräte, deren Systemmeldungen ignoriert werden sollen
!Gültige Werte sind HM-Seriennummern (Default: XEQ012345678 YEQ012345678 ZEQ012345678)
var blockdevices = "XEQ012345678 YEQ012345678 ZEQ012345678";

!Debug-Modus ein-/ausschalten
!Ausgabe nur im Bereich "Skript testen" der CCU, Servicemeldungen werden nicht bestätigt.
!Gültige Werte sind "ein" und "aus" (Default: aus)
string debug = "aus";

!--------------------------------------------------------------------------------------------------
! Ab hier muss man nichts mehr beachten
!--------------------------------------------------------------------------------------------------

string cr2016 = "HM-RC-4,HM-RC-4-B,HM-RC-Sec3,HM-RC-Sec3-B,HM-RC-P1,HM-RC-Key3,HM-RC-Key3-B,ZEL_STG_RM_HS_4";
string cr2032 = "HM-SCI-3-FM,HM-PB-2-WM,HM-PB-4-WM,HM-SwI-3-FM,HM-PBI-4-FM,HM-Sec-TiS";
string lr14x2 = "HM-Sec-Sir-WM,HM-OU-CFM-TW";
string lr44x2 = "HM-Sec-SC,HM-Sec-SC2,HM-Sec-SC-2,HM-Sec-RHS";
string 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-TC-IT-WM-W-EU,HM-WDS40-TH-I,HM-WDS40-TH-I-2,HM-WDS10-TH-O,HmIP-SMI,HMIP-eTRV,HmIP-eTRV-2,HM-WDS30-OT2-SM-2,HMIP-eTRV,HmIP-SMI,HmIP-SMO,HmIP-SMO-A,HmIP-SPI,HmIP-STHD,HmIP-SPDR,HmIP-SWD";
string lr6x3 = "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,HmIP-ASIR,HmIP-SWO-B";
string lr6x4 = "HM-ES-TX-WM,HM-CCU-1,HM-WDC7000";
string lr3x1 = "HM-Sec-SCo,HM-RC-4-2,HM-RC-4-3,HM-RC-Key4-2,HM-RC-Key4-3,HM-RC-Sec4-2,HM-Sec-RHS-2,HM-RC-Sec4-3,HmIP-KRCA,HmIP-KRC4,HMIP-SWDO,HmIP-RC8,HmIP-SRH";
string lr3x2 = "HM-Dis-EP-WM55,HM-PB-6-WM55,HM-Sen-MDIR-WM55,HM-PBI-2-FM,HM-RC-8,HM-Sen-DB-PCB,HB-UW-Sen-THPL-O,HM-Sen-EP,HM-WDS30-T-O,HM-WDS30-OT2-SM,HM-TC-IT-WM-W-EU,HM-Dis-WM55,HM-PB-2-WM55,HM-PB-2-WM55-2,HM-Sen-MDIR-SM,HMIP-WTH,HMIP-WRC2,HmIP-STH,HMIP-WRC2,HMIP-WRC6,HMIP-WTH,HMIP-WTH-2,HmIP-SAM,HmIP-SLO";
string lr3x3 = "HM-PB-4Dis-WM,HM-PB-4Dis-WM-2,HM-Sen-LI-O,HM-RC-Dis-H-x-EU";
string lr3x3a = "HM-RC-19,HM-RC-19-B,HM-RC-12,HM-RC-12-B,HM-RC-12-W";
string 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";
string fixed = "HM-Sec-SD-2,HMIP-SWSD";
string recharge = "HM-Sec-Win,HM-Sec-SFA-SM";

string scurlist = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvarname).Value();
string index = ""; string slist = "";

foreach(index, dom.GetObject(ID_SERVICES).EnumIDs()) {
object otmp = dom.GetObject(index);
   if (otmp) {
      if(otmp.IsTypeOf(OT_ALARMDP) && (otmp.AlState() == asOncoming)) {
         boolean collect = true;
         object trigdp = dom.GetObject(otmp.AlTriggerDP());
         object och = dom.GetObject((trigdp.Channel()));
         object odev = dom.GetObject((och.Device()));
         var ival = trigdp.Value();
         var sftime = otmp.AlOccurrenceTime().ToString("%d.%m.%y %H:%M Uhr");
         var sltime = otmp.LastTriggerTime().ToString("%d.%m.%y %H:%M Uhr");
         var sdesc = trigdp.HssType();
         var sserial = odev.Address();

         if ((sdesc == "STICKY_UNREACH") && (autoconfirm == "ja") && (debug == "aus")) { otmp.AlReceipt(); }
         if (blockdevices.Find(sserial) < 0) {
            if (sdesc == "CONFIG_PENDING") { sdesc = "Konfigurationsdaten stehen zur Übertragung an"; }
            if ((sdesc == "LOWBAT") || (sdesc == "LOW_BAT")) { sdesc = "Batteriestand niedrig"; }
            if (sdesc == "STICKY_UNREACH") { sdesc = "Kommunikation war gestört"; }
            if (sdesc == "UNREACH") { sdesc = "Kommunikation zur Zeit gestört"; }
            if (sdesc == "DEVICE_IN_BOOTLOADER"){ sdesc = "Gerät startet neu"; }
            if (sdesc == "UPDATE_PENDING") { sdesc = "Update verfügbar"; }
            if (sdesc == "U_SOURCE_FAIL") { sdesc = "Netzteil ausgefallen"; }
            if (sdesc == "USBH_POWERFAIL") { sdesc = "USB-Host deaktiviert"; }
            if ((sdesc == "ERROR_SABOTAGE") || (sdesc == "SABOTAGE")) { sdesc = "Sabotage"; }
            if (sdesc == "STICKY_SABOTAGE") { sdesc = "Sabotage war ausgelöst"; }
            if (sdesc == "ERROR_REDUCED") { sdesc = "Temperatur kritisch (Lastabsenkung)"; }
            if (sdesc == "ERROR_NON_FLAT_POSITIONING") { sdesc = "Fehler Lageerkennung"; }
            if (sdesc == "ERROR") {
               if((odev.HssType()=="HM-Sec-RHS") || (odev.HssType()=="HM-Sec-SC") || (odev.HssType()=="HM-Sec-SC-2") || (odev.HssType()=="HM-Sec-SCo") || (odev.HssType()=="HM-Sec-MD") || (odev.HssType()=="HM-Sec-MDIR") || (odev.HssType()=="HM-Sec-MDIR-2") || (odev.HssType()=="HM-Sec-Sir-WM")) {
                  if (ival == 7){ sdesc = "Sabotage."; }
               }
               if ((odev.HssType()=="HM-Sec-Key") || (odev.HssType()=="HM-Sec-Key-S") || (odev.HssType()=="HM-Sec-Key-O")) {
                  if (ival == 1) { sdesc = "Einkuppeln fehlgeschlagen"; }
                  if (ival == 2) { sdesc = "Motorlauf abgebrochen"; }
               }
               if (odev.HssType()=="HM-CC-VD") {
                  if (ival == 1){ sdesc = "Ventil Antrieb blockiert"; }
                  if (ival == 2){ sdesc = "Ventil nicht montiert"; }
                  if (ival == 3){ sdesc = "Stellbereich zu klein"; }
                  if (ival == 4){ sdesc = "Batteriestand niedrig"; }
               }
            }
            if (sdesc == "FAULT_REPORTING") {
               if (odev.HssType()=="HM-CC-RT-DN") {
                  if (ival == 1) { sdesc = "Ventil blockiert"; }
                  if (ival == 2) { sdesc = "Einstellbereich Ventil zu gross"; }
                  if (ival == 3) { sdesc = "Einstellbereich Ventil zu klein"; }
                  if (ival == 4) { sdesc = "Kommunikationsfehler"; }
                  if (ival == 6) { sdesc = "Batteriestand niedrig"; }
                  if (ival == 7) { sdesc = "Fehlstellung Ventil"; }
               }
            }
            if (sdesc == "Batteriestand niedrig") {
               string batlink = "unbekannt";
               foreach (index, cr2016.Split(",")) { if (index == odev.HssType()) { batlink = "1x leere CR2016"; } }
               foreach (index, cr2032.Split(",")) { if (index == odev.HssType()) { batlink = "1x leere CR2032"; } }
               foreach (index, lr14x2.Split(",")) { if (index == odev.HssType()) { batlink = "2x leere LR14/C"; } }
               foreach (index, lr44x2.Split(",")) { if (index == odev.HssType()) { batlink = "2x leere LR44/AG13"; } }
               foreach (index, lr6x2.Split(",")) { if (index == odev.HssType()) { batlink = "2x leere LR06/AA"; } }
               foreach (index, lr6x3.Split(",")) { if (index == odev.HssType()) { batlink = "3x leere LR06/AA"; } }
               foreach (index, lr6x4.Split(",")) { if (index == odev.HssType()) { batlink = "4x leere LR06/AA"; } }
               foreach (index, lr3x1.Split(",")) { if (index == odev.HssType()) { batlink = "1x leere LR03/AAA"; } }
               foreach (index, lr3x2.Split(",")) { if (index == odev.HssType()) { batlink = "2x leere LR03/AAA"; } }
               foreach (index, lr3x3.Split(",")) { if (index == odev.HssType()) { batlink = "3x leere LR03/AAA"; } }
               foreach (index, lr3x3a.Split(",")) { if (index == odev.HssType()) { batlink = "3x leere LR03/AAA Akkus"; } }
               foreach (index, block9.Split(",")) { if (index == odev.HssType()) { batlink = "1x leerer 6LR61/9V-Block"; } }
               foreach (index, fixed.Split(",")) { if (index == odev.HssType()) { batlink = "Fest eingebaute Batterie leer"; } }
               foreach (index, recharge.Split(",")) { if (index == odev.HssType()) { batlink = "Akku aufladen"; } }
               slist = slist # odev.Name() # ": " # batlink # " seit: " # sftime # divider; }
            else {
               slist = slist # odev.Name() # ": " # sdesc # " seit: " # sftime  # divider;
            }
         }
      }
   }
}
if ((debug == "aus") && (slist != "") && (slist != scurlist)) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvarname).State(slist); } else { WriteLine(slist); }
Changelog
  • v2.06: Erstes öffentliches Release der reduzierten Version von alchys "Servicemeldungen *allinclusive*"
  • v2.07: Weitere Reduzierung des Skriptes: Wegfall unnötiger Variablen, Bugfix: "Alte/Neue Servicemeldung"
  • v2.08: Weitere Reduzierung des Skriptes: U.a. Wegoptimierung einer foreach-Schleife (Danke an dtp)
  • v2.09: Aufnahme von HM-Dis-EP-WM55 (siehe hier) und Ablösen von Tabulatoren durch Kommata
  • v2.10: Typo in der Beschreibung der Voreinstellungen korrigiert (Danke an alchy)
  • v2.11: Kleinere textliche Änderungen, Default für automatische Bestätigung auf "ja" geändert
  • v2.12: Erkennung von Sabotagemeldungen der Innensirene HM-Sec-Sir-WM (Danke an dtp)
  • v2.13: Erkennung der Lastabsenkung bei kritischer Temperatur und Aufnahme von HM-RC-Dis-H-x-EU
  • v2.14: Verwendung der Methode Get() statt globales Suchen nach Namen (Danke an BadenPower)
  • v2.15: Erweiterung auf alle zurzeit verfügbaren HM- und HMIP-Komponenten mit Batteriebetrieb (Danke an dtp)
  • v2.16: Fehlerbehebung bezüglich AlDestMapDP()-Problematik (Danke an alchy und alle Beteiligten)
  • v2.20: Anpassungen für neue ReGaHss, Code-Angleichung und -Reduzierung, verbesserte Reaktion auf Servicemeldungen
  • v2.21: Der Inhalt der Systemvariable (letzte Servicemeldung) bleibt jetzt wieder erhalten
  • v2.22: Aktualisierung der Systemvariable bei Inhaltsgleichheit unterbunden (Danke an cyclopz)
  • v2.23: Geräte aktualisiert (Danke an alchy und alle beteiligten Mitglieder)
  • v2.24: LastTimestamp() ersetzt durch AlOccurrenceTime()/LastTriggerTime() (Danke an klana und alchy)
  • v2.25: Ursache von Fehlermeldungen behoben, Typo in Systemvariable korrigiert
  • v2.26: LOWBAT vs. LOW_BAT bei HMIP-Geräten (Danke an alchy für den Fix und an Preisselbeere für's Melden)
  • v2.27: SABOTAGE vs. ERROR_SABOTAGE bei HMIP-Geräten (Danke an Stanni und JRiemann)
  • v2.28: Geräte aktualisiert, Aufnahme von HmIP-SWO-B und HmIP-eTRV-2 (Danke an tinram)
  • v2.29: Geräte aktualisiert, Aufnahme von HmIP-SAM und HmIP-SPDR (Danke an Stanni)
  • v2.30: Geräte aktualisiert, Aufnahme von HmIP-SWD und HmIP-SLO, neue Servicemeldung (Danke an JRiemann und alchy)
Bekannte Skriptvarianten
Zuletzt geändert von blackhole am 09.07.2018, 08:38, insgesamt 97-mal geändert.
 
Anwesenheit BT v2 (Raspbian>CCU3) | CCU-Protect v2 (CCU3) | Mini SV-Datalogger v2 (CCU3) | Servicemeldungen SV v2 (CCU3) | BLGSH (Y)

And there was much rejoicing.
 


Benutzeravatar
blackhole
Beiträge: 1341
Registriert: 21.07.2015, 14:03

Re: Servicemeldungen SV v2.06

Beitrag von blackhole » 28.06.2016, 19:08

dtp hat geschrieben:*räusper*
Versuch's mal hiermit. :mrgreen:
 
Anwesenheit BT v2 (Raspbian>CCU3) | CCU-Protect v2 (CCU3) | Mini SV-Datalogger v2 (CCU3) | Servicemeldungen SV v2 (CCU3) | BLGSH (Y)

And there was much rejoicing.
 

Benutzeravatar
blackhole
Beiträge: 1341
Registriert: 21.07.2015, 14:03

Re: Servicemeldungen SV v2.07

Beitrag von blackhole » 30.06.2016, 07:51

Servicemeldungen SV v2.07 ist veröffentlicht (Changelog)
  • Weitere Reduzierung des Skriptes: Weiterer Wegfall unnötiger Variablen und Straffung des Codes
  • Bugfix der "Alte/Neue Servicemeldung"-Funktion: "Alte Servicemeldung" wurde nicht geschrieben
 
Anwesenheit BT v2 (Raspbian>CCU3) | CCU-Protect v2 (CCU3) | Mini SV-Datalogger v2 (CCU3) | Servicemeldungen SV v2 (CCU3) | BLGSH (Y)

And there was much rejoicing.
 

dtp
Beiträge: 5155
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

Re: Servicemeldungen SV v2.07

Beitrag von dtp » 30.06.2016, 09:38

Kleiner Tipp: Du könntest Deinen Code ggf. noch weiter optimieren, indem Du die foreach-Schleife für die automatische Bestätigung der temporären Kommunikationsstörungsmeldungen in die nachfolgende foreach-Schleife integrierst. Habe ich auch so gemacht und funktioniert eigentlich soweit sehr zuverlässig.

Gruß,

Thorsten

Benutzeravatar
blackhole
Beiträge: 1341
Registriert: 21.07.2015, 14:03

Re: Servicemeldungen SV v2.07

Beitrag von blackhole » 30.06.2016, 10:00

Danke, das schaue ich mir gerne einmal an.

Edit: Oh ja, da lässt sich einiges wegoptimieren.
 
Anwesenheit BT v2 (Raspbian>CCU3) | CCU-Protect v2 (CCU3) | Mini SV-Datalogger v2 (CCU3) | Servicemeldungen SV v2 (CCU3) | BLGSH (Y)

And there was much rejoicing.
 

Benutzeravatar
blackhole
Beiträge: 1341
Registriert: 21.07.2015, 14:03

Re: Servicemeldungen SV v2.07

Beitrag von blackhole » 30.06.2016, 11:26

Ich habe auf die Schnelle einmal "trocken" und ohne zu testen ein wenig anders aber doch sehr ähnlich reduziert:

Code: Alles auswählen

!------------------------------------------------------------------------------------------------
! Servicemeldungen-SV v2.08 ALPHA (NYR)
! Änderungen vorerst verworfen, andere Lösung folgt
!------------------------------------------------------------------------------------------------
Das ist noch völlig ungetestet, könnte klappen, muss aber nicht.
Das Testen von ID_SERVICES spare ich wahrscheinlich komplett aus -weiß ich aber noch nicht genau- zurzeit ist es jedenfalls so.
Ich werde das dann diese Tage, nach ausführlichen Tests, so (oder so ähnlich) als v2.08 releasen.

Danke nochmals für den Tipp.

P.S.:
Mir ist bei deinen drei Skripten jeweils ein "wechseln1" (vs. "wechseln!") aufgefallen.
Zuletzt geändert von blackhole am 30.06.2016, 13:22, insgesamt 1-mal geändert.
 
Anwesenheit BT v2 (Raspbian>CCU3) | CCU-Protect v2 (CCU3) | Mini SV-Datalogger v2 (CCU3) | Servicemeldungen SV v2 (CCU3) | BLGSH (Y)

And there was much rejoicing.
 

dtp
Beiträge: 5155
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

Re: Servicemeldungen SV v2.07

Beitrag von dtp » 30.06.2016, 11:41

blackhole hat geschrieben: Mir ist bei deinen drei Skripten jeweils ein "wechseln1" (vs. "wechseln!") aufgefallen.
Danke. Hab's geändert.

Gruß,

Thorsten

Benutzeravatar
blackhole
Beiträge: 1341
Registriert: 21.07.2015, 14:03

Re: Servicemeldungen SV v2.07

Beitrag von blackhole » 30.06.2016, 13:20

Wenn man mit Alte-/Neue Servicemeldung und "Autoconfirm" arbeitet, läuft das nicht ganz so rund.
Ich werde einmal sehen, ob ich das ein wenig anders machen werde.
 
Anwesenheit BT v2 (Raspbian>CCU3) | CCU-Protect v2 (CCU3) | Mini SV-Datalogger v2 (CCU3) | Servicemeldungen SV v2 (CCU3) | BLGSH (Y)

And there was much rejoicing.
 

Benutzeravatar
blackhole
Beiträge: 1341
Registriert: 21.07.2015, 14:03

Re: Servicemeldungen SV v2.08

Beitrag von blackhole » 30.06.2016, 16:22

Servicemeldungen SV v2.08 ist veröffentlicht (Changelog)
  • Weitere Reduzierung des Skriptes, u.a. Wegoptimierung einer foreach-Schleife (Danke an dtp)
  • Trennzeichen und/oder Umbruch ist jetzt voreinstellbar (Sysvar auf Startseite wird möglich)
  • Voreinstellungen reduziert (Zeiten sind wichtig) und nach Priorität umsortiert
  • Text "Alte-/Neue Servicemeldung" wegoptimiert (ja, ja, ja)
  • Verschiedene kleinere Optimierungen
Die Tests waren vielversprechend. :mrgreen:
 
Anwesenheit BT v2 (Raspbian>CCU3) | CCU-Protect v2 (CCU3) | Mini SV-Datalogger v2 (CCU3) | Servicemeldungen SV v2 (CCU3) | BLGSH (Y)

And there was much rejoicing.
 

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“