echodevice timer reading auswerten - minimum ermitteln für user reading

Begonnen von willib, 04 Mai 2020, 12:54:27

Vorheriges Thema - Nächstes Thema

willib

Ich verstehe nicht die Systematik der timer readings am echodevice.
Es sollte aber möglich sein von den erzeugten immer den mit der kürzesten Restlaufzeit in ein user reading zu schreiben.
Dazu habe ich mich zunächst mit der Formatierung befasst:

Attributes:
   IODev      Echodevice
   alias      Echo Küche
   event-on-change-reading .*
   room       Amazon
   userReadings Restzeit {my $sec=ReadingsVal("Echo_Kueche","timer_remainingtime",0);;
my $hour=$sec / 3600;;
my $h=sprintf('%02s',int($hour));;
$sec=$sec - ($h * 3600);;
my $min=$sec / 60;;
my $m=sprintf('%02s',int($min));;
my $s=sprintf('%02s',$sec - ($m * 60));;
"$h:$m:$s"}


Muss ich jetzt alle möglichen readings (timer_remainingtime und timer_XX_remainingtime) in Variablen schreiben um diese zu vergleichen und das Minimum zu finden? Die Timer werden für mich nach keiner Systematik angelegt. Abgelaufene timer werden erst nachts gelöscht sodass die Anzahl der timer readings beliebig ist. Wie vergleiche ich eine beliebige Anzahl von readings?
Hierzu folgendes Beispiel:

timer_01_id
06982f5e-393c-3bc4-9207-7f3bd2096368
2020-05-01 14:16:12
timer_01_remainingtime
1027
2020-05-01 14:18:12
timer_02_id
20587006-ac61-37a8-927b-42f3361f1556
2020-05-01 14:16:12
timer_02_remainingtime
5820
2020-05-01 14:18:12
timer_03_id
27d6709d-d140-3c4d-a499-366381be42ed
2020-05-01 14:16:12
timer_03_remainingtime
0
2020-05-01 14:16:12
timer_04_id
467dfa2b-bfec-32be-a5ba-371f99d153d2
2020-05-01 14:16:12
timer_04_remainingtime
0
2020-05-01 14:16:12
timer_05_id
4a6723f1-4094-379e-8001-0923292fb23d
2020-05-01 14:16:12
timer_05_remainingtime
0
2020-05-01 14:16:12
timer_06_id
4b632b8e-06b7-3caa-bebf-a000db6fe513
2020-05-01 14:16:12
timer_06_remainingtime
1228
2020-05-01 14:18:12
timer_07_id
b49e1e37-0383-3c1e-9d33-2855f288ef5e
2020-05-01 14:16:12
timer_07_remainingtime
0
2020-05-01 14:16:12
timer_count
7
2020-05-01 14:16:12
timer_id
27d6709d-d140-3c4d-a499-366381be42ed
2020-05-01 14:18:12
timer_remainingtime
0
2020-05-01 14:18:12
FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD

TomLee

Hallo,

hab mir das mal kurz angeschaut interressiert mich nämlich auch.
Meine festgestellt zu haben das ein löschen des letzten vergangenen Timer dazu führt das dann von den sonstigen gestellten Timern der kürzeste direkt in timer_remainingtime/timer_id landet.

Also ein notify auf timer_remainingtime, so in der Art:

define <echodevicename> notify <echodevicename>:timer_remainingtime:.0 set <echodevicename> notifications_delete {(sprintf("fw@". ReadingsVal("<echodevicname>","timer_id",0)

und es gibt auch keine alten timer_xxx Readings in Zukunft mehr, ungetest dazu komm ich erst später wieder  :).

Gruß

Thomas

TomLee

Ups, habs ausprobiert, Denkfehler, dann ja auch kein Timersignal ;D, zumindest je nach Timing etwas kurz.

Aber die kürzesten Timer landen wie erwartet (nach Anpassung des vorgeschlagenen notify) im timer_remainingtime-Reading.




Man könnte mit einer Verzögerung arbeiten:

defmod <echodevicename> notify <echodevicename>:timer_remainingtime:.0 { fhem 'sleep 10;;set <echodevicename> notifications_delete {(sprintf("fw@". ReadingsVal("<echodevicename>","timer_id",0)))}';;}

Dann darf aber auch kein Timer in dieser Zeit (10 Sekunden) enden, sonst wird er nicht wieder gelöscht und man muss mit nur einem kurzen (je nach Timing bis zu 10 Sekunden) Timersignal leben.

Oder man gibt sich mit einem alternativen und einmaligem akustischen Signal (bspw speak.-,sounds.-oder sonstigem set-Befehl) zufrieden:

defmod <echodevicename> notify <echodevicename>:timer_remainingtime:.0 { fhem 'set <echodevicename> notifications_delete {(sprintf("fw@". ReadingsVal("<echodevicename>","timer_id",0)))};;set <echodevicename> speak timer ist fertig'}


willib

Danke für den Workaround. Ist das eine Unzulänglichkeit des Moduls oder der api?
Ich hatte mir parallel auch überlegt wie ich das Signal des Timers in der Küche vom Esszimmer aus beenden kann. Amazon glaubt ja leider immer noch dass ich jedes mal hin rennen will.
Deine Lösung mit dem Speak würde ich dann über Sonos machen und hätte gleich Ruhe.
Wenn ich nun aber zwei oder mehrere Timer kurz hintereinander starte habe ich im reading timer_remainingtime immer den ersten Timer. Hast du noch eine Idee wie man dann die Sortierung anstößt?
FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD

TomLee

Konnts nicht lassen.

Auf einem anderen Gerät (bspw. Sonos) das Timersignal auszugeben wär hier auch die bessere Variante, wiederholt man das Signal alle 5 Sekunden und die Ausgabe ist entsprechend lang hat man das Problem das man Alexa nicht mehr ansprechen kann um auszuschalten, sie ist nur noch mit dem abspielen beschäftigt.
Man könnte die 5 Sekunden erhöhen und gleich nach dem abspielen den Sprachbefehl für das ausschalten absetzen, für die Praxis ist das denk ich aber nix.

timer als alexaName klappt nicht, so funzt jetzt das DOIF:

defmod OG_Echo_Wohnzimmer_DOIF_1 DOIF ($SELF eq "on")(set Sonos_Wohnzimmer PlayURITemp \\192.168.188.26\OwnMusic\Toene\Vibrating.mp3 25)\
DOELSEIF\
([OG_Echo_Wohnzimmer:"timer_remainingtime:.0"]) (set OG_Echo_Wohnzimmer notifications_delete {(sprintf("fw@". ReadingsVal("OG_Echo_Wohnzimmer","timer_id",0)))},set $SELF on)\
DOELSEIF\
($SELF eq "off")()
attr OG_Echo_Wohnzimmer_DOIF_1 alexaName signal
attr OG_Echo_Wohnzimmer_DOIF_1 cmdState on|cmd_2|off
attr OG_Echo_Wohnzimmer_DOIF_1 repeatcmd 5
attr OG_Echo_Wohnzimmer_DOIF_1 room Test
attr OG_Echo_Wohnzimmer_DOIF_1 setList on off

setstate OG_Echo_Wohnzimmer_DOIF_1 off
setstate OG_Echo_Wohnzimmer_DOIF_1 2020-05-05 15:47:49 Device OG_Echo_Wohnzimmer
setstate OG_Echo_Wohnzimmer_DOIF_1 2020-05-05 15:45:46 cmd 3
setstate OG_Echo_Wohnzimmer_DOIF_1 2020-05-05 15:45:46 cmd_event set_off_cmd_3
setstate OG_Echo_Wohnzimmer_DOIF_1 2020-05-05 15:45:46 cmd_nr 3
setstate OG_Echo_Wohnzimmer_DOIF_1 2020-05-05 15:47:49 e_OG_Echo_Wohnzimmer_events bluetooth_38e76b8bb98f050ad6dc7e6a47a9bd8785ac67f89cfeb755eb799b300a5b4aa8: disconnected
setstate OG_Echo_Wohnzimmer_DOIF_1 2020-05-05 15:44:33 mode enabled
setstate OG_Echo_Wohnzimmer_DOIF_1 2020-05-05 15:45:46 state off
setstate OG_Echo_Wohnzimmer_DOIF_1 2020-05-05 15:45:46 wait_timer no timer


Was mich an dem DOIF stört ist das e_OG_Echo_Wohnzimmer_events-Reading, verstehe nicht das hier ständig die Readings aus dem Echo reinlaufen, es finden zwar keine Events statt, man sieht es aber wenn man FHEMWEB aktualisiert.

willib

Zitat von: willib am 05 Mai 2020, 12:09:54
Wenn ich nun aber zwei oder mehrere Timer kurz hintereinander starte habe ich im reading timer_remainingtime immer den ersten Timer. Hast du noch eine Idee wie man dann die Sortierung anstößt?
Ich korrigiere. Das Reading timer_remainingtime enthält bei mehreren laufenden Timern immer den kürzesten. Gerade nochmal getestet. Nur wenn schon abgelaufene Timer vorhanden sind ist das Reading mit 0 gefüllt. Kannst du das bestätigen? Ich denke das ist ein Bug des Moduls. Ich Frage Mal in entsprechenden thread Nach.
FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD