InfoFrame: Digitaler Bilderrahmen (Anzeige von Anrufen, E-Mails, Termine, Wetter...)

Habe mein Infoframe soweit fertig konfiguriert, allerdings wird das Bild an den Rändern abgeschnitten.
Mein Frame ist ein 7" von Dion und hat die Auflösung 800 x 480 ...
Wie kann ich die Ausgabe des Bildes umleiten auf /var/tmp/ftp/uStor01/bild.jpg der FB7270?

Danke und Gruss
Franko_
 
@Tequila74

Ich bin auch kein PHP-Crack, aber in doOutput() überschreibst Du der Reihe nach $Text, so dass zum Schluss nur WhZ ausgegeben wird. Und wenn ich richtig sehe, ist die Variable $current_temp_whz in doOutput() nicht belegt (die XML-Datei wird in doUpdate() ausgelesen, die Werte in die Variablen gepackt und mit Ende der Methode wird alles verworfen...).

Oder andersherum: Die Variablen, die in doUpdate() befüllt werden, existieren beim Aufruf von doOutput() nicht mehr, sondern werden vielmehr neu angelegt (und sind dann halt leer).

Die Infoframe-Skipte funktionieren so, dass in doUpdate() Informationen/Daten eingesammelt und persistiert werden (i.d.R. in der MySQL-DB), und bei der Aufbereitung für die Anzeige aus dieser Datenablage gelesen werden ( doOutput() ) Damit sind Daten sammeln/Ausgabe bauen losgelöst voneinander.
Du musst bei Dir die FHEM Daten entweder zwischenspeichern oder direkt in doOutput() einlesen (nicht zu empfehlen).

Forist Wusel hat mal ein entsprechendes Plugin gebaut. Du findest es in seinem Blog: http://blogdoch.net/index.php?entry=entry110131-000403
 
Zuletzt bearbeitet:
gibts eigentlich ne liste der funktionierenden wlan rahmen?

sowas wäre für mich ideal
 
wer hat denn einen Samsung SPF 85 V ?

welche FW habt ihr da drauf ? hab meinen bekommen diese woche und da ist FW 1004.2 drauf .. wie gibts denn sowas ?
woher kommt die FW ? würde sie auf dem 83 V auch laufen ? ( dann wär am 83 V der win CE bug weg ) wenn jemand die FW hat bitte melden . auf der Samsung Seite find ich nur die "M-CB08S6WW-1003.1_Upgrade.zip" für den 85 V

DANKE
 
Hab hier auch den 85v "gehabt". Fummel bloss nicht an den Firmwares rum. Hab auch den 83v "gehabt" und wollte beide updaten , dabei ist mir ein Fehler unterlaufen und hab die Firmwares verwechselt! Auf dem 83V werkelt nun die Firm für den 85V und auf den 83V die Firm für die 85V.Starten tun sie beide noch und laufen bis zum Setup, aber dann ist ruhe ,da sich die Tasten-bzw Sensoren nicht mehr ansteuern lassen! Folglich kann man auch nicht zurück ,da man nicht mehr in den USB Modus wechseln kann.
Wenn jemand ne Methode weiß,wie man die Firmware trotzdem noch wechseln könnte , immer her damit!
 
Zuletzt bearbeitet:
finds nur seltsam das auf dem 85 V die FW 1004.2 drauf ist , wo kommt die her ?
 
Wird wohl ne interne sein. Die 1004.2 hab ich damals auch gesucht. Ne Anfrage bei Samsung ergab nur folgendes:
Damit das Problem mit Ihrem Gerät behoben werden kann wenden Sie sich bitte an nachstehenden Service
Partner.

AVMS
Campus 21
Liebermanstrasse F01 102A
2345 Brunn an Gebirge
Tel: 0++++++
 
Hallo,

mein Bilderrahmen soll immer die aktuellen Bilder an /var/media/ftp/uStor01 schicken_
Hier ein Auszug der refresh.sh der FB7270
# process checking result
if [ $err == 0 ] && [ $warn == 0 ] && [ $filesize -ge 10 ]
then
mv $localpath/tmp.jpg /var/media/ftp/uStor01/info.jpg
cp /var/media/ftp/uStor01/info.jpg /var/media/ftp/uStor01/info1$
break

Nur leider sehe ich immer die gleichen Bilder, wo muss ich das genau ändern, damit meine Bilder sich aktualisieren?

Danke und Gruss
 
Was müsste ich im Benzin Plugin ändern, damit die Treffer exakt sind?

Beispiel: Ich will lediglich die Orte "Selb" und "Hof" angezeigt bekommen, erhalte aber auch "Hofheim" und "Selbitz"...
 
Hallo Zusammen,

hier meine Lösung des BenzinPlugins Problems: "Einheitspreis Diesel 1.359"

Ich habe dem Plugin nur eine Zeile hinzugefügt. Damit glaubt clever-tanken.de die Anfrage stammt von einem Browser.

Bei mir hat das wunderbar funktioniert.




Gruß
Fritz

Kannst du auch verraten, welche Zeile das wäre.

Code:
<?php
/***************************************************************************
 * InfoFrame (image generator for digital picture frames)
 * Copyright (C) 2010
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see http://www.gnu.org/licenses/
 ***************************************************************************/

class BenzinPlugin implements IPlugin
{
    private $dbconn = NULL;
    private $config = NULL;
    
    public function __construct($dbconn, $config) {
        $this->dbconn = $dbconn;
        $this->config = $config;
    }
    
    
    public function doUpdate() {
    
        // Preise und Tankstellen lesen - fsockopen-Version
        $i=0;
        $ortnumber = 0;
        // jeden in config.ini eingetragenen Ort in file einlesen
        while ($ort = $this->config['ort_'.++$ortnumber]) {
            $uri  = '/liste_payed.asp?'.'ort='.$ort.'&typ='.$this->config['sorte'];
            header("Content-type: text/html");
            $sock = fsockopen("www.clever-tanken.de", 80, $errno, $errstr, 5); // 80 = Port, 5 = Timeout
            if (!$sock) {
                return;//$title = "keine Tankstellen in $orte_fehlen gefunden";
            } else {
                fputs($sock, "GET ".$uri." HTTP/1.1\r\n");
                fputs($sock, "Host: www.clever-tanken.de\r\n");
                fputs($sock, "Connection: close\r\n\r\n");
                while(!feof($sock)) {
                    $zeile[$i++] = trim(fgets($sock,512));
                }
                fclose($sock);
            }
        }
/*
        // Preise und Tankstellen lesen - fopen-Version
        $i=0;
        $ortnumber = 0;
        // jeden in config.ini eingetragenen Ort in file einlesen
        while ($ort = $this->config['ort_'.++$ortnumber]) {
            $url = 'www.clever-tanken.de/liste_payed.asp?ort='.$ort.'&typ='.$this->config['sorte'];
            $file = fopen ($url,"r");
            if (!$file) {
                return;//$title = "keine Tankstellen in $orte_fehlen gefunden";
            } else {
                while (!feof($file)) {
                    $zeile[$i] = fgets($file,512);
                    $i++;
                }
                fclose($file);
            }
        }
*/
        // Datenbankeinträge löschen
        mysql_query("START TRANSACTION", $this->dbconn);
        $query = "Delete from if_tanken";
        mysql_query($query, $this->dbconn) or die('Error, delete query failed');

        // file zeilenweise einlesen und gefiltert entsprechend den Einträgen in config.ini.
        $ortnumber = 0;
        for ($j=0;$j<$i;$j++) {
            // Auswertung aller Orte, siehe config.ini
            while ($ort = $this->config['ort_'.++$ortnumber]) {
                if ((stripos($zeile[$j],$ort))>0) { // Ort gefunden
                    // Tankstelle extrahieren und Adresse formatieren
                    $tankstelle = strip_tags(trim($zeile[$j]),'<br>');    // sinnlose Zeichen und html-Tags außer <br> entfernen
                    $tankstelle = str_replace('<br>','|',$tankstelle);    // <br> mit Texttrenner | ersetzen
                    $adresse = explode('|',$tankstelle);    // Tankstelle im Array umwandeln, für spätere Ausgabe in Datenbank 
                    $merken = 10; // die nach einem gefundenen Ort folgenden 10 Zeilen werden für die Preissuche berücksichtigt
                }
            }
            if ((strpos($zeile[$j],'Euro')>0) or (strpos($zeile[$j],',')>0)) {    // Text Euro gefunden
                if ($merken>=1) { // Text Euro oder Komma in einer der folgenden 10 Zeilen enthalten?
                    $preis = strip_tags(trim($zeile[$j]));
                    $preis = str_replace('Euro','',$preis); // Euro-zeichen umwandeln
                }
            } else {
                if (strpos($zeile[$j],':')>0) {    // Text : gefunden (als Indikator für Datum)
                    if ($merken>=1) { // Text : in einer der folgenden 10 Zeilen enthalten?
                        // Datum extrahieren
                        $d_arr = date_parse(strip_tags(trim($zeile[$j])));
                        // und in Unix-Zeitstempel konvertieren
                        $datum = mktime($d_arr['hour'],$d_arr['minute'],$d_arr['second'],$d_arr['month'],$d_arr['day'],$d_arr['year']);
                        // nur Preise mit aktuellem Datum berücksichtigen, siehe config.ini
                        $alter = $this->config['max_age_in_hours'];
                        if ($datum>=strtotime("-$alter hours")) {    // Preis ist aktuell
                            // Datensatz für Datenbank anlegen, Adresse ohne PLZ
                            $this->addStation($preis, $datum, substr($adresse[2],11).' - '.$adresse[0].' - '.$adresse[1]);
                        }
                    }
                }
            }
            // Zeilenzähler für Datensuche in file
            if ($merken>0) $merken--;
            else $ortnumber = 0; // 10 Zeilen wurden erreicht, dann Orte neu bestimmen
        }    // Ende for-Schleife

        // in Datenbank schreiben
        mysql_query("COMMIT", $this->dbconn);
    }


