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

Hallo Volker,

Dein Rahmen kann keine Videos abspielen.
Du könntest also höchstens nach definierten Zeitintervallen ein Schnappschuss Deiner IP Kamera als Hintergrundbild ablegen.

Gruß, Michael...
 
hallo Michael
Ja, da hast Du Recht,da hätte ich auch selbst drauf kommen können,das mein Rahmen keine Videos kann,sorry.:newbie:
Das mit dem Bild habe ich schon hinbekommen,das Bild wird jede Minute aktuallisiert ,wie das Bild auf dem Rahmen.
Ist halt nicht so schön wie ein Livestream, aber es ist ok.

danke
Grüße Volker
 
Moin Leute,

versuche gerade Emoji's aus dem Google Kalender auf meinem Infoframe darzustellen. Leider werden nur Fragezeichen angezeigt. Hat das vielleicht schon jemand hinbekommen und/oder kann mir nen Tipp geben?
 
wo kann man denn Emoji´s überhaupt zufügen? hab isch noch nie gesehen
 
Das wird wohl eine spezielle Schriftart (Font) für den Google-Kalender sein, deshalb auch die Zeichenersetzung durch "Fragezeichen".

Joe
 
im Google Kalender habe ich mir einen zusätzlichen Kalender mit deutschen Feiertagen geladen. Gibt es eine Möglichkeit diesen auch auf dem InfoFrame anzuzeigen ???

Ich habe nichts dazu gefunden.
 
Hallo Friday,

klar geht das. Nachdem Du in der Funktion doUpdate() Deine privaten Kalender geholt und in die Datenbank gespeichert hast, machst Du das gleiche nochmal mit dem öffentlichen Kalender, etwa so:


PHP:
[...]
$calendarID = "de.german#[email protected]";
$color = "#ffff80";
$events = $service->events->listEvents($calendarID, $eventParams);        
while (true)
{
    foreach ($events->getItems() as $event)
    {
        if (!empty($event['modelData']['start']['dateTime']))
        {
            $begin = strtotime($event['modelData']['start']['dateTime']);
            $end = strtotime($event['modelData']['end']['dateTime']);
        }
        else
        {
            $begin = strtotime($event['modelData']['start']['date']);
            $end = strtotime($event['modelData']['end']['date']);
        }                  
        $title = $event->getSummary();    
        $location = $event->getLocation();
        $this->addCalendar($color, $begin, $end, $title, $location);
    }
    // next event page if there is one
    $pageToken = $events->getNextPageToken();
    if ($pageToken)
    {
        $optParams = array('pageToken' => $pageToken);
        $events = $service->events->listEvents($calendarID, $optParams);
    }
    else
    {
        break;
    }
}
[...]
 
danke schonmal,

aber ich wüßte jetzt garnicht wo ich das bei mir in der function einfügen sollte

Code:
public function doUpdate() {    	
    	/*require_once '/google-api-php-client/autoload.php';*/
		require_once 'autoload.php';
    	session_start();
		$client_id = $this->config['client_id'];
		$service_account_name = $this->config['account_name'];


        try {
			$client = new Google_Client();
			$client->setApplicationName($this->config['project_name']);
			$service = new Google_Service_Calendar($client);
        }
        catch (Exception $e) {
            die ('Folgender Fehler trat auf: ' . $e->getMessage());
        }


		if (isset($_SESSION['service_token']))
				$client->setAccessToken($_SESSION['service_token']);
	
		$key = file_get_contents($this->config['key_file']);
	
		$cred = new Google_Auth_AssertionCredentials(
							$service_account_name,
		    				array('https://www.googleapis.com/auth/calendar'),
		    				$key);
		    				
		$client->setAssertionCredentials($cred);
		if ($client->getAuth()->isAccessTokenExpired())
		 		$client->getAuth()->refreshTokenWithAssertion($cred);
	
		$_SESSION['service_token'] = $client->getAccessToken();
	
		//set startDate, endDate, eventParams
	  $now = new DateTime('NOW');
	 	$clone = clone $now;
	 	$clone = date_modify($clone, '+1 month');
		//$clone = date_modify($clone, '+' . $this->config['number_of_days'] . ' days');
		$startDate = date_format($now, DateTime::W3C);
		$endDate = date_format($clone, DateTime::W3C);
	
		$eventParams = array(
							'timeMin' => $startDate,
							'timeMax' => $endDate,
							'singleEvents' => 'true');
								
		//get Calendar Id´s	
		$calendarList = $service->calendarList->listCalendarList();
	
		// Set begin of querys
		$insertToken = "REPLACE INTO if_system (name, value) VALUES ";
		$insertCalendarData = "INSERT INTO if_calendar (color,begin,end,title,location) VALUES ";
		$deleteCalendarData = "DELETE FROM if_calendar WHERE ";
		
	/******************** Update every given time without checking for SyncToken ************************/
		$forceRefresh = $this->config['force_refresh'];
		$updateCalendar = FALSE;
		$query = "SELECT * FROM if_system WHERE name = 'CalendarUpdate'";
	  $result = mysql_query($query, $this->dbconn);
		if (mysql_num_rows($result) > 0) {
			$row = mysql_fetch_assoc($result);
			if ( ($row['name'] == 'CalendarUpdate') && ((time() - $row['value']) >= ($forceRefresh*3600)) ) {
				$updateCalendar = TRUE;
				$query = "REPLACE INTO if_system (name,value) VALUES ('CalendarUpdate', '".time()."')";
		 		mysql_query($query, $this->dbconn) or die('CalendarPlugin: '.mysql_error());					
			}
		}else{
			$updateCalendar = TRUE;
			$query = "INSERT INTO if_system (name,value) VALUES ('CalendarUpdate', '".time()."')";
			mysql_query($query, $this->dbconn) or die('CalendarPlugin: '.mysql_error());
		}
	 /*********************************************************************************************************/
	
		$i = 0;
		while(TRUE) {
			
		/***************** Loop through each Calendar, get id, and color **************************/
			foreach ($calendarList->getItems() as $calendarListEntry) {
			  	$calendarID = $calendarListEntry->getID();
			  	$color = $calendarListEntry->getBackgroundColor();
			 
			 	/***************** Get SysncToken to skip this calender at next update if nothing has changed **********/ 
			    $events = $service->events->listEvents($calendarID, $eventParams);	    
			    //If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken
			    try{	
			    	$NextSyncToken = $events->getNextSyncToken();
		        }
		        catch (Exception $e) {
		            if (strripos($e->getMessage(), "410") !== FALSE){
		            	$NextSyncToken = 'FEHLER';
		            }else{
		            	die ('Folgender Fehler trat auf: ' . $e->getMessage());
		            }
		        } 
			    $SyncToken = '';
			   //echo $NextSyncToken.PHP_EOL;
			   	if ($updateCalendar == FALSE) {
					$query = "SELECT value FROM if_system WHERE name = '".$calendarID."'";
					$result = mysql_query($query, $this->dbconn);
						if (mysql_num_rows($result) > 0) {
							$row = mysql_fetch_assoc($result);
						 	$SyncToken = $row['value'];
						}
				}	
				$insertToken .= "('".$calendarID."','".$NextSyncToken."'), ";	
				/***************** SysncToken check done *****************************************************/ 
					
				/**************** if SyncToken changed perform update ******************************/			
			    if ($NextSyncToken != $SyncToken) {
			    	$i++;
			    	$deleteCalendarData .= "color = '".$color."' OR ";	    	
					while(TRUE) {
					 	/************************ Get content from each Calendar *****************/
						foreach ($events->getItems() as $event) {
						  	//print_r($event);
					  		if (!empty($event['modelData']['start']['dateTime'])) {
					  			$begin = date_format(date_create($event['modelData']['start']['dateTime']), 'Y-m-d H:i:s');
					  			$end = date_format(date_create($event['modelData']['end']['dateTime']), 'Y-m-d H:i:s');
					  		}else{
					  			$begin = $event['modelData']['start']['date'];
					  			$end = $event['modelData']['end']['date'];
					  		}			  	
					  		$title = $event->getSummary();	
					 		$insertCalendarData .= "('".$color."','".$begin."','".$end."','".$title."',''), ";	
					  	}
					  	$pageToken = $events->getNextPageToken();
					  	if ($pageToken) {
					 		$optParams = array('pageToken' => $pageToken);
					    	$events = $service->events->listEvents($calendarListEntry->getID(), $optParams);
					  	}else{
					    break;
					  	}
					}
				} /********** if SysncToken changed perform update END  **********/
		  	} /*********** Loop through each Calendar, get id, and color END *************************/
		  
		  	$pageToken = $calendarList->getNextPageToken();
		  	if ($pageToken) {
		  		$optParams = array('pageToken' => $pageToken);
		    	$calendarList = $service->calendarList->listCalendarList($optParams);
		  	}else{
		    	break;
		  	}
		}
		
	/***************************** if SyncToken changed perform SQL-statement *********************/
		if ( $i > 0 ) {
			mysql_query($this->before_last('OR', $deleteCalendarData), $this->dbconn) or die('CalendarPlugin -> insertCalendarData:  '.mysql_error());
			mysql_query($this->before_last(',', $insertToken), $this->dbconn) or die('CalendarPlugin -> insertToken: '.mysql_error());
			mysql_query($this->before_last(',', $insertCalendarData), $this->dbconn) or die('CalendarPlugin -> insertCalendarData:  '.mysql_error());
		}
	       		             
    }
 
Zuletzt bearbeitet:
Hallo,

ungetestet, also mach Dir ein Backup ;)

Unmittelbar vor dem Kommentar /***************************** if SyncToken changed perform SQL-statement *********************/ fügst Du folgendes ein.

