Servicemeldungen *allinclusive* Script

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

Moderator: Co-Administratoren

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Servicemeldungen *allinclusive* Script

Beitrag von alchy » 24.09.2015, 18:18

>>> Hier <<< hab ich mal was darüber zusammengeschrieben. Dokumentiert ist das glaube nicht.

Alchy

Blacklist................... almost 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.

dtp
Beiträge: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Servicemeldungen *allinclusive* Script

Beitrag von dtp » 09.10.2015, 10:04

alchy hat geschrieben:
mademyday hat geschrieben: ...die prio Geschichte ist generell eigentlich noch eine Baustelle. :cry:
Hallo Alchy,

ich würde, wie bereits ziemlich am Anfang dieses Threads mal erwähnt, das so lösen, dass bei mehreren, gleichzeitigen Meldungen immer die Meldung mit der höchsten Priorität gewinnt. Alles andere macht ja keinen Sinn. Das kann man z.B. folgendermaßen einpflegen:

Code: Alles auswählen

var prio_max = "-2";
...
 
! Übersetzen der Fehlermeldungen
if (sdesc == "CONFIG_PENDING") {sdesc = "Konfigurationsdaten stehen zur Übertragung an"; prio = 1; if (prio >= prio_max){prio_max = prio;}}
if (sdesc == "LOWBAT") {sdesc = "Batteriestand niedrig"; prio = -1; if (prio >= prio_max){prio_max = prio;}}
if (sdesc == "STICKY_UNREACH") {sdesc = "Kommunikation war gestört"; prio = 2; if (prio >= prio_max){prio_max = prio;}}

...

if ( USE_PUSHOVER == "ja") { dom.GetObject("CUxD."#PUSH_CUXD_ID#".CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/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_PROWL == "ja"){ string url="http://prowl.weks.net/publicapi/add?apikey="#API_KEY#"&application="#ANWENDUNG#"&event="#KATEGORIE#"&priority="#prio_max#"&description="#message#"&timeout="#TIME_OUT#"";
        dom.GetObject("CUxD."#PROWL_CUXD_ID#".CMD_EXEC").State("wget -q -O - '"#url#"'"); }

...
Übergeben an die Push-Dienste wird dann also mit prio_max immer nur die höchste Priorität. Allerdings muss ich sagen, dass bei mir praktisch noch nie zwei Meldungen gleichzeitig aufgetreten sind, so dass sich ein Prioproblem bisher gar nicht erst ergab. Trotzdem kann es nicht schaden, das im Skript abzufangen.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Servicemeldungen *allinclusive* Script

Beitrag von alchy » 09.10.2015, 11:43

Hallo dtp,

hab das mal so eingebaut, wie immer vorn >> im ersten Beitrag << ab Version 0.97

Vielleicht habe ich mich auch verkehrt ausgedrückt mit meinen damaligen Bedenken.
Mir ging es nicht darum, das mehrere Servicemeldungen GLEICHZEITIG auftauchen, sondern das ja eine anstehen kann, und eine weitere kommt hinzu.
Hab nochmal drüber nachgedacht und es nun doch so umgesetzt. Danke nochmal.

@all
Bitte mit einem geeigneten Editor (Notepad++) die Erwähnungen von PRIO = 1 im unteren Teil des Scriptes
an die persönlichen Bedürfnisse anpassen. Dann gewinnt nun also immer die mit der höchsten Priorität.


Alchy

Blacklist................... almost 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.

shortyle
Beiträge: 34
Registriert: 06.10.2015, 00:17

Re: Servicemeldungen *allinclusive* Script

Beitrag von shortyle » 11.10.2015, 00:40

Hallo,

als erstes mal großes Lob und 1000 Dank für die tolle Anleitung und das tolle Script.

Es funktioniert bei mir als Neuling auch schon relativ gut. Ich bekomme die Servicemeldungen als e-Mail und über PushOver.

Allerdings bekomme ich nicht bei allen Geräten eine Servicemeldung. Um eine solche Meldung zu provozieren sollte esdoch eigentlich reichen, den Batteriedeckel zu öffnen. Das Klappt auch perfekt für meine Fensterkontakte (HM-Sec-SCo), innerhalb 1 Sekunde kommt die Pushmitteilung und die E-Mail. Wo es aber komischerweise nicht geht, ist bei den Heizungsthermostaten (HM-CC-RT-DN) und bei den Wandthermostaten (HM-TC-IT-WM-W-EU). Auch habe ich bei den beiden letzt genannten einmal die Batterien entfernt um ggf. so eine Servicemeldung auszulösen, leider ohne Erfolg.

Hat einer vielleicht eine Idee woran es liegen kann?


Viele Grüße und Danke schon im voraus
David

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Servicemeldungen *allinclusive* Script

Beitrag von buempi » 11.10.2015, 06:33

Hallo David

Bei Thermostaten musst du länger warten, bis die CCU diese vermisst. Sie setzen ja keine Sabotagemeldungen bei Manipulationen am Gerät ab.

Viele Grüsse
Bümpi

Benutzeravatar
blackhole
Beiträge: 3730
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 587 Mal

Re: Servicemeldungen *allinclusive* Script

Beitrag von blackhole » 11.10.2015, 11:21

Batterien raus und dann die Temperatur bei den stromlosen Thermostaten in der WebGUI verändern, könnte die Sache deutlich beschleunigen.

shortyle
Beiträge: 34
Registriert: 06.10.2015, 00:17

Re: Servicemeldungen *allinclusive* Script

Beitrag von shortyle » 11.10.2015, 14:08

Ahhh ok. Werd ich dann gleich mal probieren. Danke schonmal :wink:

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Servicemeldungen *allinclusive* Script

Beitrag von alchy » 11.10.2015, 17:05

shortyle hat geschrieben: Allerdings bekomme ich nicht bei allen Geräten eine Servicemeldung. Um eine solche Meldung zu provozieren sollte esdoch eigentlich reichen, den Batteriedeckel zu öffnen. Das Klappt auch perfekt für meine Fensterkontakte (HM-Sec-SCo), innerhalb 1 Sekunde kommt die Pushmitteilung und die E-Mail. Wo es aber komischerweise nicht geht, ist bei den Heizungsthermostaten (HM-CC-RT-DN) und bei den Wandthermostaten (HM-TC-IT-WM-W-EU).
Das ist weder komisch noch unnormal. Die genannten Geräte verwerten ja keinen Sabotagekontakt. :shock:
shortyle hat geschrieben: Auch habe ich bei den beiden letzt genannten einmal die Batterien entfernt um ggf. so eine Servicemeldung auszulösen, leider ohne Erfolg.
Das ist zwar eine Möglichkeit eine Servicemeldung zu provozieren, eine Kommunikationsstörung zu provozieren.
Wie Blackhole und auch Buempi schon schrieben, musst du entweder warten bis die CCU das Gerät vermisst, oder provozieren, in dem du das Gerät nach dem Batterie entfernen aktiv ansprichst.

Noch mal zur Klarstellung. Das Script kann nicht hellsehen. :mrgreen:
Es verarbeitet nur die Servicemeldungen, die du auch in der CCU angezeigt bekommst.
Wenn du es richtig eingerichtet hast (und das scheint der Fall zu sein) kannst du das Script vergessen.
Es meldet sich schon, wenn bei deiner CCU irgendwas nicht stimmt.

Alchy

Blacklist................... almost 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.

dtp
Beiträge: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Servicemeldungen *allinclusive* Script

Beitrag von dtp » 20.10.2015, 12:00

Hallo Alchy,

heute Nacht prellte mal wieder bei einem meiner Funk-Fenster-Drehgriffkontakte der Sabotage-Kontakt, so dass ich ca. 15 Sabotage-Meldungen erhielt. War kein Beinbruch, da Pushover diese Meldungen bei Anwesenheit mit sehr geringer Prio sendet, so dass sie mir nachts nicht auf den Senkel gehen können. Irgendwann kam es dann ergänzend zu einer LowBat-Meldung und kurze Zeit später auch noch zu einer Kommunikationsstörung. Alle Servicemeldungen wurden wie erwartet korrekt vom Skript abgearbeitet und gemeldet. Nun aber zu meinem Anliegen.

Wäre es möglich, die auslösende Servicemeldung immer an oberste Stelle anzuzeigen, so dass man leichter zwischen alten und neuen Servicemeldungen unterscheiden kann?

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

apollon77
Beiträge: 308
Registriert: 12.10.2013, 12:32

Re: Servicemeldungen *allinclusive* Script

Beitrag von apollon77 » 21.10.2015, 21:42

Hi alchy,

ich habe dein Skript mal bei mir um eine Möglichkeit vom ignorieren von bestimmten Geräte-Meldungen erweitert.
Ich habe zwei Temperatursensoren im Keller die manchmal nicht durchkommen durch die Stahbeton-Decke und so immer "Fehlalarme" ausgelöst haben.

Am Ende ist es eine neue Variable:

Code: Alles auswählen

! +++++ Auszuschliessende Devices bei bestimmten Fehlern ++++++
var ignoreList = ""; ! Tab-getrennte Liste, Bsp: "KEY00001-UNREACH\tKEY00002-UNREACH" schliesst "UNREACH"-Fehler für Device KEY00001 aus und KEY00002 aus
Und dann etwas code an der Stelle wo Du in der Schleife pro Device die variablen initialisierst:

Code: Alles auswählen

...
               var sdev = dom.GetObject(ch.Device());
               var ival = trigDP.Value();
               var stime = ch.LastTimestamp().ToString("%d.%m.%y %H:%M Uhr");
               var sdesc = trigDP.AlDestMapDP().Name().StrValueByIndex(".", 2);
               var sdescOri = sdesc;

               string ignoreSearch = sdev.Address() # "-" # sdescOri;
               string ignoreSearchIndex;
               integer foundInIgnoreList=0;
               foreach (ignoreSearchIndex, ignoreList) {
                  if (ignoreSearchIndex == ignoreSearch) {foundInIgnoreList=1;}
               }
               if (foundInIgnoreList==0) {
Und die Klammer geht dann unterhalb des "slist-Anhängens" wieder zu.

Hinzu kommt ein Check ob in slist am Ende überhaupt was drinsteht bevor die Message rausgeschickt wird:

Code: Alles auswählen

      if ((( USE_PUSHOVER == "ja") || ( USE_PROWL == "ja")) && (slist.Length()>0)) {
und vorm rausschicken:

Code: Alles auswählen

      if (slist.Length()>0) {
Hier mal mein kompletter Code (zusätzlich ist beim slist-Anhängen noch die Seriennummer und der originale GFehlergrund mit enthalten damit man es einfacher ausschliessen kann :-)

Code: Alles auswählen

!+++++++++ Setup nun aber wirklich zu Ende - ab hier Finger weg ;-) ++++++++++++++++++
var prio = 0;
if ((msg_val != msg_lastval) && (dom.GetObject(41).Value() > 0)) {
! if (dom.GetObject(41).Value() > dom.GetObject(41).LastValue()) {
   object oTmpArray = dom.GetObject(ID_SERVICES);
   if(oTmpArray) {
         string sTmp;
         string sdev;
         string sdesc;
         string slist = "";
         string styp;
      foreach(sTmp, oTmpArray.EnumIDs()) {
         object oTmp = dom.GetObject(sTmp);
         if (oTmp) {
            if(oTmp.IsTypeOf(OT_ALARMDP) && (oTmp.AlState() == asOncoming)) {
               var trigDP = dom.GetObject(oTmp.AlTriggerDP());
               var ch = dom.GetObject(trigDP.Channel());
               var sdev = dom.GetObject(ch.Device());
               var ival = trigDP.Value();
               var sdesc = trigDP.AlDestMapDP().Name().StrValueByIndex(".", 2);
               if ((sdesc == "STICKY_UNREACH") && (ACCK == "ja")) { oTmp.AlReceipt();}   
            }
         }
      }
      foreach(sTmp, oTmpArray.EnumIDs()) {
         object oTmp = dom.GetObject(sTmp);
         if (oTmp) {
            if(oTmp.IsTypeOf(OT_ALARMDP) && (oTmp.AlState() == asOncoming)) {
               var trigDP = dom.GetObject(oTmp.AlTriggerDP());
               var ch = dom.GetObject(trigDP.Channel());
               var sdev = dom.GetObject(ch.Device());
               var ival = trigDP.Value();
               var stime = ch.LastTimestamp().ToString("%d.%m.%y %H:%M Uhr");
               var sdesc = trigDP.AlDestMapDP().Name().StrValueByIndex(".", 2);
               var sdescOri = sdesc;

               string ignoreSearch = sdev.Address() # "-" # sdescOri;
               string ignoreSearchIndex;
               integer foundInIgnoreList=0;
               foreach (ignoreSearchIndex, ignoreList) {
                  if (ignoreSearchIndex == ignoreSearch) {foundInIgnoreList=1;}
               }
               if (foundInIgnoreList==0) {
                  ! Übersetzen der Fehlermeldungen
                  if (sdesc == "CONFIG_PENDING") {sdesc = "Konfigurationsdaten stehen zur Übertragung an"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
                  if (sdesc == "LOWBAT") {sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
                  if (sdesc == "STICKY_UNREACH") {sdesc = "Kommunikation war gestört"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
                  if (sdesc == "UNREACH") {sdesc = "Kommunikation zur Zeit gestört"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
                  if (sdesc == "DEVICE_IN_BOOTLOADER"){sdesc = "Gerät startet neu"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
                  if (sdesc == "UPDATE_PENDING") {sdesc = "Update verfügbar"; 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;}}

                  !Sonderfehler
                  if (sdesc == "ERROR") {
                     if((sdev.HssType()=="HM-Sec-RHS") || (sdev.HssType()=="HM-Sec-SC") || (sdev.HssType()=="HM-Sec-SC-2") || (sdev.HssType()=="HM-Sec-SCo") || (sdev.HssType()=="HM-Sec-MD") || (sdev.HssType()=="HM-Sec-MDIR") || (sdev.HssType()=="HM-Sec-MDIR-2"))
                     {
                        if (ival == 7){sdesc = "Sabotage."; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
                     }
                     if ((sdev.HssType()=="HM-Sec-Key") || (sdev.HssType()=="HM-Sec-Key-S") || (sdev.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 (sdev.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 (sdev.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 == sdev.HssType()) {batlink = "1x leere CR2016";}}
                     foreach (index, cr2032) {if (index == sdev.HssType()) {batlink = "1x leere CR2032";}}
                     foreach (index, lr44x2) {if (index == sdev.HssType()) {batlink = "2x leere LR44/AG13";}}
                     foreach (index, lr6x2) {if (index == sdev.HssType()) {batlink = "2x leere LR6/AA";}}
                     foreach (index, lr6x3) {if (index == sdev.HssType()) {batlink = "3x leere LR6/AA";}}
                     foreach (index, lr6x4) {if (index == sdev.HssType()) {batlink = "4x leere LR6/AA";}}
                     foreach (index, lr3x1) {if (index == sdev.HssType()) {batlink = "1x leere LR3/AAA";}}
                     foreach (index, lr3x2) {if (index == sdev.HssType()) {batlink = "2x leere LR3/AAA";}}
                     foreach (index, lr3x3) {if (index == sdev.HssType()) {batlink = "3x leere LR3/AAA";}}
                     foreach (index, lr3x3a) {if (index == sdev.HssType()) {batlink = "3x leere AAA Akkus - bitte laden";}}
                     foreach (index, block9) {if (index == sdev.HssType()) {batlink = "9Volt Block leer oder unbestimmt";}}
          
                     slist = slist # "\n" # sdev.Name() # " (" # sdev.Address() # ", " # sdescOri # ") : " # batlink;
                     if ( WITHTIME == "ja") { slist = slist # " seit: "#stime ;}
                  }
                  else
                  {
                     slist = slist # "\n" # sdev.Name() # " (" # sdev.Address() # ", " # sdescOri # ") : " # sdesc;
                     if ( WITHTIME == "ja") { slist = slist # " seit: "#stime ;}
                  }
               }
            }
         }
      }
      if ((( USE_PUSHOVER == "ja") || ( USE_PROWL == "ja")) && (slist.Length()>0)) {
         string message;
         string newmessage;
         string messageindex;
         message = "Neue Servicemeldung: ";
         message = message # slist;
         foreach(messageindex,message.Split(" ")) {newmessage = newmessage+messageindex+"%20";}
              message = newmessage;
              newmessage = "";
         foreach(messageindex,message.Split("Ä")) {newmessage = newmessage+messageindex+"%C3%84";}
              message = newmessage;
              newmessage = "";
         foreach(messageindex,message.Split("Ö")){newmessage = newmessage+messageindex+"%C3%96";}
              message = newmessage;
              newmessage = "";
         foreach(messageindex,message.Split("Ü")){newmessage = newmessage+messageindex+"%C3%9C";}
              message = newmessage;
              newmessage = "";
         foreach(messageindex,message.Split("ä")){newmessage = newmessage+messageindex+"%C3%A4";}
              message = newmessage;
              newmessage = "";
         foreach(messageindex,message.Split("ö")){newmessage = newmessage+messageindex+"%C3%B6";}
              message = newmessage;
              newmessage = "";
         foreach(messageindex,message.Split("ü")){newmessage = newmessage+messageindex+"%C3%BC";}
              message = newmessage;
              newmessage = "";
         foreach(messageindex,message.Split("ß")){newmessage = newmessage+messageindex+"%C3%9F";}
              message = newmessage;
              newmessage = "";
         foreach(messageindex,message.Split("°")){newmessage = newmessage+messageindex+"%C2%B0";}
              message = newmessage;
              newmessage = "";
              ! Kürzen der Nachricht um die jeweils am Ende angefügten Umwandlungscodes.
              message = message.Substr(0, message.Length()-51);
      }    
      if (slist.Length()>0) {
         if ( USE_SYSVAR == "ja"){ dom.GetObject(SYSVAR_NAME).State(slist); }
         if ( USE_MAIL == "ja"){ dom.GetObject("CUxD."#MAIL_CUXD_ID#".CMD_EXEC").State("/etc/config/addons/email/email "#MAIL_ID#" '"#slist#"'"); }
         if ( USE_PUSHOVER == "ja") { dom.GetObject("CUxD."#PUSH_CUXD_ID#".CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/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_PROWL == "ja"){ 
            string url="http://prowl.weks.net/publicapi/add?apikey="#API_KEY#"&application="#ANWENDUNG#"&event="#KATEGORIE#"&priority="#PRIO_MAX#"&description="#message#"&timeout="#TIME_OUT#"";
            dom.GetObject("CUxD."#PROWL_CUXD_ID#".CMD_EXEC").State("wget -q -O - '"#url#"'"); 
         }
      }
   }
}
Vllt ja für jemanden interessant :-)

Antworten

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