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

Guten Tag Koerli,
ein paar mehr Infos könntest Du schon dazu schreiben.
Marke, Größe, Preisvorstellung....
Gruß, Michael...
 
Bilderrahmen ist weg

Grüße
 
Zuletzt bearbeitet:
irgendwie liest das CallsPlugin nicht mehr mein Telefonbuch der 7390 aus. Auf dem Infoframe wird nur die übertragene Nr. angezeigt.

Auf dem Fritzfon und einem Linuxreceiver läuft es. Dort werden dazugehörige Namen dann angezeigt.

Bitte mal um Hilfe hierbei.
 
Du hast geschrieben
Nachdem alles erfolgreich konfiguriert wurde, könnt ihr die index.php im Browser aufrufen und das Ergebnis-Bild bestaunen.
Ich habe einen Nas Server NS212j.

Dort habe ich PHp, Mysql usw.

In der config.ini alles eingetragen.
Wenn ich aber nun die index.php aufrufe erscheint nur ein weisser Bildschirm.
Was sollte denn da nun erscheinen?

Weiss nicht was ich da noch falsch gemacht haben sollte.
Die Pfade sind alle richtig eingetragen
 
Hallo rkonertz,
hast Du auch gesehen, wann er das geschrieben hat? 30.12.2009, 03:37
Gruß...
 
Hat schon jemand versucht einen Digitalen Bilderrahmen, der Wlan tauglich ist an einer Fritzbox 7490 anzuschliessen, der dann die Anrufe, verpasste Anrufe usw. anzeigen kann ?
Es gibt zwar das Projekt Infoframe, aber das bekomme ich einfach nicht ans laufen auf meiner NAS Station. Man kann auch keinen fragen, weil der letzte Beitrag 2009 war.

Hallo rkonertz,
Du hast das Posting aus 2009 zitiert, daher meine Antwort. Das heisst nicht, dass hier keiner mehr liest.

Wenn Du uns mehr infos gibts, wird Dir sicher einer helfen.

Was hast Du für einen Rahmen?
Was sagt der error.log von apache/php?

Beim Studium dieses Threads wird Dir bestimmt aufgefallen sein, dass es hier einen User namens Friday gibt, der den Infoframe auch auf einem NAS betreibt.

Gruß, Michael...
 
Hallo,
seit einigen Tagen funktioniert der Kalender nicht mehr. Das Bild wird erstellt, die anderen Pluagins (Moon, Benzin) funktionieren. Die Tabelle in der MySQL-Datenbank ist leer. Ich habe die Tabelle testweise gelöscht. Sie wird dann neu erstellt, aber nicht gefüllt. In der Online-Console der Google-API kann sehen, das der Infoframe auf die API zugreift. Wenn ich in der index.php den Eintrag "error_reporting( E_ALL );" aktiviere sind in der /var/log/apache2/error.log keine Fehler zum Kalender-Plugin angezeigt.
Hat irgendjemand einen Tip für mich?

Gruß,
Ralf
 
Hallo Ralf,
bei mir zumindest werden alte Einträge, die im Hauptkalender vom Googlekalender eingetragen sind nicht mehr mit dem Kalendernamen erfaßt. Je nachdem welche Datenbankstruktut du hast könnte das zu Fehlern führen.
Bei mir z.B. wurden diese Enträge beim aktualisieren nicht mehr gelöscht , da kein Name vorhanden war, und demzufolge wurde der Eintrag bis zum erbrechen neu in die Datenbank und auch dem Frame geschrieben/übertragen.

Meine DB-struktur:struktur.JPG

Im Anhang mein Testfile für den Kalender. Die Stellen mit den Kommentaren "anpassen" und die Tokens/.p12 keys müssen natürlich passen, dann kannst du das ganze wo auch immer auf deinem server platzieren und entweder mit Terminal oder auch per Browser aufrufen und sehen was passiert.
 

Anhänge

  • calendar-test1.zip
    3.5 KB · Aufrufe: 4
Hallo Spoon3er,
danke für deine schnelle Antwort. Deine infoframe_db funktioniert (Ausgabe "passt"). Auch die calendar.php funktioniert. Es werden alle Kalendereinträge korrekt angezeigt. Deine Datenbankstruktur unterscheidet sich allerdings von meiner. Mit fehlte die Spalte "name", die ich jetzt manuell eingefügt habe. Die Datenbank wird aber immer noch nicht gefüllt. Warscheinlich muss ich noch in der CalendarPlugin.php etwas anpassen, damit der "name" gefüllt wird.

