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

ne geht leider auch nicht,im log keine Fehlermeldung und wenn ich das Bild aufrufe habe ich nur ein weisses Bild ohne Fehlermeldung.

Hab noch was zum Thema Tablet .Bei Chrome geht noch kein Vollbild,aber bei Boat Browser geht Vollbild,sieht aus wie beim Bilderrahmen.
Musste die Auflösung in der config.ini nochmal ändern in 960*550 jetzt ist es perfekt.

Knusterus

Soderle jetzt hab ich mir aus der Orginalen und deiner php eine neue gebaut und die Biotonne geht schon mal.
Die Farbabfrage hat auch geklappt,vielen Dank für das Script.
hier meine fertige php
PHP:
<?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/
 ***************************************************************************/

require_once 'Zend/Loader.php';

Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');


class CalendarPlugin implements IPlugin
{
    private $dbconn = NULL;
	private $config = NULL;
	
	public function __construct($dbconn, $config) {
		$this->dbconn = $dbconn;
		$this->config = $config;
	}
	
	
	public function doUpdate() {
	
		// get calendar entries
		try
		{
			$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name for calendar
			$client = Zend_Gdata_ClientLogin::getHttpClient($this->config['user'], $this->config['password'],$service);
		}
		catch (Exception $e)
		{
			die ('Folgender Fehler trat auf: ' . $e->getMessage());
		}
		$cal = new Zend_Gdata_Calendar($client);
		$calendarList = $cal->getCalendarListFeed();
		
		// delete all old calendar entries
		mysql_query("START TRANSACTION", $this->dbconn);
		$query = "Delete from if_calendar";
		mysql_query($query, $this->dbconn) or die('Error, delete query failed');
		// read calendars
		foreach ($calendarList as $calendar)
		{
			// skip unselected calendars
			if (!$calendar->selected->getValue())
				continue;
			// calendar color
			$color = $calendar->color;
			// get calendar id
			$cal_id = substr(strrchr($calendar->id, '/'), 1 );

			// set query parameter
			$startDate=strftime( '%Y-%m-%d');
			$endDate = strftime( '%Y-%m-%d', strtotime("+".$this->config['number_of_days']." day", time() ) );
			$query = $cal->newEventQuery();
			$query->setUser($cal_id); // set calendar id
			$query->setVisibility('private');
			$query->setProjection('full');
			$query->setOrderby('starttime');
			$query->setStartMin($startDate);
			$query->setStartMax($endDate);
			$query->setSortOrder('ascending');
			$query->setSingleEvents(true);
			
			$entries = $cal->getCalendarEventFeed($query);
			foreach ($entries as $entry)
			{
				// get entry data
				$title = $entry->title;
				$begin = strtotime($entry->when[0]->startTime);
				$end = strtotime($entry->when[0]->endTime);
				$location = $entry->where[0]->valueString;
				// add to database
				$this->addCalendar($color, $begin, $end, $title, $location);
			}
		}
		mysql_query("COMMIT", $this->dbconn);
		
		
	}
	
	public function doOutput($image, $style, $updateData, &$yoffset) {
		if ($updateData)
			$this->doUpdate();

		$query = "SELECT * FROM `if_calendar` WHERE (`end` > NOW()) ORDER BY `begin` ASC";
		$result = mysql_query($query, $this->dbconn);
		if (mysql_num_rows($result) > 0) {

			// define styles
			$opt_header = array(
				'width' => imagesx($image)-290,
				'line_height' => 18,
				'align' => ALIGN_LEFT
			);
			
			$opt_day = array(
				'width' => imagesx($image)-290,
				'height' => 14,
				'line_height' => 14,
				'align' => ALIGN_LEFT
			);

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

			// print header
			imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], "Nächste Termine", $opt_header);
			$icon = ImageCreateFromPNG ( 'resources/icons/clock.png' );
			ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
			ImageDestroy($icon);
			$yoffset += 26;
			