    public function doOutput($image, $style, $updateData, &$yoffset) {

        if ($updateData) $this->doUpdate();

        $query = "SELECT * FROM `if_tanken` ORDER BY `datum` DESC, `preis` ASC";
        $result = mysql_query($query, $this->dbconn);
        if (mysql_num_rows($result) == 0) return;

        
        // define styles Überschrift "Kraftstoffpreise" nach unten oben verschieben
        $opt_header = array(
            'width' => imagesx($image)-290,
            'line_height' => 16,
            'align' => ALIGN_LEFT
        );

        $opt_entry = array(
            'width' => imagesx($image)-290,
            'height' => 12,
            'line_height' => 12,
            'align' => ALIGN_LEFT,
            'word_wrap_hyphen' => '...',
            'aggressive_word_wrap' => false,
        );

        // print header
        #$text = 'Spritpreis ('.$this->config['sorte'].')';
        $text = ''.$this->config['sorte'].'';
        #imagettftextboxopt($image, 18, 0, 450, $yoffset, $style['textcolor'], $style['font'], $text, $opt_header);
        imagettftextboxopt($image, 14, 0, 407, 153, $style['textcolor'], $style['fontb'], "D:", $opt_header);
        $icon = ImageCreateFromPNG ( 'resources/icons/tank.png' );
        #ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
        ImageCopy($image, $icon, 380, 152, 0, 0, imagesx($icon), imagesy($icon));
        ImageDestroy($icon);
        $yoffset += 10;

        while ($row = mysql_fetch_assoc($result)) {
            $counter++;
           $rest = (mysql_num_rows($result) - $counter) + 1;
            $entrylimit = $this->config['max_displayed_stations'];
            if ( (($entrylimit) && ($counter > $entrylimit)) || (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) ) {
                // show only n mails. If more mails are available show hint "x more stations..."
                $rest = (mysql_num_rows($result) - $counter) + 1;
        #        if ($rest > 1)
        #            $text = "... $rest weitere Tankstellen";
        #        else
        #           $text = "... $rest weitere Tankstelle";
        #        imagettftextboxopt($image, 10, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $opt_header);
                $yoffset += 5;
                break;
           }

            // Preis
            $text = ''; // Euro-Zeichen geht nicht
            $text = $row['preis'].$text;
            // Datum
            #$text = $text.'  '.strftime( "%d.%m.-%H:%M", strtotime($row['datum']));
            // Tankstelle
            #$text = $text.'  '.$row['station'];
            #$text = $text.'  ';
            // determine button color
            $colorArray = htmlColorToRgb('#424242');
            $color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);

            // print appointment text and button
            #if (stripos($text,'aral')>0)            $png = 'resources/icons/aral.png';    // Aral-Tankstelle
            #elseif (stripos($text,'agip')>0)        $png = 'resources/icons/agip.png';    // Agip-Tankstelle
            #elseif (stripos($text,'bft')>0)            $png = 'resources/icons/bft.png';    // BFT-Tankstelle
            #elseif (stripos($text,'esso')>0)        $png = 'resources/icons/esso.png';    // Esso-Tankstelle
            #elseif (stripos($text,'heinlein')>0)        $png = 'resources/icons/h.png';        // Heinlein-Tankstelle
            #elseif (stripos($text,'jet')>0)            $png = 'resources/icons/jet.png';    // Jet-Tankstelle
            #elseif (stripos($text,'omv')>0)            $png = 'resources/icons/omv.png';    // OMV-Tankstelle
            #elseif (stripos($text,'shell')>0)        $png = 'resources/icons/shell.png';    // Shell-Tankstelle
            #else     $png = 'resources/icons/t.png';
            $wicon = ImageCreateFromPNG ( $png );
            #ImageCopy($image, $wicon, 25, $yoffset, 0, 0, imagesx($wicon), imagesy($wicon));
            ImageDestroy($wicon);

            imagettftextboxopt($image, 14, 0, 425, 155, $style['textcolor2'], $style['font'], $text, $opt_entry);

            $yoffset += 5;
        }
        $yoffset += 5;
        mysql_free_result($result);
    }


    private function addStation($preis, $datum, $station) {
        $query = "REPLACE INTO `if_tanken` SET 
                    `preis`= '".mysql_real_escape_string($preis)."', 
                    `datum`= FROM_UNIXTIME($datum), 
                    `station`= '".mysql_real_escape_string($station)."'";

        mysql_query($query, $this->dbconn) or die('Error, insert query failed: '.mysql_error());
    }

}
 