Gruß,
Ralf
 
Hallo Ralf,
wenn du in der calendar.php ziemlich am Ende:
PHP:
/***************************** if SyncToken changed perform SQL-statement ********************* FÜR TESTZWECKE AUSKOMMENTIERT da DB-struktur evtl anders !!!!!!!!!!!!
	if ( $i > 0 ) {
		myEcho(PHP_EOL."DELETE Events from if_Calendar: ".before_last('OR', $deleteCalendarData).PHP_EOL);
		myEcho (PHP_EOL."REPLACE Token in if_system: ".before_last(',', $insertToken).PHP_EOL);
		myEcho (PHP_EOL."INSERT CalenderEvents in if_calendar: ".before_last(',', $insertCalendarData).PHP_EOL);
		mysqli_query($dbconn, before_last('OR', $deleteCalendarData)) or die('CalendarPlugin -> insertCalendarData:  '.mysqli_error());
		mysqli_query($dbconn, before_last(',', $insertToken)) or die('CalendarPlugin -> insertCalendarData:  '.mysqli_error());
		mysqli_query($dbconn, before_last(',', $insertCalendarData)) or die('CalendarPlugin -> insertCalendarData:  '.mysqli_error());
	}
***************************************************************************************************/
das hier wieder entkomentierst, sollte eigentlich ein Datenbankeintrag aus diesem script erfolgen.

So z.B.
PHP:
/***************************** if SyncToken changed perform SQL-statement *********************/
	if ( $i > 0 ) {
		myEcho(PHP_EOL."DELETE Events from if_Calendar: ".before_last('OR', $deleteCalendarData).PHP_EOL);
		myEcho (PHP_EOL."REPLACE Token in if_system: ".before_last(',', $insertToken).PHP_EOL);
		myEcho (PHP_EOL."INSERT CalenderEvents in if_calendar: ".before_last(',', $insertCalendarData).PHP_EOL);
		mysqli_query($dbconn, before_last('OR', $deleteCalendarData)) or die('CalendarPlugin -> insertCalendarData:  '.mysqli_error());
		mysqli_query($dbconn, before_last(',', $insertToken)) or die('CalendarPlugin -> insertCalendarData:  '.mysqli_error());
		mysqli_query($dbconn, before_last(',', $insertCalendarData)) or die('CalendarPlugin -> insertCalendarData:  '.mysqli_error());
	}
/***************************************************************************************************/
Du sollteste dann auch die query angezeigt bekommen
 
Zuletzt bearbeitet:
Hallo Spoon3er,
entschuldige die späte Antwort. Ich habe durch Zufall das Problem gefunden: Wenn der Betreff des Termins ein Apostroph enthält werden die Kalendertermine nicht mehr in die Datenmbank geschrieben. Bei mir war es ein Konzerttermin für "Blackmore's Night".

Vielen Dank für Deine Mühe,
Ralf
 
Zuletzt bearbeitet:
Hallo Ralf,
du könntest im INSERT-statement vom CalendarPlugin mit mysql_real_escape_string()arbeiten. Dann sollten auch ' richtig in die Datenbank geschrieben werden. :)

immer gerne Ralf
 
ich komme nochmal auf mein callsPlugin zurück von ein paar Posts zuvor. Ich stelle ich fest, das nur einige wenige Einträge aus dem fritzeigenen Telefonbuch mit namen dargestellt werden. Fast alle werden nur mit der Nummer angezeigt, obwohl die Einträge vorhanden sind. selbst neue Einträge (nach löschen aller Einträge) werden so gut wie nie korrekt angezeigt. Hat hier jmd. nen Tip?

Bei mir werden heute keinerlei Spritpreise angezeigt. geht das nur mir so?

@rkonertz
was läuft bei dir nicht?

bei mir lief es zuerst auf einem Qnap TS212 und jetzt auf nem TS221
 
Bei mir werden heute keinerlei Spritpreise angezeigt. geht das nur mir so?

Hab leider keine Ahnung welche Version du benutzt, da es mittlerweile von dem BenziPlugin einige gibt.
Clever-Tanken, hat die <div> class-names stellenweise geändert. Falls bei deinem Plugin nach class-names gefiltert wird ist das der Fehler.

