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

@ frank
Entschuldigung wird nicht wieder vorkommen.

@MaverrickTM
Jo im Moment läuft er noch.Allerdings werde ich nicht die Gegenprobe machen.Ich bin echt froh das es endlich läuft.
Aber richtig froh bin ich erst, wenn es morgen früh immer noch geht.Werde es die Nacht laufen lassen.

Knusterus
 
Also das Plugin ist von hier http://www.ip-phone-forum.de/showthread.php?t=206194&p=1655312&viewfull=1#post1655312
wie gesagt die Müllsymbole funtionieren ja.Nur die Torte kommt nicht.Ich habe auch schon verschiedene Schreibweisen im Googlekalender getestet mal Geburtstag als erstes mal den Namen zu erst,geht einfach nicht.

Dann ist mir noch ein Problem aufgefallen.Ich bekomme manche Tage keine Benzinpreise angezeigt,obwohl das Plugin aktiviert ist.Dann geht es plötzlich wieder ,ohne das ich was geändert habe.Habt ihr das auch??

So nun zum spannensten Thema,mein Rahmen.Also er hat sich gestern um 23.18 wieder aufgehängt.Heute morgen habe ich ihn neu gestartet ,seit dem läuft er.1,5 std.Also damit kann ich leben!!!

Knusterus

So Rahmen mit Laptop laufen nach wie vor fast fehlerfrei und ich bin echt froh!!!!!!:D:D:D:D:D

Ich habe mal versucht auf meinem Hauptrechner das ganze mal mit Xampp light zum laufen zu bekommen.Hatte leider keinen Erfolg.Wetter und TV Spielfimfeed gehen aber der Kalender nicht.wenn ich die Localhostseite aufrufe kommt manchmal die Fehlermeldung
Code:
Error, delete query failed
.Hab auch schon mal fau Go... gefragt aber nichts gefunden.Drücke ich dann aktualisieren ist die Seite wieder da, aber ohne Kalender.
Hat jemand das schon mal mit xampp light getestet??Geht das mit der Light version vielleicht gar nicht???
Und die Benzinpreise gehen auch auf beiden Maschinen nicht.
Also wenn es für die Benzinpreise noch ne Lösung gibt wäre das Super.

Knusterus
 
Zuletzt bearbeitet:
Also das Plugin ist von hier http://www.ip-phone-forum.de/showthread.php?t=206194&p=1655312&viewfull=1#post1655312

Dann ist mir noch ein Problem aufgefallen.Ich bekomme manche Tage keine Benzinpreise angezeigt,obwohl das Plugin aktiviert ist.Dann geht es plötzlich wieder ,ohne das ich was geändert habe.Habt ihr das auch??


Knusterus

Das Plugin guckt auf der Seite nach, ob sich an den Preisen was geändert hat. Nach 24 Stunden ohne Änderung der Preise werden die dann nicht mehr angezeigt. Erst wenn die Preise wieder aktuell sind , bekommste die dann wieder zu sehen. Du kannst aber auch mal in deine Datenbank schauen, ob die regelmäßig aktualisiert wird.
 
Du kannst aber auch mal in deine Datenbank schauen, ob die regelmäßig aktualisiert wird.

Tja die Datenbank enhält keine Datensätze.Ich habe sie ja gestern erst angelegt.
Habe ich da was falsch gemacht??

Knusterus
 
Nur if_tanken nicht ? Hat es denn mit Xampp überhaupt schon mal funktioniert?
 
Zuletzt bearbeitet:
Also
If Calender hat 2 Datensätze ,Kalender funktioniert
If tanken 0 Datensätze
If system 1 Datensatz
Die Anderen haben auch 0 Datensätze,da ich Plugins auch nicht nutze.

Nein mit dem Xampp hats noch nicht funktioniert.

Knusterus
 
wetter funktioniert?
 
Jo wetter geht auch
 
Also müsste fopen funktionieren. In der php.ini gabs glaube ich auch noch einige Laufwerkspfade zu Verzeichnissen anzupassen .
z.b. Zeile 796 include_path = ".;G:\xampp\php\PEAR""
musste mal durchgucken.
 
