Fhem/Perl-Funktion "Zählewenn" gesucht

Begonnen von Marko1976, 27 Juli 2025, 15:47:06

Vorheriges Thema - Nächstes Thema

Marko1976

Hallo, ich wollte mal fragen ob es so etwas wie Zählewenn aus Excel auch in Fhem oder Perl gibt.

Ich möchte verschiede Device zählen wenn ihr STATE oder ein vorgegebenes Reading einen bestimmten Wert enthält.

Prof. Dr. Peter Henning

Perl kennt von sich aus keine FHEM-Geräte. Man kann aber problemlos in einem Perl-Programm einen FHEM-Befehl mit FILTER-Direktive absetzen und die Anzahl der zurückgegebenen Zeilen auswerten.

Allerdings erschließt sich mir der Sinn einer solchen Zählung nicht so ganz.

LG

pah

betateilchen

#2
Zitat von: Marko1976 am 27 Juli 2025, 15:47:06Ich möchte verschiede Device zählen wenn ihr STATE oder ein vorgegebenes Reading einen bestimmten Wert enthält.

im einfachsten Fall:

count state=open
zählt bei mir alle offenen Rollläden und Türen/Fenster.

https://commandref.fhem.de/#count



Zitat von: Prof. Dr. Peter Henning am 27 Juli 2025, 16:43:19Allerdings erschließt sich mir der Sinn einer solchen Zählung nicht so ganz.

Es muss doch nicht alles einen Sinn haben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Marko1976

Zitat von: Prof. Dr. Peter Henning am 27 Juli 2025, 16:43:19Allerdings erschließt sich mir der Sinn einer solchen Zählung nicht so ganz.
Man muss ja auch nicht alles verstehen, oder?

Hintergrund ist aber eigentlich ganz einfach.
Ich habe für verschiedene Aufgaben jeweils ein DOIF als Aufgabe erstellt, zb für Hausarbeiten oder Fahrzeugwartung. Diese werden in Abhängigkeit in verschiedene Stati versetzt None/Alert/Priority. Entsprechend des Status lasse ich Benachrichtigungen per Push und Alexa verteilen.
In miener FTUI3-Startseite habe ich nun eine Kachel die auf diese "Aufgaben" verweist und ich würde ganz gerne anzeigen lassen ob und eventuell wie viele Aufgaben anstehen, sprich das Icon anpassen.

Marko1976

Zitat von: betateilchen am 27 Juli 2025, 18:20:40count state=open
Also so wie ich das verstehe handelt es sich um einen Befehl für die Commandzeile der einmal abgesetzt einen Rückgabewert liefert.

Sollte ich mich da jetzt nicht vertuen kann ich es für meinen Sinn weniger gebrauchen, da ich den Wert ja dauerhaft berechnet und immer im Zugriff haben muss um die Anzeige im FTUI3 entsprechend reagieren zu lassen. Andernfalls müsste ich den Befehle ja immer wieder in regelmäßigen Abständen ausführen.
Oder verstehe ich  die commandref da falsch?

passibe

Ja, du müsstest das dann immer aktualisieren, z.B. mit einem notify mit entsprechender Regex, die dann auf das Event des zu zählenden Readings triggert.

Aber sowas geht wohl auch "aus einer Hand" mit einem DOIF, siehe hier https://fhem.de/commandref_DE.html#DOIF_aggregation bzw. das wurde hier diskutiert: https://forum.fhem.de/index.php?topic=90224.0 und auch hier: https://forum.fhem.de/index.php/topic,87144.msg795823.html

Denke damit solltest du dir was zusammenbauen können; wenn nicht, dann evtl. das Thema in das DOIF-Unterforum verschieben und dort wird dir dann sicherlich auch geholfen. Viel Erfolg!

P.S.: Gefunden habe ich das übrigens über eine Google-Suche nach site:fhem.de readings zählen

Prof. Dr. Peter Henning

@Marko1976: Zunächst einmal empfehle ich, die Doku zu lesen. Dort ist dokumentiert, wie man einen Befehl periodisch absetzt. Den Rückgabewert in ein Reading zu schreiben, ist dort auch zu finden - einfach als userReading.

