FHEM Forum

FHEM => Automatisierung => Thema gestartet von: frober am 17 Oktober 2021, 14:45:41

Titel: [gelöst]Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: frober am 17 Oktober 2021, 14:45:41
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');}
.
.
Titel: Antw:Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: CoolTux am 17 Oktober 2021, 14:54:54
https://forum.fhem.de/index.php?topic=96702.0

Hilft das?
Titel: Antw:Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: betateilchen am 17 Oktober 2021, 14:57:56
if($sleepers{$id})

Wobei $id in Deinem Beispiel 'mySleep' wäre.
Titel: Antw:Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: TomLee am 17 Oktober 2021, 15:00:25
und in dem gezeigten Code steht den Klammern hinten eine Rundung besser .
Titel: Antw:Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: frober am 17 Oktober 2021, 15:02:24
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
Titel: Antw:Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: betateilchen am 17 Oktober 2021, 15:02:57
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...
Titel: Antw:Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: frober am 17 Oktober 2021, 15:21:18
@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. ;)
Titel: Antw:Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: betateilchen am 17 Oktober 2021, 15:28:42
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.
Titel: Antw:Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: frober am 17 Oktober 2021, 15:30:19
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
Titel: Antw:[gelöst]Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: betateilchen am 17 Oktober 2021, 15:37:07
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.

Titel: Antw:[gelöst]Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: betateilchen am 17 Oktober 2021, 15:38:32
warum willst Du das überhaupt prüfen?

{CommandCancel(undef, "test") if ($sleepers{"test"})}

funktioniert jedenfalls in der FHEM Befehlszeile - also innerhalb von fhem.pl.

--
Titel: Antw:[gelöst]Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: rudolfkoenig am 17 Oktober 2021, 16:22:38
Man koennte in diesem Fall auch ueber ein at nachdenken.
Titel: Antw:[gelöst]Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: frober am 17 Oktober 2021, 16:41:08
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;
}
Titel: Antw:[gelöst]Wie überprüfe ich, ob ein "named" sleep exsistiert?
Beitrag von: frober am 17 Oktober 2021, 16:41:43
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 ;)