Da meine Version sehr speziell ist brigt es nichts diese hier zu posten, aber ich musste bei mir diese Zeilen ändern:
PHP:
...
//preg_match_all('#<div class="price">(.*)</div><div class="location_distance">(.*)</div>#isU', $inhalt, $matches);
preg_match_all('#<div class="price">(.*)</div><div class="fuel-station-location-address-distance">(.*)</div>#isU', $inhalt, $matches);
...
//$this->addStation($ergebnis[$j][1], $ergebnis[$j][2], $datum, $ergebnis[$j][14]." - ".$ergebnis[$j][16]." ".$ergebnis[$j][18], $ergebnis[$j][$distance]);
$this->addStation($ergebnis[$j][1], $ergebnis[$j][2], $datum, $ergebnis[$j][19]." - ".$ergebnis[$j][25]." ".$ergebnis[$j][23], $ergebnis[$j][$distance]);
 
Zuletzt bearbeitet:
Hallo,
auch bei mir geht das Benzinplugin nicht mehr. Ich nutze die Version aus dem Installationspaket von Michael.
 
Hallo zusammen,

wie Spoon3er bereits geschrieben hat, die <div class-names> wurden auf clever-tanken.de geändert.

In meiner Version müssen ein paar mehr angepasst werden:
<div class="price_entry_table"> nach <div class="fuel-station-price">
<div class="location_name"> nach <div class="row fuel-station-location-name">
<div class="location_street_number"> nach <div id="fuel-station-location-street">
<div class="location_zip_code_city"> nach <div id="fuel-station-location-city">
<div class="location_distance"> nach <div class="fuel-station-location-address-distance">

UPDATE: Funktionierte nicht immer, an clever-tanken wurde auch an der Datumsanzeige geändert. Hier das Update:
Und noch ein Update: Distanz zur Tanke funktionierte noch nicht
Zeile
PHP:
$txt[$tank_num]['dist'] = strip_tags (trim ($zeile[$i]));
$i nach $i+1

PHP:
<?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
		// defaults
		$radius = "5";
		$ort = "51147";
		$lon = "0";
		$lat = "0";
		$sorte = "Diesel";
		$lines = 0;
		
		if (isset($this->config['radius'])) $radius = $this->config['radius'];
		if (isset($this->config['sorte'])) $sorte = urlencode($this->config['sorte']);
		if (isset($this->config['ort'])) $ort = $this->config['ort'];
		if (isset($this->config['lon']) && isset($this->config['lat']))
			$uri = "/tankstelle_liste?spritsorte=" . $sorte . "&r=" . $radius . "&lat=" . $this->config['lat'] . "&lon=" . $this->config['lon'];
		else
			$uri = "/tankstelle_liste?spritsorte=" . $sorte . "&r=" . $radius . "&ort=" . $ort;
		header ("Content-type: text/html");
		$sock = fsockopen ("www.clever-tanken.de", 80, $errno, $errstr, 10);
		if (!$sock)
			return;
		else
		{
			fputs ($sock, "GET " . $uri . " HTTP/1.1\r\n");
			fputs ($sock, "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n");
			fputs ($sock, "Host: www.clever-tanken.de\r\n");
			fputs ($sock, "Connection: close\r\n\r\n");
			while (!feof($sock))
				$zeile[$lines++] = utf8_encode (trim (fgets ($sock, 512)));
			fclose ($sock);
		}
		
		// Datenbankeinträge löschen
		$this->dbconn->query ("START TRANSACTION");
		$query = "Delete from if_tanken";
		$this->dbconn->query ($query) or die('BenzinPlugin.php: Error, delete query failed');

		// file zeilenweise einlesen und gefiltert entsprechend den Einträgen in config.ini.
		$tank_num = 0;
		$get_date = false;
		for ($i = 0; $i < $lines; $i++)
		{
			if ($zeile[$i] != '')
			{
				if (strpos ($zeile[$i], '<div class="fuel-station-price">') !== false)
					$tank_num++;
				elseif (strpos ($zeile[$i], '<div class="price">') !== false)
					$txt[$tank_num]['price'] = strip_tags(trim($zeile[$i]));
				elseif (strpos ($zeile[$i], '<div class="price_date">') !== false or $get_date)
				{
					$get_date = true;
					if (strpos ($zeile[$i], '</div>') !== false)
					{
						$get_date = false;
					}
					else
					{
						if (strpos ($zeile[$i], '<div class="price_date">') === false)
						{
							if (strpos ($zeile[$i], 'Heute') !== false)
							{
								$txt[$tank_num]['date'] = strtotime ('now');
							}
							if (strpos ($zeile[$i], 'Gestern') !== false)
							{
								$txt[$tank_num]['date'] = strtotime ('-1 day');
							}
							if (strpos ($zeile[$i], 'vor ') !== false)
							{
								if(strpos ($zeile[$i], 'Std.') !== false)
								{
									$aa = str_replace ("Std.", "hours", $zeile[$i]);
								}
								else
								{
								   $aa = str_replace ("Min.", "minutes", $zeile[$i]);
								}
								$aa = str_replace("vor", "-", $aa);
								$aa = strip_tags($aa);
								$aa = str_replace("&nbsp;", '', $aa);
								$aa = strtotime ($aa);
								$txt[$tank_num]['date'] = $aa;
							}
						}
					}
				}
				elseif (strpos ($zeile[$i], '<div class="row fuel-station-location-name">') !== false)
					$txt[$tank_num]['name'] = htmlspecialchars_decode (utf8_decode (strip_tags (trim ($zeile[$i]))));
				elseif (strpos ($zeile[$i], '<div id="fuel-station-location-street">') !== false)
					$txt[$tank_num]['street'] = htmlspecialchars_decode (utf8_decode (strip_tags (trim ($zeile[$i]))));
				elseif (strpos ($zeile[$i], '<div id="fuel-station-location-city">') !== false)
					$txt[$tank_num]['city'] = htmlspecialchars_decode (utf8_decode (strip_tags (trim($zeile[$i]))));
				elseif (strpos ($zeile[$i], '<div class="fuel-station-location-address-distance">') !== false)
					$txt[$tank_num]['dist'] = strip_tags (trim ($zeile[$i+1]));
			} 
		}
		
		for ($i = 1; $i <= $tank_num; $i++)
		{
			if (isset($txt[$i]['price']) && isset($txt[$i]['date']))
			{
				$this->addStation ($txt[$i]['price'], $txt[$i]['date'],  $txt[$i]['dist'].' - '.$txt[$i]['name'].', '.$txt[$i]['street'].', '.$txt[$i]['city']);
			}
		}
		$this->dbconn->query("COMMIT");
	}


	public function doOutput($image, $style, $updateData, &$yoffset)
	{
		if ($updateData) $this->doUpdate();

		// define styles
		$opt_header = array(
			'width' => imagesx($image)-290,
			'line_height' => 18,
			'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,
		);

		// defaults
		$sorte = "Diesel";
		$entrylimit = 5;
		if (isset($this->config['sorte'])) $sorte = $this->config['sorte'];
		if (isset($this->config['max_displayed_stations'])) $entrylimit = $this->config['max_displayed_stations'];

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

		// print header
		$text = 'Kraftstoffpreise (' . $sorte . ')';
		imagettftextboxopt($image, 22, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_header);
		$icon = ImageCreateFromPNG ('resources/icons/tanken/tank.png');
		ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
		ImageDestroy($icon);
		$yoffset += 26;
		$counter = 0;

		while ($row = $result->fetch(PDO::FETCH_ASSOC))
		{
			$counter++;
			$rest = ($result->rowcount() - $counter) + 1;
			if (($counter > $entrylimit) || (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)))
				break;
			
			// Preis
			$text = ' Eur'; // Euro-Zeichen geht nicht
			$text = $row['preis'].$text;
			// Datum
			//$text = $text.'  '.strftime( "%d.%m.", strtotime($row['datum']));
			$text = $text.'  '.strftime( "%d.%m.%y %H:%M", strtotime($row['datum']));
			// Tankstelle
			$text = $text.'  '.$row['station'];

			// 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/tanken/aral.png';	// Aral-Tankstelle
			elseif (stripos($text,'agip')>0)		$png = 'resources/icons/tanken/agip.png';	// Agip-Tankstelle
			elseif (stripos($text,'bft')>0)			$png = 'resources/icons/tanken/bft.png';	// BFT-Tankstelle
			elseif (stripos($text,'esso')>0)		$png = 'resources/icons/tanken/esso.png';	// Esso-Tankstelle
			elseif (stripos($text,'heinlein')>0)	$png = 'resources/icons/tanken/h.png';		// Heinlein-Tankstelle
			elseif (stripos($text,'jet')>0)			$png = 'resources/icons/tanken/jet.png';	// Jet-Tankstelle
			elseif (stripos($text,'omv')>0)			$png = 'resources/icons/tanken/omv.png';	// OMV-Tankstelle
			elseif (stripos($text,'shell')>0)		$png = 'resources/icons/tanken/shell.png';	// Shell-Tankstelle
			else 	$png = 'resources/icons/tanken/t.png';
			$wicon = ImageCreateFromPNG ( $png );
			ImageCopy($image, $wicon, 25, $yoffset, 0, 0, imagesx($wicon), imagesy($wicon));
			ImageDestroy($wicon);

			imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);

			$yoffset += 18;
		}
		$yoffset += 18;
	}

	private function addStation($preis, $datum, $station)
	{
		$query = "REPLACE INTO `if_tanken` SET
					`preis`= " . $this->dbconn->quote($preis) . ",
					`datum`= FROM_UNIXTIME($datum),
					`station`= " . $this->dbconn->quote($station);

		$this->dbconn->query($query) or die('BenzinPlugin.php: Error, insert query failed: '. $datum . '  ' . $this->dbconn->errorInfo()[2]);
	}
}
?>
 
Zuletzt bearbeitet:
Hallo Michael,
du hast in rekordverdächtiger Zeit das Benzinplugin angepasst. Eine SUPER Leistung!!!
Du bist meinem Post zuvor gekommen, denn bei mir läuft das Plugin (komplett übernommen) nicht. Ich habe mal die Fehlermeldung eingefangen.
Ich habe noch ein weiteres Anliegen:
Bei mir werden verpasste Anrufe nur 24 h angezeigt, obwohl ich 3 Tage eingestellt habe. Was mache ich falsch in der Konfiguration?
PHP:
max_displayed_missed_calls = 3
max_display_age_day = 3
delete_after_max_display_age = 1

Edit: nach dem geändertes BenzinPlugin übernommen wurde, geht gar nichts mehr, Fehler in infoframe.php
 

Anhänge

  • Fehler Benzinplugin.JPG
    Fehler Benzinplugin.JPG
    19.9 KB · Aufrufe: 13
Zuletzt bearbeitet:
Hallo jono,

Bei mir werden verpasste Anrufe nur 24 h angezeigt, obwohl ich 3 Tage eingestellt habe. Was mache ich falsch in der Konfiguration?
Kann ich nicht nachvollziehen, geht Deine Uhr richtig? Ruf Dich doch bitte mal an und schau in der Tabelle if_call_log nach dem Eintrag im Feld "time".

Anruf.jpg


Zu Deinem Error:
füge bitte mal error_log("My Error: date = " . $datum, 0); in die Funktion addStation ein und poste mir die Fehlermeldungen "My Error".

PHP:
	private function addStation($preis, $datum, $station)
	{
		error_log("My Error: date = " . $datum, 0);
		$query = "REPLACE INTO `if_tanken` SET
					`preis`= " . $this->dbconn->quote($preis) . ",
					`datum`= FROM_UNIXTIME($datum),
					`station`= " . $this->dbconn->quote($station);

		$this->dbconn->query($query) or die('BenzinPlugin.php: Error, insert query failed: '. $datum . '  ' . $this->dbconn->errorInfo()[2]);
	}
Gruß, Michael...
 
Zuletzt bearbeitet:
bei mir läuft die version auch nicht

[04-Aug-2015 18:44:35 Europe/Berlin] PHP Fatal error: Class 'BenzinMTSDatPlugin' not found in /share/MD0_DATA/Web/index.php on line 112
 
Hallo Friday,

Das liegt in erster Linie nicht an dieser Version :)
  • Wenn Du das Plugin in BenzinMTSDatPlugin umbenennst, dann musst Du im Code auch die Zeile class BenzinPlugin implements IPlugin anpassen.

Wenn Du dies dann getan hast, wird es trotzdem nicht laufen.
  • Du musst die Datenstruktur in der Datenbank entsprechend angepassen. Ich kenne das BenzinMTSDatPlugin nicht, aber ich denke die zugrunde liegende Datenbankstruktur wird anders sein.
  • Das Plugin arbeitet mit PDO_MYSQL statt der alten MySQL API. Wenn Du den Rest nicht auch auf PDO_MYSQL umstellst, wird es nicht laufen.

Gruß, Michael...
 
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.