Servicemeldungen *allinclusive* Script

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

Moderator: Co-Administratoren

alchy
Beiträge: 7164
Registriert: 24.02.2011, 02:34

Servicemeldungen *allinclusive* Script

Beitrag von alchy » 08.04.2015, 10:12

:!: :!: :!: :!: WICHTIG :!: :!: :!: :!:
  • Ein manuelles Auslösen des Programmes erzeugt KEINE Meldung / Reaktion.
  • Eine Ausführung unter Script testen oder im ScriptExecuter erzeugt KEINE Meldung / Reaktion !!!Aktiv wird das Script erst wirklich, wenn sich die Anzahl der Servicemeldungen das nächste Mal erhöht.
  • Bei Benutzung der Systemvariablen als Speicherort, darf dies NICHT über die Favoriten der Startseite zugeordnet werden und ein protokollieren ist auch nicht ratsam


Im Fehlerfall erwarte ich gar nichts mehr
Das >> Fehlerprotokoll << sowie den Nachweis der korrekten Installation in Form von >>Bildschirmcopys<< könnten aber trotzdem hilfreich sein.

Neu in 1.98
  • Batterietypen - HmIP-SWD & HmIP-SLO hinzugefügt, danke an JRiemann
    Fehler Lageerkennung beim SWD hinzugefügt - testweise

Neu in 1.97
  • Batterietypen hinzugefügt - HmIP-SWO-B & HmIP-eTRV-2 danke tinram &HmIP-SAM & HmIP-SPDR danke blackhole
  • SABOTAGE hinzugefügt
  • Zeilenvorschub ausgebaut
Neu in 1.96
  • Auswahlparameter im Setup, ob CR zwischen den einzelnen Meldungen.
Neu in 1.9
  • Fix, wenn alle Servicemeldungen von geblockten Geräten sind, wurde trotzdem Nachricht verschickt.
    Danke an rolu2 für die Meldung
Neu in 1.8
  • da immer mehr die ReGaHss Betaversion für CCU2 verwenden mussten Anpassungen am Script durchgeführt werden
  • die von dtp gemeldeten neuen Batterietypen habe ich noch integriert - danke dafür
  • da ich nicht zu Hause bin ist der Kram aber weitgehend ungetestet.
NEU in 1.6
- Anpassungen im Script durchgeführt, da einige Geräte keine Meldungen verschickt haben. Danke Tibin das du so hartnäckig warst
- Übersetzungen entfernt, da Freizeichen kein Problem mehr bei Pushdiensten darstellen (zumindest getestet bei Pushover/Telegram/)
- Fehlerfix Danke Frozn
- Batteriezuweisung HM-RC-Sec4-3, Danke Falke69


NEU in 1.5
- Telegram Messenger nun doch mit an Bord

NEU in 1.4
Fehlerroutinen integriert - wer keine Probleme hat, braucht die neue Version auch nicht zu laden :mrgreen:
HM-RC-Dis-H-x-EU mit 3 LR3 Batterien integriert
HM-Dis-EP-WM55 integriert

NEU in 1.2
- Eintrag ins Fehlerprotokoll bei Start und Ende des Scriptes hinzugefügt.

Neu in 1.0
- die Möglichkeit in Systemvariable zu speichern ist wieder enthalten auf Wunsch
- bissel am code geöändert um ^^ das auch so zu machen, das es auch richtig geht
- die Systemvariable wird nun auch aktualisiert, wenn sich eine Servicemeldung "auflöst" eine Mail oder sonstiges wird dabei aber nicht versandt!

Neu in 0.99
- Man kann eine Seriennummer eingeben, das Gerät wird dann aus dem Script ausgesperrt
- Batteriezuweisungen hinzugefügt
- Speichern in Systemvariable ersatzlos entfernt :oops:

Neu in 0.97
- impementieren der PRIO Funktion lt. Vorschlag von dtp Dankeschön :!:
Damit gewinnt nun nicht die letzte Priorität sondern die höchste Priorität der anstehenden Servicemeldungen

Neu in 0.96
- nur fix, die großen Fernbedienungen haben Akkus und die HM-RC-19-B war gar nicht enthalten. Danke an den User Brati
Neu in 0.95
- wahlweise kann jetzt die Zeit der Servicemeldung mitgeschickt werden
- Pushover: Parameter Userdevice hinzugefügt, um die Nachrichten Geräteweise zu separieren
- Pushover: Parameter HTML hinzugefügt, habe im Script noch keine Anwendung dessen, man könnte aber :mrgreen:

NEU in V0.83
- HM-Sec-SCo mit bei den Sonderfehlern Sabotage integriert - Danke an herbi für den Hinweis
Ich habe bei weitem nicht alle möglichen Geräte und bin für sachdienliche Hinweise immer dankbar.
V0.81
- Batterieausgabe jetzt mit Anzahl der leeren Batterien
- Umlaute fix - jetzt auch bei prowl/pushover
...



Da ich langsam Probleme kriege mit der Koordinierung meiner Sachen, möchte ich nun hier
auf die Schnelle unter Tipps und Tricks einen Thread eröffnen. Ich werde hier dann eventuelle
neue Versionen direkt in dem Post editieren.

Angefangen hatte alles mit >> diesem Thread <<.
Daraus hat sich ein Script entwickelt, welches verschiedene Möglichkeiten bietet:

Bei Auftreten von Servicemeldungen kann mittels des Scriptes die Servicemeldung
  • per pushover verschickt werden
  • per prowl verschickt werden
  • per mail verschickt werden
  • pushbullet verschickt werden
  • telegram verschickt werden
  • per Systemvariable gespeichert werden
  • ....
Und das sowohl als auch.

Die Servicemeldungen werden dabei übersetzt, ist es eine nicht in das Script integrierte Meldung, wird der Originaltext ausgegeben
Falls es sich um "Batterie leer ServiceMeldung" handelt, wird der Batterietyp gleich mit in die Meldung eingefügt sowie die Anzahl der benötigten Batterien.
Das Script kann also als Ersatz für eines der bekannten Batterieleer Scripte dienen. :!:

Handelt es sich um "Kommunikation war gestört" Meldung, so wird durch das Script (wenn im Setup des Scriptes eingeschaltet) diese bestätigt.
Vereinzelt kommt lt. Usermeldungen vor, daß trotzdem "Kommunikation war gestört" Meldungen nicht quittiert werden, dann bitte die Wartezeit vor Ausführung des Scriptes im Programm leicht erhöhen. Dies kommt vor allem bei hoher Last auf der CCU vor.
dtp hat geschrieben:PRIO_MAX dient als eine Art Peak-Hold-Funktion für PRIO. So ist sichergestellt, dass bei mehreren, gleichzeitigen Servicemeldungen unterschiedlicher Priorität immer die höchste Priorität zum Versenden der Nachrichten verwendet wird. Setzt man PRIO_MAX auf 2, dann werden sämtliche Servicemeldungen als Alarmmeldungen versendet. Setzt man PRIO_MAX auf 1, dann werden alle Servicemeldungen mit der Priorität 1 gesendet, sofern es keine Servicemeldung mit der Priortät 2 gibt. Sprich, je höher der Wert für PRIO_MAX eingestellt wird, desto geringer ist der Spielraum für die einzelnen Prioritäten.

Soweit kurz zur Kurzfunktionsbeschreibung.

Einrichtung:

hier nur ein Bild:
serv_01.jpg
! In den ersten Zeilen des Scriptes Setup durchführen !

Das Script hier aus dem Forum per Copy & Paste wie beschrieben in das Scriptfenster des Programmes kopieren, Setup durchführen, speichern, fertig.

In den ersten Scriptzeilen kann man das Script konfigurieren. Funktionen ein / ausschalten usw.
Es sollte eigentlich alles selbsterklärend sein, ich habe ausserdem fast immer eine Erklärung dahinter geschrieben.
Wer trotzdem Probleme damit hat, darf sich gerne melden, ich werde mich umgehend darum zu kümmern.

Ein Hinweis: Es wird CUXD.exec verwendet.
Die Installation ist also sozusagen "Pflicht", aber CUXD gehört *IMHO* eh auf jede CCU
Einzigste Funktion, die auch ohne CUXD funktioniert, ist das Speichern der Servicemeldung in einer Systemvariablen.
Wer es also erstmal testen will, kann das auch damit tun.

Ich verwende in meinem Script die Standardseriennummer des CUXD:Exec Gerätes mit 3 Kanälen.
Jeder der CUXD und das CUXD.exec Gerät mit den Standardoptionen installiert hat, braucht sich darum nicht zu kümmern.
Für alle anderen, gibt es ja das Setup. :mrgreen:

Eine Anpassung des Codes unterhalb des Setups ist meines Erachtens nicht notwendig.
Ich hoffe, damit den Einen oder Anderem zu helfen.

Alchy

Hier nun das Script:

Code: Alles auswählen

! Servicemeldungen auslesen und weiter verarbeiten
! v1.98 (c) by alchy
!++++++ SETUP ++++++
! Bitte in Ruhe die naechsten Zeilen durcharbeiten
var WITHTIME = "ja"; ! Wenn ja, wird die Alarmzeit Zeit mitgesendet
! +++++ Servicemeldungen "Kommunikation war gestoert" bestaetigen? ++++++
var ACCK = "nein"; ! ja oder nein, um anstehende "war Kommunikationsstoerungen" zu bestaetigen
var CR = "ja"; !0 Zeilenvorschub zwischen einzelne Servicemeldungen und den einzelnen Abschnitten
! HM Geraet, wessen Systemmeldungen nicht verschickt werden sollen
var BLOCK = "GEJ12345678"; ! Seriennummern von Geraeten, welche durch das Script ignoriert werden sollen 

!++++++ PUSHBULLET +++++++++
var USE_PUSHBULLET = "nein"; ! ja oder nein fuer die Verwendung PUSHBULLET direkt im Script;
var USER ="++++++++++++++++++++"; ! selbsterklaerend
var DEVICE_IDEN = "+++++++++++++++++++";
var PUSHBULLET_CUXD_ID = "CUX2801001:4"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var TITEL = "Homematic"; !kann jeder nennen wie er will

!++++++ TELEGRAM +++++++++
var USE_TELEGRAM = "nein"; ! ja oder nein fuer die Verwendung TELEGRAM direkt im Script;
var CHATID = "+++++++"; ! selbsterklärend
var BOTAPI = "++++++++++++++++++++++++++++"; ! dito
var TELEGRAM_CUXD_ID = "CUX2801001:2"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?

