Digitiale Bilderrahmen für das "InfoFrame"-Projekt

Das Projekt hört sich wirklich gut an.
Wenn ich Zeit habe muß ich das auch mal probieren.

@Ralf,

eine Frage.
Der USB Ausgang des TFT reicht ohne Probleme aus für den Rasp.?

Gruß ;) schlecker
 
Hallo Schlecker,
bei mir hat es ca. 2 wochen funktioniert. Ich habe dem Raspberry jetzt aber wieder ein extra Netzteil gegönnt. Vorteil ist, dass ich den TV mit der Fernbedienung ausschalten kann ohne den Raspberry hart auszuschalten.

Gruß,
Ralf
 
Hallo Ralf,

da ist natürlich was dran.
Ich habe mir auch diesen TV besorgt und werde das ganze mal testen.
Ich hoffe ich finde bald Zeit dazu.
Da werde ich wohl mit den gleichen Unwegbarkeiten wie bienchenmeier zu kämpfen haben.

Willst du noch mal was an dem Image ändern oder läßt du alles so wie es jetzt ist?
Sonst würde ich mit dem Download noch warten.

Gruß ;) schlecker
 
Hallo Schlecker,
ich ändere das Image nicht mehr. Melde Dich, wenn es Problem gibt.
Außer dem notwendigen Löschen und Erstellen der Datenbank sollte es klappen. Den Fehler mit der fehlenden Datei favicon.ico konnte ich nicht nachvollziehen. Ohne diese Datei zeigt der apache2 zwar einen Fehler, aber es funktioniert trotzdem.
Wichtig ist nur, sich vorher den Wunderground-Key zu besorgen und die Koordinaten des Heimatortes zur Hand zu haben.
Wichtig ist auch, die Dateien mit einem "linuxkompatiblen" Editor zu bearbeiten. Unter Linux kein Problem (z.B. nano). Wenn Du dich per WinSCP verbindest und die Dateien unter Windows bearbeitest am besten Notepad+ (Freeware) benutzen.
Bei Problemen helfe ich gern.

Gruß,
Ralf
 
... aber ich frage mich, bei >100,--für den Monitor, zzgl. Raspberry, SD-Karte, WiFi, ob es nicht langsam Zeit ist, eher in Richtung Billig-Androiden zu denken? ... Arbeitet jemand an soetwas?
Hallo wusel,
das ist eigentlich auch der Weg, den ich favorisieren würde. Momentan tut's mein Samsung zwar noch (toi, toi, toi), allerdings wollte ich den Infoframe auf keinen Fall mehr missen, so dass ich mich doch gerne mal um einen Nachfolger umsehen möchte.
Prinzipiell müsste man ja per Browser auf dem Tablet direkt auf das Bild auf dem Webserver zugreifen können und dieses regelmäßig aktualisieren. Das gibt zum ersten unschöne Übergänge und zum zweiten würde dann ein Anruf nicht mehr sofort angezeigt. Man müsste also die Webseite bzw. den Browser per javascript o.ä. dazu bringen sich selbst zu aktualisieren. Da bin ich dann aber momentan überfordert. Kann da jemand weiterhelfen?

Viele Grüße
Hoobert
 
Bzgl. billigem Android Tablet warte ich auch schon immer, jedoch mangelt es mir an der Größe/Preis.
Ich hoffe ist nicht zu sehr offtopic, jedoch zur Info wie ich es mache.
Bei mir läuft eh ein Server 24/7 und stellt u.a. meine Webseite etc. zur Verfügung. Darin habe ich mir dann zusätzlich als Seite für eine Slideshow mit verschiedensten Informationen erstellt.
Als Bilderrahmen hängt im Flur ein Fujitsu Stylistic 3500 Tablet PC im Holzbilderrahmen. Man könnte Linux als BS nehmen, ich habe mich damals jedoch zu Windows XP mit Embedded Funktionen entschieden. Schreibschutz per EWF.
Läuft komplett von CF Karte als Festplatten-Ersatz. WLAN per Micro-USB Stick. Eingebautes Micro für WebRadio im Flur ;-)
Slideshow-Webseite wird per Firefox im Kiosk-Modus dargestellt, sodass mir keiner an OS kommt ;-)
Ich nutze jedoch "InfoFrame" bisher nicht.

