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

Hallo,
leider ist es mir nicht gelungen, Infoframe zum Arbeiten zu bewegen. Deshalb habe ich noch einige Fragen:
1. In welcher Gruppe müssen sich die Benutzer vom Infoframe befinden? Welche Verzeichnisrechte benötige ich?
2. Welche Rechte braucht root@localhost? Ist das ein Nutzer von mysql und/oder auch vom Betriebssystem?
3. Was ist der Controluser in mysql (Fehlermeldung: Verbindung für den controluser, wie er in Ihrer Konfiguration angegeben ist, ist fehlgeschlagen.)?
4. Beim Installieren von phpmyadmin wurde 3x nach einem PW für root gefragt, ich habe immer dasselbe eingeben, trotzdem kam eine Fehlermeldung mit 4 Auswahlpunkten, nur mit ignore ging die Installation weiter. Ich verwende Ubuntu 14.04 LTS, könnte hier ein Fehler bzw. Übersetzungsfehler vorliegen und etwas anders gemeint sein? PW ohne Sonderzeichen!
5. In der config.ini wollte ich ein Minimalsystem mit nur einem Plugin konfigurieren, um überhaupt ein Start von Infoframe zu ermöglichen.
6. Wofür steht das hier in infoframe.pphp: exec ("playusb -j /var/www/cache/slide.jpg");, ich habe auch den Fernbedienungscode auskommentiert, sollte noch mehr für erste Versuche auskommentiert sein?
Auf dem Gerät sollen noch mehr Datenbanken laufen, z. B. volkszaehler.org, Wetterdatenerfassung, Solaranlagendatenerfassung, Haussteuerung, das alles soll im mysql-Datenbanken gespeichert werden.
 
Hallo jono,
  1. natürlich die Rechte mit dem Dein apache läuft. In der Standardkonfiguration meist www-data, kannst Du in apache2.conf einstellen.
    Code:
    root@InfoFrame:~# dir /var/www
    insgesamt 56K
    drwxr-xr-x  7 root     root     4,0K Dez  6 02:26 .
    drwxr-xr-x 12 root     root     4,0K Okt 29 05:22 ..
    drwxr-xr-x  3 www-data www-data 4,0K Nov 28 03:44 cache
    drwxr-xr-x  3 www-data www-data 4,0K Nov 20 03:27 library
    drwxr-xr-x  6 www-data www-data 4,0K Sep 18 04:11 Pictures
    drwxr-xr-x  2 www-data www-data 4,0K Dez  5 06:40 plugins
    drwxr-xr-x  5 www-data www-data 4,0K Nov  6 17:59 resources
    -rw-r--r--  1 www-data www-data 6,7K Dez 22 18:16 config.ini
    lrwxrwxrwx  1 root     root       26 Okt 29 05:18 error.log -> /var/log/apache2/error.log
    -rw-r--r--  1 www-data www-data 1,4K Dez 25  2013 favicon.ico
    -rw-r--r--  1 www-data www-data 6,4K Nov 20 03:19 infoframe.php
    root@InfoFrame:~#
  2. root hat sowieso alle Rechte, der braucht nichts mehr. Der Superuser für MySQL heisst auch root, ich weiss gar nicht, ob man das ändern kann/sollte.
  3. ich würde vermuten der User mit dem Du versuchst auf die Datenbank zuzugreifen hat nicht ausreichend Rechte.
  4. er will das root Passwort von MySQL, nicht vom User root des Betriebssystems, deswegen funktioniert wohl auch 3. nicht.
  5. eine Minimal config.ini, ungestestet.
    PHP:
    [System]
    db_host = "localhost"
    db_name = ""
    db_user = ""
    db_password = ""
    zendfw_path = "/usr/share/ZendFramework/library/"
    image_width = 1024
    image_height = 600
    updatetime = 5
    shadow = 0
    background  = "resources/backgrounds/background.jpg"
  6. playusb ist speziell für meinen Bilderrahmen. Hier musst Du natürlich eintragen, was für Deinen Rahmen funktioniert. Hier eine infoframe.php, die das Bild im Browser (http://host.des.webservers/infoframe.php) anzeigt (Fernbedienungskram gelöscht.).
    PHP:
    <?php
    
    // includes & settings
    error_reporting (E_ERROR);
    $loc = setlocale (LC_ALL, 'de_DE.UTF8', 'de_DE', 'de', 'ge');
    require_once 'library/tools.php';
    require_once 'library/dbconn.php';
    require_once 'library/iplugin.php';
    require_once 'library/roundbox.php';
    
    // read config 
    $config = parse_ini_file ("config.ini", true);
    $sysconfig = $config['System'];
    if ($sysconfig['zendfw_path'] != "")
    	set_include_path (get_include_path () . PATH_SEPARATOR . $sysconfig['zendfw_path']);
    
    // test 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 ());
    
    // test directory cache
    if (!file_exists ('cache/')) mkdir ('cache');
    	
    // some more settings
    $image_width = $sysconfig['image_width'];
    $image_height = $sysconfig['image_height'];
    
    // Background image
    $bgimagefile = $sysconfig['background'];
    
    $im = ImageCreateTrueColor ($image_width, $image_height);
    $bg = @ImageCreateFromJpeg ($bgimagefile);
    imagecopyresampled ($im, $bg, 0, 0, 0, 0, $image_width, $image_height, imagesx ($bg), imagesy ($bg));
    
    // schatten auf background
    if ($sysconfig['shadow'] == 1)
    {
    	ImageAlphaBlending ($im, TRUE);
    	$xy = 0; 
    	$thick = 250;
    	while ($xy < $thick)
    	{
    		ImageLine($im, 0, $image_height-$xy , $image_width, $image_height-$xy, ImageColorResolveAlpha ($im, 0, 0, 0, ($xy-$thick - 2) / 2));
    		ImageLine($im, 0, $xy , $image_width, $xy, ImageColorResolveAlpha ($im, 0, 0, 0, $xy / 2));
    		ImageLine($im, $image_width-$xy , 0, $image_width-$xy, $image_height, ImageColorResolveAlpha ($im, 0, 0, 0, ($xy-$thick - 2) / 2));
    		// ImageLine($im, $xy, 0 , $xy, $image_height, ImageColorResolveAlpha ($im, 0, 0, 0, $xy / 2));
    		$xy++;
    	}
    }
    
    // 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)
    {
    	// überarbeiten, das kann in ein if
    	if ($key != "System")
    	{
    		require_once 'plugins/' . $key . '.php';
    		$plugins[$key] = new $key ($dbconn, $config[$key]);
    	}
    }
    
    // set $udatePlugins auf true wenn 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 >= ($updateInterval * 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);
    
    
    // Output
    // styles
    $style = array (); 
    $style['textcolor'] = ImageColorAllocate ($im, 255, 255, 255);
    $style['yellow'] = ImageColorAllocate ($im, 255, 255, 0);
    $style['red'] = ImageColorAllocate ($im, 255, 0, 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 ()))
    	$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' => 600, 'align' => ALIGN_LEFT);
    imagettftextboxopt($im, 72, 0, 20, 25, $style['textcolor'], $style['font'], strftime ("%H:%M"), $opt);
    imagettftextboxopt($im, 28, 0, 20, 95, $style['textcolor'], $style['font'], strftime ("%A, %d. %B %Y"), $opt);
    imagesetthickness($im, 2);
    imageline ($im, 15, 140, $image_width - 20, 140, $style['textcolor']);
    header("Content-type: image/jpeg");
    ImageJpeg ($im);
    ImageDestroy ($im);
    
    DbConnection::disconnect();
    ?>

Gruß, Michael...
 
CallPlugin

Hallo Michael.
Leider funktioniert es mit Deiner Änderung auch nicht.
Ist aber auch nicht weiter schlimm.
Ich werde am Wochenende mal versuchen ,verschiedene Ordner aus dem funktionierenden Xampp mit dem jetzigem zu tauschen.
Vielleicht finde ich so den Fehler,wenn das auch nicht funktioniert ,dann bleibt es so,die wichtigen Sachen funktionieren ja.

Volker
 
Hallo zusammen
So nach einigen Test funktioniert es jetzt.:D:D:D
Nachdem ich den mysql Ordner getauscht habe, funktioniert es jetzt.
Ich hoffe Google und alle Anderen ändern jetzt nicht wieder was.
Noch mal vielen Dank an alle die geholfen haben.

Volker
 
Hallo Michael,
danke für deine Antwort mit dem PHP-Programm.
Ich habe das ganze System neu aufgesetzt. Die Installation von mysql und phpmyadmin liefen ohne Probleme durch. Ich habe die infoframe.php ohne Fernbedienung übernommen. Aber im Browser habe ich nur ein weißes Feld ohne irgendwelche Regungen, aber auch keine Fehlermeldungen. Was nicht läuft, ist der Prozess mysqld.sock. Wie kann ich den zum Leben erwecken? Wenn man verschiedenen Foren glauben darf, ist seit Ubuntu 14.04 einiges schwieriger, was in früheren Versionen funktionierte, geht nicht mehr bzw. sind Änderungen nötig. Kann das auch damit zu tun haben, dass ich natürlich erst einmal den PC-Bildschirm via HDMI mit einer anderen Auflösung nutze?
 
Hallo jono,

Kann das auch damit zu tun haben, dass ich natürlich erst einmal den PC-Bildschirm via HDMI mit einer anderen Auflösung nutze?
nein, aber auch wenn der Bildschirm weiß bleibt, hat Dein System doch bestimmt in die Logfiles geschrieben. Was sagt denn /var/log/apache2/error.log ?

Aber gehen wir doch mal der Reihenfolge nach durch:

a) Läuft Dein Apache2? Mach Dir mal eine index.html in /var/www und rufe in einem Browser http://deine.odroid.url/index.html auf.

/var/www/index.html
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
	"http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title></title>
	</head>
	<body>
		<h1>It works!</h1>
	</body>
</html>

b) läuft Dein PHP? Mach Dir mal eine index.php in /var/www und rufe in einem Browser http://deine.odroid.url/index.php auf. Wie sieht die Ausgabe aus?
Wichtig ist, dass folgende Extensions aktiv sind: curl, gd, mysql, (xml)

/var/www/index.php
PHP:
<?php
	phpinfo();
?>

CURL.png GD.png MYSQL.png XML.png

c) läuft MySQL? Kannst Du mit http://deine.odroid.url/phpmyadmin/index.php eine Datenbank erstellen?
Dann erstelle bitte mal eine neue Datenbank test und lassen dann test.php laufen (kannst Du direkt in einer shell mit php test.php starten).
Du solltest keine Fehlermeldungen bekommen und danach sollte eine Tabelle namens if_table existieren und einen Datensatz mit Testname und Testwert enthalten.

/var/www/test.php (USER und PASS anpassen)
PHP:
<?php

// includes & settings
error_reporting (E_ALL);

// test database connection
$dbconn = mysql_connect ('localhost', 'USER', 'PASS', TRUE);
mysql_select_db ('test', $dbconn);
if (!$dbconn) die ('cannot connect: ' . mysql_error ());

$query = "CREATE TABLE IF NOT EXISTS `if_table` (
                `name` varchar(50) character set utf8 collate utf8_unicode_ci NOT NULL,
                `value` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
                PRIMARY KEY  (`name`))
                ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ";
mysql_query ($query, $dbconn) or die ('cannot connect: ' . mysql_error ());

$query = "INSERT INTO if_table (name, value) VALUES ('Testname', 'Testwert')";
mysql_query ($query, $dbconn) or die ('cannot insert: ' . mysql_error ());

mysql_close ($dbconn);

?>

d) tausche bitte mal in infoframe.php ganz am Anfang die Zeile error_reporting (E_ERROR); gegen error_reporting (E_ALL);.
Lasse infoframe.php von der Shell laufen php infoframe.php > test.jpg und poste Deine /var/log/apache2/error.log

Gruß, Michael...
 