PHP:
        // get all public calendars
        $calendar_num = 0;
        while (isset($this->config['calendar_ID_' . ++$calendar_num]))
        {    
            $i++;
            $calendarID = $this->config['calendar_ID_' . $calendar_num];
            $color = $this->config['calendar_ID_color_' . $calendar_num];
            
            $deleteCalendarData .= "color = '".$color."' OR ";
            $events = $service->events->listEvents($calendarID, $eventParams);        
            while (true)
            {
                foreach ($events->getItems() as $event)
                {
                     if (!empty($event['modelData']['start']['dateTime'])) 
                     {
                           $begin = date_format(date_create($event['modelData']['start']['dateTime']), 'Y-m-d H:i:s');
                           $end = date_format(date_create($event['modelData']['end']['dateTime']), 'Y-m-d H:i:s');
                     }
                     else
                     {
                           $begin = $event['modelData']['start']['date'];
                           $end = $event['modelData']['end']['date'];
                    }
                    $title = $event->getSummary();    
                    $location = $event->getLocation();
                    
                    $insertCalendarData .= "('".$color."','".$begin."','".$end."','".$title."','".$location."'), ";
                }
                // next event page if there is one
                $pageToken = $events->getNextPageToken();
                if ($pageToken)
                {
                    $optParams = array('pageToken' => $pageToken);
                    $events = $service->events->listEvents($calendarID, $optParams);
                }
                else
                {
                    break;
                }
            }
        }

In der config.ini hast Du für die Sektion [CalendarPlugin] jetzt weitere Parameter:
calendar_ID_n für die Kalenderadresse und calendar_ID_color_n für dessen Farbe (n muss fortlaufend sein).

Beispiel:
Code:
calendar_ID_1 = "de.german#[email protected]"
calendar_ID_color_1 = "#ffff80"
calendar_ID_2 = "bund2_9902_%46ortuna+%44%c3%bcsseldorf#[email protected]"
calendar_ID_color_2 = "#800000"
calendar_ID_3 = "bund_6125_%46%43+%53chalke+04#[email protected]"
calendar_ID_color_3 = "#800000"

Nachtrag: da das Löschen der Termine durch die Farbe selektiert wird, solltst Du nicht die gleichen Farben wie in Deinem Kalender benutzen!

Gruß, Michael...
 
Zuletzt bearbeitet:
ok habs so übernommen, aber wird leider nicht angezeigt.

eigentlich sollten da jetzt auch Gründonnerstag und Karfreitag zu sehen sein, denn mit 5 tagen vorschau wird ein geburtstag am Samstag jetzt gezeigt.

config ini:
[CalendarPlugin]


number_of_days = 5
project_name = "infoframe"
client_id = "xxxxxxxxxxx-xxxxxxxxxxx.apps.googleusercontent.com"
account_name = "xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com"
key_file = "/share/MD0_DATA/Web/resources/infoframe-xxxxxxxxxxxxx.p12"
force_refresh = 10
calendar_ID_1 = "de.german#[email protected]"
calendar_ID_color_1 = "#ffff80"
 
Error Log?
 
Hallo,

$end und $begin scheinen bei Dir anders definiert. Ich habe den Code in meinem Post nochmal an Deine Belange angepasst .
Wenn's jetzt nicht geht, kann ich Dir ohne Fehlermeldungen nicht weiter helfen.

Gruß...
 
Hallo Friday,
würde mich ja schon interessieren, ob es nun geklappt hat oder nicht.
Gruß...
 
hallo marvin,
ja sorry es geht jetzt mit dieser änderung. danke nochmal.

aber eigentlich hatte ich geantwortet. nur jetzt sehe ich selber das es hier nicht steht. viell. hatte ich vergessen auf speichern zu drücken.
sorry.

mich beschäftigt aber schon seit wochen auch noch ein ganz anderes problem, welches ich hier auch schonmal gepostet habe.
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.
 
Hallo Friday,

ich benutze den Callmonitor schon lange nicht mehr, kann mich aber erinnern, dass es immer wieder Probleme damit gab, dass das Fritzinterne Telefonbuch nicht korrekt ausgelesen wurde.

http://www.ip-phone-forum.de/showthread.php?t=191723&page=35&p=1971624&viewfull=1#post1971624

Ich habe mir damals mit Spoon3ers Trick geholfen.

http://www.ip-phone-forum.de/showthread.php?t=206194&page=104&p=1972144#post1972144

Ob das Script heute noch funktioniert? Zur Not musst Du das Callmonitor Telefonbuch per Hand füllen.

Gruß, Michael...
 
Moin,

funktioniert bei euch das Benzin Plugin noch? Habe hier die MTS Version. Leider werden keine Preise mehr angezeigt. Wenns bei euch noch läuft hat Strato mal wieder nen Problem.
 
Zuletzt bearbeitet:
Anscheinend wird Strato jetzt von clever-tanken.de geblockt. Warum auch immer. Bei Speicheranbieter.de funktioniert es jedenfalls, ist aber zu langsam. Ich habe mal dort angefragt warum das so ist. Mal sehen ob es eine Reaktion gibt.
 
Moin,

da clever-tanken.de wie erwartet nicht geantwortet hat, nutze ich inzwischen die API von Tankerkoenig --> https://creativecommons.tankerkoenig.de/

Anscheinend hat Google wieder mal rumgebastelt, zumindest werden bei mir keine neuen Termine im Kalender angezeigt. Ist das bei euch auch so, oder nur bei mir?
 
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.