			// print calendar
			$counter = 0;
			$formatDate = "%d.%m.%Y";
			$formatTime = "%H:%M";
			$today = strftime( $formatDate );
			$tomorrow  = strftime( $formatDate, strtotime("+1 day", time() ) );
			$currently_displayed_day = 0;

			while ($row = mysql_fetch_assoc($result)) {
				$counter++;
				
				// if end of screen is reached and more than one items left -> cut off and show hint "x more appointments..."
				$rest = (mysql_num_rows($result) - $counter) + 1;
				if (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) {
					$text = "... $rest weitere Termine";
					imagettftextboxopt($image, 14, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_entry);
					$yoffset += 20;
					break;
				}
				
				// print day name
				$begin_date = strftime( $formatDate, strtotime($row['begin']));
				// if begin day is before today set begin to today
				if (strtotime($begin_date) < strtotime($today))
					$begin_date = $today;
				// now if begin is after $currently_displayed_day update $currently_displayed_day
				if (strtotime($begin_date) > $currently_displayed_day) {
					// update currently_displayed_day
					$currently_displayed_day = strtotime($begin_date);
					// print day name
					if( $begin_date == $today )
						$dayname = "Heute";
					else if( $begin_date == $tomorrow )
						$dayname = "Morgen";
					else
						$dayname = strftime("%A, ".$formatDate, strtotime($begin_date));

					imagettftextboxopt($image, 14, 0, 50, $yoffset+4, $style['textcolor'], $style['fontb'], $dayname, $opt_day);
					$yoffset += 22;
				}
				
				// build appointment time text
				$end_date = strftime( $formatDate, strtotime($row['end']));
				$begin_time = strftime( $formatTime, strtotime($row['begin']));
				$end_time = strftime( $formatTime, strtotime($row['end']));
				$text = $row['title'];
				if ($row['location'] != null)
					$text = $text . ", " . $row['location'];
				if (($begin_time == "00:00") && ($end_time == "00:00")) {
					// all day event (substract 1 second to get the real end date at 23:59) 
					$end_date = strftime( $formatDate, strtotime($row['end'])-1);
					// if all day event is longer than one day -> print end date
					if (strtotime($end_date) != $currently_displayed_day)
						$text = $text." (bis ".$end_date.")";
						
				} else {
					// normal event with start and end time
					$text = $text." (".$begin_time." - ";
					// if event ends not this day -> display end date additionally to time
					if (strtotime($end_date) != $currently_displayed_day)
						$text = $text.$end_date.", ";					
					$text = $text.$end_time.")";
				}
				
               // roundboxtrans_middel($image, $xleft, $xend, $yoffset+2, $yoffset_abstand, $yoffset_end, $inhalt_zeilen_hoehe);
               // roundboxtrans_bottom($image, $xleft, $xend, $yoffset, $yoffset_diff, $yoffset_abstand, $yoffset_end, $radius, $bottom_zeilen_hoehe);
               /*
             if ($letzter_eintrag == $currently_displayed_day) {
             	if (strlen($text) >= 15) $xoffset = 150;
               	$xoffset += 130;
               	$yoffset -= 25;
              }else{ 
              	$xoffset = 0;             
              	roundboxtrans_middel($image, $xleft, $xend, $yoffset, $yoffset_abstand+1, $yoffset_end, $inhalt_zeilen_hoehe+1);
            }
            */   
// ------------------------------------------- Müllabfuhr----------------------------------------                   
                 if (($row['color']) == "#711616") {
                	if (strpos($row['title'], 'Blaue') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_blau.png' );
                	if (strpos($row['title'], 'Biotonne') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_gruen.png' ); 
                	if (strpos($row['title'], 'Gelber Sack') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/gelber_sack.png' ); 
                	if (strpos($row['title'], 'Restabfall') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_schwarz.png' );                                               
                	ImageCopy($image, $icon, $xoffset+30, $yoffset-5, 0, 0, imagesx($icon), imagesy($icon));
                	ImageDestroy($icon);
                }else{  
// ------------------------------------------- Geburtstag ----------------------------------------     
                
                if (($row['color']) == "#711616") {
                		$icon = ImageCreateFromPNG ( 'resources/icons/birth.png' );
                		ImageCopy($image, $icon, $xoffset+30, $yoffset, 0, 0, imagesx($icon), imagesy($icon));
                		ImageDestroy($icon);
                }else{                	
   
// ------------------------------------------- Namenstag ----------------------------------------     
                
                if (($row['color']) == "#182C57") {
                		$icon = ImageCreateFromPNG ( 'resources/icons/name.png' );
                		ImageCopy($image, $icon, $xoffset+27, $yoffset+1, 0, 0, imagesx($icon), imagesy($icon));
                		ImageDestroy($icon);
                }else{ 
                	         	           	
// ------------------------------------------- Standard - Button ----------------------------------------                
                // determine button color
                $colorArray = htmlColorToRgb($row['color']);
                $color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);
                // print appointment text and button                             
                drawGlassButton($image, $color, $xoffset+36, $yoffset+8);
                }
                } 
                }        
                imagettftextboxopt($image, 12, 0, $xoffset+50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
                $yoffset += 25; 
								$letzter_eintrag =  $currently_displayed_day;                        
          }
            $yoffset += 15;           
        }
       // roundboxtrans_bottom($image, $xleft, $xend, $yoffset, $yoffset_diff, $yoffset_abstand+16, $yoffset_end, $radius, $bottom_zeilen_hoehe);
        mysql_free_result($result);

    }

    private function addCalendar($color, $begin, $end, $title, $location) {
        $query = "INSERT INTO `if_calendar` (`id`, `color`, `begin`, `end`, `title`, `location`) 
                  VALUES (NULL,
                  '".mysql_real_escape_string($color)."', FROM_UNIXTIME($begin), FROM_UNIXTIME($end),
                  '".mysql_real_escape_string($title)."',
                  '".mysql_real_escape_string($location)."'
                  )";
        mysql_query($query, $this->dbconn) or die('CalendarPlugin: '.mysql_error());
    }
    
}

Hier noch ein Bild zum Beweis
Anhang anzeigen 69151

So jetzt nur noch die restlichen Symbole

Knusterus
 
Hey Knusterus,

das sieht doch schon echt gut aus! Weiter so......

@all: wie habt ihr das mit den Icons für den Sonnen aus / untergang hinbekommen? Wo bekomme ich das her? Das ist irgendwie an mir vorbeigegangen...... Ich habe noch die "alte" Version wo es lediglich in Text dransteht bzw. ohne Icons....
 
Hallo Thomas
Ich hoffe jetzt kann ich Dir mal helfen.

Im Anhang die Wetter.php und die zwei Icones die kommen in resources/icons.
Viel Erfolg

Knusterus
 
@ Knusterus: Freut mich, daß du es hinbekommen hast. :)

Hab ne pn von Ralf0815 bekommen: Es scheint wohl ein icon in der PaketPlugin Veröffentlichung zu fehlen. Die hänge ich hier und im eigentlichen Post mit an...
 

Anhänge

  • tracking.zip
    1 KB · Aufrufe: 12
So ich habs auf meinem Tablet jetzt mal ins Hochformat gebracht da passt ja ne Menge drauf.Das ist der Vorteil beim Tablet!!!
Anhang anzeigen 69231
das einzige was fehlt ist das Icon vom gelben Sack und die Spritpreise.
In meiner alten Ansicht aber auch.
Woran kann das liegen??
Das Benzinplugin ist aber aktiv.


Knusterus
 
@Knusterus

Sieht ja schon sehr gut aus!
 
Also Gelber Sack Icon ist wieder da.
Ich hatte "gelber" klein geschrieben.
Die Daten im Googlekalender müssen genauso geschrieben sein wie in der php.
jetzt funtzt es .
Aber die Benzinpreise fehlen immer noch.
Mal sehen wie es morgen aussieht.
Knusterus
 
hallo pacman2 !!!

habe es nun geschaft an meiner fritzbox 7240 (baugleich mit 7170-7270V3)

das lcd4linux für unsere Samsung Bilderrahmen zum laufen zu bringen! ist sogar noch das PNG plugin und Libfreetype plugin mit eingebaut!

und für diese Bilderrahmen funktioniert es:
SPF-72H | SPF-75H | SPF-76H | SPF-83H | SPF-85H | SPF-86H | SPF-85P | SPF-86P | SPF-87H | SPF-105P | SPF-107H | SPF-700T


nun bräuchte ich deine hilfe!

momentan muss ich das ganze direkt mit lcd4linux ausgeben.. sieht ziehmlich beschissen aus ehrlich gesagt!

ich brauch ein Programm wie deins was auf der fritzbox läuft und immer ein aktuelles bild erstellt damit lcd4linux das eine bild ausgeben kann! so mein plan!

aaabbbberrr .. ich habe keine Ahnung was ich dafür brauche und wie ich das anstellen kann!

kann du mir tipps geben oder sogar weiter helfen?
würde mich wahnsinig freuen wen ich das weiter schaffen würde! oder evtl mag sich ja jemand mit daran beteiligen?

grüße
 
Tach zusammen
Ich konnte es nicht lassen und habe mir den Motorola LS1000W nochmal für 40€zugelegt jetzt mit der Firmware 090921 funtzt aber leider nicht.
Ich habe Probleme mit der Aktualisierung.Mal aktualisiert sich das Ganze gar nicht ,mal 1 Stunde und bleibt dann hängen.Kennt vielleicht jemand den Fehler??
Das Ganze läuft auf einer virtuellen Maschine unter Linux.auf der virtuellen Maschine läuft auch noch ein DNS Server für die Framechannel Abfrage.
Ich habe auch schon den Firewall und das Antivirus meines Rechners deaktiviert,brachte aber auch keinen Erfolg.
Hat jemand noch ne Idee???

Knusterus
 
Hat jemand noch ne Idee???

Hatte es mit einer anderen Firmware besser funktioniert? Hast das Ding sowas wie ne Standby schaltung für WLAN das die Verbindung getrennt wird? Ist der Bilderrahmen in der Fritzbox als "verbunden" aufgelistet wenn mal wieder nichts geht? Check diese Dinge mal.

Wie schnell erfolgt die Abfrage des Frames am Framechannel? Jede Minute? Wie lange wartet der Bilderrahmen auf die Antwort des Servers? Könnte es sein das die Daten nicht schnell genug kommen?

Kannst Du mal Statt dem Infoframe Bild einen anderen RSS Feed anzeigen lassen?
 
Hallo Thomas

Also das Teil wird immer als verbunden mit der Fritzbox angezeigt.
Ich hatte ja das vorige Teil 2 mal upgedatet, es hat mit keinem funktioniert,allerdings wusste ich es von der Orginalsoft nicht mehr.
Deshalb habbe ich jetzt noch mal einen Versuch gestartet.
Die Frameabfrage kann ich nicht einstellen.
Ich kann nur das Intervall der Fotoshow verändern da habe ich schon verschiedene instellungen getestet,5,10,30,60 sec.Ohne Erfolg.
Das seltsame ist ja das zu unterschiedlichen Zeiten sich aufhängt.
Ich werde das ganze jetzt mal auf meinen Laptop umziehen und es mit XAMPP dort testen.

Grüsse
Knusterus
 
Hi und guten morgen.....

ich gehe mal von aus dass das ganze mit dem Tablet 1a funktioniert, oder? Ich habe hier mal was gefunden. Loewe81 hat / hatte auch das gleiche Problem wie Du. Der Frame scheint ein Problem damit zu haben das es nur 1 Dateiname gibt, den er dann darstellen soll. Die Lösung scheint es zu sein das man mehrere Bilder mit unterschiedlichen Namen erstellen muss sodass der Frame einwandfrei funktioniert. Hier der Auszug der entsprechende Stelle aus dem anderen Forum:

I got it now working with updating the image every minute, but I had to use randomized filenames in addition with the guid-tag in the rss-file.

Loewe81 ist ja auch hier im Forum aktiv. Wenn Loewe81 mitließt, könnte er sein Workaround hier veröffentlichen? Oder schreibe ihn doch mal direkt an. Ich hoffe das es dein Problem lösen wird. :D Zumindest wäre es vielversprechend.......
 
Hi Thomas

Naja Loewe habe ich vor längerer Zeit schon mal ne PN geschickt aber leider noch keine Antwort eerhalten.
Ich werde jetzt erst mal versuchen das Teil auf meinem Laptop zum Laufen zu bekommen und dann sehen wie weiter.
Auf meinen Tablet lief es tadellos.

Knusterus

Ne kurze frage habe ich noch.
Mit XAMPP müsste das doch auch von XP laufen oder?.Was brauche ich da noch auser den DNS Server??
 
Ja, sollte unter XP laufen. Wieso auf deinem laptop? Wo ist es den im moment gehostet? Dachte schon die ganze Zeit das es bei Dir daheim wäre? Ja, Loewe81 hatte damals eine Anleitung geschreiben für den Motorola, doch leider sind die ganzen Seiten im Digitalen Nirwana verschwunden. Infoframe.org sowie diese fanol Seite scheinen down zu sein, zumindest was die Foren betrifft. Ich finde es persöhnlich sehr schade das sowas passiert. Es wäre wohl besser gewesen die Anleitungen in einen seperaten Thread hier zu veröffentlichen oder ins "Hauseigene" Wiki zu schreiben. Egal...Dann bleibt wohl nur dran zu bleiben und hoffen das sich Loewe81 meldet. Evtl. hat aber noch irgendwer den selben Frame im einsatz und könnte hilfestellung geben?
 
Ne Ne

MaverrickTM hat es doch erstmal auf meiner Virtuellen Maschine auf meinem Hauptrechner zum Laufen gebracht um zu sehen ob es überhaupt läuft.Da das ganze aber unter Linux läuft und ich davon überhaupt keine Ahnung habe wollte ich jetzt unter Windows versuchen.Damals ging es nur um die Rückgabefrist des Rahmens.
Jetzt habe ich ja wieder 30 Tage Zeit.Wenn es mit dem Teil nicht funtzt nutze ich halt mein Tablet dafür.Ist halt nur ein bißchen schade dafür.Aber vielleicht bekommen wir es ja mit dem Rahmen auch noch hin.

Knusterus
 
[Monsterzitat entfernt. Beachtet die Forumregeln!]

intressiert das niemand?
 
Zuletzt bearbeitet von einem Moderator:
intressiert das niemand?

Es interessiert bestimmt, jedoch nur Samsung Frame Besitzer. Gib doch noch etwas Zeit bis sich gewisse Leute melden. Das ist normal hier. Manche brauchen eben Zeit...;)

Beschreib doch mal näher wie Du vorgegangen bist und was genau zu tun ist um es nutzen zu können. Gehe mal davon aus, das der Frame dann per USB Verbunden ist? Glaube das wäre doch was für "ao" da er immer was "Funkloses" wollte. :D
 
Ja, Loewe81 hatte damals eine Anleitung geschrieben für den Motorola, doch leider sind die ganzen Seiten im Digitalen Nirwana verschwunden. Infoframe.org sowie diese fanol Seite scheinen down zu sein, zumindest was die Foren betrifft. Ich finde es persöhnlich sehr schade das sowas passiert. Es wäre wohl besser gewesen die Anleitungen in einen seperaten Thread hier zu veröffentlichen oder ins "Hauseigene" Wiki zu schreiben

edit :ne das wars nicht!
 
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.