Zuletzt bearbeitet:
Wenn man verschiedenen Foren glauben darf, ist seit Ubuntu 14.04 einiges schwieriger, was in früheren Versionen funktionierte, geht nicht mehr bzw. sind Änderungen nötig.
11. Gebot: Lass Dich nicht veräppeln. :p Ubuntu ist auch nur eine Distribution und bringt keine eigenen Versionen von Apache & Co KG raus. Die unterscheiden sich lediglich in der Version und evtl. in den Defaulteinstellungen.
Ich hatte noch ein altes Ubuntu in einer virtuellen Umgebung und habe es mal auf 14.04 gebracht und mich als root eingeloggt. In sechs Schritten war alles nötige installiert um den Infoframe laufen zu lassen:

  1. apt-get install apache2
  2. apt-get install php5 php5-curl php5-gd php5-mysql php5-imap
  3. apt-get install mysql-server
  4. apt-get install phpmyadmin
    damit lief bereits die Minimalversion.
  5. ZendFramework-1.12.9 nach /usr/share/ und link von Zendframework-1.12.9 nach ZendFramework (ln -s ZendFramework-1.12.9 ZendFramework)
  6. google-api-php-client-master nach /usr/share/
    damit läuft alles

Zwei Fallstricke, die mir dabei aufgefallen sind:
  1. Unter Ubuntu ist das Homeverzeichnis von apache standardmäßig in /var/www/html
    habe ich in /etc/apache2/sites-available/000-default.conf geändert (DocumentRoot /var/www).
  2. Die Namen der Datenbank bei MySQL ist "casesensitiv"

Gruß, Michael...
 
Hallo Michael,
vielen Dank für die ausführliche Installationsbeschreibung. Ich habe noch einmal alles neu aufgesetzt. Die Versionsnummern von curl gd, mysql, (xml) haben etwas andere Versionsnummern. Die Zugriffe auf die Datenbank von der Konsole aus funktionieren offenbar.
Die Minimalconfig bringt beim Start auf der Konsole folgende Fehler:

:~$ sudo php /var/www/infoframe.php > test.jpg
PHP Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed
in the future: use mysqli or PDO instead in /var/www/library/dbconn.php on line 31
PHP Warning: mysql_connect(): Access denied for user 'root'@'localhost' (using password:
NO) in /var/www/library/dbconn.php on line 31
PHP Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in /var/
www/library/dbconn.php on line 32
PHP Warning: mysql_query() expects parameter 2 to be resource, boolean given in /var/
www/library/dbconn.php on line 55
 
Die Zugriffe auf die Datenbank von der Konsole aus funktionieren offenbar.
Hallo jono,
was heißt denn "offenbar"? Halb, ganz oder gar nicht? Das kannst Du doch ganz einfach mit phpmyadmin prüfen, ob der Datensatz mit "Testname" und "Testwert" gefüllt worden ist.
Wenn man Dir helfen soll, musst Du schon ein wenig genauer sein. Ich werte "offenbar" jetzt mal als "JA".

Code:
PHP Warning:  mysql_connect(): Access denied for user 'root'@'localhost' (using password: NO) in /var/www/library/dbconn.php on line 31

Oh Herr, ich ahne böses, bitte sag', dass ich falsch liege :confused:

Kann es sein, dass Du die config.ini so wie unten übernommen hast, ohne db_name, db_user und db_password mit Leben zu füllen?

PHP:
[System]
db_host = "localhost"
db_name = ""
db_user = ""
db_password = ""
zendfw_path = "/usr/share/ZendFramework/library/"
image_width = 1024
image_height = 600
updatetime = 5
shadow = 0
background  = "resources/backgrounds/background.jpg"
 
Zuletzt bearbeitet:
Hallo Michael,
ja, die Daten sind in der Datenbank "Test".
In die Datenbank "infoframe" sind bei if_system 4 Datensätze angekommen. Bei if_tanken ist kein Datensatz, obwohl das nicht auskommentiert war. Dafür steheh aber statt 1kB jetzt 4 kB zu Buche. Alles andere habe ich auskommentiert.
Trotzdem: Access denied for user 'root'@'localhost', damit plage ich mich immer noch herum, die Webseite bleibt weiß.
 
Zuletzt bearbeitet:
Hallo jono,
bleib doch erst mal bei der Minimalconfig, ohne jegliche Plugins.

Wenn test.php funktioniert dann ist mit der Installation alles ok. Dann kann es nur an der Konfiguration liegen. Tippfehler?
Dafür steheh aber statt 1kB jetzt 4 kB zu Buche.
Was soll mir das sagen?
 
