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"