Zuletzt bearbeitet:
@mosjka1

Code:
//------ (FD 15.01.2012) Damit Clever-tanken glaubt es handelt sich um eine Browser
//------ löst das Problem des Diesel Einheitspreises, zumindest bei mir
fputs($sock, "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n");

p.s. findet man auch im Anhang von daehn
 
Hallo!
Ich jetzt auch mal an dem Infoframe versucht und habe alles auch soweit gut am laufen.
Nun habe ich versucht mir ein eigenes Plugin zu schreiben, welches mir Werte von meinem Fhem-Server aus einer .xml ausliest und diese dann darstellen soll.

Da FHEM & Infoframe bei mir auf unterschiedlichen Systemen liegen, verfolge ich für die FHEM-Integration ein Client-Server-Konzept; siehe, wie schon drauf hingewiesen wurde, in meinem Blog. Im Grunde kann man das auch aus der xml rauspfriemeln, das Sensor-Plugin müßte halt statt MySQL zu befragen die XML parsen.

Grade auf kleinen Bildschirmen würde ich über unterschiedliche Seiten gehen, also z. B. Nachrichten, Benzinpreise, Kalender, Wetter. Und vielleicht noch ein Tip, für Rahmen unter 800x480 nutze ich i. d. R. die doppelte Rahmenauflösung für Infoframe und skaliere dann vor dem Hochladen zum Bildschirm auf die tatsächliche Auflösung des Rahmens runter -- denn für so kleine Bildschirme wie 320x240 ist das normale Layout nicht wirklich ausgelegt (siehe Beispiel).

infoframe_scaled.jpeg
 
Hat jemand ne Ahnung wie ich die Wettervorhersage Horizontal anordnen und nicht Vertikal? Und wo kann ich die Begrenzung einstellen ab wieviel pixel er z.B. Kalendereinträge ausblendet? Quasi wie er es am Bilderrand auch macht....hoffe Ihr versteht was ich meine.
 
Auf meinem Infoframe sind insgesamt 4 verschiedene Familienmitglieder mit diversen Mail-Adressen eingerichtet. Jedem Empfänger hatte ich eine Farbe zugeordnet die dann auch auf dem Infoframe erschien (siehe Anhang)