Also die Pfade stimmen alle c:\xampp.
Ich denke die werden bei der Installation schon gesetzt.
Ich habe das ganze ja auch noch auf meinem Hauptrechner auf einer virtuellen Maschine laufen.da geht es im Moment auch nicht.
Da ging es aber schon mal ohne das ich was geändert habe.

Knusterus

So ich habe nochmal ein bißchen rumgespielt.
Also das Plugin funktioniert.
Da ich in einer kleinen Stadt wohne und auch rundherum nur kleine Städte sind ,habe ich mal die nächst grösser Stadt genommen und schon sehe ich die Benzinpreise.
Ich versteh es zwar nicht, da bei Clever tanken es sowohl meinen Ort als auch mehrere Nachbarorte mit Benzinpreisen gibt.
Warum werden die nicht ausgewertet??

So ich möchte noch mal ein kurzes Statment abgeben.Also der Rahmen läuft soweit,er bleibt zwar immer mal stehen,aber das hält sich in Grenzen so ca.8-10 Std läuft er.
Damit kann ich echt leben.
Nur das Problem mit der Geburtstagstorte habe ich immer noch.Ich hänge mal meine Calender.php mit an.Vielleicht seht ihr den Fehler.Ich habe zusätzlich noch ne Geburtstagsabfrage mit eingebaut aber leider ohne Erfolg.

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));
                                                $dayname = datumDeutsch(strftime("%A, ".$formatDate, strtotime($begin_date)));

					imagettftextboxopt($image, 14, 0, 50, $yoffset-1, $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+25, $yoffset-15, 0, 0, imagesx($icon), imagesy($icon));
                	ImageDestroy($icon);
                }else{  
// ------------------------------------------- Geburtstag ----------------------------------------     
                 if (($row['color']) == "#711616") {  
				    if (strpos($row['title'], 'Geburtstag') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/birth.png' );
                	ImageCopy($image, $icon, $xoffset+30, $yoffset+0, 0, 0, imagesx($icon), imagesy($icon));
                	ImageDestroy($icon);
                }else{                	
// ------------------------------------------- Namenstag ----------------------------------------     
                if (($row['color']) == "#711616") {
                		$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-6, $style['textcolor'], $style['font'], $text, $opt_entry);
                $yoffset += 16; 
								$letzter_eintrag =  $currently_displayed_day;                        
          }
            $yoffset += 6;           
        }
       // 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());
    }
    
}

Das Icon ist auch im richtigen Ordner.Vielleicht seht ihr den Fehler.Die Abfallbilder funktioniren.

Knusterus
 
Zuletzt bearbeitet:
@ Spoon3er

Ich habe gerade Dein PaketPlugin installiert und was soll ich sagen es hat sofort funktioniert.Vielen Dank dafür!!:groesste::D:D

@All

Echt ein SUPERPROJEKT!!!!! Also ich bin noch sehr froh das es läuft.

Aber das Problem mit der Geburtstagstaorte habe ich immer noch.:noidea:

Ich weiß, das ist jetzt echt meckern auf hohem Niveau;),aber jetzt hat mich auch der Ehrgeiz gepackt.

Knusterus
 
Hast Du mal in das Error-Log geschaut ob dort Fehler auftauchen?
 
Hilf mal bitte kurz auf die Sprünge \xampp\apache\error\ ist das richtig??
Also da steht nichts neues drin.

Knusterus
 
^^ Bei XAMPP kann ich es Dir nicht genau sagen. Wenn ich mich nicht irre gibts im Ordner apache einen Ordner log. Da sollte sich die error.log drin befinden.
 
Jo hast recht ,bei Apache gibt es einen Ordner log und da liegt auch eine error- Datei.
Da ich heute morgen nochmal eine Testgeburtstag für morgen in den Googlekalender eingetragen habe,sind für heute keine Meldungen drin.
Der Geburtstag wird aber auf dem Rahmen schon angezeigt.

Knusterus
 
Und steht nun etwas in der Error-Log?
 
Ne, heute Testgeburtstag eingetragen ,Geburtstag wird auch angezeigt, Datei leer.(von heute)

Knusterus
 
Lass mich mal bitte nochmal per TV ran.
 
Geht im Moment nicht mach gerade bei meinem Vater per TV was.Haste später noch Zeit??
 
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.