+ Antworten
Seite 3 von 3 ErsteErste 1 2 3
Ergebnis 21 bis 25 von 25
  1. #21
    Registriert seit
    Jan 2014
    Ort
    Bayern Lkr: TS
    Beiträge
    25

    Servus,
    ich habe nun mal selbst etwas "gezaubert" (dirty copy&paste)
    Nicht "schön", der Zweck heiligt die Mittel!

    Es gibt nun bei mir zwei Skripte.
    Das erste Skript holt die XML-Struktur mit den Daten aus dem Web ab.
    Das zweite Skript macht aus den Daten ein Bild (Danke an TomW) und Schaltvorschläge (Danke an zoerner)

    Achtung, das Ganze ist "Low-Level", die automatische Anlage der Variablen aus den ersten Skripten (Tom und zoerner) habe ich weg gelassen!!

    Mir war wichtig, dass es stabil läuft und Schaltvorschläge gibt

    GSI-Abrufen:
    PHP-Code:
    <? 
    // hier die Postleitzahl Deines Wohnorts eintragen
    $plz=10115;
    //Speicherort der XML
    $GSI_WERTE 51024 /*[Virtuell\GSI_zoe\GSI-abrufen\GSI_WERTE]*/;
    setvalue($GSI_WERTESys_GetURLContentEx("http://mix.stromhaltig.de/gsi/json/idx/$plz.json",Array("Timeout"=> 30000)));
    ?>
    Schaltwerte und Grafik aktualisieren:
    PHP-Code:
    <?
    //Speicherort der XML
    $GSI_WERTE getvalue(51024 /*[Virtuell\GSI_zoe\GSI-abrufen\GSI_WERTE]*/);

    $GSI_arr=json_decode($GSI_WERTE,true); 
    for (
    $i=0;$i<count($GSI_arr);$i++){ 
        if (
    $GSI_arr[$i]['epochtime']>=(time()-intval(date("i"))*60-intval(date("s")))){ 
            
    $GSI[$GSI_arr[$i]['epochtime']]=$GSI_arr[$i]['eevalue']; 
        } 


    if (
    $gsiid=@IPS_GetObjectIDByName("GSI",IPS_GetParent($_IPS['SELF']))){ 
       
    setvalue($gsiid,$GSI[array_keys($GSI)[0]]); 

    else{ 
       
    $gsiid=IPS_CreateVariable(1); 
       
    IPS_SetName($gsiid"GSI"); 
       
    IPS_SetParent($gsiidIPS_GetParent($_IPS['SELF'])); 
       
    IPS_SetVariableCustomProfile($gsiid"~Intensity.100"); 
       
    setvalue($gsiid,$GSI[array_keys($GSI)[0]]); 


    $stepcol=array( 
        
    1=>"FF0000"
        
    2=>"FF5500"
        
    3=>"FFAA00"
        
    4=>"FFFF00"
        
    5=>"BDEC00"
        
    6=>"7ADA00"
        
    7=>"38C700" 
    ); 
    $i=0;$width=800;$height=30
    $ImageFile IPS_GetKernelDir()."media/Gruenstromindex.png"
    $MediaName="Grünstromindex"

    $im imagecreatetruecolor($width$height); 
    imagefilledrectangle ($im00imagesx($im) ,imagesy($im),0); 
    $transparenz ImageColorTransparent($imimagecolorexact($im000)); 
    ImageColorTransparent($im$transparenz); 


    foreach (
    $GSI as $ts=>$wert){ 
        
    $step=round(floatval($wert)*count($stepcol)/100); 
        
    imagefilledrectangle ($imround($width/24*$i), -1round($width/24*($i+1)) ,imagesy($im),hexdec($stepcol[$step])); 
        
    imagerectangle         ($imround($width/24*$i), -1round($width/24*($i+1)) ,imagesy($im),imagecolorexact($im000)); 
        
    imagestring($im1round($width/24*($i+0.5))-(imagefontwidth(1) * strlendate("G",$ts) ))/2,  20date("G",$ts) ,hexdec("000000")); 
        
    imagestring($im1round($width/24*($i+0.5))-(imagefontwidth(1) * strlen$wert."%" ))/210$wert."%" ,hexdec("000000")); 
        if (
    $i++==23) break; 

    imagefilledrectangle ($imround($width/24*(23-date("G",$ts)))-20round($width/24*(23-date("G",$ts)))+,imagesy($im),hexdec("000000")); // Tagestrenner 

    imagepng($im,$ImageFile); 
    if (@!
    $MediaID=IPS_GetMediaIDByName($MediaName,IPS_GetParent($_IPS['SELF']))){ 
      
    $MediaID IPS_CreateMedia(1);                  // Image im MedienPool anlegen 
      
    IPS_SetMediaFile($MediaID$ImageFiletrue);   // Image im MedienPool mit Image-Datei verbinden 
      
    IPS_SetName($MediaID$MediaName); // Medienobjekt benennen 
      
    IPS_SetParent($MediaIDIPS_GetParent($_IPS['SELF'])); // Medienobjekt einsortieren unter dem Objekt mit der ID "12345" 
      

    IPS_SendMediaEvent($MediaID);

        
    $gsi=json_decode($GSI_WERTE); 
        for(
    $i=0;$i<24;$i++) { 
              
    $gsi_max=0
              
    $j_sel=-1
                for(
    $j=0;$j<24;$j++) { 
                   if(
    $gsi[$j]->eevalue>$gsi_max) { $gsi_max=$gsi[$j]->eevalue$j_sel=$j; } 
                } 
                if(
    $j_sel>-1) { 
                    if(
    $j_sel==0) { 
                            
    SetValue(IPS_GetObjectIDByName (($i+1)."in24" $IPS_SELF ),true); 
                    } else { 
                            
    SetValue(IPS_GetObjectIDByName (($i+1)."in24" $IPS_SELF ),false); 
                            
    $gsi[$j_sel]->eevalue=-1
                    } 
                } 
        }
    ?>
    Und so sieht die ganze Struktur aus:
    Name:  GSI-Skripte.png
Hits: 224
Größe:  44.2 KB
    Grüße von jber62 (alias JoeB)
    ZOTAC i5 mit HM, Enocean, IP-868; ModBus-PoKeys

  2. #22
    Registriert seit
    Jan 2014
    Ort
    Bayern Lkr: TS
    Beiträge
    25

    Zitat Zitat von zoernert Beitrag anzeigen
    Nach dem zweiten Ausführen werden die variablen "1in24","2in24"... gesetzt. Diese können zum Schalten von Geräten verwendet werden und besagen wie viel Stunden Strom ein Gerät innerhalb von 24 Stunden bekommen soll. Ein Gerät, welches auf die Variable "6in24" hört wird somit für durchschnittlich 6 Stunden je Tag Storm haben..
    Servus 'zoernert',
    leider klappt das nicht so wie ich mir es vorstelle :-(

    Zum schalten von Verbrauchern sind, nach Zeiten gestaffelte Variablen" nicht von vorteil.

    Um individuell und zielgerichtet agieren zu können, muss man neben dem Zeitraum (wie lange) auch den Endzeitpunkt (wann fertig) berücksichtigen (der Startzeitpunkt ist oftmals nicht so wichtig).

    Ich komme daher auf das Angebot "was will die IP-Symcon Gemeinde" zurück :-) (ich bin aber nicht "die Gemeinde" )
    1. Skript zur Speicherung der XML (des GSI) um jederzeit (mehrmals die Stunde) darauf zugreifen zu können -> läuft schon.
    2. Funktion welche mit dem Parameter (duration, endtime) aufgerufen wird.
    Die Rückgabe ist eine Startzeit und der während der Dauer gültige mittlere GSI.

    Mit diesen Werten kann man Timer setzten (Startzeit/Endzeit) und Prioritäten fest legen (höchste GSI-Wert hat Vorrang)

    Mit dieser Funktion könnte ich (und andere GSI-Befürworter) die Lasten zielgerichtet anstarten.

    Danke
    Grüße von jber62 (alias JoeB)
    ZOTAC i5 mit HM, Enocean, IP-868; ModBus-PoKeys

  3. #23
    Registriert seit
    Jan 2014
    Ort
    Bayern Lkr: TS
    Beiträge
    25

    Standard Skript läuft nicht (stabil)

    Hallo Gemeinde,
    nur als Info: ich habe die Skripte wieder deaktiviert, da die IPS-Performance darunter leidet und die Zuverlässigkeit sporadisch nicht gegeben war.

    Trotzdem bin ich der Meinung, das wir in diese Richtung (Strom dann zu verbrauchen wenn genügend vorhanden ist) gehen müssen.
    Grüße von jber62 (alias JoeB)
    ZOTAC i5 mit HM, Enocean, IP-868; ModBus-PoKeys

  4. #24
    Registriert seit
    Jul 2011
    Ort
    Wiesbaden
    Beiträge
    396

    Standard Vorsicht bei Gefrierschränken

    Vorsicht mit dem Ein- und Ausschalten bei Gefrierschränken. Die haben teilweise auch Lüfter und Heizungen verbaut.

    Generell würde es da wahrscheinlich am ersten Sinn machen die Solltemperatur anhand des GSI zu ändern

    Für Speicher-Heizungen super 🙂
    IP-Symcon 5.0 auf Raspberry PI / Windows / Docker / Synology (Docker)
    Homematic CCU2, Wago und Mikrocontroller

  5. #25
    Registriert seit
    Sep 2010
    Ort
    Mauer
    Beiträge
    29

    Der GrünstromIndex (GSI) wurde mittlerweile in etlichen anderen Werkzeugen verbaut und hat eine neue Heimat bekommen. Anlässlich dessen gibt es auch eine neue Version des Scriptes mit etwas anderen Funktionen. Die Performance Probleme sollten gelöst sein.

    Bei Fragen bitte PM an mich.

    Das Script liegt nun auf GitHub:
    GitHub - zoernert/ips_corrently: Adapter Script für die Verwendung von IP-Symcon mit dem Corrently System

    Viel Spaß bei der Nutzung
    Strom: Nachhaltigkeit durch Eigentum von der Erzeugung bis zum Verbrauch
    https://blog.stromhaltig.de/

Ähnliche Themen

  1. Schalten von einem Externen Programm
    Von map im Forum Skripte, PHP, SQL
    Antworten: 12
    Letzter Beitrag: 30.06.13, 07:32
  2. frage zu aktuellem stand und mehreren auflösungen
    Von pleibling im Forum WebFront
    Antworten: 2
    Letzter Beitrag: 24.09.10, 07:35
  3. AKM: Schalten nach 10min abwesend
    Von Sdettmann im Forum IPS-868 / ProJET, XBee, ZigBee, XPort
    Antworten: 7
    Letzter Beitrag: 05.09.10, 16:19
  4. Auf der Suche nach einem Gurtwickler...
    Von Ferengi-Master im Forum Haustechnik
    Antworten: 3
    Letzter Beitrag: 12.08.10, 20:25
  5. Gegenteiliges schalten mit einem Script
    Von Professorakiera im Forum Skripte, PHP, SQL
    Antworten: 18
    Letzter Beitrag: 15.11.07, 15:06