Unwetterwarnung Script

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

Moderator: Co-Administratoren

Benutzeravatar
klana
Beiträge: 1093
Registriert: 08.02.2015, 08:37
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 57 Mal
Danksagung erhalten: 26 Mal

Re: Unwetterwarnung Script

Beitrag von klana » 25.01.2018, 17:45

Hallo Leute,

sorry, aber das Thema wird wohl noch etwas warten müssen.
Ich muss mich vorrangig um einen Pflegefall kümmern.
Vielleicht findet sich jemand der kurzfristig weitermacht?

Gruß
klana
Gruß Klana
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.

Tharanis
Beiträge: 119
Registriert: 15.04.2015, 11:39
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: Unwetterwarnung Script

Beitrag von Tharanis » 28.01.2018, 14:53

@klana: Ich wünsche Dir viel Kraft und alles Gute für Dich und Familie
---
Ganz offentlichtlich hat DWD mal wieder an der JSON-Datei rumgeschraubt. Ich habe gestern wieder Wetterwarnungen bekommen, die nur teilweise korrekt waren. Die Reihenfolge hat sich geändert und ich habe die Reihenfolge der Felder in Klanas Variante umgestellt und stelle diese Änderung hier zur Verfügung. Ich selber setze das Script mit anderen Variablennamen ein, sodass ich zwar meine Variablen mit der neuen Reihenfolge testen kann, nicht aber Klanas Reihenfolge. Vielleicht kann ja jemand Rückmeldung geben, ob das Script auch bei Ihr/Ihm so funktioniert.

Code: Alles auswählen

    ! ------  DWD Unwetterwarnung 28.01.2018  Vers. 1.03 ---------------------------------
    ! Unwetterwarnungsscript von Grrzzz / klana
    ! Version 1.03 vom 28.01.2018
    ! Erweitert von klana
    ! - Alle Felder aus DWD Meldung auslesen
    ! - umfangreiches Debugging
    ! - korrektur Startdatum
    ! - Ausgabe der Meldung jetzt mit Headline anstelle von event
    ! - und noch eniges mehr...
    ! - Erstellung Einmalscript für automatische Erstellung bzw. Loeschung der Systemvariablen
    ! - Fehlerfaelle besser abfagen
    ! - Erweiterung um Datum und Uhrzeit für Start und End einschl. Systemvariablen
    ! - Boolean Variable damit auch die Vorabinformation angezeigt werden kann (s.u.)
    ! Neusortierung durch Tharanis wegen Aenderungen bei DWD
    !
    ! ToDo - bekannte Fehler:
    ! - Auswertung der Level und Typen stimmt irgenwie noch nicht...
    !
    ! https://homematic-forum.de/forum/viewtopic.php?f=31&t=38161
    !------------------------------------------------------------------------------------------------------------

    !------------------------------------------------------------------------------------------------------------
    ! Konfiguration
    !------------------------------------------------------------------------------------------------------------
    ! Anzulegen fuer das Script Wetterwarn_DWD sind die
    ! folgenden Systemvariablen, welche besser über das Einmalsscript angelegt werden.
    ! Das Einmalscript unter Script testen eingefügt und einmalig ausführen.
    ! --------------------------------------------------------------
    ! Wetterwarnung_Aktiv           Boolean
    ! Wetterwarnung_Text            Zeichenkette (für Ausgabe) 
    ! --------------------------------------------------------------
    ! Wetterwarnung_city            Zeichenkette (Nummer zum Suchen)
    ! Wetterwarnung_regionName      Zeichenkette
    ! Wetterwarnung_start           Zeichenkette
    ! Wetterwarnung_end             Zeichenkette
    ! Wetterwarnung_startDateTime   Zeichenkette
    ! Wetterwarnung_endDateTime     Zeichenkette
    ! Wetterwarnung_level           Zahl
    ! Wetterwarnung_typ             Werteliste mit: unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glaette/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Kuestenwarnungen;Binnenseewarnungen
    ! Wetterwarnung_state           Zeichenkette
    ! Wetterwarnung_description     Zeichenkette
    ! Wetterwarnung_event           Zeichenkette
    ! Wetterwarnung_headline        Zeichenkette
    ! Wetterwarnung_instruction     Zeichenkette
    ! Wetterwarnung_stateShort      Zeichenkette
    ! Wetterwarnung_altitudeStart   Zeichenkette
    ! Wetterwarnung_altitudeEnd     Zeichenkette
    !
    !------------------------------------------------------------------------------------------------------------

    !------------------------------------------------------------------------------------------------------------
    ! Debugging einschalten = true oder aussschalten = false
    ! z.B. zum Test unter "Script testen"
    !
    ! ShowVorabInfo = false -> es wird keine Vorabwarnung angezeigt,
    !               = true  -> es wird auch die Vorabwarnung angezeigt
    !  noch nicht aktiv
    !------------------------------------------------------------------------------------------------------------
    boolean debug = false;
    !   boolean ShowVorabInfo = false;

    ! --------------------------------------------------------------
    ! Virtuelles CUxD-Exec-Device hier angeben
    ! --------------------------------------------------------------
    string execdevice = "CUxD.CUX2801001:1";

    ! --------------------------------------------------------------
    ! Die Region-ID aus der JSON Datei raussuchen, dazu diese Adresse
    ! im Browser eingeben:
    !  https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json
    ! Für Berlin z.B. 111000000
    ! --------------------------------------------------------------
     string city = "105362000";   ! Rhein-Erft Kreis
    ! string city = "109763000";   ! Testort Rhein-Sieg Kreis

    ! --------------------------------------------------------------
    ! Nötige CCU-Systemvariablen zuweisen
    ! In der CCU anzulegende Systemvariablen stehen nachfolgend in Anführungszeichen
    ! Am Besten mit dem "Einmalscript" automatisch anlegen lassen!
    ! _Text und _Aktiv sind Anfangsbuchstabe nach Unterstrich gross und
    ! alle DWD Felder sind Anfangsbuchstabe nach Unterstrich klein geschrieben
    ! --------------------------------------------------------------

    ! Eigene Felder
    string wwText = "Wetterwarnung_Text";
    string wwAktiv = "Wetterwarnung_Aktiv";

    ! DWD Felder
    string wwCity = "Wetterwarnung_city";       
    string wwRegionName = "Wetterwarnung_regionName";     
    string wwStart = "Wetterwarnung_start";           
    string wwEnd = "Wetterwarnung_end";             
    string wwStartDateTime = "Wetterwarnung_startDateTime";           
    string wwEndDateTime = "Wetterwarnung_endDateTime";             
    string wwLevel = "Wetterwarnung_level";         
    string wwTyp = "Wetterwarnung_typ";           
    string wwState = "Wetterwarnung_state";           
    string wwDescription = "Wetterwarnung_description";     
    string wwEvent = "Wetterwarnung_event";           
    string wwHeadline = "Wetterwarnung_headline";       
    string wwInstruction = "Wetterwarnung_instruction";     
    string wwStateShort = "Wetterwarnung_stateShort";     
    string wwAltitudeStart = "Wetterwarnung_altitudeStart";      ! Wird noch nicht genutzt
    string wwAltitudeEnd = "Wetterwarnung_altitudeEnd";          ! Wird noch nicht genutzt

    !------------------------------------------------------------------------------------------------------------
    ! Ausgabe in Systemvariable fuer Push (fuer spaetere Erweiterung)
    !------------------------------------------------------------------------------------------------------------
    string PushVar = "SV_PushMessage";

    !------------------------------------------------------------------------------------------------------------
    ! Das wars an Konfiguration
    ! DWD-Warntabelle in 25k(+25k)-Abschnitten laden bis die Region gefunden wurde
    !------------------------------------------------------------------------------------------------------------
    string url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
    string downloader = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
    integer rangefrom = 0;
    integer rangeto = 25000;
    integer loopcounter = 1;
    integer find1 = 0;
    boolean found = false;
    string stdout = "";
    string cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
    string cut2 = "],";
    var ret ;
    string strRest = "";

    !------------------------------------------------------------------------------------------------------------
    ! Los gehts...
    !------------------------------------------------------------------------------------------------------------
    if(debug){WriteLine("cmd : "#cmd);}

    ret= dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
    if(debug){WriteLine("ret cmd_sets : "#ret);}
    ret = dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
    if(debug){WriteLine("ret cmd_query_ret: "#ret);}
    stdout = dom.GetObject(execdevice # ".CMD_RETS").State();

    if(debug) {WriteLine("stdout cmd_rets : " #stdout);}

    if (stdout)
    {
        find1 = stdout.Find(city);
        if ((find1 >= 0) && (stdout.Length() >= 25000)) {
           rangefrom = rangeto - 99;
           rangeto = rangeto + 24900;
           cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
           dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
           dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
           stdout = stdout + dom.GetObject(execdevice # ".CMD_RETS").State();
        }
       
        while ((find1 < 0) && (stdout.Length() >= 25000) && (loopcounter <= 30)) {
           loopcounter = loopcounter + 1;
           rangefrom = rangeto - 99;
           rangeto = rangeto + 24900;
           cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
           dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
           dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
           stdout = dom.GetObject(execdevice # ".CMD_RETS").State();
           find1 = stdout.Find(city);
           if ((find1 >= 0) && (stdout.Length() >= 25000)) {
              rangefrom = rangefrom + 25000;
              rangeto = rangeto + 25000;
              cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
              dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
              dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
              stdout = stdout + dom.GetObject(execdevice # ".CMD_RETS").State();
           }
        }
       
       
        found = false;
        if(stdout.Find(city)>=0) {
          found = true;
        }
    }

    if(city) {dom.GetObject(wwCity).State(city);}

    !------------------------------------------------------------------------------------------------------------
    ! Relevanter Bereich ausschneiden und zuweisen
    !------------------------------------------------------------------------------------------------------------
    if(found) {

          if(debug) {WriteLine("Suche nach City :"#city);}

          ! gesuchten Bereich komplett ausschneiden und mit ToLatin() umwandeln
          stdout = stdout.Substr(stdout.Find(city));
          stdout = stdout.Substr(0, stdout.Find(cut2)+1).ToLatin();
          if(debug) {WriteLine("stdout nach Find(City): " #stdout);}

          ! Hier können jetzt mehr als 1 Meldung vorhanden sein
          ! Diese sind durch geschweifte Klammen getrennt
          ! Wie kann man diese Auswerten, da zur Zeit immer nur die erste genommen wird?

     
          ! regionName (Klartext der gesuchten Region z.B. Rhein-Erft-Kreis)
          stdout = stdout.Substr(stdout.Find("regionName")+13);
          var regionName = stdout.Substr(0, stdout.Find(",")-1).Trim();
          if(debug) {WriteLine("regionName: "#regionName);}
          if(regionName) {dom.GetObject(wwRegionName).State(regionName);}
         
         
          ! start (Uhrzeit ab der die DWD Meldung gültig ist in Sekunden)
          stdout = stdout.Substr(stdout.Find("start")+7);
     
          if(stdout.Substr(0,4) == "null")
          {
          var start = stdout.Substr(0, stdout.Find(",")-0).Trim();
          }
          else
          {
          var start = stdout.Substr(0, stdout.Find(",")-3).Trim();
          }

          if(debug) {WriteLine("Start stdout : " #stdout);}
          !Bei Inhalt null keine Anfuehrungszeichen

     
          if(debug) {WriteLine("start : " #start);}   
          if(start) {dom.GetObject(wwStart).State(start);}

     
         
          ! end (Uhrzeit bis zu der die DWD Meldung gültig ist in Sekunden)
          stdout = stdout.Substr(stdout.Find("end")+5);
     
          if(stdout.Substr(0,4) == "null")
          {
             var end = stdout.Substr(0, stdout.Find(",")-0).Trim();
          }
          else
          {
             var end = stdout.Substr(0, stdout.Find(",")-3).Trim();
          }
     
          if(debug) {WriteLine("end : " #end);}     
          if(end) {dom.GetObject(wwEnd).State(end);}
         
          if(debug) {WriteLine("End stdout : " #stdout);}
          !Bei Inhalt null keine Anfuehrungszeichen
     
     
          ! Umrechnung in Date und Time neu 16.11.2017
          if(debug) {WriteLine("Start DateTime: " #start.ToInteger().ToTime().ToString());}
          if(debug) {WriteLine("End DateTime: " #end.ToInteger().ToTime().ToString());}
          dom.GetObject(wwStartDateTime).State(start.ToInteger().ToTime().ToString());
          dom.GetObject(wwEndDateTime).State(end.ToInteger().ToTime().ToString());
           
		  !Level - Vermutung 0 = Vorabwarnung, 1..10 tatsächliche Warnungen
          stdout = stdout.Substr(stdout.Find("level")+7);
          var level = stdout.Substr(0, stdout.Find(","));
          if(debug) {WriteLine("level :"#level);}
          if(level) {dom.GetObject(wwLevel).State(level);} 
		   
         
          !In folgender Tabelle sind Warntypen mit ? markiert, die noch nicht in der Praxis getestet werden konnten!
          !0 = Gewitter
          !1 = Wind/Sturm/Orkan
          !2 = Stark- und Dauerregen
          !3 = Schneefall/Schneeverwehungen
          !4 = Nebel ?
          !5 = Frost
          !6 = Glätte/Glatteis
          !7 = Tauwetter ?
          !8 = Hitzewarnungen ?
          !9 = UV-Warnungen ?
          !10 = Küstenwarnungen ?
          !11 = Binnenseewarnungen ?

          ! type (siehe Liste oben)
          stdout = stdout.Substr(stdout.Find("type")+6);
          var mtyp = stdout.Substr(0, stdout.Find(","));
          if(debug) {WriteLine("mtyp :"#mtyp);}
          if(mtyp) {dom.GetObject(wwTyp).State(mtyp);}
         
		  
		  ! state (Bundesland im Klartext z.B: Nordrhein-Westfalen)
          stdout = stdout.Substr(stdout.Find("state")+8);
          var state = stdout.Substr(0, stdout.Find(",")-1);
          if(debug) {WriteLine("state :"#state);}
          if(state) {dom.GetObject(wwState).State(state);}
		  
		  
          ! description (nähere Erklärung der Meldung im Klartext)
          stdout = stdout.Substr(stdout.Find("description")+14);
          var descript = stdout.Substr(0, stdout.Find(",")-1);
          if(debug) {WriteLine("descript :"#descript);}
          if(descript) {dom.GetObject(wwDescription).State(descript);}
		  
		  
          ! headline (Überschrift der Meldung z.B. Amtliche WARNUNG vor WINDBÖEN)
          stdout = stdout.Substr(stdout.Find("headline")+11);
          var headline = stdout.Substr(0, stdout.Find(",")-1);
          if(debug) {WriteLine("headline :"#headline);}
          if(headline) {dom.GetObject(wwHeadline).State(headline);}

		  
		  ! event (Kurzform der Meldungsart z.B. Winböen)
          stdout = stdout.Substr(stdout.Find("event")+8);
          var event = stdout.Substr(0, stdout.Find(",")-1);
          if(debug) {WriteLine("event :"#event);}
          if(event) {dom.GetObject(wwEvent).State(event);}
               
			 
          ! instruction (Was sollte man tun im Klartext z.B. bleibt alle Zuhause ;-)
          stdout = stdout.Substr(stdout.Find("instruction")+14);
          var instruction = stdout.Substr(0, stdout.Find(",")-1);
          if(debug) {WriteLine("instruction :"#instruction);}
          if(instruction) {dom.GetObject(wwInstruction).State(instruction);}

		  
		  ! stateShort (Abkürzung Bundesland z.B: NRW)
          stdout = stdout.Substr(stdout.Find("stateShort")+13);
          var stateShort = stdout.Substr(0, stdout.Find(",")-1);
          if(debug) {WriteLine("stateShort :"#stateShort);}
          if(stateShort) {dom.GetObject(wwStateShort).State(stateShort);}
		  
		  
          ! altitude Start
          stdout = stdout.Substr(stdout.Find("altitudeStart")+15);
          var altitudeStart = stdout.Substr(0, stdout.Find(","));
          if(debug) {WriteLine("altitudeStart :"#altitudeStart);}
          if(altitudeStart) {dom.GetObject(wwAltitudeStart).State(altitudeStart);}
   
   
           ! altitude End
          stdout = stdout.Substr(stdout.Find("altitudeEnd")+13);
          var altitudeEnd = stdout.Substr(0, stdout.Find(","));
          if(debug) {WriteLine("altitudeEnd :"#altitudeEnd);}
          if(altitudeEnd) {dom.GetObject(wwAltitudeEnd).State(altitudeEnd);}
         

      if (debug) {WriteLine("Laenge Rest:"#stdout.Length());}


         !Vorabinformationen sind auch zu filtern
         !      if(event.Find("VORABINFORMATION")>=0) && (ShowVorabInfo == false)) {
         
         if(event.Find("vorabinformation")>=0) {
            found = false;
           if(debug) {WriteLine("if von VorabInformation found :"#found);}
         } else {

            if(debug) {WriteLine("else von VORABINFORMATION found :"#found);}
         
            !------------------------------------------------------------------------------------------------------------
            ! Auswertung
            !------------------------------------------------------------------------------------------------------------
            integer time = system.Date("%F %X").ToTime().ToInteger();
            var diff1 = time - start.ToInteger();
            var diff2 = time - end.ToInteger();
               
            if(debug) {WriteLine("diff1 :"#diff2);}
            if(debug) {WriteLine("diff2 :"#diff2);}
       
               
               
            if(diff1 >= 0 && diff2 <= 0) {
               dom.GetObject(wwAktiv).State(true);
               if(debug) {WriteLine("Wetterwarnung auf true");}
            }
            else {
               dom.GetObject(wwAktiv).State(false);
               if(debug) {WriteLine("Wetterwarnung auf false");}
            }
            stdout = start.ToInteger().ToTime().ToString() # " - " # end.ToInteger().ToTime().ToString() # ": " # event ;

            if(debug) {WriteLine("WetterwarnungText     :"#stdout);}
            if(debug) {WriteLine("WetterwarnungTyp      :"#(mtyp.ToInteger()+1).ToString());}
            if(debug) {WriteLine("WetterwarnungDescript :"#descript);}
               
            dom.GetObject(wwText).State(stdout);
            dom.GetObject(wwTyp).State(mtyp.ToInteger()+1);
            dom.GetObject(wwDescription).State(descript);
          }
    }

    !------------------------------------------------------------------------------------------------------------
    ! Allgemeiner Fallback
    !------------------------------------------------------------------------------------------------------------
    if(!found) {
        if(debug) {WriteLine("Fallback Keine Warnung gefunden - found :"#found);}
       
        dom.GetObject(wwAktiv).State(false);
        dom.GetObject(wwText).State("Keine Warnungen");
        dom.GetObject(wwTyp).State(0);

        dom.GetObject(wwCity).State("---");
        dom.GetObject(wwRegionName).State("---");
        dom.GetObject(wwStart).State("---");
        dom.GetObject(wwEnd).State("---");
        dom.GetObject(wwStartDateTime).State("---");
        dom.GetObject(wwEndDateTime).State("---");
        dom.GetObject(wwLevel).State(0);
        dom.GetObject(wwState).State("---");
        dom.GetObject(wwDescription).State("---");
        dom.GetObject(wwEvent).State("---");
        dom.GetObject(wwHeadline).State("---");
        dom.GetObject(wwInstruction).State("---");
        dom.GetObject(wwStateShort).State("---");
        dom.GetObject(wwAltitudeStart).State("---");
        dom.GetObject(wwAltitudeEnd).State("---");
    }

EDIT: Einen Fehler bei StateShort ausgebessert am 04.02.2018
Zuletzt geändert von Tharanis am 04.02.2018, 22:29, insgesamt 1-mal geändert.
DWD-Unwetterwarnscript v1.32.b03 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.65.11.20221005) - Längste Laufzeit bislang: 48 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

Stefan6655
Beiträge: 4
Registriert: 29.10.2017, 10:11

Re: Unwetterwarnung Script

Beitrag von Stefan6655 » 29.01.2018, 17:31

@Tharanis: Ich habe es gerade mal ausprobiert. Es scheint wieder alles zu funktionieren. Vielen Dank

quellenfeuer
Beiträge: 24
Registriert: 01.11.2017, 11:20

Re: Unwetterwarnung Script

Beitrag von quellenfeuer » 30.01.2018, 14:29

Hallo zusammen,

das mit den Unwetterwarnungen hört sich sehr interessant an. Nur leider komme ich mit der Beschreibung nicht klar.
kann mir jemand sozusagen für DAUs erklären was ich machen muß?
Ich scheitere schon an der Beschreibung mit dem Einmalscript für die Systemvariablen.
Für Hilfe wäre ich sehr dankbar


Gruß Quellenfeuer

markuswil
Beiträge: 217
Registriert: 24.02.2014, 13:24
Wohnort: Frechen bei Köln

Re: Unwetterwarnung Script

Beitrag von markuswil » 31.01.2018, 19:31

Vielen Dank für das Script. Ich erhalte beim Scripttesten mit Degug=true nur:

Code: Alles auswählen

cmd : LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl --range 0-25000 https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json
ret cmd_sets : false
ret cmd_query_ret: false
stdout cmd_rets : 
Fallback Keine Warnung gefunden - found :false
Ist das richtig so???? Denke eigentlich, dass eine Unwetterwarnung besteht.

Viele Grüße
Markus
Zuletzt geändert von alchy am 03.02.2018, 21:27, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

quellenfeuer
Beiträge: 24
Registriert: 01.11.2017, 11:20

Re: Unwetterwarnung Script

Beitrag von quellenfeuer » 03.02.2018, 21:19

Hallo zusammen,


ich habe es mittlerweile hinbekommen, jetzt würde ich gerne mir noch die Meldungen
per Pushover schicken lassen, da komme ich aber leider nicht weiter, kann mir da jemand helfen oder
hat es vielleicht bei sich schon laufen und kann mir den script dafür posten?


Gruß Quellenfeuer

Tobias78
Beiträge: 1464
Registriert: 27.06.2010, 01:01
Wohnort: Braunschweig
Hat sich bedankt: 4 Mal

Re: Unwetterwarnung Script

Beitrag von Tobias78 » 03.02.2018, 22:07

HalloTharanis,
vielen Dank für die Überarbeitung. Hat nach Anlegen der zwei neuen Systemvariablen auch bei mir auf Anhieb funktioniert.
Gruß, Tobias.
--------------------------------------------
Im Einsatz und empfehlenswert:
RaspberryMatic,IO.Broker, Homeputer Studio; CuXD; PocketControl, HomeStatus, Robonect, Alexa, io.Broker
------------------------------------------

ecky78
Beiträge: 164
Registriert: 03.06.2016, 21:55
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 51 Mal
Danksagung erhalten: 8 Mal

Re: Unwetterwarnung Script

Beitrag von ecky78 » 04.02.2018, 12:28

quellenfeuer hat geschrieben: ich habe es mittlerweile hinbekommen, jetzt würde ich gerne mir noch die Meldungen
per Pushover schicken lassen, da komme ich aber leider nicht weiter, kann mir da jemand helfen oder
hat es vielleicht bei sich schon laufen und kann mir den script dafür posten?
Hallo,

ich nutze dazu momentan dieses Skript:

Code: Alles auswählen

! versenden der SV "Pushnachricht.Text" mittels Pushover über CUxD.exec & curl

object t = dom.GetObject("<deine Variable mit dem Text>");
object s = dom.GetObject("<deine Variable mit dem Titel>"); 
integer prio = dom.GetObject("E-Mail.Versand").Value(); WriteLine("Sys_prio:\t"#prio);

string token = "kein Token";
string title = s.Value().ToString();
string message = t.Value().ToString();
!string message = "Pushover-Test\nSonderzeichen: <font color='red'>A_b_C_ä*ö*ü*?*ß</font>";string title="Title";t.State("abc");
message = message.Replace("[","<").Replace("]",">").Replace("%","%25").ToUTF8(); !.UriEncode();
title = title.Replace("[","<").Replace("]",">").Replace("%","%25").ToUTF8(); !.UriEncode();

string userkey = "<dein Userkey>";
if (prio == 1) {token = "<dein Token1>";}                                      ! Token für die App "HomeMatic Fehler"
if (prio == 2) {token = "<dein Token2>"; prio = 0;}                       ! Token für die App "HomeMatic Info"
if (prio == 3) {token = "<dein Token3>"; prio = 0;}                       ! Token für die App "HomeMatic System"

if( (message != "") && (title != "") && (token != "kein Token") ){
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k -d token='"#token#"' -d user='"#userkey#"' -d message='"#message#"' -d title='"#title#"' -d html=1 -d priority='"#prio#"' -d retry=3 http://api.pushover.net/1/messages.json");
! -F "attachment=@image.jpg"
WriteLine("\nVERSAND\n");
}
else{WriteLine("\nABBRUCH\n");}
Als Text kannst du die Description nehmen und als Titel die Headline. Die SV "E-Mail.Versand" triggert bei mir das Programm für den Versand der Pushnachricht und E-Mails und entscheidet gleichzeitig über die Priorität - bei mir hat alles in Pushover die 0, nur Warnungen bekommen die 1.

Das Skript hab ich mir aus Schnipseln von Alchys und dtps Werken zusammengeschustert ... vielleicht nicht elegant, aber es läuft soweit ;-) Vielen Dank bei dieser Gelegenheit an die beiden!

Grüße, Ecky
Grüße,
Ecky

Karlinho
Beiträge: 42
Registriert: 13.12.2016, 17:45

Re: Unwetterwarnung Script

Beitrag von Karlinho » 05.02.2018, 11:18

Hallo zusammen,
funktioniert das Script von klana mittlerweile auf der CCU?

Beste Grüße
Kai

MartinBr
Beiträge: 393
Registriert: 25.01.2017, 10:51
Wohnort: Bei Berlin
Hat sich bedankt: 3 Mal
Danksagung erhalten: 8 Mal

Re: Unwetterwarnung Script

Beitrag von MartinBr » 06.02.2018, 17:31

Ich habe es aufgegeben. Ich habe alle Varianten durch, habe die php-Datei auf meinem Webserver gelegt etc.

Ich nutze nun den DWD Adapter auf dem ioBroker. Der funktioniert einwandfrei, gibt alle Warnungen per Push aus und informiert auch beim Aufheben der Wetterwarnung.

Martin
RaspberryMatic-3.59.6 auf Tinkerboard S, CUxD 2.6, XML-1.20, ioBroker (HM,HMIP, Zigbee, Zwave und Shelly) und Alexa in einer VM unter Proxmox, VitoComfort 200

Antworten

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