Hallo,
da ich mir vor einiger Zeit mal einen Chumby 8 zugelegt habe und die Möglichkeiten des Gerätes etwas erweiteren wollte habe ich mich mal daran gemacht die im Gerät abgespeicherten Weckzeiten für Schaltvorgägnge im Haus zu gebrauchen.
Vorlage für das plugin war :
SourceForge.net Repository - [openautomation] Log of /wiregate/plugin/generic/chumby_weckzeit.pl
erstmal musste ich aber die Weckzeiten "zugänglich machen":
https://knx-user-forum.de/169858-post18.html
Nun war die Idee, dass eine Weckzeit - so sie aktiv ist - eine bestimmte GA triggern soll. Das heisst, egal welcher Weckzeitpunkt gerade aktiv ist, es wird eine bestimmte GA (trigger_ga) mit einer [1] versorgt und kann dann zu weiteren Schaltaktionen führen. Bei mir läuft das dann über den Logikprozessor um verschiedene zeitgesteuerte Abläufe zum "Aufstehen" in Gang zu setzen.
Prinzipiell ist es unerheblich, ob neue Weckzeiten hinzugefügt werden oder ob welche gelöscht werden. Es sollten jedoch eindeutige Namen verwendet werden.
Im Moment wird jedoch nur die trigger_ga angesprochen, d.h. egal welche Weckzeit gerade abgearbeitet wird, es wird immer eine [1] (oder was auch immer) auf die trigger_ga gesandt.
Hier mal kurz der aktuelle Code - landet auch bald im svn:
da ich mir vor einiger Zeit mal einen Chumby 8 zugelegt habe und die Möglichkeiten des Gerätes etwas erweiteren wollte habe ich mich mal daran gemacht die im Gerät abgespeicherten Weckzeiten für Schaltvorgägnge im Haus zu gebrauchen.
Vorlage für das plugin war :
SourceForge.net Repository - [openautomation] Log of /wiregate/plugin/generic/chumby_weckzeit.pl
erstmal musste ich aber die Weckzeiten "zugänglich machen":
https://knx-user-forum.de/169858-post18.html
Nun war die Idee, dass eine Weckzeit - so sie aktiv ist - eine bestimmte GA triggern soll. Das heisst, egal welcher Weckzeitpunkt gerade aktiv ist, es wird eine bestimmte GA (trigger_ga) mit einer [1] versorgt und kann dann zu weiteren Schaltaktionen führen. Bei mir läuft das dann über den Logikprozessor um verschiedene zeitgesteuerte Abläufe zum "Aufstehen" in Gang zu setzen.
Prinzipiell ist es unerheblich, ob neue Weckzeiten hinzugefügt werden oder ob welche gelöscht werden. Es sollten jedoch eindeutige Namen verwendet werden.
Im Moment wird jedoch nur die trigger_ga angesprochen, d.h. egal welche Weckzeit gerade abgearbeitet wird, es wird immer eine [1] (oder was auch immer) auf die trigger_ga gesandt.
Hier mal kurz der aktuelle Code - landet auch bald im svn:
Code:
# Plugin zum Senden eines Befehles [1] auf eine GA abhaengig von der aktiven Weckzeit aus dem Chumby.
#
# basiert auf chumby_weckzeit.pl von swiss (https://knx-user-forum.de/members/swiss.html)
#
# Version 0.1 BETA 13.02.1013
# Copyright: jensgulow (https://knx-user-forum.de/members/jensgulow.html)
# License: GPL (v2)
# Aufbau moeglichst so, dass man unterhalb der Einstellungen nichts veraendern muss!
#
#
####################
###Einstellungen:###
####################
my $chumby_ip = "xxx.xxx.xxx.xxx"; # Hier die IP-Adresse des Chumby eintragen.
my $trigger_ga = "xx/x/x"; # Auf diese GA wird zum aktiven Weckzeitpunkt eine [1] gesandt.
my @do_not_use = ("Night","DAY week","DAY weekend"); # Diese Einträge der alarms sollen NICHT bearbeitet werden!
my $anzahl_elemente = @do_not_use; # Anzahl der Einträge in @do_not_use (nicht verändern!)
######################
##ENDE Einstellungen##
######################
# Eigenen Aufruf-Zyklus auf xx sek. setzen
$plugin_info{$plugname.'_cycle'} = 55;
use POSIX;
use XML::Simple;
use LWP::Simple;
use Encode qw(encode decode);
use Time::Local;
# use open ":utf8";
my $sec; #Sekunde
my $min; #Minute
my $hour; #Stunde
my $mday; #Monatstag
my $mon; #Monatsnummer
my $year; #Jahr
my $wday; #Wochentag 0-6
my $yday; #Tag ab 01.01.des aktuellen Jahres
my $isdst;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $perltime = int(60*$hour+$min); # rechnet auf die im Chumby verwendete Darstellung für time='' um
# z.B. 5:30 Uhr = 330
my $perltimemin = int(time/60); # Minuten seit dem 01.01.1970 (wird bei einmaligen Weckterminen als time='' verwandt
my $command = "ping -c 2 -w 2 ".$chumby_ip;
my $status = `$command`;
if($status =~ /bytes from/)
{
my $url = "http://$chumby_ip/cgi-bin/custom/alarms.pl?page=download";
my $xml = encode("utf8",get($url));
die "Fehler beim Aufrufen der URL: $url. Bitte mit Anleitung ueberpruefen." unless defined $xml;
my $alarms = XMLin($xml)->{alarm}; # Die alarms-Datei parsen
SCHALTZEITPUNKT: while ((my $key) = each %{$alarms})
{
for(my $i=0; $i<$anzahl_elemente; $i++)
{
if ($alarms->{$key} ne $do_not_use[$i])
{
### Fall "daily" als eingetragene Wecktage ###
if ($alarms->{$key}->{enabled} == 1 && $alarms->{$key}->{time} == $perltime && $alarms->{$key}->{when} eq 'daily')
{
knx_write($trigger_ga,1,1.001);
plugin_log($plugname, "geschalten, da Weckzeitpunkt erreicht. Sende [1] an $trigger_ga.");
last SCHALTZEITPUNKT;
}
### Fall "Once on xx/xx/xxxx" als eingetragener einmaliger Wecktag ###
elsif ($alarms->{$key}->{enabled} == 1 && $alarms->{$key}->{time} == $perltimemin && $alarms->{$key}->{when} eq 'once')
{
knx_write($trigger_ga,1,1.001);
plugin_log($plugname, "geschalten, da Weckzeitpunkt erreicht. Sende [1] an $trigger_ga.");
last SCHALTZEITPUNKT;
}
### Fall "dowxxxxxxx" als eingetragene Wecktage (individuelle Einstellung "day of week" ###
elsif ($alarms->{$key}->{enabled} == 1 && $alarms->{$key}->{time} == $perltime)
{
if ($alarms->{$key}->{when} =~ /dow(\d{7})/)
{
my $wdaybinaer = $1;
my @zeichen;
for(my $j=0; $j<7; $j++)
{
$zeichen[$j] = substr($wdaybinaer,$j,1);
if ($zeichen[$j] == 1 && $j eq $wday)
{
knx_write($trigger_ga,1,1.001);
plugin_log($plugname, "geschalten, da Weckzeitpunkt erreicht. Sende [1] an $trigger_ga.");
last SCHALTZEITPUNKT;
}
}
}
}
next;
}
}
}
return "Status OK";
}
elsif($status =~ /0 received/)
{
return "Ein Fehler ist beim Testen der IP $chumby_ip aufgetreten";
}


Kommentar