Unwetterwarnung Script

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

Moderator: Co-Administratoren

Benutzeravatar
papi
Beiträge: 370
Registriert: 18.12.2013, 08:40
Wohnort: Willich, NRW
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: Unwetterwarnung Script

Beitrag von papi » 06.02.2018, 19:58

MartinBr hat geschrieben:...Ich nutze nun den DWD Adapter auf dem ioBroker. Der funktioniert einwandfrei, gibt alle Warnungen per Push aus...
Wie gibst Du denn aus dem DWD-Adapter die Warnung per Push aus? (Sorry, ist eigentlich OT, aber dafür wollte ich kein neues Fass aufmachen)

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 » 06.02.2018, 23:30

@Karlinho: in viewtopic.php?f=31&t=38161&start=60#p389819 schreibt jmaus schon etwas zu diesem Thema und bestätigt, dass es mit der von der CCU2 verwendeten OpenSSL-Version keinen Zugriff auf den DWD-Server gibt.

Ich habe das eben nochmal mit meiner eigentlich ausgedienten CCU2 nochmal getestet und mit SSH die folgende mit jmaus geposteten identische Fehlermeldung bekommen:

Code: Alles auswählen

# wget https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json
--2018-02-06 23:18:13--  https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json
Resolving www.dwd.de... 141.38.3.62
Connecting to www.dwd.de|141.38.3.62|:443... connected.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Unable to establish SSL connection.
Also funktioniert Klanas Script leider weiter nur mit der Raspberrymatic. Das Script von Grrzzz ist das Script der Wahl auf der CCU2.
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)

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 » 07.02.2018, 11:36

Beitragvon papi » 06.02.2018, 19:58

MartinBr hat geschrieben:
...Ich nutze nun den DWD Adapter auf dem ioBroker. Der funktioniert einwandfrei, gibt alle Warnungen per Push aus...


Wie gibst Du denn aus dem DWD-Adapter die Warnung per Push aus? (Sorry, ist eigentlich OT, aber dafür wollte ich kein neues Fass aufmachen)
Im ioBroker gibt es wie in der Homematic alle möglichen Adapter, z.B. Pushover, Telegram und Mail. Einfach einrichten und als Push integrieren.

Gruß
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

hellrider2001
Beiträge: 1
Registriert: 18.01.2018, 11:46

Re: Unwetterwarnung Script

Beitrag von hellrider2001 » 07.02.2018, 16:43

Tharanis hat geschrieben: Also funktioniert Klanas Script leider weiter nur mit der Raspberrymatic. Das Script von Grrzzz ist das Script der Wahl auf der CCU2.
Hallo zusammen!
Hat jemand das Script von Grrzzz mit dem Umweg des PHP Skripts schon zum Laufen gebracht?
Ich habe das PHP Skript nun schon auf zwei PHP-fähigen "Servern" laufen (QNAP und Raspberry), die Einträge in Grrzzz's Skript entsprechend angepsst (String URL) - jedoch kommen keine Werte rein.
Wenn ich die Adresse des PHP-Skripts im Browser aufrufe, sehe ich jedoch alle notwendigen Daten. :?:

Danke und Grüße aus NDS!

P.S.: Sehr gutes Forum, was ich schon eine Weile durchstöbere, mich jedoch erst jetzt angemeldet habe. *Daumen hoch*
CCU2, IOBroker, Alexa, Lightify

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

Re: Unwetterwarnung Script

Beitrag von markuswil » 07.02.2018, 20:57

Egal was ich mache. Ich bekomme auf meiner CCu2 immer die selbe Fehlermeldung beim Script testen beim Grrrr Script:

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
LG Markus
Zuletzt geändert von alchy am 07.02.2018, 21:29, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

kafetzke
Beiträge: 34
Registriert: 30.07.2018, 13:47
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: Unwetterwarnung Script

Beitrag von kafetzke » 30.07.2018, 13:53

Moin zusammen,

ich war mal so frei, das DWD-Script für die Verwendung auf der CCU2 zu korrigieren und auch ein wenig zu optimieren.
Es werden nun alle Datenfelder korrekt ausgelesen und die Reihenfolge der Datenfelder ist irrelevant.

Gruß,

Kafetzke

PS.: Ich hoffe, das geht als "Einstandskuchen" un diesem Forum durch 8)

Code: Alles auswählen

