Hallo zusammen,
ich habe eine PVAnlage Kostal Piko 4.3 auch erfolgreich im FHEM angelegt. Dort werden regelmäßig Werte ausgelesen.
Ein Wert ist der AC.Power, zeigt die aktuelle Produktionsleistung in Watt an.
Habe einen Notify definiert, der eine Lampe schalten soll, wenn der Wert eine Grenze von "500" überschreitet.
Das klappt leider nicht.
Internals:
CFGFN
DEF PVAnlage:AC.Power:>"500" set Ecklampe on
FUUID 5fcf4ca4-f33f-09d5-1dc1-79e9ade04432a8e4
NAME Notify_PVAnlage
NOTIFYDEV PVAnlage
NR 2058
NTFY_ORDER 50-Notify_PVAnlage
REGEXP PVAnlage:AC.Power:>"500"
STATE active
TRIGGERTIME 1607427621.08894
TYPE notify
READINGS:
2020-12-08 12:41:07 state active
Attributes:
Vermutlich fehlt es hier an den Grundlagen (will sagen, die Frage gehoert in den Anfaengerforum):
- mit einem Regexp kann man nicht vergleichen.
- fuer sowas muss man bei notify nach perl wechseln:
defmod Notify_PVAnlagen notify PVAnlage:AC.Power.* { fhem("set Ecklampe on" if(ReadingsNum("PVAnlage", "AC.Power", 0") > 500) }
- fuer einfache Aufgaben kann man mit DOIF (statt notify) perl vermeiden, dafuer muss man aber DOIF Syntax lernen.
Vielen herzlichen Dank, ja die Grundlagen... :-)
Das hatte ich vermutet.
Leider wirft er mir einen Fehler aus:
Can't find string terminator '"' anywhere before EOF at (eval 8152) line 1.
Mein Fehler, es soll heissen:
defmod Notify_PVAnlagen notify PVAnlage:AC.Power.* { fhem("set Ecklampe on") if(ReadingsNum("PVAnlage", "AC.Power", 0) > 500) }
Super, vielen Dank, dann habe ich auch eine Vorlage fürs nächste mal !
Die if-Lösung ist schon die saubere Lösung, aber man würde es auch in einem regex hinbekommen.
Es ist richtig dass im regex kein Vergleich möglich ist, aber bei ganzzahligen gelieferten Werten könnte man Filtern "größer 500" filtern mit
3stellige Zahl beginnt mit 5-9 oder Zahl mit 4 oder mehr Stellen
([5-9][0-9]{2}|[0-9]{4,})
https://regex101.com .. dort kann man regexe schön online testen und bekommt rechts ich gleich die einzelnen Teile erklärt
Zitat von: roedert am 10 Dezember 2020, 11:18:53
Die if-Lösung ist schon die saubere Lösung, aber man würde es auch in einem regex hinbekommen.
Es ist richtig dass im regex kein Vergleich möglich ist, aber bei ganzzahligen gelieferten Werten könnte man Filtern "größer 500" filtern mit
3stellige Zahl beginnt mit 5-9 oder Zahl mit 4 oder mehr Stellen
([5-9][0-9]{2}|[0-9]{4,})
https://regex101.com .. dort kann man regexe schön online testen und bekommt rechts ich gleich die einzelnen Teile erklärt
Naja, es ist eine nette Denksportaufgabe. Ich würde keinem empfehlen damit größer-, kleiner-Vergleiche anzustellen - man übersieht schnell etwas ;)
Das sieht man schon daran, dass der Vorschlag nicht richtig ist - es ist und bleibt eine Denksportaufgabe.
Dass ein if die saubere Lösung für eine solche Aufgabe ist, habe ich ja auch selbst geschrieben.
Aber was ist an diesem Vorschlag nicht richtig? Dieser regex erkennt eine ganzzahlige Zahl größer 500 (solange die Zahl vernünftig formatiert ist, also nicht etwa eine führende 0 hat)
Das ist die Denksportaufgabe :)
Zitat von: roedert am 10 Dezember 2020, 11:18:53
Die if-Lösung ist schon die saubere Lösung, aber man würde es auch in einem regex hinbekommen.
Es ist richtig dass im regex kein Vergleich möglich ist, aber bei ganzzahligen gelieferten Werten könnte man Filtern "größer 500" filtern mit
3stellige Zahl beginnt mit 5-9 oder Zahl mit 4 oder mehr Stellen
([5-9][0-9]{2}|[0-9]{4,})
https://regex101.com .. dort kann man regexe schön online testen und bekommt rechts ich gleich die einzelnen Teile erklärt
Er will "grösser als 500", nicht "grösser oder gleich 500"
Hallo zusammen,
der Thread ist zwar uralt, aber meine Frage passt wie Knopf auf Auge dazu.
Folgendes:
Ein notify soll nur bei Helligkeitswerten zwischen 22 Lux und 29 Lux anspringen.
Der konkrete Werte ist dabei nicht relevant.
Über regexp101 habe ich folgende regexp ausprobiert und das notify definiert
define <device>:Helligkeit:.(^[2][2-9]$)Es werden nur Zahlen von 22-29 getriggert.
Leider triggert das notify damit überhaupt nicht.
Ändere ich das so ab:
define <device>:Helligkeit:.([2][2-9]$)funktioniert es.
Allerdings meint regexp101 dann auch auf z.B. 222 oder 246 zu triggern.
FHEM macht das nicht. Getriggert wird nur auf z.B 22 oder 24 etc.
Was macht FHEM da anders bzw. woran liegt es?
Norbert
Hallo Norbert,
die Frage ist: welche Zeichenkette hast Du in regexp101 getestet.
^[2][2-9]$
starte am Anfang der Zeichenkette
das erste Zeichen muss 2 sein
das zweite Zeichen muss 2..9 sein und am Ende der Zeichenkette stehen
Grüße Jörg
Zitat von: JoWiemann am 15 Juli 2026, 13:22:14die Frage ist: welche Zeichenkette hast Du in regexp101 getestet.
Die Zahlen zwischen 22 und 29 und darüber hinaus auch 3-stellige.
Siehe screenshot.
Für Deinen Test passt das. Testen solltest Du aber die gesamte Zeichenkette, die vom notify getestet wird. Und das sind nicht nur die Zahlen.
Grüße Jörg
Hallo Jörg,
das habe ich sowohl über das reading vom device als auch über den Befehl trigger getestet.
Also z.B.
trigger <device> Helligkeit: 25bzw.
setreading <device> Helligkeit 25
Norbert
Zitat von: Nobbynews am 15 Juli 2026, 12:49:20Hallo zusammen,
Was macht FHEM da anders bzw. woran liegt es?
Norbert
Hallo Norbert,
folgendes sollte funktionieren:
Helligkeit:.[2][2-9]Es liegt am ^ und am $ , das passt irgendwie nicht fuer fhem, frag mal ChatGPT.
ZitatWas macht FHEM da anders bzw. woran liegt es?
Vermutlich an den Testdaten.
Das Event ist "Helligkeit: 25", im Regexp steht Punkt fuer das Leerzeichen nach Helligkeit:
Fuer trigger ist alles nach Geratename ein Event.
Ob man trigger richtig verwendet, kann man mit dem Event monitor pruefen, indem man es mit den "echten" Events vergleicht.
Wie schon vermerkt wurde, ^ steht fuer Anfang der Zeichenkette, $ fuers Ende, man sollte sie nicht in der Mitte des Regexps einbauen.
Zitat von: Jamo am 15 Juli 2026, 14:39:03folgendes sollte funktionieren:
Helligkeit:.[2][2-9]Es liegt am ^ und am $ , das passt irgendwie nicht fuer fhem, frag mal ChatGPT.
Nein, tut es nicht. Das triggert lt. regexp101 auch auf 329, 423 etc.
Über die Funktion von ^ und $ bin ich mir auch ohne ChatGPT im Klaren.
Edit: Unter FHEM funktioniert das korrekt.
Zitat von: rudolfkoenig am 15 Juli 2026, 15:11:12Vermutlich an den Testdaten.
Das Event ist "Helligkeit: 25", im Regexp steht Punkt fuer das Leerzeichen nach Helligkeit:
Vom gleichen device habe ich schon seit Ewigkeiten zuverlässig dieses notify am Laufen:
<device>:Helligkeit:.[3-6]$Am Punkt kann es also nicht liegen.
Auch
Helligkeit:(^.[2][2-9]$) triggert nicht.Hier mal ein original Event:
2026-07-15 15:40:20 ZWave ZWave_BWM_Garage_Lux Helligkeit: 2000Von daher sollte es doch meiner Meinung nach korrekt sein.
Eigentlich war meine Frage nur, warum es bei regexp101 funktioniert, im notify von FHEM aber nicht.
Norbert
Zitat von: rudolfkoenig am 15 Juli 2026, 15:11:12man sollte sie nicht in der Mitte des Regexps einbauen.
Ok, das könnte dann für den Beginn der Zeichenkette zusammen mit dem führenden '.' eine Erklärung sein.
Kann es sein, das die Ursache hierin zu suchen ist:
aus dem Wiki:
ZitatDas Suchmuster wird notify-intern um das Zeichen ^ (beginnt mit) und das Zeichen $ (endet mit) ergänzt[3]. Deshalb darf das Suchmuster nicht mit einem üblichen Regulären Ausdruck, wie er in Perl[4] verwendet wird, gleichgesetzt werden, da die Ergänzung zu einem grundsätzlich unterschiedlichen Verhalten führt, siehe nachstehendes Beispiel.
Zitat von: Nobbynews am 15 Juli 2026, 16:22:10Kann es sein, das die Ursache hierin zu suchen ist:
aus dem Wiki:
ZitatDas Suchmuster wird notify-intern um das Zeichen ^ (beginnt mit) und das Zeichen $ (endet mit) ergänzt[3]. Deshalb darf das Suchmuster nicht mit einem üblichen Regulären Ausdruck, wie er in Perl[4] verwendet wird, gleichgesetzt werden, da die Ergänzung zu einem grundsätzlich unterschiedlichen Verhalten führt, siehe nachstehendes Beispiel.
So ist es.
Deine regex musst du beim notify gedanklich mit ^ am Anfang und $ am Ende ergänzen - beim DOIF braucht man das nicht, weil es nicht die beiden Zeichen dranhängt. Zahlenvergleiche würde ich aber nicht mit regex, sondern numerisch mit < > vergleichen.
Zitat von: Damian am 15 Juli 2026, 19:14:17Zahlenvergleiche würde ich aber nicht mit regex, sondern numerisch mit < > vergleichen.
Da ich den Zahlenwert an dieser Stelle nicht verarbeite, möchte ich damit eigentlich nur das ständige triggern des notify verhindern. Über
disabledForIntervals habe ich den Zeitraum schon stark eingegrenzt.
Andere Idee dafür?
Das wäre deine Lösung:
defmod mynotify notify mydevice:Helligkeit.*[2][2-9] set bla1 on
mydevice und deinen auszuführenden Befehl musst du nur auf deine Bedürfnisse anpassen:
notify checkt gegen:
^mydevice:Helligkeit.*[2][2-9]$
Zitat von: Damian am 17 Juli 2026, 09:15:50Das wäre deine Lösung:
defmod mynotify notify mydevice:Helligkeit.*[2][2-9] set bla1 on
So habe ich das schon ein paar Tage am Laufen.
Der Unterschied zu regexp101 ist mir jetzt klar.
Danke.
Norbert