[Gelöst] Wie prüfe ich ob eine sleep id existiert

Begonnen von Jamo, 30 Januar 2019, 00:07:02

Vorheriges Thema - Nächstes Thema

Jamo

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")}
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

dev0

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.

CoolTux

Bitte darauf achten das intAtA von Hash auf Array umgestellt wurde.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

einfach nur cancel ohne id listet die wartenden sleeps
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Jamo

Mein Dank an die Experten! Ja, mir ging es um die Meldungen beim canceln eines nicht vorhandenen sleeps, alles klar jetzt!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

FHEMAN

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.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

jhohmann

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  :).
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna