Hallo zusammen,
da ich mit Watchdog meine Aufgabenstellung nicht umgesetzt bekomme, habe ich mich für ein notify mit perl und "named" sleep entschlossen.
Wie kann ich überprüfen ob das sleep existiert, bevor ich es lösche?
z.B.
.
.
fhem('sleep 60 mySleep quiet; set Pumpe off');
.
.
if (existiert mySleep) {fhem('cancel mySleep quiet');}
.
.
https://forum.fhem.de/index.php?topic=96702.0
Hilft das?
if($sleepers{$id})
Wobei $id in Deinem Beispiel 'mySleep' wäre.
und in dem gezeigten Code steht den Klammern hinten eine Rundung besser .
Zitat von: CoolTux am 17 Oktober 2021, 14:54:54
https://forum.fhem.de/index.php?topic=96702.0
Hilft das?
Nicht wirklich, aber wenn ein quiet reicht, das habe ich eh schon.
Ich dachte es geht besser.
Danke
Zitat von: TomLee am 17 Oktober 2021, 15:00:25
und in dem gezeigten Code steht den Klammern hinten eine Rundung besser .
::) das war doch nur ein Schema, ohne Anspruch auf Funktionsfähigkeit...
@betateilchen: danke, so hatte ich mir das vorgestellt :)
@TomLee: das war als Bsp. so dahin geschrieben, aber du hast natürlich Recht, ich korrigiere es, im Falle, dass es jemand benutzen möchte. ;)
Zitat von: frober am 17 Oktober 2021, 15:21:18
so hatte ich mir das vorgestellt
Sowas findet man am einfachsten heraus, wenn man einen Blick in die fhem.pl wirft :)
Etwas anderes habe ich auch nicht getan.
Zitat von: betateilchen am 17 Oktober 2021, 15:28:42
Sowas findet man am einfachsten heraus, wenn man einen Blick in die fhem.pl wirft :)
Etwas anderes habe ich auch nicht getan.
Ok, nur komme ich anscheinend nicht an die Variable dran
ERROR:
Global symbol "%sleepers" requires explicit package name (did you forget to declare "my %sleepers"?) at ./FHEM/99_myUtils_BrunnenpumpeSteuerung.pm line 28
die Variable existiert nur innerhalb von fhem.pl.
Davon, dass Du sie in einer 99_myUtil... nutzen willst, war bisher nicht die Rede.
Vielleicht funktioniert es, den hash als Aufrufparameter Deiner Funktion mitzugeben.
Aber selbst wenn das funktionieren würde, könntest Du an dieser Stelle den hash in main nicht verändern.
warum willst Du das überhaupt prüfen?
{CommandCancel(undef, "test") if ($sleepers{"test"})}
funktioniert jedenfalls in der FHEM Befehlszeile - also innerhalb von fhem.pl.
--
Man koennte in diesem Fall auch ueber ein at nachdenken.
Zitat von: betateilchen am 17 Oktober 2021, 15:38:32
warum willst Du das überhaupt prüfen?
Ich möchte kein sleep löschen, dass nicht existiert Finde ich sauberer aus ein quiet.
So funktionieren es nun :)
defmod n_BrunnenpumpeSteuerung notify MYSENSOR_(2|3):(status(1|2|3|4)|status):.* {my $s = 0;; $s = 1 if ($sleepers{"sleepBrunnenpumpe"});; Brunnenpumpensteuerung($EVTPART1,$s);;}
sub Brunnenpumpensteuerung {
my $SUB = 'Brunnenpumpesteuerung'; # Name der sub für Warnmeldung
my $EVENT = shift // return "Error, sub $SUB: we need EVTPART1 as parameter!";
my $SLEEPERS = shift // return "Error, sub $SUB: we need \$sleepers as parameter!";
my $PUMPE = ReadingsVal('Sonoff_Brunnenpumpe','POWER','OFF');
my $SLEEP = 'sleepBrunnenpumpe'; # Name für "named" sleep
if ($EVENT eq 'on')
{
if ($PUMPE eq 'OFF') {fhem('set Sonoff_Brunnenpumpe on; msg |Fhem-Meldung: Brunnenpumpe| Brunnenpumpe wurde eingeschaltet');}
if ($SLEEPERS) {fhem ("cancel $SLEEP quiet")};
return;
}
else
{
fhem("sleep 10 $SLEEP quiet; set Sonoff_Brunnenpumpe off; msg |Fhem-Meldung: Brunnenpumpe| Brunnenpumpe wurde ausgeschaltet");
return;
}
return;
}
Zitat von: rudolfkoenig am 17 Oktober 2021, 16:22:38
Man koennte in diesem Fall auch ueber ein at nachdenken.
stimmt, soweit habe ich diesmal nicht gedacht ;)