+ Antworten
Seite 1 von 24 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 238
  1. #1
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    21,682

    Lightbulb Unwetterzentrale Revolutions

    Aktuellester Stand vom 01.06.2016:
    Verfügbar als PHP-Modul: https://github.com/paresy/SymconMisc


    Nach dem Klassiker im Jahre 2006 -> IP-Symcon-Unwetterzentrale
    Der Reloaded Variante im Jahre 2008 -> Wetterwarnung

    Gibt es jetzt die 2010 Version, die sich vollständig automatisch in IP-Symcon integriert

    Das Skript läd das aktuelle Radarbild in IP-Symcon rein und berechnet die farbigen Pixel (Regenwolke) gewichtet zu einem imaginären Regenwert. Da dieser keine statistische Größe darstellt, müsst ihr selber entscheiden, ab welchem Wert ihr euch benachrichtigen lasst, dass es Regnen wird.

    Für weitere Funktionen bitte NEUE Skripte anlegen und auf die Regenmengenänderung triggern. Bitte keinen Code einfach in das Skript panschen

    Hinweis:
    Damit ihr nicht alle 15 Minuten mit einer "Es wird gleich Schütten" SMS genervt werdet, nutzt den "Bei Grenzüberschreitung" Trigger in IP-Symcon und deaktiviert den Haken bei "Nachfolgende Ereignisse ausführen". Dadurch wird die Meldung bei einer Überschreitung verschickt. Eine neue Meldung aber erst, wenn der Regenwert wieder unterhalb der Schwelle lag.


    PHP-Code:
    <?
    /*
     dwddg = Deutschland
     
     dbad = Baden-Württemberg
     dbay = Bayern
     dber = Brandenburg/Berlin
     dhes = Hessen
     dmec = Mecklenburg-Vorpommern
     dnie = Niedersachsen/Bremen
     dnrw = NRW
     drlp = Rheinland-Pfalz/Saarland
     dsac = Sachsen
     dsan = Sachsen-Anhalt
     dsch = Schleswig-Holstein/Hamburg
     dtue = Thüringen
    */

    $area "dsch";

    /*
     Die Koordinaten könnt ihr am einfachsten herausfinden, indem ihr das Bild in Paint öffnet und mit dem Cursor auf euren Punkt geht. Dann könnt ihr in der Statuszeile von Paint die X/Y Koordinaten ablesen.
    */
    $homeX 324;
    $homeY 179;

    /*
     Der Radius gibt an, wie viele Pixel um euren Ort zur Berechnung des Regenwertes genutzt werden sollen
    */
    $homeRadius 10;

    //Ab hier nichts mehr ändern
    $object IPS_GetObject($IPS_SELF);
    $parentID $object['ParentID'];

    //Installer
    if ($IPS_SENDER == "Execute") {
       
    IPS_SetHidden($IPS_SELFtrue);
       
    IPS_SetName($IPS_SELF"Auslese-Skript");
       
    $parentObject IPS_GetObject($parentID);
       if (
    $parentObject['ObjectType'] !== 1)
       {
           
    $instanceID IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
           
    IPS_SetParent($instanceID$parentID);
           
    $parentID $instanceID;
           
    IPS_SetParent($IPS_SELF$parentID);
           
    IPS_SetName($instanceID"Unwetterzentrale");
       }
       
    IPS_SetScriptTimer($IPS_SELF3600);
    }

    //Auf 15 Minuten Takt Synchronisieren
    $offset = (integer)date("s") + ((integer)date("i") % 15) * 60;
    if(
    $offset != 0) {
       
    IPS_SetScriptTimer($IPS_SELF,900 $offset);
    } else {
       
    IPS_SetScriptTimer($IPS_SELF,900);
    }

    //Zeit berechnen
    $minute=floor(date("i") / 15) * 15;
    $dateline=mktime(date("H"), $minute0date("m"), date("d"), date("y"));

    //Radarbild Downloaden
    $opts = array(
      
    'http'=>array(
        
    'method'=>"GET",
        
    'max_redirects'=>1
      
    )
    );
    $context stream_context_create($opts);

    $localImage IPS_GetKernelDir()."\\radar.gif";

    $remoteImage "http://www.wetteronline.de/daten/radar/$area/".gmdate("Y"$dateline)."/".gmdate("m"$dateline)."/".gmdate("d"$dateline)."/".gmdate("Hi"$dateline).".gif";
    $data = @file_get_contents($remoteImagefalse$context);
    if(
    $data === false) {
        
    //Altes Bild laden
       
    $dateline -= 15*60;
        
    $remoteImage "http://www.wetteronline.de/daten/radar/$area/".gmdate("Y"$dateline)."/".gmdate("m"$dateline)."/".gmdate("d"$dateline)."/".gmdate("Hi"$dateline).".gif";
        
    $data = @file_get_contents($remoteImagefalse$context);
        if(
    $data === false) {
            return;
        }
    }

    if((
    strpos($http_response_header[0], "200") === false)) {
     return;
    }

    file_put_contents($localImage$data);

    //Radarbild auswerten
    $im ImageCreateFromGIF ($localImage);

    //Stärken 
    $regen[6] = imagecolorresolve  ($im250,2,250); 
    $regen[5] = imagecolorresolve  ($im156,50,156); 
    $regen[4] = imagecolorresolve  ($im,  28,126,220); 
    $regen[3] = imagecolorresolve  ($im,  44,170,252); 
    $regen[2] = imagecolorresolve  ($im,  84,210,252); 
    $regen[1] = imagecolorresolve  ($im172,254,252);  

    //Pixel durchgehen
    $regenmenge 0;
    for(
    $x=$homeX-$homeRadius$x<=$homeX+$homeRadius$x++) {
       for(
    $y=$homeY-$homeRadius$y<=$homeY+$homeRadius$y++) {
          
    $found array_search(imagecolorat($im$x$y), $regen);
          if(!(
    $found === FALSE)) {
             
    $regenmenge+=$found;
          }
       }
    }

    // Bereich zeichnen
    $schwarz ImageColorAllocate ($im000);
    $rot ImageColorAllocate ($im25500);
    imagerectangle($im$homeX-$homeRadius$homeY-$homeRadius$homeX+$homeRadius$homeY+$homeRadius$rot);
    imagesetpixel($im$homeX$homeY$rot);
    imagegif($im$localImage);

    imagedestroy($im);

    $mid CreateImageByName($parentID"Radarbild""radar.gif");
    IPS_SendMediaEvent($mid);

    $vid CreateVariableByName($parentID"Regenwert"1);
    SetValue($vid$regenmenge);

     function 
    CreateVariableByName($id$name$type$profile "") {
      global 
    $IPS_SELF;
      
    $vid = @IPS_GetVariableIDByName($name$id);
      if(
    $vid === false) {
       
    $vid IPS_CreateVariable($type);
       
    IPS_SetParent($vid$id);
       
    IPS_SetName($vid$name);
       
    IPS_SetInfo($vid"this variable was created by script #$IPS_SELF");
       if(
    $profile !== "") { IPS_SetVariableCustomProfile($vid$profile); }
      }
      return 
    $vid;
     }
     
     function 
    CreateImageByName($id$name$filename) {
      global 
    $IPS_SELF;
      
    $mid = @IPS_GetMediaIDByName($name$id);
      if(
    $mid === false) {
       
    $mid IPS_CreateMedia(1);
       
    IPS_SetParent($mid$id);
       
    IPS_SetName($mid$name);
       
    IPS_SetInfo($mid"this media was created by script #$IPS_SELF");
       
    IPS_SetMediaFile($mid$filenametrue);
      }
      return 
    $mid;
     }

    ?>
    paresy
    Geändert von paresy (01.06.16 um 11:50 Uhr)

  2. #2
    Registriert seit
    Sep 2008
    Beiträge
    204

    kannst du uns einen "test" wert liefern, dann kann man das system wenigstens "fertig" installieren. Sonst müssen wir warten bis es regnet... :-)
    pi mal daumen reicht, ich hab grad um die 500 und bei mir regnets nicht!

  3. #3
    Registriert seit
    Oct 2005
    Ort
    Gehrden / Hannover
    Beiträge
    501

    Ja geil, wollte mein Script grad Posten. Hatte ich vor zwei Tagen auch fertig gemacht (ziemlich genau SO)

    Pöh, dann mach ich eben am IPS-Webinterface weiter
    FHZ1300 | 2x JeeLink | AVR-NETIO | FS20 | 1-Wire | 2x XBEE Pro | 4x XBEE 2.5 (als Zigbee Mesh) | eDip | 7x Jeenode | JeeNode EtherCard | CUL Stick
    3x Fritz!Box, WHS, XBMC, IPS-Server (Atom)

  4. #4
    Registriert seit
    Feb 2009
    Beiträge
    30

    danke für das tolle Script.

    noch was entdeckt:

    drlp = Rheinland-Pfalz/Saarland

  5. #5
    Registriert seit
    Dec 2006
    Ort
    Oberkrämer bei Berlin
    Beiträge
    1,456

    Ob es richtig funktioniert wird sich bei Unwetter zeigen.
    Das Radar.gif wird aber etwas unüblich im obersten IP-Symcon Ordner abgelegt.
    MfG: Heiner_________________IPS5.2, NUC-i5 Lüfterlos, SSD, Win10Home, 24/7; IPS-Mobile Android V5.1.0; FHZ1300PC: FS20, HMS100, KS300, PS50, FHT; WDE1; Harmony1100 + Wandlung einzelner FHT80TF in FS20 Adressen mit FS20Manager; 3x ChromoflexII + 14x IIIRC; DMX4ALL, ArtNet (Dimmer6); IPS-868: EKM, RGBW, WDT, JKM/Termojet; 1Wire über blauem DS9490R; HomeMatic: CCU3, LAN_Adapter, Hm + HmIP, Winmatic; XBee Pro: Roomba;

  6. #6
    Registriert seit
    Dec 2006
    Ort
    Friedberg (Hessen)
    Beiträge
    1,710

    Zitat Zitat von Heidewinkler Beitrag anzeigen
    Ob es richtig funktioniert wird sich bei Unwetter zeigen.
    Du kannst es ja mal testen, indem Du den Homeradius größer machst.
    Aber Vorsicht: Die Grösse muss immer im Rahmen des Bildes bleiben, sonst hängt sich der Script auf.
    Viele Grüße Rainer
    Windows 10,IPS V 5.2 + Testsysteme -- FHZ -- PiVCCU3 -- Phillips Hue --1-Wire, Anwesendheits-Tracker, ESP-Easy und viele, viele Spielereien , I-View, Raspberry 2, 3, Zero, Tinkerboard, Nello, Nuki

  7. #7
    Registriert seit
    Sep 2008
    Beiträge
    204

    bei welchem Wert lasst ihr euch denn warnen?

  8. #8
    Registriert seit
    Jun 2007
    Ort
    Hockenheim
    Beiträge
    1,798

    Standard Warnlevel

    Hi,

    ich habe bei mir 1200 als Stufe für ein e-mail an meine Firmenadresse definiert.

    Jedoch werte ich die verschiedenen Pixelwerte noch detaillierter aus und schreibe diese Ergebnisse, je nach Höhe, mit "Es wird trocken bleiben" - < 50, "Es wird leicht regnen" 51-500, Es wird stark regnen" 501-1199, "Unwetterwarnung" >1200 in eine String Variable.

    Die Abfrage mache ich über eine if Abfrage.

    Gruss
    B71
    IP-Symcon V4.4,MAC mini mit Parallels 12 und W10 und PI 5.0 Testing,15" Touch Screen,iPADs,Sonos,FHZ1300,HM Gateways,Allnet 3691,USB-T 868,Homematic: 140 Instanzen, FS20: 6 Instanzen, Allnet: 1 Instanz

  9. #9
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,128

    Standard Besten Dank!!

    @Paresy

    Klasse Script! Läuft super!


    Besten Dank


    Martin

  10. #10
    Registriert seit
    Sep 2008
    Ort
    nr KS
    Beiträge
    1,945

    Zitat Zitat von Bernardo71 Beitrag anzeigen
    Hi,

    ich habe bei mir 1200 als Stufe für ein e-mail an meine Firmenadresse definiert.

    Jedoch werte ich die verschiedenen Pixelwerte noch detaillierter aus und schreibe diese Ergebnisse, je nach Höhe, mit "Es wird trocken bleiben" - < 50, "Es wird leicht regnen" 51-500, Es wird stark regnen" 501-1199, "Unwetterwarnung" >1200 in eine String Variable.

    Die Abfrage mache ich über eine if Abfrage.

    Gruss
    B71
    sollte man bei verdoppeln des homeradius die entsprechend auszuwertende regenmenge vervierfachen ? damit die proportionen wieder stimmen ? das quadrat wird ja dann viermal so gross
    IP-Symcon Version: 5.3 unlim auf WIN7pro
    Shuttle XS35V4,HPSlate21,IPS-868,HM,HMip,FS20,piVCCU3,Silex4000,IPcams, FB 7850, TM-D710GE(GPS), Raspi3, Libratone
    Software für VDE / Gebäude Doku

Ähnliche Themen

  1. Unwetterzentrale mit Statusausgabe über Soundkarte
    Von wesseli im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 25
    Letzter Beitrag: 18.07.09, 13:22
  2. IP-Symcon-Unwetterzentrale
    Von steiner im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 78
    Letzter Beitrag: 28.06.09, 11:21
  3. Unwetterzentrale
    Von Bussard013 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 3
    Letzter Beitrag: 19.09.08, 18:46