Hallo Michael,
ich will damit sagen, dass es dort mal Daten gab, aber dann gelöscht waren. Ich gehe davon aus, dass die Daten immer mit aktuellen Daten überschrieben werden, sonst würde die Datenbank unbegrenzt wachsen.
Ich habe das ganze Projekt mal auf der Konsole gestartet, mit folgenden Ausschriften:
odroid@odroid-c1:/var/www$ sudo php infoframe.php > /home/odroid/0test.txt
PHP Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /var/www/library/dbconn.php on line 31
PHP Notice: Undefined offset: 1 in /var/www/library/imagettftextboxopt.php on line 126
PHP Notice: Undefined offset: 1 in /var/www/library/imagettftextboxopt.php on line 126
PHP Notice: Undefined offset: 4 in /var/www/library/imagettftextboxopt.php on line 126
PHP Notice: Undefined offset: 4 in /var/www/library/imagettftextboxopt.php on line 126
PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/infoframe.php:1) in /var/www/infoframe.php on line 128
Au der Kosole gibt es jede Mange unleserliche Daten, ich vermute, dass das eine Grafik ist, aber das Feld im Firefox bleibt weiß.
 
PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/infoframe.php:1) in /var/www/infoframe.php on line 128
Ahh, da kommen wir der Sache doch auf den Grund . Du hast in infoframe.php irgendwelche Zeichen, ganz am Anfang, vor <?php stehen. Die müssen weg.
 
Zuletzt bearbeitet:
Hallo Michael,
danke für den Hinweis, das war schon mal ein Treffer, ein Zeichen war am Anfang der Zeile. Im Firefox hat sich das Bild dahingehend geändert, dass ich jetzt eine schwarze Fläche habe, im oberen Viertel mit einer horizontalen weißen Linie, einige Pixel dick, unabhängig vom gewählten Bild. Die anderen Fehlermeldungen sind noch da.
 
Das sind Warnungen, das ist OK. Poste doch mal das Bild
 
Hier ist das Bild infoframe.php.jpeg.
 

Anhänge

  • infoframe.php.jpeg
    infoframe.php.jpeg
    11.5 KB · Aufrufe: 30
er findet das gewählte Hintergrundbild und die Schriften nicht. Sind die vorhanden und haben die die korrekten Rechte? Alle Dateien des infoframes sollten User und Gruppe www-data haben.

./recources/backgrounds/*

./recources/calibri.ttf
./recources/calibrib.ttf
./recources/arial_rounded_mt.ttf
./recources/arial_rounded_mt_bold.ttf
 
Hallo Michael,
ein herzliches Dankeschön für deine Unterstützung. Jetzt läuft auch der komplette infoframe, ich hatte schon nicht mehr gedacht, das Ganze auf dem kleinen Rechenknecht zum Laufen zu bringen! Die einzelnen PlugIns werden Sück für Stück ausprobiert. Ich kopple den Odroid-C1 mit dem ODROID-VU Multitouch TFT-Display, Auflösung 1280x800, mit 9". Dementsprechend passe ich die Anordnung der Plugins an.
 
Hallo,
beim Ausprobieren bin ich auf 2 Probleme gestoßen:
1. Datumsanzeige (Tag, Monat) auf deutsch im obersten Feld des infoframe-Bildes
2. slideshow, brauche ich dafür ein weiteres Script? Die Verzeichnisse P1 und P2 sind angelegt und mit bildern.jpg gefüllt. Im Cacheverzeichnis gibt eine slide.jpg, die aber nicht zur Anzeige bzw. zum Wechseln kommt.
 
1. Was ist das Problem an einer Datumsanzeige in deutsch?
2. Nein, aber die gelöschten Zeilen aus der infoframe.php. Ich kann auf meiner Installation per Fernbedienung den Betriebsmodus zwischen Infoframe und Bilderrahmen wechseln. Da die Anzeige des Bildes (auf Deinen Wusch) geändert wurde, wird slide.jpg auch nicht mehr angezeigt. Wenn du diese Funktion weiter haben möchtest wirst Du wohl oder übel selbst programmieren müssen.
 
Zuletzt bearbeitet:
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.