!++++++ Prowl Setup fuer die Apfeljuenger +++++++++
! 1. Prowl einrichten ( http://homematic-forum.de/forum/viewtopic.php?f=19&t=7797 )
! 2. cuxd Installation erforderlich
var USE_PROWL = "nein"; ! ja oder nein fuer die Verwendung prowl direkt im Script;
var API_KEY ="DEIN API KEY"; ! selbsterklaerend
var PROWL_CUXD_ID = "CUX2801001:3"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var ANWENDUNG = "Homematic"; !kann jeder nennen wie er will
var KATEGORIE ="Servicemeldung"; !kann jeder nennen wie er will
var TIME_OUT = "10";

!+++++++ Pushover Setup ++++++
! 1. pushover einrichten ( http://homematic-forum.de/forum/viewtopic.php?f=31&t=11579 )
! 2. cuxd Installation erforderlich
var USE_PUSHOVER = "nein"; ! das Übliche
var PUSH_CUXD_ID = "CUX2801001:2"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var USERKENNUNG = "++++++++++++++++++++";
var TOKEN = "++++++++++++++++++++";
var USERDEVICE = ""; ! welches eingerichtete Gerät soll die Meldung bekommen? leer = alle Geraete sonst Namen komma separiert
var RETRY = "30"; !wiederholungen des Alarm bei prio >1
var EXPIRE = "120"; ! wie lange bis verfaellt
var SOUND = "siren"; !Sound nach wahl siehe "https://pushover.net/api#sounds"
var HTML ="1"; ! 1 use html codes at the message
var PRIO = "1";
var PRIO_MAX = "-2"; ! siehe http://homematic-forum.de/forum/viewtopic.php?f=31&t=24618&start=530#p288205

!​ ++++++++ Pushsaver Setup ++++++++++++++++ 
var USE_PUSHSAVER = "nein"; ! das Übliche
string TITEL = "Betreff: Servicemeldung";
string PUSHSAVER_CUXD_ID = "CUX2801001:14";
string MELODIE = "6";
string ICON = "10";
string VIBRATION = "1";
string DEVICE = "++++++++";
string PRIVATEKEY = "+++++++++++++++++";

!+++++++ Setup Mail verschicken mit CUXD und Emailaddon ++++++
! 1. CUXD incl. exec Geraet sind installiert ( http://homematic-forum.de/forum/viewtopic.php?f=37&t=15298 )
! 2. Mailaddon ist installiert eingestellt und funktioniert ( http://www.homematic-inside.de/software/email )
! 3. Im TCL Reiter im MailAddon wird als erste Zeile "set serviceliste [encoding convertfrom utf-8 [lindex $argv 1]]" ohne Anfuehrungsstriche eingegeben
! 4. in Mailvorlage Nr deiner Wahl wird "$serviceliste" ohne Anfuehrungsstriche im Mailtextfeld eingegeben (was da noch steht ist uninteressant)
var USE_MAIL = "nein"; !   ja / nein schicken einer Mail direkt ueber das Script
var MAIL_ID = "01"; !  die VORHER praeparierte Mailvorlage 01 - 50 in der aktuellen Version des mailaddon
var MAIL_CUXD_ID = "CUX2801001:1"; !   die Serial des EXEC Geraete - wer nicht weiss was ich meine, einfach so lassen ist die Standard

!+++++++ Systemvariablen Setup ++++++
! 1. Vor Benutzung Systemvariable vom Typ Zeichenkette in CCU anlegen,
var USE_SYSVAR = "nein"; ! ja / nein Speichern der Ausgabe des Scriptes in Systemvariable
var SYSVAR_NAME = "Name deiner Speichervariable"; ! hier den Namen dieser Variablen eintragen


!+++++++ Eigentlich schon fertig mit dem Setup +++++++++++
!+++++ Batteriezuweisungen inklusive Anzahl !Bitte helfen und fehlende Geraete posten ++++++++++++++++
!+++++ noch nicht integrierte Geraete werden mit unbekannt ausgegeben ++++++++++++++++
string cr2016 = "HM-RC-4\tHM-RC-4-B\tHM-RC-Key3\tHM-RC-Key3-B\tHM-RC-P1\tHM-RC-Sec3\tHM-RC-Sec3-B";
string cr2032 = "HM-PB-2-WM\tHM-PB-4-WM\tHM-PBI-4-FM\tHM-SCI-3-FM\tHM-Sec-TiS\tHM-SwI-3-FM\tHM-Sec-TiS";
string lr14x2 = "HM-Sec-Sir-WM\tHM-OU-CFM-TW";
string lr44x2 = "HM-Sec-SC\tHM-Sec-SC2\tHM-Sec-SC-2\tHM-Sec-RHS";
string lr6x2 = "HM-CC-VD\tHM-CC-RT-DN\tHM-Sec-WDS\tHM-Sec-WDS-2\tHM-CC-TC\tHM-Dis-TD-T\tHB-UW-Sen-THPL-I\tHM-TC-IT-WM-W-EU\tHM-WDS40-TH-I\tHM-WDS40-TH-I-2\tHM-WDS10-TH-O\tHmIP-SMI\tHMIP-eTRV\tHM-WDS30-OT2-SM-2\tHmIP-SMO\tHmIP-SMO-A\tHmIP-SPI\tHmIP-eTRV-2\tHmIP-SPDR\tHmIP-SWD";
string lr6x3 = "HM-Sec-MDIR\tHM-Sec-MDIR-2\tHM-Sec-SD\tHM-Sec-Key\tHM-Sec-Key-S\tHM-Sec-Key-O\tHM-Sen-Wa-Od\tHM-Sen-MDIR\tHM-Sen-MDIR-O\tHM-Sen-MDIR-O-2\tHM-WDS100-C6-O\tHM-WDS100-C6-O-2\tHM-WDS100-C6-O-2\tHmIP-ASIR\tHmIP-SWO-B";
string lr6x4 = "HM-CCU-1\tHM-ES-TX-WM\tHM-WDC7000";
string lr3x1 = "HM-RC-4-2\tHM-RC-4-3\tHM-RC-Key4-2\tHM-RC-Key4-3\tHM-RC-Sec4-2\tHM-RC-Sec4-3\tHM-Sec-RHS-2\tHM-Sec-SCo\tHmIP-KRC4\tHmIP-KRCA\tHmIP-RC8\tHmIP-SRH\tHMIP-SWDO";
string lr3x2 = "HM-Dis-WM55\tHM-Dis-EP-WM55\tHM-PB-2-WM55\tHM-PB-2-WM55-2\tHM-PB-6-WM55\tHM-PBI-2-FM\tHM-RC-8\tHM-Sen-DB-PCB\tHM-Sen-EP\tHM-Sen-MDIR-SM\tHM-Sen-MDIR-WM55\tHM-TC-IT-WM-W-EU\tHM-WDS30-T-O\tHM-WDS30-OT2-SM\tHmIP-STH\tHmIP-STHD\tHMIP-WRC2\tHMIP-WRC6\tHMIP-WTH\tHMIP-WTH-2\tHmIP-SAM\HmIP-SLO";
string lr3x3 = "HM-PB-4Dis-WM\tHM-PB-4Dis-WM-2\tHM-RC-Dis-H-x-EU\tHM-Sen-LI-O";
string lr3x3a = "HM-RC-19\tHM-RC-19-B\tHM-RC-12\tHM-RC-12-B\tHM-RC-12-W";
string block9 = "HM-LC-Sw1-Ba-PCB\tHM-LC-Sw4-PCB\tHM-MOD-EM-8\tHM-MOD-Re-8\tHM-Sen-RD-O\tHM-OU-CM-PCB\tHM-LC-Sw4-WM";
string fixed    = "HM-Sec-SD-2\tHMIP-SWSD";
string recharge = "HM-Sec-Win\tHM-Sec-SFA-SM";


!+++++++++ Setup nun aber wirklich zu Ende - ab hier Finger weg ;-) ++++++++++++++++++
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript START]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se START]", &stdout, &stderr);}
if  ( dom.GetObject(41).Value() > dom.GetObject(41).LastValue() )   { boolean GO = true; string slist = "NEUE Servicemeldung" ;if (CR == "ja"){ slist = slist #"\r\n";}} else { string slist = "ALTE Servicemeldung";if (CR == "ja"){ slist = slist #"\r\n\r\n";} boolean GO = false; }

object oTmpArray = dom.GetObject(ID_SERVICES);
if(oTmpArray) {
string sTmp;
string sdesc;
string stest;
foreach(sTmp, oTmpArray.EnumIDs()) {
        object oTmp = dom.GetObject(sTmp);
           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();
          time sftime = oTmp.AlOccurrenceTime(); ! erste Meldezeit
          time sltime = oTmp.LastTriggerTime();!letze Meldezeit
      var sdesc = trigDP.HssType();
      var sserial = odev.Address();
if ((sdesc == "STICKY_UNREACH") && (ACCK == "ja")) { oTmp.AlReceipt(); collect = false;}

if ( (BLOCK.Find(sserial)<0)  && (collect) ) {

      ! Uebersetzen der Fehlermeldungen
        
      if (sdesc == "CONFIG_PENDING") {sdesc = "Konfigurationsdaten stehen zum Transfer an"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if ( (sdesc == "LOWBAT") || (sdesc == "LOW_BAT") ) {sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "STICKY_UNREACH") {sdesc = "hatte Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "UNREACH") {sdesc = "hat Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "DEVICE_IN_BOOTLOADER"){sdesc = "Device startet neu"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "UPDATE_PENDING") {sdesc = "Update verfuegbar"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "U_SOURCE_FAIL") {sdesc = "Netzteil ausgefallen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "USBH_POWERFAIL") {sdesc = "USB-Host deaktiviert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if ( (sdesc == "ERROR_SABOTAGE") || (sdesc == "SABOTAGE") ) {sdesc = "Sabotage"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "STICKY_SABOTAGE") {sdesc = "hatte Sabotagemeldung"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "ERROR_REDUCED"){sdesc = "Temperatur kritisch (Lastabsenkung)."; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "ERROR_NON_FLAT_POSITIONING"){sdesc = "Fehler Lageerkennung"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
        ! Sonderfehler
        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"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
            }
            if ((odev.HssType()=="HM-Sec-Key") || (odev.HssType()=="HM-Sec-Key-S") || (odev.HssType()=="HM-Sec-Key-O"))
            {
              if (ival == 1){sdesc = "Einkuppeln fehlgeschlagen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2){sdesc = "Motorlauf abgebrochen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
            }
           if (odev.HssType()=="HM-CC-VD")
           {
              if (ival == 1){sdesc = "Ventil Antrieb blockiert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2){sdesc = "Ventil nicht montiert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 3){sdesc = "Stellbereich zu klein"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 4){sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
           }
        }

        if (sdesc == "FAULT_REPORTING") {
           if (odev.HssType()=="HM-CC-RT-DN")
           {
              if (ival == 1) {sdesc = "Ventil blockiert."; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2) {sdesc = "Einstellbereich Ventil zu gross"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 3) {sdesc = "Einstellbereich Ventil zu klein"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 4) {sdesc = "Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 6) {sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 7) {sdesc = "Fehlstellung Ventil"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
           }
        }
        if (sdesc == "Batteriestand niedrig") {
           string batlink = "unbekannt";
           string index;
           foreach (index, cr2016) {if (index == odev.HssType()) {batlink = "1x leere CR2016";}}
           foreach (index, cr2032) {if (index == odev.HssType()) {batlink = "1x leere CR2032";}}
           foreach (index, lr14x2) {if (index == odev.HssType()) {batlink = "2x leere LR14";}}
           foreach (index, lr44x2) {if (index == odev.HssType()) {batlink = "2x leere LR44/AG13";}}
           foreach (index, lr6x2) {if (index == odev.HssType()) {batlink = "2x leere LR6/AA";}}
           foreach (index, lr6x3) {if (index == odev.HssType()) {batlink = "3x leere LR6/AA";}}
           foreach (index, lr6x4) {if (index == odev.HssType()) {batlink = "4x leere LR6/AA";}}
           foreach (index, lr3x1) {if (index == odev.HssType()) {batlink = "1x leere LR3/AAA";}}
           foreach (index, lr3x2) {if (index == odev.HssType()) {batlink = "2x leere LR3/AAA";}}
           foreach (index, lr3x3) {if (index == odev.HssType()) {batlink = "3x leere LR3/AAA";}}
           foreach (index, lr3x3a) {if (index == odev.HssType()) {batlink = "3x leere AAA Akkus - bitte laden";}}
           foreach (index, block9) {if (index == odev.HssType()) {batlink = "9Volt Block leer oder unbestimmt";}}
         foreach (index, fixed) {if (index == odev.HssType()) {batlink = "Festbatterie leer";}}
         foreach (index, recharge) {if (index == odev.HssType()) {batlink = "Akku entladen - bitte aufladen";}}
         
   
       slist = slist #odev.Name() # " : "; if (CR == "ja"){ slist = slist #"\r\n";} slist = slist #batlink#" "; if ( WITHTIME == "ja") { if (CR == "ja"){ slist = slist #"\r\n";} slist = slist #"seit: "#sftime.Format("%d.%m.%y %H:%M") #" ("#sltime.Format("%d.%m.%y %H:%M")#")";}
       }
       else
       {
       slist = slist #odev.Name() # " : " ; if (CR == "ja"){ slist = slist #"\r\n";} slist = slist #sdesc#" "; if ( WITHTIME == "ja") { if (CR == "ja"){ slist = slist #"\r\n";} slist = slist #"seit: "#sftime.Format("%d.%m.%y %H:%M") #" ("#sltime.Format("%d.%m.%y %H:%M")#")" ;}
       }
if (CR == "ja"){ slist = slist #"\r\n\r\n";}
}
} } } 
if (slist.Length() == 20){
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript Abbruch BLOCK]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se Abbruch BLOCK]", &stdout, &stderr);}
quit;}


! 04.04.2017
! alte langsame Uebersetzung entfernt Leerzeichen kein Problem mehr bei Mail/Pushover/Telegram/ aber bei Pushbullet & Prowl?
! Sonderzeichen u.U. problematisch bei Pushover & Telegram daher Texte umgestellt
! 02.05.2017 neue Uebersetzung hinzugefügt
string Ersetzen = " ;ü;ä;ö;Ü;Ä;Ö;ß";
string ErsetzenDurch = "%20;%C3%BC;%C3%A4;%C3%B6;%C3%9C;%C3%84;%C3%9F";
string message = slist;integer Pos = 0;integer Index = 0;string Split = "";boolean Loop = true;
foreach (Split, Ersetzen.Split(";")) {
Loop = true;
while (Loop) {
Pos = message.Find(Split);
if (Pos == -1) { Loop = false;
}else{message = message.Substr(0,Pos) # ErsetzenDurch.StrValueByIndex(";",Index)  # message.Substr(Pos + Split.Length() , ((message.Length() - Pos) - Split.Length())  );
}}
Index = Index + 1;
}

! Verarbeiten der Daten zum Versand
if (GO)  {
if ( (USE_MAIL == "ja")&&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#MAIL_CUXD_ID#".CMD_EXEC")) ) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#MAIL_CUXD_ID#".CMD_EXEC").State("/etc/config/addons/email/email "#MAIL_ID#" '"#slist#"'"); }
if ( (USE_PUSHOVER == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSH_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSH_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k -d token='"#TOKEN#"' -d user='"#USERKENNUNG#"' -d device='"#USERDEVICE#"' -d html='"#HTML#"' -d message='"#message#"' -d priority='"#PRIO_MAX#"' -d sound='"#SOUND#"' -d retry='"#RETRY#"' -d expire='"#EXPIRE#"' https://api.pushover.net/1/messages.json"); }
if ( (USE_PUSHBULLET == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHBULLET_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHBULLET_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -u '"#USER#"' -k -d device_iden='"#DEVICE_IDEN#"' -d type=note -d title='"#TITEL#"' -d body='"#slist#"' https://api.pushbullet.com/api/pushes"); }
if ( (USE_TELEGRAM == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#TELEGRAM_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#TELEGRAM_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k https://api.telegram.org/bot"#BOTAPI#"/sendMessage -d text='"#message#"' -d chat_id="#CHATID); }
if ( (USE_PROWL == "ja") && ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PROWL_CUXD_ID#".CMD_EXEC")) ){ string url="http://prowl.weks.net/publicapi/add?apikey="#API_KEY#"&application="#ANWENDUNG#"&event="#KATEGORIE#"&priority="#PRIO_MAX#"&description="#slist#"&timeout="#TIME_OUT#""; (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PROWL_CUXD_ID#".CMD_EXEC").State("wget -q -O - '"#url#"'"); }
if ( (USE_PUSHSAVER == "ja") && ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHSAVER_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHSAVER_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k -d k='"#PRIVATEKEY#"' -d t='"#TITEL#"' -d m='"#message#"' -d s='"#MELODIE#"' -d i='"#ICON#"' -d v='"#VIBRATION#"' -d d='"#DEVICE#"' https://www.pushsafer.com/api");}
if ( (USE_SYSVAR == "ja") && (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME) ){ (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME).State(slist); }
} else { if ( (USE_SYSVAR == "ja") && (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME) ){ (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME).State(slist); }}
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript ENDE]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se ENDE]", &stdout, &stderr);}
}
Zuletzt geändert von alchy am 08.07.2018, 17:14, insgesamt 47-mal geändert.

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
eric2905
Beiträge: 864
Registriert: 04.04.2011, 13:50

Re: Servicemeldungen *allinclusive* Script

Beitrag von eric2905 » 08.04.2015, 10:49

Hi ho,

erst mal danke für die Mühe und Arbeit - sieht gut aus!

Ich habe das Script gerade mal kopiert und eingefügt - und bekomme Fehler:
Error 1 at row 81 col 31 near ^)
{
string sTmp;
strin
Im Code selber kann ich auf Anhieb aber nichts finden ...
Muss ich mir heute Abend (zu Hause) noch mal ansehen.

Gruß,
Eric
-----------------------------------------------------------------------------------------------
RaspberryMatic (2.35.16.20180708) auf Pi3 mit zig Aktoren, usw.
ioBroker auf Proxmox-VM auf Intel NUC D54250WYK (Core i5-7260U) mit 16 GB RAM und 64 / 256 GB SSD

alchy
Beiträge: 7164
Registriert: 24.02.2011, 02:34

Re: Servicemeldungen *allinclusive* Script

Beitrag von alchy » 08.04.2015, 11:10

wird wohl der Bug sein, der unter anderme >> H I E R << beschrieben wird.
Der Code hat da keinen Fehler, habe das Script gerade noch einmal bei mir per C&P in ein neues Programm neu angelegt :shock:

Alchy
wird wohl Zeit sich von Homematic Script zu verabschieden und alles anders zu lösen.

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Dome_2001
Beiträge: 288
Registriert: 01.07.2014, 10:18

Re: Servicemeldungen *allinclusive* Script

Beitrag von Dome_2001 » 08.04.2015, 11:54

Schade das man hier nicht einen "LIKE" - Button hat.

Das Script läuft sauber durch und ist echt klasse!!
Danke auch für die "DAU" freundliche Anleitung. So bekomme ich es sogar hin.

Danke Alchy
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------

Benutzeravatar
eric2905
Beiträge: 864
Registriert: 04.04.2011, 13:50

Re: Servicemeldungen *allinclusive* Script

Beitrag von eric2905 » 08.04.2015, 14:10

alchy hat geschrieben:wird wohl der Bug sein, der unter anderme >> H I E R << beschrieben wird.
Der Code hat da keinen Fehler, habe das Script gerade noch einmal bei mir per C&P in ein neues Programm neu angelegt
Tatsächlich ... reboot tat gut ... jetzt geht es.

Gruß,
Eric
-----------------------------------------------------------------------------------------------
RaspberryMatic (2.35.16.20180708) auf Pi3 mit zig Aktoren, usw.
ioBroker auf Proxmox-VM auf Intel NUC D54250WYK (Core i5-7260U) mit 16 GB RAM und 64 / 256 GB SSD

Cybertron
Beiträge: 98
Registriert: 08.12.2014, 10:31

Re: Servicemeldungen *allinclusive* Script

Beitrag von Cybertron » 08.04.2015, 14:28

Hallo Alchy,

ich habe gerade versucht, mir Dein Script einzurichten.
Vielleicht sehe ich als DAU ja den Wald vor Bäumen nicht.

Wenn ich das Programm anlegen will, lässt mir die WebUI bei Systemzustand nur die Auswahl von Systemvariablen.
Dort gibt es jedoch bei mir keine derartige Variable.

Läuft da bei mir was schief oder habe ich hier noch einen Schritt vergessen?

Danke & Gruss
Silvio
--------------------------------------------
572 Kanäle in 172 Geräten:

alchy
Beiträge: 7164
Registriert: 24.02.2011, 02:34

Re: Servicemeldungen *allinclusive* Script

Beitrag von alchy » 08.04.2015, 22:58

Servicemeldungen ist eine vom System automatisch angelegte Variable, wie einige andere auch.
Eigentlich sollte es immer mindestens so aussehen:
syssystemvariablen.jpg
syssystemvariablen.jpg (22.19 KiB) 40734 mal betrachtet
Schon mal auf Filter zurücksetzen gedrückt? Browsercache gelöscht? Avira deaktiviert? Anderen Browser genommen?

Da stellt sich für mich die Frage, was das System macht, wenn Du eine Systemmeldung produzierst?
Probier mal, einfach geht z.B.:
  • - Sabotage = Deckel von einen Fenstersensor ab
    - Kommunikation Meldung = Zwischen Stecker aus Steckdose ziehen und dann über Webui schalten

Was hast du so installiert? Kannst Du mit anderen Tools schauen ob es die Systemvariable gibt? Allerdings ist diese versteckt.
Aber: muss aber eine Ausgabe bringen.

Alchy

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

nicolas-eric
Beiträge: 2364
Registriert: 08.01.2015, 00:26
Wohnort: Scheeßel

Re: Servicemeldungen *allinclusive* Script

Beitrag von nicolas-eric » 09.04.2015, 12:00

Es funktioniert! :lol:

Danke alchy!!! :D

Öffne ich einen TFK, kommt ne Mail mit "TFK Wohnzimmer: Sabotage."


In den Kommentaren vom Script hatte ich gelesen, dass da was mit prio noch fehlt.
Im Script selber sind die ja enthalten
Trotzdem kommt so wie das Script ist bei mir komischerweise gar keine Prowl Nachricht.

Gebe ich ganz unten anstatt #prio# eine Zahl von -2 bis +2 ein, kommt die Nachricht aber.

Ausschnitt aus den FAQs der Prowl App.

Code: Alles auswählen

Default value of 0 if not provided. An integer value ranging [-2, 2] representing:
-2 Very Low
-1 Moderate
0 Normal
1 High
2 Emergency
[/strike]


EDIT:
Entwarnung.
Es geht doch.
Mein blödes TextEdit am Mac hatte beim ersten Versuch, wo ich dachte das geht nicht ein gerades Anführungszeichen vor dem API Key zu einem schrägen Anführungszeichen gemacht.

Danke nochmal für das tolle Script!!! :mrgreen:
Zuletzt geändert von nicolas-eric am 09.04.2015, 13:33, insgesamt 2-mal geändert.

Benutzeravatar
matze-pe
Beiträge: 707
Registriert: 11.02.2013, 09:38
Wohnort: Peine
Kontaktdaten:

Re: Servicemeldungen *allinclusive* Script

Beitrag von matze-pe » 09.04.2015, 13:16

Super, funktioniert 1A 8)

Dankeschön
CCU2 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

alchy
Beiträge: 7164
Registriert: 24.02.2011, 02:34

Re: Servicemeldungen *allinclusive* Script

Beitrag von alchy » 09.04.2015, 13:32

Prowl kann ich nicht testen, da nicht verfügbar.
Kannst mir gerne ein Apfeldingsda schicken, ich implementiere das dann richtig. :mrgreen:

Mit der prio Zuweisung gibt es ein Problem - zumindest wenn es mehrere Servicemeldungen gleichzeitig gibt!
Wenn es nur eine Meldung gibt, sollte prio immer den Wert annehmen, der im Code für alle einzelnen Meldungen deklariert wird.
In deinem Fall 0 so ca. in Zeile 132.

dtp hatte im Anfangsthread mal einen Vorschlag gemacht, die prio bei mehreren Meldungen nach der Wichtigkeit
der wichtigsten Meldung zu behandeln. Muss ich mir noch mal anschauen. Testen kann ich es aber trotzdem nur theoretisch.
Ausserdem missfällt mir, daß jeder im Code ändern muss, wenn er andere prios haben will.
Das wiederum ins Setup zu integrieren , fehlt mir aber im Moment noch die Idee.

Alchy

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

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