FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Christian Uhlmann am 21 September 2017, 22:54:07

Titel: userReading timedOnTill für Homematic Lichtschalter
Beitrag von: Christian Uhlmann am 21 September 2017, 22:54:07
Hallo zusammen,

da mich das schon lange gewurmt hat und ich nichts passendes gefunden habe, habe ich als Perl DAU mal ein userReadings für Homematic Lichtschalter gebaut, welches anzeigt, bis wann das Licht an sein wird.
Gesteuert wird das bei Homematic über die Register [sh|lg]OnTime, da ich nur shOnTime nutze, ist dieser Code auch nur dafür Zuständig.
Da bei mir auch alle Peers ein shOnTime gesetzt haben ist der Fall dass dieser nicht gesetzt ist nicht vorgesehen.

Bei mir schalten die Schalter selbst, als auch 2 Bewegungsmelder einige Lampen mit unterschiedlichen Zeiten an.
Das möchte ich gerne einsehen können, einen weiteren Zweck hat das ganze bisher nicht.


attr <device> userReadings timedOnTill {\
my $start = "R";;\
my $minus = "-";;\
my $register = "shOnTime";;\
my $device = ReadingsVal($NAME,"trigLast",undef);; \
$device = substr($device,0,index($device,':')-0);;\
my $reading = $start.$minus.$device.$minus.$register;;\
my $ontime = ReadingsVal($NAME,$reading,undef);;\
my $trigLast = ReadingsTimestamp($NAME,"trigLast",undef);;\
$ontime = ((split / /, $ontime)[0]);;\
my $return = time_str2num($trigLast) + $ontime;;\
FmtDateTime($return);;\
}


Als Reading kommt dann folgendes:

2017-09-21 22:52:47   timedOnTill     2017-09-21 23:07:47

um 22:52 wird das letzte mal der on Trigger gefeuert und dann wird für 900 Sekunden (15 Minuten) eingeschaltet.

Wer Verbesserungsvorschläge hat oder Fehler findet, immer her damit.
Vor allem, wie man das kürzer schreiben könnte, das geht sicher aber ich bin zu sehr Perl DAU dafür :)

Ansonsten viel Spaß damit wer es gebrauchen kann.


Grüße

Christian
Titel: Antw:userReading timedOnTill für Homematic Lichtschalter
Beitrag von: ComputerZOO am 21 September 2017, 23:38:51
Moin,
ungetestet, aber das sollte eigentlich etwas kürzer sein und trotzdem funktionieren:
attr <device> userReadings timedOnTill {\
my $device = ReadingsVal($NAME,"trigLast",undef);; \
$device = substr($device,0,index($device,':')-0);;\
my $ontime = ReadingsVal($NAME,"R-".$device."-shOnTime",undef);;\
my $trigLast = ReadingsTimestamp($NAME,"trigLast",undef);;\
$ontime = ((split / /, $ontime)[0]);;\
my $return = time_str2num($trigLast) + $ontime;;\
FmtDateTime($return);;\
}