! ------  DWD Unwetterwarnung 30.07.2018  Vers. 1.1 -----------------------------------------------------------
! Unwetterwarnungsscript von Grrzzz / klana
! Version 1.1 vom 30.07.2018
! Korrekturen von kafetzke
! - Korrekturen von Level und Typ
! - Umbau Auswertung des JSONs auf "solidere" Abfrage
!
! 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 = true;
!   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 = "103254000";   ! Kreis Hildesheim
! 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();
      }

	  !--------- Originalwert -----
	  var stdout_orgn = stdout;
	  !--------- Originalwert -----
	  
	  
      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());
  
      !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)
      var stdout_type = stdout_orgn.Substr(stdout_orgn.Find("type")+6);
	  var mtyp = stdout_type.Substr(0, stdout_type.Find(","));
      if(debug) {WriteLine("mtyp :"#mtyp);}
      if(mtyp) {dom.GetObject(wwTyp).State(mtyp);}
      	  
	! state (Bundesland im Klartext z.B: Nordrhein-Westfalen)
      var stdout_state = stdout_orgn.Substr(stdout_orgn.Find("state")+8);
      var state = stdout_state.Substr(0, stdout_state.Find(",")-1);
      if(debug) {WriteLine("state :"#state);}
      if(state) {dom.GetObject(wwState).State(state);}
      
      !Level - Vermutung 0 = Vorabwarnung, 1..10 tatsächliche Warnungen
      var stdout_lvl = stdout_orgn.Substr(stdout_orgn.Find("level")+7);
      var level = stdout_lvl.Substr(0, stdout_lvl.Find(","));
      if(debug) {WriteLine("level :"#level);}
      if(level) {dom.GetObject(wwLevel).State(level);}

      ! headline (Überschrift der Meldung z.B. Amtliche WARNUNG vor WINDBÖEN)
      var stdout_head = stdout_orgn.Substr(stdout_orgn.Find("headline")+11);
      var headline = stdout_head.Substr(0, stdout_head.Find(",")-1);
      if(debug) {WriteLine("headline :"#headline);}
      if(headline) {dom.GetObject(wwHeadline).State(headline);}
      
	  ! description (nähere Erklärung der Meldung im Klartext)
	  var stdout_desc = stdout_orgn.Substr(stdout_orgn.Find("description")+14);
	  var descript = stdout_desc.Substr(0, stdout_desc.Find(",")-1);
	  if(debug) {WriteLine("descript :"#descript);}
	  if(descript) {dom.GetObject(wwDescription).State(descript);}
	  
	  ! altitude Start
      var stdout_start = stdout_orgn.Substr(stdout_orgn.Find("altitudeStart")+15);
      var altitudeStart = stdout_start.Substr(0, stdout_start.Find(","));
      if(debug) {WriteLine("altitudeStart :"#altitudeStart);}
      if(altitudeStart) {dom.GetObject(wwAltitudeStart).State(altitudeStart);}
      
      ! event (Kurzform der Meldungsart z.B. Winböen)
      var stdout_event = stdout_orgn.Substr(stdout_orgn.Find("event")+8);
      var event = stdout_event.Substr(0, stdout_event.Find("}")-1);
      if(debug) {WriteLine("event :"#event);}
      if(event) {dom.GetObject(wwEvent).State(event);}
      
	  ! instruction
	  var stdout_instr = stdout_orgn.Substr(stdout_orgn.Find("instruction")+14);
	  var instruction = stdout_instr.Substr(0, stdout_instr.Find(".\",")+1);
	  if(debug) {WriteLine("instr :"#instruction);}
	  if(instruction) {dom.GetObject(wwInstruction).State(instruction);}
	        
       ! altitude End
      var stdout_end = stdout_orgn.Substr(stdout_orgn.Find("altitudeEnd")+13);
      var altitudeEnd = stdout_end.Substr(0, stdout_end.Find(","));
      if(debug) {WriteLine("altitudeEnd :"#altitudeEnd);}
      if(altitudeEnd) {dom.GetObject(wwAltitudeEnd).State(altitudeEnd);}
      
      ! stateShort (Abkürzung Bundesland z.B: NRW)
      var stdout_stt_short = stdout_orgn.Substr(stdout_orgn.Find("stateShort")+13);
      var stateShort = stdout_stt_short.Substr(0, stdout_stt_short.Find(",")-1);
      if(debug) {WriteLine("stateShort :"#stateShort);}
      if(stateShort) {dom.GetObject(wwStateShort).State(stateShort);}


  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("---");
}

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

Re: Unwetterwarnung Script

Beitrag von klana » 31.07.2018, 10:16

Hi Kafetzke,

Ich hab das mal installiert. Gestern kam korrekt die Wetterwarnung HITZE.
Heute ist wieder eine Wetterwarnung Hitze gekommen, aber leider erkennt das Programm das nicht und setzt die Wetterwarnung auf Inaktiv.

Hier mal ein Ausschnitt aus den Debugausgaben (plus ein paar eigene) :

Code: Alles auswählen

else von VORABINFORMATION found :true
time :1533024585
start :1533027600
end  :1533056400
diff1 :-31815
diff2 :-31815
Wetterwarnung auf false
WetterwarnungText     :2018-07-31 11:00:00 - 2018-07-31 19:00:00: HITZE
WetterwarnungTyp      :9
WetterwarnungDescript :Am Dienstag wird eine starke Wärmebelastung erwartet.\n\n
Obwohl die Systemzeit, sowie die Start und Endzeit der Warnmeldung unterschiedlich sind, kommt bei der Variable diff1/diff2 immer das Gleiche raus.
Deshalb wird der Status nicht auf AKtiv gesetzt.

Code: Alles auswählen

   !------------------------------------------------------------------------------------------------------------
        ! Auswertung
        !------------------------------------------------------------------------------------------------------------
        integer time = system.Date("%F %X").ToTime().ToInteger();
        var diff1 = time - start.ToInteger();
        var diff2 = time - end.ToInteger();
        
        if(debug) {WriteLine("time :"#time);}
        if(debug) {WriteLine("start :"#start.ToInteger());}
        if(debug) {WriteLine("end  :"#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");}
        }
Vielleicht findest Du den Fehler....

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

kafetzke
Beiträge: 34
Registriert: 30.07.2018, 13:47
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: Unwetterwarnung Script

Beitrag von kafetzke » 31.07.2018, 12:14

Moin Klana,

ich musste gerade ein wenig grinsen :lol: Vermutlich, weil mir das beim Entwickeln ständig selbst passiert ist :roll:

Code: Alles auswählen

if(debug) {WriteLine("diff1 :"#diff2);}
if(debug) {WriteLine("diff2 :"#diff2);}
...deswegen (und nur deswegen) sehen bei dir diff1 und diff2 gleich aus. Sie sind es gar nicht :mrgreen:

Ich habe gerade mal ohne Script-Änderungen meine Variablen überprüft - alles gut. Als kleinen Test habe ich zusätzlich mal per Tinymatic-App die Systemvariable Wetterwarnung_Aktiv auf false gesetzt und das Script erneut ausgeführt -> sie springt ordnungsgemäß wieder auf true. Daran scheint's nicht zu liegen...

edit:
Kleine Ergänzung:

Zumindest für Hildesheim ist er nachts ebenfalls nicht umgesprungen auf "Aktiv = false", weil die aktuelle Meldung von gestern bis heute Abend gilt. Könnte das bei dir auch der Fall sein?

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

Re: Unwetterwarnung Script

Beitrag von klana » 31.07.2018, 12:50

Arrrggg!!! So ein schei...!
Das ist der typische Copy/Paste Effekt - als Programmierer ist man da manchmal betriebsblind :mrgreen: :roll:

Die Wetterwarnung ist gestern Abend auf inaktiv gesprungen und heute morgen habe ich von der Warnwetterapp (iOS) ein Meldung bekommen von 11-19 Uhr Hitze, nur von der Homematic kam nix. Deswegen habe ich auch nachgeschaut.

Um 11:00 Uhr kam dann auch die Meldung von der HM.
Also gehe ich davon aus, das der Parameter ShowVorabInfo=true wohl keine Wirkung hat und die Meldung immer nur zur eigentlichen Start-/Endezeit gesetzt wird.

Aber soweit funktioniert es auch hier auf meinem Raspi 3B+
Super Arbeit!! :!:

Gruß
Klana


PS: Einen hab ich noch....

In den Strings sind /n drin, das sieht bei einer Ausgabe per Homamatic PocketControl doof aus.

z.B im String Text: Am Dienstag wird eine starke Wärmebelastung erwartet.\n\n
Gruß Klana
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.

kafetzke
Beiträge: 34
Registriert: 30.07.2018, 13:47
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: Unwetterwarnung Script

Beitrag von kafetzke » 31.07.2018, 13:10

Immer gerne :D

Jaaaa die \n nerven mich auch, ich kenne keine replace() Funktion für den String. Hast du nen Tipp?

Antworten

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