Hallo
Hier mein Google Schaltuhr-Plugin.
Unter Google Kalender muss ein neuer Kalender z.B. Schaltungen erstellt werden.
In diesem Kalender werden die Schalttermine eingetragen.
Es ist immer nur der Starttermin gültig, der Endtermin wird nicht gebraucht.
Im Feld "Was:" wird eingetragen was geschaltet werden soll, mit einem ";" getrennt.
Es muss diese Reihenfolge eingehalten werden.
name;GA;DPT;Wert
z.B. = Deckenlampe_Büro;2/1/1;1;1
Das Plugin überprüft alle 20sec. ob eine Schaltung ansteht und führt sie dann aus.
Es wird alle 10min ein PHP-Script augerufen, das holt 20 aktuelle Termine aus dem
Google-Kalender und speichtert diese Termine in der Plugin.conf ab.
Ich habe dieses PHP-Script auf meinem WG unter /var/www/myhouse/kalender/hole_kalender.php abgelegt.
Dieser Speicherort muss im Plugin google_schaltuhr.pl angepasst werden.
Im PHP-Script muss noch die Privatadresse des Kalenders unter "$feedURL" angepasst werden.
Diese Adresse bekommt man wenn man im Google Kalender auf der linken Seite den Schaltkalender anklickt.
Dann öffnet eine Drop Down Liste, wo man Kalender-Einstellungen auswählt.
Dort kommt man zu den Kalender Details.
Ganz unten unter Privatadresse den Button "XML" anklicken , dann öffnet sich ein Popup mit der Privatadresse.
Diese Privatadresse kopiert man ins PHP-Script unter "$feedURL"
https://www.google.com/calendar/feed...xxxxxxxx/basic
Die Endung "basic" wird entfernt und durch "full" ersetzt.
Das PHP-Script könnte auch durch Perl-Script ersetzt werden.
Es könnte dann in das Plugin übernommen werden.
Ich bin schon damit angefangen, habe aber die Lust verloren.
google_schaltuhr.pl
hole_gkalender.php
und hier das angefangene Perl-Sript
Viel Spass
Gruss NetFritz
Hier mein Google Schaltuhr-Plugin.
Unter Google Kalender muss ein neuer Kalender z.B. Schaltungen erstellt werden.
In diesem Kalender werden die Schalttermine eingetragen.
Es ist immer nur der Starttermin gültig, der Endtermin wird nicht gebraucht.
Im Feld "Was:" wird eingetragen was geschaltet werden soll, mit einem ";" getrennt.
Es muss diese Reihenfolge eingehalten werden.
name;GA;DPT;Wert
z.B. = Deckenlampe_Büro;2/1/1;1;1
Das Plugin überprüft alle 20sec. ob eine Schaltung ansteht und führt sie dann aus.
Es wird alle 10min ein PHP-Script augerufen, das holt 20 aktuelle Termine aus dem
Google-Kalender und speichtert diese Termine in der Plugin.conf ab.
Ich habe dieses PHP-Script auf meinem WG unter /var/www/myhouse/kalender/hole_kalender.php abgelegt.
Dieser Speicherort muss im Plugin google_schaltuhr.pl angepasst werden.
Im PHP-Script muss noch die Privatadresse des Kalenders unter "$feedURL" angepasst werden.
Diese Adresse bekommt man wenn man im Google Kalender auf der linken Seite den Schaltkalender anklickt.
Dann öffnet eine Drop Down Liste, wo man Kalender-Einstellungen auswählt.
Dort kommt man zu den Kalender Details.
Ganz unten unter Privatadresse den Button "XML" anklicken , dann öffnet sich ein Popup mit der Privatadresse.
Diese Privatadresse kopiert man ins PHP-Script unter "$feedURL"
https://www.google.com/calendar/feed...xxxxxxxx/basic
Die Endung "basic" wird entfernt und durch "full" ersetzt.
Das PHP-Script könnte auch durch Perl-Script ersetzt werden.
Es könnte dann in das Plugin übernommen werden.
Ich bin schon damit angefangen, habe aber die Lust verloren.
google_schaltuhr.pl
Code:
# return(); # schaltet anhand der Termine im Google-Kalender # by NetFritz 03/2013 # # # muss ewtl angepasst werden my $hole_gkalender = "./var/www/myhouse/g_kalender/hole_gkalender.php"; # $plugin_info{$plugname.'_cycle'} = 20; my $geschaltet = ""; # # hole die Schaltzeiten aus der config my $conf=$plugname; $conf=~s/\.pl$/.conf/; $conf="/etc/wiregate/plugin/generic/conf.d/$conf"; open (CONFIG, "<$conf") || return "no config found"; my @Schaltzeiten = <CONFIG>; close CONFIG; # # in $iso steht Datum-Zeit = 'd.m.Y H:M' my @dta = localtime(time); my $iso=sprintf('%02d.',$dta[3]); $iso.=sprintf('%02d.',$dta[4]+1); $iso.=($dta[5]+1900)." "; $iso.=sprintf('%02d:',$dta[2]); $iso.=sprintf('%02d',$dta[1]); # my ($sek,$min,$std) = localtime(time); if ($min < 10 ){$min = "0".$min} if ($std < 10 ){$std = "0".$std} # # Schaltungen ausführen foreach my $element (@Schaltzeiten) { # $element=~s/ //g; # Leerzeichen entfernen my ($schaltzeit,$name,$ga,$dpt,$wert) = split(/;/,$element); $ga=~s/ //g; # Leerzeichen entfernen $dpt=~s/ //g; $wert=~s/ //g; if(($plugin_info{$plugname.'_time'}+60) <= $plugin_info{$plugname.'_last'}){ if($iso eq $schaltzeit){ $geschaltet = "zeit=" . $schaltzeit . " name=" . $name . " ga=" . $ga . " dpt=" . $dpt . " wert=" .$wert; knx_write($ga,$wert,$dpt); $plugin_info{$plugname.'_time'} = time(); } } } # # holt mit Hilfe des PHP-Scripts vom Google Kalender die Schaltzeiten # und speichert sie in der plugin.conf ab if(($plugin_info{$plugname.'_time'}+60) <= $plugin_info{$plugname.'_last'}){ if($min == 00 or $min == 10 or $min == 20 or $min == 30 or $min == 40 or $min == 50){ # Google-Kalender in config laden my $result = system($hole_gkalender); $plugin_info{$plugname.'_time'} = time(); } } return($geschaltet);
Code:
#!/usr/bin/php <?php # Holt aus den Google Kalender (Schaltkalender) 20 Termine # (es werden nur Termine aus der Zukunft geladen) # und speichert sie in die plugin.conf ab, # wird von google_schaltuhr Plugin alle 10min aufgerufen # Die $feedURL muss an den eigenen Kalender angepasst werden # by NetFritz 03/2013 # # $feedURL = "https://www.google.com/calendar/feeds/$userid/private-$magicCookie/full"; # Privatadresse unter Kalender-Einstellungen , unten XML Private, basic muss gegen full getausch werden $feedURL = "[URL="https://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgroup.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic"]https://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgroup.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/full[/URL]"; $feedParams = "?singleevents=true&max-results=20&orderby=starttime&start-min=".urlencode(date("c"))."&sortorder=a"; $sxml = simplexml_load_file($feedURL.$feedParams); # echo $sxml; $today = 0; $date = ""; foreach ($sxml->entry as $entry) { $title = stripslashes(utf8_decode($entry->title)); $gd = $entry->children('http://schemas.google.com/g/2005'); $startTime = ''; if ( $gd->when ) { $startTime = $gd->when->attributes()->startTime; } elseif ( $gd->recurrence ) { $startTime = $gd->recurrence->when->attributes()->startTime; } $startTime = strtotime( $startTime ); if(date("d.m.y") == date("d.m.y", $startTime)) { $today++; } else { if($today > 0) { $today = 0; $date .= "\n"; } } $where = utf8_decode($gd->where->attributes()->valueString); if(strlen($where) > 0) { $where = " (".$where.")"; } $date .= date("d.m.Y H:i", $startTime ).";".$title.$where."\n"; } # echo $date; # schreibt die Schalttermine in die plugin.conf $conf="/etc/wiregate/plugin/generic/conf.d/google_schaltuhr.conf"; $datei = fopen($conf,"w"); fwrite($datei, $date); fclose($datei); ?>
Code:
#!/usr/bin/perl use URI::Escape; use LWP::Simple; use XML::Simple; use Data::Dumper; # in $iso steht Datum-Zeit = 'Y-m-d H:M:S' my @dta = localtime(time); my $iso=($dta[5]+1900)."-"; $iso.=sprintf('%02d-',$dta[4]+1); $iso.=sprintf('%02d',$dta[3]); $iso.= "T"; # nach Datum wird ein T erwartet $iso.=sprintf('%02d:',$dta[2]); $iso.=sprintf('%02d:',$dta[1]); $iso.=sprintf('%02d',$dta[0]); my $encoded = uri_escape($iso); # # $feedURL = Privatadresse unter Kalender-Einstellungen , unten XML Private my $feedURL = "[URL="https://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgroup.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic"]https://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgroup.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx[/URL]/full"; my $feedParams = "?singleevents=true&max-results=10&orderby=starttime&start-min=".$encoded."&sortorder=a"; # Objekt erstellen $xml = new XML::Simple; my $xmlresult = get($feedURL.$feedParams)or die "Fehler"; my $data = $xml->XMLin($xmlresult,ForceArray => ['title']); my $entry; foreach my $entry ($data->{entry}) { print Dumper($entry); # my $title = $entry->{title}; # print $title . "\n"; }
Gruss NetFritz
Kommentar