+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 16
  1. #1
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,692

    Lightbulb Trend-Icon [Designer]

    Um den Temperaturverlauf vom Tag in einem kleinen 48*48 "Trend-Icon" (siehe Bild)
    im Designer (Dashboard) darzustellen, verwende ich folgendes Skript:
    PHP-Code:
    $breite 48;         // Pixel
    $hoehe 48;          // Pixel
    $y_min 15;          // z.B. 15 Grad
    $y_max 25;          // z.B. 25 Grad
    $y_hline 60;        // Horizontale Linie z.B 20 Grad
    $gr_hi 45;         // an diesem Wert wird in ROT gezeichnet
    $gr_lo 18;              // unter diesem Wert wird in BLAu gezeichnet
    // sonst wird in GRÜN gezeichnet
    $temp GetValue(53567 /*[OG\Flur\Kamin\Temperature]*/);    // aktuelle Temperatur
    //echo "Temp: $temp\n";
    // #### Temperaturen in Array speichern ####
    $string_array GetValue(30577 /*[OG\Flur\Kamin\Trend]*/); // ARRAY
    $temp_count $breite //Anzahl zu speichernder Temps
    //Array auf vorhandensein prüfen / initialisieren
    if ($string_array == "")
    {
       
    $temp_array array_fill(0$temp_count$temp);  // Wenn nicht vorhanden mit 0 Initialisieren
       
    echo "INI\n";
    }else{
       
    $temp_array wddx_deserialize($string_array);  // Array aus String gewinnen
    }
    array_unshift($temp_array$temp); // Vorn neuen Wert anfügen
    if (count($temp_array) > $temp_count)  // Wenn länger als soll
       
    unset($temp_array[$temp_count]);  // Letzen Wert entfernen
    //print_r($temp_array); //nur debug-Ausgabe
    $im=imagecreate($breite,$hoehe);
    $white=imagecolorallocate($im,255,255,255);
    imagecolortransparent($im,$white); // Making Image Transparent
    $lightblue=imagecolorallocate($im,20,93,233);
    $black=imagecolorallocate($im,0,0,0);
    $white=imagecolorallocate($im,255,255,255);
    $blue=imagecolorallocate($im,128,55,225);
    $grau_gruen=imagecolorallocate($im,0,128,128);
    $yellow=imagecolorallocate($im,255,255,0);
    $rgb_red=imagecolorallocate($im,255,0,0);
    $rgb_gruen=imagecolorallocate($im,0,255,0);
    $rgb_blau=imagecolorallocate($im,0,0,255);
    $zbv_color=imagecolorallocate($im,128,192,128);
    for(
    $x=0$x$breite$x $x 1) {   // 0 bis 47
       
    $y = (($temp_array[$breite-1-$x])* $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
        if ((
    $temp_array[$breite-1-$x]) > $gr_hi){
            
    $y0 = ($gr_lo $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
            
    imageline  ($im$x$hoehe-1$x, ($hoehe -$y0), $rgb_blau  );
            
    $y1 = ($gr_hi  $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
            
    imageline  ($im$x$hoehe-1-$y0$x, ($hoehe -$y1), $rgb_gruen  );
            
    imageline  ($im$x$hoehe-1-$y1$x, ($hoehe -$y), $rgb_red  );
       }
       if (((
    $temp_array[$breite-1-$x]) <= $gr_hi) and (($temp_array[$breite-1-$x]) >= $gr_lo)) {
            
    $y0 = ($gr_lo $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
            
    imageline  ($im$x$hoehe-1$x, ($hoehe -$y0), $rgb_blau  );
            
    imageline  ($im$x$hoehe-1-$y0$x, ($hoehe -$y), $rgb_gruen  );
       }
       if ((
    $temp_array[$breite-1-$x]) < $gr_lo){
          
    imageline  ($im$x$hoehe-1$x, ($hoehe -$y), $rgb_blau  );
       }
    }
    // Mittelwert
    $mw array_sum($temp_array) / count($temp_array);
    //echo "Mittelwert: $mw\n";
    $y = ($mw $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
    imageline  ($im0,($hoehe -$y), $breite, ($hoehe -$y), $grau_gruen);
    $y = ($y_hline $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
    imageline  ($im0,($hoehe -$y), $breite, ($hoehe -$y), $yellow);
    ImageString ($im2836number_format($temp1".""." ) . "°C"$zbv_color);
    imagepng($imIPS_GetKernelDir()."media\\trend_temp_bad.png");
    SetValue(30577 /*[OG\Flur\Kamin\Trend]*/wddx_serialize_value($temp_array) ); 
    Es muss lediglich die Datenquelle: $temp = GetValue(... angepasst werden sowie
    eine Variable vom Typ "String" angelegt werden ($string_array = GetValue(...) - in ihr werden dann die 48 Werte gespeichert (FIFO / Ringspeicher).
    Und zuletzt der Name des Icon: imagepng($im, IPS_GetKernelDir()."media\\trend_temp_bad.png");
    IP-Symcon erkennt automatisch diese neue Datei uns stellt diese dem "Media-Pool" zur Verfügung.
    Getriggert wird das Skript alle 30 Minuten > macht also 48 Werte pro Tag - so groß wie das Icon.
    Farben und Grenzen für die Werte nach eigenem Geschmack / Gegebenheiten ...
    Das Ganze soll nicht RRD-Tool o.ä. ersetzen - lediglich eine Ergänzung / Anregung für eigene Skripte.

    MST

    Achtung: extension = "php_gd2.dll" in der PHP.ini nicht vergessen!

    Siehe auch:
    http://www.ipsymcon.de/forum/44699-post3.html
    http://www.ipsymcon.de/forum/45068-post11.html
    Geändert von steiner (09.09.08 um 19:55 Uhr)

  2. #2
    Registriert seit
    Jun 2007
    Ort
    Hockenheim
    Beiträge
    1,800

    Standard Fehlermeldung Imagecreator....

    INI

    Fatal error: Call to undefined function imagecreate() in [Kategorienspeicher\Skripte\Trendicon Keller] on line 27

    Ist eine weitere DLL irgendwo einzubinden um Images erstellen zu können ?

    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

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

    Hast Du die php_gd2.dll im IPS-Verzeichnis und auch in die PHP.ini eingebunden ?
    Viele Grüße Rainer
    Windows 10,IPS V 5.3 + Testsysteme -- FHZ -- PiVCCU3 -- Phillips Hue --1-Wire, Anwesendheits-Tracker, ESP-Easy und viele, viele Spielereien , I-View, Rasperry 3, Zero, Tinkerboard, Nello, Nuki

  4. #4
    Registriert seit
    Jun 2007
    Ort
    Hockenheim
    Beiträge
    1,800

    Ja. Und IPS Service gestoppt und wieder gestartet...
    Sowohl Datei, als auch Eintrag in php.ini sind an Ihrem Platz.
    Muss der Server komplett durchgebootet werden ?
    Doch wohl eher nicht, oder ?
    Geändert von Bernardo71 (09.09.08 um 20:39 Uhr)
    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

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

    Zitat Zitat von Bernardo71 Beitrag anzeigen
    Muss der Server komplett durchgebootet werden ?
    Doch wohl eher nicht, oder ?
    Ehrlich gesagt, keine Ahnung. Ich hätte IPS runtergefahren und den Computer mal neu gestartet.
    Anderer Gedanke PHP-Version ? (obwohl ich das nicht vermute)

    Aber die passende DLL ?

    Schau dir diesen Beitrag an: http://www.ipsymcon.de/forum/f18/php...l-nutzen-5426/
    Geändert von audi2010 (10.09.08 um 13:41 Uhr)
    Viele Grüße Rainer
    Windows 10,IPS V 5.3 + Testsysteme -- FHZ -- PiVCCU3 -- Phillips Hue --1-Wire, Anwesendheits-Tracker, ESP-Easy und viele, viele Spielereien , I-View, Rasperry 3, Zero, Tinkerboard, Nello, Nuki

  6. #6
    Registriert seit
    Jun 2007
    Ort
    Hockenheim
    Beiträge
    1,800

    Standard Danke

    Ich schaue heute abend mal.
    Mag´sein, dass die DLL falsch ist, da ich mir die einfach im Netz gejagt hatte.

    @ Herr Steiner
    Könnten Sie Ihre DLL mal posten. Wäre das eventuell möglich ?
    Denn diese scheint ja offensichtlich zu funktionieren und man könnte die Fehlerquelle ausschliessen.

    Gruss
    B71
    Geändert von Bernardo71 (10.09.08 um 13:54 Uhr)
    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

  7. #7
    Registriert seit
    May 2005
    Ort
    Leipzig
    Beiträge
    3,964

    Hallo B71,

    Zitat Zitat von Bernardo71 Beitrag anzeigen
    @ Herr Steiner
    Könnten Sie Ihre
    nur als Hinweis:
    wir sind hier im Forum immer in der DU Form unterwegs.


    Gruss Uwe

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

    OK. Imagecreate läuft.
    Es war die DLL Datei.
    Ich hänge Sie mal der Vollständikeit halber hier an.

    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
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,692

    ... und hier ein "doppeltes Icon" - weil zwei Array:

    Unten: in Blau / Grün die Temperaturkurve und
    Oben: in "pastell_gelb_orange" die EIN / AUS Schalt-Zustände einer 2-Punkt-Regelung (läuft sehrt gut!)

    Verbesserungsvorschläge sind gern willkommen ...

    MST

    PHP-Code:
    $breite 48;         // Pixel-Breite des Icon
    $hoehe 48;          // Pixel- Höhe des Icon
    $y_min 15;          // minimaler Wert z.B. 15 Grad
    $y_max 25;          // maximaler Wert z.B. 25 Grad
    $y_hline 22;        // Horizontale Linie zeichnen z.B.  20 Grad
    $gr_hi 24;         // ab diesem Wert wird in ROT gezeichnet
    $gr_lo 18;              // unter diesem Wert wird in BLAu gezeichnet > // sonst wird in GRÜN gezeichnet

    // hier die Daten-Quelle angeben
    $wert GetValue(11142 /*[OG\Büro\HM Raumtermostat (Temp/Feuchte)\TEMPERATURE]*/);    // z.B. aktuelle Temperatur
    //$wert = 25;
    $status GetValue(29141 /*[OG\Büro\E-Heizng\StatusVariable]*/);
    //$status = False;
    //$status = True;
    //echo $status;
    // ab hier nichts ändern !!!
    $w_str_array GetValue(59587 /*[OG\Büro\Trend\Temp Trend]*/); // ARRAY
    $s_str_array GetValue(44067 /*[OG\Büro\Trend\Status Trend]*/); // ARRAY

    $count $breite//Anzahl zu speichernder Temps
    if ($w_str_array == "")
    {
       
    $wert_array array_fill(0$count$wert);  // Wenn nicht vorhanden mit 0 Initialisieren
       
    echo "INI\n";
    }else{
       
    $wert_array wddx_deserialize($w_str_array );  // Array aus String gewinnen
    }

    array_unshift($wert_array$wert);
    if (
    count($wert_array) > $count)
       unset(
    $wert_array[$count]);

    if (
    $s_str_array == "")
    {
       
    $status_array array_fill(0$count$status);  // Wenn nicht vorhanden mit 0 Initialisieren
       
    echo "INI\n";
    }else{
       
    $status_array wddx_deserialize($s_str_array);  // Array aus String gewinnen
    }

    array_unshift($status_array$status);
    if (
    count($status_array) > $count)
       unset(
    $status_array[$count]);

    $im=imagecreate($breite,$hoehe);
    $white=imagecolorallocate($im,255,255,255);
    $lightblue=imagecolorallocate($im,20,93,233);
    $black=imagecolorallocate($im,0,0,0);
    $white=imagecolorallocate($im,255,255,255);
    $blue=imagecolorallocate($im,128,55,225);
    $grau_gruen=imagecolorallocate($im,0,128,128);
    $yellow=imagecolorallocate($im,255,255,0);
    $rgb_red=imagecolorallocate($im,255,0,0);
    $rgb_gruen=imagecolorallocate($im,0,255,0);
    $rgb_blau=imagecolorallocate($im,0,0,255);
    $zbv_color=imagecolorallocate($im,128,192,128);
    $pastell_gelb_orange=imagecolorallocate($im,208,227,0);
    imagecolortransparent($im,$white);

    $y0 = ($gr_lo $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
    $y1 = ($gr_hi  $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
    for(
    $x=0$x$breite$x $x 1) {   // 0 bis 47
        //echo $wert_array[$breite-1-$x]."\n";
        
    $y = (($wert_array[$breite-1-$x])* $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
        if ((
    $wert_array[$breite-1-$x]) > $gr_hi){
            
    imageline  ($im$x$hoehe-1$x, ($hoehe -$y0), $rgb_blau);
            
    imageline  ($im$x$hoehe-1-$y0$x, ($hoehe -$y1), $rgb_gruen);
            
    imageline  ($im$x$hoehe-1-$y1$x, ($hoehe -$y), $rgb_red);
       }
       if (((
    $wert_array[$breite-1-$x]) <= $gr_hi) and (($wert_array[$breite-1-$x]) >= $gr_lo)) {
            
    imageline  ($im$x$hoehe-1$x, ($hoehe -$y0), $rgb_blau);
            
    imageline  ($im$x$hoehe-1-$y0$x, ($hoehe -$y), $rgb_gruen);
       }
       if ((
    $wert_array[$breite-1-$x]) < $gr_lo){
          
    imageline  ($im$x$hoehe-1$x, ($hoehe -$y), $rgb_blau);
       }
        
    $s_array $status_array[$breite-1-$x];
        if(
    $s_array == 1){
           
    imageline  ($im$x0$x, ($hoehe -$y), $pastell_gelb_orange);
         }
    }
    $mw array_sum($wert_array) / count($wert_array);
    $y = ($mw $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
    // Mittel-Wert-Linie - ggf. entfernen
    imageline  ($im0,($hoehe -$y), $breite, ($hoehe -$y), $grau_gruen);
    $y = ($y_hline $breite/($y_max $y_min) -($breite/($y_max $y_min)*$y_min));
    //imageline  ($im, 0,($hoehe -1 - $y), $breite, ($hoehe -1 - $y), $yellow);
    ImageString ($im2836number_format($wert1".""." ) . "°C"$zbv_color);
    imagepng($imIPS_GetKernelDir()."media\\trend_temp_buero.png");
    SetValue(59587 /*[OG\Büro\Trend\Temp Trend]*/wddx_serialize_value($wert_array) );
    SetValue(44067 /*[OG\Büro\Trend\Status Trend]*/wddx_serialize_value($status_array) ); 

  10. #10
    Registriert seit
    Oct 2006
    Beiträge
    50

    Hallo,

    liege ich richtig, dass vorgenanntes Script nur mit V2 funktioniert. Begründet ist dies meiner Einschätzung nach mit folgender Code Zeile:
    $string_array = GetValue(30577 /*[OG\Flur\Kamin\Trend]*/); // ARRAY

    Arrays als quasi Member-Variablen gibt es in V1 nicht, oder liege ich falsch ???

    Einzige Möglichkeit wäre mit einem String zu arbeiten und dann explode bzw. implode zu nutzen richtig ???

Ähnliche Themen

  1. Rollladen-Position [Designer]
    Von steiner im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 2
    Letzter Beitrag: 25.10.08, 18:50
  2. IPS Icon unter Firefox
    Von Heidewinkler im Forum Off Topic
    Antworten: 4
    Letzter Beitrag: 07.08.07, 16:24
  3. Kein Bild vom Icon
    Von Fidi im Forum Dashboard
    Antworten: 4
    Letzter Beitrag: 04.08.06, 13:00
  4. Trend von Temperaturen ermitteln
    Von agotthold im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 7
    Letzter Beitrag: 22.03.06, 22:04