Wenn zu off-topic, dann bitte ignorieren...
 
Bei mir läuft eh ein Server 24/7 und stellt u.a. meine Webseite etc. zur Verfügung. Darin habe ich mir dann zusätzlich als Seite für eine Slideshow mit verschiedensten Informationen erstellt.

Hallo giovanne,

kannst Du uns nähere Infos zu dieser Slideshow verraten? Wie hast Du das realisiert und was für Informationen sind das denn zum Beispiel? Hast Du quasi eine eigene Infoframe-Lösung gebastelt?

Viele Grüße
Hoobert
 
Hallo giovanne,

kannst Du uns nähere Infos zu dieser Slideshow verraten? Wie hast Du das realisiert und was für Informationen sind das denn zum Beispiel? Hast Du quasi eine eigene Infoframe-Lösung gebastelt?

Viele Grüße
Hoobert
Klar, werde heute Abend mal einen Screenshot machen.
Ist zumindest als Webseite in HTML und PHP. Lock and Feel ist nicht so modern wie beim Infoframe.
Vieles ist auch einfach wild (Quich&Dirty) zusammengeschustert und zur Weitergabe nicht geeignet :-(

So hier der Screengrab. Aber wie gesagt, Lock&Feel ist nicht so "neumodisch" und soll einfach nur mir wichtige Daten (Unwetter, Stau, Strom, Gas, Netzwerkkomponenten, ...) anzeigen.
In der Mitte läuft eine Slideshow aus Bildern per Zufall aus unseren Familienbildern zusammengestellt, angereichert mit verschiedenen weiteren Informationen (Wetter, News, ...).

Eigentlich wollte ich ja nur auf die Hardware aufmerksam machen, falls die für jemanden Interessant ist. Der 3500er ist in einem Ikearahmen integriert. Hier nicht zu sehen.

slideshow_screengrab.JPG
 
Zuletzt bearbeitet:
Hallo, ich häng mich hier auch mal an, denn ich find das InfoFrame Projekt richtig interessant? Aber womit realisiert ihr das aktuell? Welcher Bilderrahmen ? Bzw. welches pad?
Danke
 
@Coolzero82

Pi & Samsung spf-107h
 
Ist zumindest als Webseite in HTML und PHP. ...
Vieles ist auch einfach wild (Quich&Dirty) zusammengeschustert und zur Weitergabe nicht geeignet :-(...
Eigentlich wollte ich ja nur auf die Hardware aufmerksam machen, falls die für jemanden Interessant ist.
Hallo giovanne,

vom Prinzip ist es ja das, was ich mir vorstelle. Eine Website, die sich im Browser automatisch aktualisiert. Vielleicht traust Du dich ja doch und stellst uns dein Script zur Verfügung bzw. ein paar entscheidende Knackpunkte daraus. Würde damit eigentlich eine Aktualisierung mittels callmonitor auch funktionieren?

Mit dieser Lösung wären wir ja, was die Hardware anbelangt, extrem flexibel. Es würde jedes Gerät funktionieren, auf dem ein Browser läuft.

Viele Grüße
Hoobert
 
Meine Seite besteht nicht nur aus einem Script, sondern einer Vielzahl individueller auf meine Bedürfnisse angepasster (mit PHP, HTML, MySQL, ...). Viele externe Komponenten die die Daten in DB, Files,... zur Verfügung stellen. Evtl. Kann ich wenn die Zeit es hergibt ein Grundgerüst abspecken, aber auch dann werden wieder weitere Fragen kommen. callmonitor nutze ich derzeit nicht.
Unterm Strich wollte ich nur auf die Hardware als Display hinweisen. Alles Software geht Richtung normalem Webdesign.
 
Hallo giovanne,

eigentlich ging es mir genau um dieses Webdesign (in HTML und php) und im Speziellen darum, wie das Bild automatisch aktualisiert wird. Vielleicht kannst Du mir hier noch einen kleinen Tipp geben. Dass da einiges an weiteren Scripten dahintersteckt ist klar und wenn Du keine Lust hast diese zu veröffentlichen ist das zwar schade aber natürlich völlig ok.

Danke und viele Grüße
Hoobert
 
Hi Hoobert,
ich muss mal schauen ob ich von der Hauptseite mal eine abgespeckte zusammenstellen kann.
Vom Prinzip ist es aber einfach eine HTML/PHP Seite mit weiteren "includierten" PHP Seiten oder eingebetteten "iframes". Die eingebetteten Seiten/Frames werden einfach per html-meta-tag " meta http-equiv='refresh' content='300'" individuell aktualisiert bzw neu geladen.
Die seiten/Frames holen die darzustellenden Infos aus einer MySQL DB oder Dateien, oder oder oder... Da sorgen halt andere Scripte (z.B. Logging) für das die Infoquellen gefüllt/aktualisiert werden.
Im HTML/PHP werden dann noch verschiedene fertige Losungen wie lyteframe, ... genutzt, um z.B auch mal Infos als Popup-Fenster darzustellen.
Im Zentrum läuft ein fertiges Slideshow Script, welches Bilder aus einem definierten Verzeichnis darstellt. Ein externes Script aktualisiert die Bilder im Verzeichnis z.B per Zufallsgenerator aus der Familien-Bildersammlung, Wetterinfos, News mit google-news Quelle,...
So das schon mal auf die Schnelle.
 
Hallo giovanne,

vielen, vielen herzlichen Dank für die Infos. Das geht dann schon auch in die Richtung javascript, das dachte ich mir schon. Die Aktualisierung allein auf php-Basis wird wohl nicht funktionieren. Na gut, auf jeden Fall hast du mir schonmal ein gutes Stückchen weitergeholfen.

Viele Grüße
Hoobert
 
Hallo Hoobert,

klar, javascript kommt an verschiedenen Stellen auch vor, jedoch eher für Aktionen die Clientseitig abzuarbeiten sind (z.B. Uhrzeit,...).

PHP ist ja Serverseitig. Die Aktualisierung rein per PHP/HTML funktioniert schon.
Im HTML/php machst Du eine meta Angabe für den Refresh:
Code:
<html><head>
<meta http-equiv='refresh' content='60'>
...
somit wird die Seite/Unterseite automatisch alle 60 Sek. neu geladen.
Da Auslesen der neuen/geänderten Daten aus der DB/Datei kann ja auch direkt per php erfolgen, sodass für die Aktualisierung kein javascript notwendig ist.

Grüße,
giovanne
 
Hi , In welche Datei müsste ich den Metatag refresh dann in Webserver eintragen? Wenn das gelingt, kann ich jedes billig Tablet nehmen- und brauche kein Bilderrahmen mehr- oder liege ich da falsch?!

Kann ich das in die index.php einfügen?

Code:
<?php
/***************************************************************************
 * InfoFrame (image generator for digital picture frames)
 * Copyright (C) 2009  Tobias Kolb
 * 
 * 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/
 ***************************************************************************/


//***************************************************************************************************
//   Initialization
//***************************************************************************************************

// set error handling to only report errors (no warnings, infos...)
error_reporting( E_ERROR );


// load configuration
$config = parse_ini_file("config.ini", true);
$sysconfig = $config['System'];
// include path for zend framework
if ($sysconfig['zendfw_path'] != "") {
	set_include_path(get_include_path() . PATH_SEPARATOR . $sysconfig['zendfw_path']);
}
// set locale for date/time formatting
$loc = setlocale(LC_ALL, 'de_DE.UTF8', 'de_DE', 'de', 'ge');

// includes
require_once 'library/tools.php';
require_once 'library/dbconn.php';
require_once 'library/iplugin.php';
 
// set the width and height of the new image in pixels
$image_width = $sysconfig['image_width'];
$image_height = $sysconfig['image_height'];

// create simple black image
$im = ImageCreateTrueColor($image_width, $image_height);
$backgroundcol = ImageColorAllocate($im, 0, 0, 0);
ImageFillToBorder($im, 0, 0, $backgroundcol, $backgroundcol);

// copy (resized) background image on background
$bgimagefile = 'resources/background.jpg';
$bg = @ImageCreateFromJpeg ($bgimagefile); /* Versuch, Datei zu �ffnen */
if ($bg) {
	imagecopyresampled($im, $bg, 0, 0, 0, 0, $image_width, $image_height, imagesx($bg), imagesy($bg));
}

// open database connection
$dbconn = DbConnection::connect($sysconfig['db_host'], $sysconfig['db_name'], $sysconfig['db_user'], $sysconfig['db_password']);
if (!$dbconn)
	die('keine Datenbankverbindung m�glich: ' . mysql_error());
	
// create cache directory if it doesn't exist already
if (!file_exists('cache/'))
	mkdir('cache');

// load and init plugins (calls, weather, calendar, mails...)
// every ini [group] except "System" is used as class name for a plugin and instantiated
$plugins = array();
foreach ($config as $key=>$elem) {
	if ($key != "System") {
		// include class file
		require_once 'plugins/' . $key . '.php';
		// create instance
		$plugins[$key] = new $key($dbconn, $config[$key]);
	}
}
	
// process call action if exist
if(($_GET['action'] == 'call') && $plugins['CallsPlugin'])
{
	$plugins['CallsPlugin']->processCallEvent($_GET['event'], $_GET['src_name'], $_GET['src_address'], $_GET['src_numb'], $_GET['dst_name'], $_GET['dst_address'], $_GET['dst_numb'], $_GET['duration']);
}

//***************************************************************************************************
//   Check if plugin data is outdated and should be updated
//***************************************************************************************************

// do update of plugins data if last update is older than config:updatetime minutes
$updateInterval = $sysconfig['updatetime'];
if (($updateInterval == null) || ($updateInterval == ""))
	$updateInterval = 5;
$updatePlugins = false;
$query  = "SELECT value FROM if_system where name = 'last_update'";
$result = mysql_query($query, $dbconn);
if (mysql_num_rows($result) > 0) {
	$row = mysql_fetch_assoc($result);
	$diff_seconds = (time() - $row['value']);
	if ($diff_seconds >= (5*60))
	{
		$updatePlugins = true;
		// update last_update date
		$query = "UPDATE if_system SET value = '".time()."' WHERE name = 'last_update'";
		mysql_query($query, $dbconn) or die('Error, insert query failed: '.mysql_error());
	}
	
} else {
	$updatePlugins = true;
	// insert last_update date
	$query = "INSERT INTO if_system (name, value) VALUES ('last_update', '".time()."')";
	mysql_query($query, $dbconn) or die('Error, insert query failed: '.mysql_error());
}
mysql_free_result($result);

// debug: never do updates
//$updatePlugins = false;


//***************************************************************************************************
//   Output
//***************************************************************************************************

// styles
$style = array(); 
$style['textcolor'] = ImageColorAllocate ($im, 255, 255, 255);
$style['textcolorgelb'] = ImageColorAllocate ($im, 254, 251, 0);
$style['font'] = 'resources/calibri.ttf';
$style['fontb'] = 'resources/calibrib.ttf';

// current vertical offset for main info area. Must be increased by each plugin writing to this area,
// so that following plugins knows correct y position to start output from
$currentYOffset = 160; 

// Do output of all plugins (calls, weather, calendar, mails...) with one exception:
// If the phone is currently ringing, skip displaying other plugins to show the name/number
// of the caller as fast and huge as possible and don't waste time/space for weather, mails etc...
if (($plugins['CallsPlugin']) && ($plugins['CallsPlugin']->isPhoneRinging())) {
	// only print calls
	$plugins['CallsPlugin']->doOutput($im, $style, $updatePlugins, $currentYOffset);
} else {
	// print all plugins in the order as they are in config
	foreach ($plugins as $plugin) {
		$plugin->doOutput($im, $style, $updatePlugins, $currentYOffset);
	}
	// check again for active incomming call (maybe we just get one in the meantime while updating/printing all other plugins)
	// if so don't output any image to prevent overwriting the (incoming call) image already sent to another request
	if (($plugins['CallsPlugin']) && ($plugins['CallsPlugin']->isPhoneRinging()))
		die();
}

// print date & time
$opt = array(
    'width' => 450,
    'align' => ALIGN_LEFT
);
imagettftextboxopt($im, 72, 0, 20, 25, $style['textcolor'], $style['font'], strftime("%H:%M"), $opt);
imagettftextboxopt($im, 24, 0, 20, 100, $style['textcolor'], $style['font'], strftime("%A, %d. %B %Y"), $opt);

// kw anzeige  anfang
$kw_aktuell = (int)date('W');
imagettftextboxopt($im, 16, 0, 350 , 5, $style['textcolor'], $style['font'], "Kalenderwoche ".$kw_aktuell, $opt);  
// kw anzeige ende  
imagesetthickness($im, 2);
imageline($im, 15, 140, $image_width-20, 140, $style['textcolor']);


// resize image
//$resized_image = imagecreatetruecolor(480, 324);
//imagecopyresampled($resized_image, $im, 0, 0, 0, 0, imagesx($resized_image), imagesy($resized_image), imagesx($im), imagesy($im));
//$im = $resized_image;   


// set the HTTP header type to jpeg
header("Content-type: image/jpeg"); 

// send the new PNG image to the browser
ImageJpeg($im);
 
// destroy the reference pointer to the image in memory to free up resources
ImageDestroy($im); 
 
// close database connection
DbConnection::disconnect();
 
?>
 
Zuletzt bearbeitet:
Hi,
der Metatag kommt in deine erstellte Webseite (HTML).
Jeder (unterstützte; iframes, ... (javascript)) Browser kann verwendet werden. Darstellung meines Bilderrahmens/Tablets an der Wand, kann ich jederzeit auch im Browser auf meine Android Smartphone oder meinem Ipad darstellen (auch aus der Ferne per dyndns ;-). Einfache Webseite/-Design halt.

Bei mir werden wie geschrieben z.B. meherer kleinere Seiten per iframe, etc. eingebettet. Jede dieser Seiten kann dann individuell (z.B. für unterschiedliche Aktualisierungintervalle) Ihren metatag zur Aktualisierung erhalten.
Angabe im head Tag der html (php) Dateien.
Code:
<html>
<head>
<!--hab ich hier eigentlich nicht, sondern in den eingebetteten seiten - nur zur Veranschaulichung hier-->
<meta http-equiv='refresh' content='3'>
<!--evtl. noch Javascript-->
<title>Kiosk Slideshow</title>
</head>
<body>
<!--nun mal php-->
<?
//hat evtl. auch selbst meta-refresh
 include "header_oben.php";
?>	   
<!--hat evtl. auch selbst meta-refresh-->
<iframe src="informations/my_informations.php" width="135px" height="200" marginwidth="0" marginheight="0" scrolling="no" allowtransparency="true" name="infos" frameborder="0">
<p>Uh oh, embedded frames are not supported by your browser!</p> </iframe> 
<?
//hat evtl. auch selbst meta-refresh
include "nochwas/unten.php";
?>
</body>
</html>

...

P.S. Ups gerade erst gesehen, dass es garnicht mehr Hoobert war ;-) Ich kenne das InfoFrame Konstrukt nicht.
 
Zuletzt bearbeitet:
trotzdem danke für deine Antwort.

oben gezeigte Code ist der, der in der Index.php auf meinem Webserver liegt. Rufe ich die index.php auf, wird mir das generierte Bild im Browser angezeigt. Jetzt geht es darum, dass sich die Seite alle paar Sekunden automatisch refreshen tut.

Habe jetzt vmal versucht den MetaTag in die erste Zeile einzufügen...Refreshen tut die Seite jetzt, allerdings ist da kein Bild mehr zu erkennen sondern nur noch so etwas hier:

Code:
ÿØÿàJFIFÿþ>CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), default quality ÿÛC	    $.' ",#(7),01444'9=82<.342ÿÛC	  2!!222222222222222
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.