FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Jamo am 30 Januar 2019, 00:07:02

Titel: [Gelöst] Wie prüfe ich ob eine sleep id existiert
Beitrag von: Jamo am 30 Januar 2019, 00:07:02
Ich habe verschiedene sleep von 0 bis 9 mit id angelegt, z. B. fhem "sleep  60 Temp_2; set Musik Vol 3";
Ich versuche jetzt, nur die noch existierenden sleeps zu cancel'n, aber der folgende Befehl funktioniert nicht, die sleep werden nicht gelöscht. Wie gehts richtig?
foreach my $num (0..$maxNum) {if (exists($defs{"Temp_$num"})){fhem ("cancel Temp_$num")}
Titel: Antw:Wie prüfe ich ob eine sleep id existiert
Beitrag von: dev0 am 30 Januar 2019, 10:31:06
Zitat$defs{"Temp_$num"}
Schau Dir mal die Hashes %intAt und %sleepers an. Hilfreich sind auch die Subs WakeUpFn und CommandCancel in fhem.pl.
Ich würde vermutlich einfach cancel bzw CommandCancel mit dem optionalen Argument quiet aufrufen und mich nicht selbst nicht weiter darum kümmern, ob die timer noch existieren.
Titel: Antw:Wie prüfe ich ob eine sleep id existiert
Beitrag von: CoolTux am 30 Januar 2019, 10:38:08
Bitte darauf achten das intAtA von Hash auf Array umgestellt wurde.
Titel: Antw:Wie prüfe ich ob eine sleep id existiert
Beitrag von: justme1968 am 30 Januar 2019, 10:43:09
einfach nur cancel ohne id listet die wartenden sleeps
Titel: Antw:Wie prüfe ich ob eine sleep id existiert
Beitrag von: justme1968 am 30 Januar 2019, 10:45:15
und wenn es dir um die meldung beim canceln eines nicht vorhandenen sleeps geht: einfach quiet hinten anhängen. dann gibt es keine meldung.

selbst auf die internen datenstrukturen zuzugreifen ist keine gute idee.
Titel: [gelöst]:Wie prüfe ich ob eine sleep id existiert
Beitrag von: Jamo am 06 Februar 2019, 00:36:32
Mein Dank an die Experten! Ja, mir ging es um die Meldungen beim canceln eines nicht vorhandenen sleeps, alles klar jetzt!
Titel: Antw:[Gelöst] Wie prüfe ich ob eine sleep id existiert
Beitrag von: FHEMAN am 04 Oktober 2021, 21:30:08
Hi, da das Thema aus dem Titel eigentlich nicht gelöst ist und ich genau daran hänge (sleep soll sich bei Vorhandensein nicht verlängern), würde mich interessieren, wie man am besten prüfen kann?
Ich teste gerade

my $compass = "NORD";
my $sleeps = fhem("cancel");
if (!grep(/sleep.$compass/, $sleeps)) { #nicht vorhanden}

Geht es irgendwie eleganter? Cancel liefert ja auch kein sauberes Array. Auch werden die Cancel-Abfragen unnötig geloggt.
Titel: Antw:[Gelöst] Wie prüfe ich ob eine sleep id existiert
Beitrag von: jhohmann am 05 Oktober 2021, 10:59:34
Nicht wirklich getestet, aber sollte funktionieren.
foreach my $num (0..9) {fhem("cancel Temp_$num quiet") }
Durch das quiet erfolgt keine Meldung, wenn das sleep nicht existiert. Und alle, die existieren, werden gelöscht  :).