userReading timedOnTill für Homematic Lichtschalter

Begonnen von Christian Uhlmann, 21 September 2017, 22:54:07

Vorheriges Thema - Nächstes Thema

Christian Uhlmann

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
Host: Debian Buster als VM / XCP-NG
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, HMLan, HM-USB 2, LaCrosseGateway
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, ESPEasy, Sonoff mit Tasmota

ComputerZOO

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);;\
}