Das mit den verschiedenen DOIF als "Aufgabe" erscheint mir unnötig kompliziert und mit ziemlich viel manuellem Aufwand verbunden. Für so etwas gibt es u.a. das Modul "PostMe", das erlaubt "gelbe Klebezettel" mit entsprechenden Erinnerungen per Mail oder Telegram.

Schließlich:
Zitat von: Marko1976 am 27 Juli 2025, 21:29:55verschiedene Stati versetzt
Die Mehrzahl von "Status" lautet "Status".

LG

pah

Marko1976

Zitat von: Prof. Dr. Peter Henning am 28 Juli 2025, 12:11:44@Marko1976: Zunächst einmal empfehle ich, die Doku zu lesen. Dort ist dokumentiert, wie man einen Befehl periodisch absetzt. Den Rückgabewert in ein Reading zu schreiben, ist dort auch zu finden - einfach als userReading.
Es geht nicht um die Umsetzung, sondern die Sinnhaftigkeit. Der Wert MUSS immer aktuell sein. Alles was periodisch abgefragt wird ist nicht dauerhaft aktuell - somit für meinen Sinn und Zweck nicht brauchbar.

Zitat von: Prof. Dr. Peter Henning am 28 Juli 2025, 12:11:44@Marko1976: Das mit den verschiedenen DOIF als "Aufgabe" erscheint mir unnötig kompliziert und mit ziemlich viel manuellem Aufwand verbunden. Für so etwas gibt es u.a. das Modul "PostMe", das erlaubt "gelbe Klebezettel" mit entsprechenden Erinnerungen per Mail oder Telegram.
Wenn Sie wüssten was an den DOIF's dranhängt, würden Sie wahrscheinlich Anderes sagen. Aber da ich überhaupt keine Lust habe meine Beweggründe oder die Umsetzung bis ins Kleinste mit jedem zu teilen oder zu diskutieren, muss es reichen wenn ich schreibe, dass dies die FÜR MICH besste Umsetzung ist.

Zitat von: Prof. Dr. Peter Henning am 28 Juli 2025, 12:11:44@Marko1976: Die Mehrzahl von "Status" lautet "Status".
Sollten Sie sich eins zu Herzen nehmen - KEIN Mensch mag Oberlehrer die alles und jeden verbessern müssen! Wenn man einen Fehler findet, einfach mal überlesen und man hat viel mehr Freu(n)de.

Wer in einzelnen Sätzen Sarkasmus findet, darf ihn gerne behalten.

passibe

#8
Zitat von: Prof. Dr. Peter Henning am 28 Juli 2025, 12:11:44finden - einfach
Das korrekte Zeichen für einen Gedankenstrich ist übrigens der Halbgeviertstrich und nicht der Viertelgeviertstrich (Bindestrich) ...

Zitat von: Marko1976 am 29 Juli 2025, 00:08:02Alles was periodisch abgefragt wird ist nicht dauerhaft aktuell - somit für meinen Sinn und Zweck nicht brauchbar.

Aber mal zurück zum Thema, ich denke, dass die DOIF-aggregation hier, wie erwähnt, ganz gut passt. Habe das gerade mal bei mir getestet – mit
define offene_fenster DOIF
attr offene_fenster state [#"^[a-z]_fenster":contact:"false"]
aktualisiert sich im state des DOIF die Anzahl der offenen Fenster, sobald ich eins öffne/schließe.

betateilchen

Und wenn es darum geht, readings in einem Frontend laufend aktuell zu halten, fällt mir das Stichwort ,,longpoll" ein, da übernimmt das Frontend die Aktualisierung höchstselbst.
Die eine oder andere in FHEM verfügbare Frontendvariante bietet longpoll out-of-the-box
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Marko1976

Schon gut,
Habe jetzt ein DOIF genommen und per EventReading die Summe bzw. den Mittelwert berechnen lassen. Darauf kann ich per ftui3 jederzeit zugreifen und es wird bei jeder Wertänderung in den Aufgaben-DOIF's automatisch neuberechnet.

Danje @passibe

Prof. Dr. Peter Henning

Zitat von: Marko1976 am 29 Juli 2025, 00:08:02Alles was periodisch abgefragt wird ist nicht dauerhaft aktuell
Das ist schlichtweg falsch. FHEM ist ebensowenig wie die meisten anderen Systeme in der Lage, irgendwelche Daten in Nullzeit zu aktualisieren.

LG

pah