FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jutil am 20 Mai 2025, 16:54:36

Titel: Notify If Problemchen
Beitrag von: jutil am 20 Mai 2025, 16:54:36
Hallo zusammen,

ich hönge hier wieder an einem "Klammer-Probelm" das ich einfach nicht hinbekomme.

Ich möchte ein Notify erstellen das auf ein reading uhrzeitbedingt reagiert.

So hab ich es mir gedacht, aber die Klammern stimmen nicht, habe da jetzt die wildesten Versuche unternommen aus Verzweifelung, alles erfolglos.

define notify_NetzAus notify HT:absent.* {
my $h = (localtime)[2];
if ($h >= 6 && $H < 22) {
  if (ReadingsVal("HT","state","") eq "absent") {
    fhem("set was auch immer");
      }
   }
}
Titel: Aw: Notify If Problemchen
Beitrag von: Nobbynews am 20 Mai 2025, 17:01:20
Das funktioniert bei mir:

my $h = (localtime(time))[2];
Und dann noch korrigieren: $h != $H
Also:
Zitatif ($h >= 6 && $h < 22)
Titel: Aw: Notify If Problemchen
Beitrag von: jutil am 20 Mai 2025, 17:19:30
Bei mir sagt er Klammerfehler, ich schau mir das heute Abend mal an, besten Dank für die Korrektur, da schaut man dann gar nicht mehr hin  ::)
Titel: Aw: Notify If Problemchen
Beitrag von: jutil am 20 Mai 2025, 17:31:49
No soll nicht so sein hab ich geändert.
läuft bei mir auf den folgenden Fehler...

Unknown command my, try help. IF: no left bracket: { IF: no left bracket: { Unknown command fhem("set, try help. Unknown command }, try help. Unknown command }, try help. Unknown command }, try help.

define notify_NetzAus notify HT:absent.* {
my $h = (localtime(time))[2];
if ($h >= 6 && $h < 22) {
  if (ReadingsVal("HT","state","") eq "absent") {
    fhem("set was auch immer");
      }
   }
}
Titel: Aw: Notify If Problemchen
Beitrag von: passibe am 20 Mai 2025, 18:07:54
Dein notify funktioniert. Ich vermute, dass das Problem in deinem "set was auch immer" liegt.

Bei mir läuft das so ohne Probleme:
test:on {
    my $h = (localtime(time))[2];
    if ($h >= 6 && $h < 22) {
          if (ReadingsVal("test","state","") eq "on") {
            ntfy("test");
        }
    }
}
Titel: Aw: Notify If Problemchen
Beitrag von: passibe am 20 Mai 2025, 18:12:37
Oh warte, versuchst du das über das Befehls-Eingabefeld (https://wiki.fhem.de/wiki/Konfiguration#Befehl-Eingabefeld) bzw. als RAW-Import (https://wiki.fhem.de/wiki/Konfiguration#RAW-Import) einzufügen?
Dann brauchst du eine andere syntax, mit doppeltem Semikolon, etc.

Ich würde mir das sparen; am besten ist es, du erstellst über das Befehls-Eingabefeld immer erst ein leeres notify, also in deinem Fall: define notify_NetzAus notify HT:absent.* {}und klickst dann im neu erstellten Device auf "DEF". Im DEF-Editor (https://wiki.fhem.de/wiki/Konfiguration#Objektdetails) kannst du dann deinen Code einfügen. So sparst du dir die ganzen Eigenheiten der RAW-Syntax und kannst ganz normales Perl reinschreiben.
Titel: Aw: Notify If Problemchen
Beitrag von: TomLee am 20 Mai 2025, 18:13:14
Hallo,

Du importierst Raw-Code. Da musst die Semikolon verdoppeln und die neuen Zeilen in dem Perl-Code "angeben" (mit \) oder alles in eine Zeile schreiben und später in der DEF ändern.

FHEM hat ne eigene Variable für die aktuelle Stunde:

defmod notify_NetzAus notify HT:absent.* {\
if ($hour >= 6 && $hour < 22) {\
  if (ReadingsVal("HT","state","") eq "absent") {\
    fhem("set was auch immer");;\
      }\
  }\
}

Gruß Thomas
Titel: Aw: Notify If Problemchen
Beitrag von: tobi01001 am 20 Mai 2025, 18:17:31
EDIT1: Thomas war schneller ;-)
EDIT2: und passible war noch schneller...


Zitat von: jutil am 20 Mai 2025, 17:31:49No soll nicht so sein hab ich geändert.
läuft bei mir auf den folgenden Fehler...

Unknown command my, try help. IF: no left bracket: { IF: no left bracket: { Unknown command fhem("set, try help. Unknown command }, try help. Unknown command }, try help. Unknown command }, try help.

define notify_NetzAus notify HT:absent.* {
my $h = (localtime(time))[2];
if ($h >= 6 && $h < 22) {
  if (ReadingsVal("HT","state","") eq "absent") {
    fhem("set was auch immer");
      }
  }
}

Wo gibst du das denn wie ein? Das liest sich so als würde das eine Raw definition sein. Die funktioniert so aber nicht, weil jede Zeile asl fhem Befehl ausgewertet wird....
Probier gerne mal
defmod notify_NetzAus notify HT:absent.* {\
my $h = (localtime(time))[2];;\
if ($h >= 6 && $h < 22) {\
  if (ReadingsVal("HT","state","") eq "absent") {\
    fhem("set was auch immer");;\
      }\
  }\
}
Titel: Aw: Notify If Problemchen
Beitrag von: Prof. Dr. Peter Henning am 20 Mai 2025, 19:45:34
Solche mehrzeiligen Code-Schnipsel gehören in die 99_myUtils.pm - dafür ist sie da. Und dann aufrufen aus einem notify, oder "was auch immer".

LG

pah
Titel: Aw: Notify If Problemchen
Beitrag von: TomLee am 20 Mai 2025, 19:54:04
Man kann das auch als Einzeiler definieren:

return fhem("set was auch immer") if ($hour >= 6 && $hour < 22) && ReadingsVal("HT","state","") eq "absent";
edit:
Gerade mal getestet was ich da schreib. Die Auswertung in Perl erfolgt von links nach rechts. Die Klammern um $hour >= 6 && $hour < 22 brauchts nicht unbedingt, schaden aber nicht.
Titel: Aw: Notify If Problemchen
Beitrag von: jutil am 20 Mai 2025, 20:38:50
Boh mega, tausend Dank für eure Tips. Da werde ich mich morgen gleich mal dran setzen!

Danke euch!
Titel: Aw: Notify If Problemchen
Beitrag von: Prof. Dr. Peter Henning am 20 Mai 2025, 20:43:02
Zitat von: jutil am 20 Mai 2025, 20:38:50Boh mega
::)
Titel: Aw: Notify If Problemchen
Beitrag von: tobi01001 am 20 Mai 2025, 21:33:00
Zitat von: Prof. Dr. Peter Henning am 20 Mai 2025, 20:43:02
Zitat von: jutil am 20 Mai 2025, 20:38:50Boh mega
::)

Wäre dir das lieber gewesen?

Zitat,,Meine aufrichtige Hochachtung und ein herzliches Dankeschön für eure überaus erhellenden Hinweise! Ich werde mich morgen sogleich an die Umsetzung machen."

;)
Titel: Aw: Notify If Problemchen
Beitrag von: jutil am 21 Mai 2025, 07:48:37
Die Sache lüppt, danke euch!
Titel: Aw: Notify If Problemchen
Beitrag von: betateilchen am 21 Mai 2025, 11:55:18
Es gibt eine einfachere Lösung für die Aufgabe, in einem notify etwas nur innerhalb eines bestimmten Zeitraums auszuführen:

define notify_NetzAus notify HT:absent.* { fhem("set was auch immer") if (ReadingsVal("HT","state","") eq "absent") }
attr notify_NetzAus disabledForIntervals 00-06 22-24

(offtopic: das vorschnelle Schließen von Threads, gerade in den Anfängerfragen, nervt maßlos...)