infoframe alt.jpg

alte Mailplugin.php:
Code:
// determine button color
$accountId = $row['account'];
$colorArray = htmlColorToRgb($this->config['color_'.$accountId]);
$color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);
// print text and button
drawGlassButton($image, $color, 32, $yoffset+14);
				
imagettftextboxopt($image, 14, 0, 84, $yoffset, $style['textcolor'], $style['fontb'], $row['from'], $opt_address);
imagettftextboxopt($image, 12, 0, 50, $yoffset+2, $style['textcolor'], $style['fontb'], "Von:", $opt_address);
imagettftextboxopt($image, 12, 0, 50, $yoffset+16, $style['textcolor'], $style['font'], $row['subject'], $opt_subject);

Das hat immer wieder zu den gleichen Fragen geführt: "Ist die jetzt für mich?" Eine erneute Erklärung der Bedeutung hat nur kurzzeitig geholfen. Also habe ich jeder Farbe ein kleines Icon zugewiesen (siehe Anhang). Bis jetzt sind keine weiteren Fragen aufgekommen. Die Farbcodierung muss dazu mit der Codierung in der config.ini übereinstimmen.

infoframe.jpg

neue Mailplugin.php:
Code:
// Mail Icons
$accountId = $row['account'];
if ($rest > 0)
{

//Person 1				
if (($this->config['color_'.$accountId]) == "#2828A3")
$icon = ImageCreateFromPNG ( 'resources/icons/papa.png' );

// Person 2
if (($this->config['color_'.$accountId]) == "#A32866")
$icon = ImageCreateFromPNG ( 'resources/icons/hanna.png' );

// Person 3
if (($this->config['color_'.$accountId]) == "#A32929")
$icon = ImageCreateFromPNG ( 'resources/icons/laura.png' );

// Person 4
if (($this->config['color_'.$accountId]) == "#28A328")
$icon = ImageCreateFromPNG ( 'resources/icons/mama.png' );
				
ImageCopy($image, $icon, 23, $yoffset+0, 0, 0, imagesx($icon), imagesy($icon));
ImageDestroy($icon);
} 
else {				
// determine button color

$colorArray = htmlColorToRgb($this->config['color_'.$accountId]);
$color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);

// print text and button
drawGlassButton($image, $color, 32, $yoffset+14);
}

imagettftextboxopt($image, 14, 0, 84, $yoffset, $style['textcolor'], $style['fontb'], $row['from'], $opt_address);
imagettftextboxopt($image, 12, 0, 50, $yoffset+2, $style['textcolor'], $style['fontb'], "Von:", $opt_address);
imagettftextboxopt($image, 12, 0, 50, $yoffset+16, $style['textcolor'], $style['font'], $row['subject'], $opt_subject);

Vielleicht kanns ja jemand gebrauchen.
 
gibts eigentlich ne liste der funktionierenden wlan rahmen?

sowas wäre für mich ideal
darf ich das nochmal fragen?

würde ein Kodak W730 Pulse ohne probleme funktionieren?
wie schnell ist die aktualisierungszeit?

ich bräuchte ihn quasi nur als anzeige für die anrufer und vielleicht noch wetter...
 
Zuletzt bearbeitet:
Hi,

ich habe mal eine "dumme" frage. Ich würde infoframe gern benutzen um auf meinem SNOM 870 Telefon bestimmt Informationen anzuzeigen.
Gibt es eine Möglichkeit das infoframe so zu konfigurieren das das erzeiugte jpg wirklich physikalisch in einem subdir liegt und dort alle 5 Minuten überschrieben wird?
Das SNOM kommt leider mit eine Webseite nicht klar und braucht eine XML in der ich nur ein JPG als Ziel angeben kann.
Ich bin leider auch kein php Freak. Mein Workarround momentan ist ein curl Aufruf alle 5 Minuten der das ganze als JPG abspeichert. Jedoch ist das nicht das wäre und ich würde gern infoframe dazu bringen das Bild direkt abzuspeichern.

mfG

bicmac
 
Kostenlos!

Statistik des Forums

Themen
248,886
Beiträge
2,304,073
Mitglieder
378,569
Neuestes Mitglied
Yannick100