FHEM Forum

FHEM => Automatisierung => Thema gestartet von: uron am 16 Juni 2025, 22:19:45

Titel: Zahlwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: uron am 16 Juni 2025, 22:19:45
Ich suche vergeblich nach einer Möglichkeit die Schalthäufigkeit einer Lampe zu ermitteln.
Idealerweise habe ich eine Variable (oder auch Userreading der Lampe?) und zähle wenn die Lampe geschaltet wird per notify +1 hinzu und speichere das Ergebnis erneut ab.
Soweit der Algorithmus, kann mir jemand bei der Umsatzung helfen? 
Der Beitrag hier (https://www.frank-schuetz.de/index.php/fhem/33-fhem-led-leuchtmittel-betriebsstunden-zaehlen) ist mir deutlich zu komplex, verstehe ihn aber auch nicht.
Titel: Aw: Zahlwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: Guybrush am 16 Juni 2025, 23:41:37
so z.b.:
attr Lampe userReadings counter:on {ReadingsNum($name, 'counter', 0)+1}
Titel: Aw: Zählwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: uron am 17 Juni 2025, 06:57:35
Danke für den Lösungsansatz, der bei mir aber noch kein Ergebnis bringt.
Ich versuche mal, den Befehl zu analysieren:
- "Lampe" steht für das Device, dessen Einschalthäufigkeit gezählt werden soll?
- "counter:on" zählt die Einschaltbefehle?
- "$name" ist das Userreading, welches im Device das Zählergebnis ausweist?

Meine Lampe wird über den Befehl
on-for-timer 1 gesteuert.
Der o.g. Analyse folgend habe ich meinen attr-Befehl wie folgt ausgelegt
attr Lampe userReadings counter:on-for-timer {ReadingsNum($lampenzaehler, 'counter', 0)+1}Unter den Attributen finde ich im Device den Hinweis
userReadings counter:on-for-timer {ReadingsNum($lampenzaehler, 'counter', 0)+1}Was ist an der Umsetzung falsch?
Titel: Aw: Zahlwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: betateilchen am 17 Juni 2025, 08:22:42
Im Gegensatz zu "on", heißt Dein Befehl ja "on-for-timer 1".
Also passt die von Dir verwendete regex für das userReading so nicht.
Titel: Aw: Zahlwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: uron am 17 Juni 2025, 08:37:58
Zitat von: betateilchen am 17 Juni 2025, 08:22:42Im Gegensatz zu "on", heißt Dein Befehl ja "on-for-timer 1".
Das dachte ich mir schon, deshalb hatte ich das "on" ja durch "on-for-timer" ersetzt. Das nachträgliche Testen mit "on-for-timer 1" führt zur Meldung
unknown modifier 1 for userReading counter, this userReading will be ignoredBleibt die Frage, was ist zu tun?
Titel: Aw: Zahlwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: betateilchen am 17 Juni 2025, 09:02:51
Zitat von: uron am 17 Juni 2025, 08:37:58Bleibt die Frage, was ist zu tun?

Richtigmachen.

Schau doch mal in den Event-Monitor, was da passiert, wenn Du "on-for-timer 1" an das device schickst. Und dann kannst Du Dir in "Create device" anschauen, wie die regex für ein notify aussehen müsste. Die gleiche regex kannst Du für das userReading verwenden.
Titel: Aw: Zahlwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: MadMax-FHEM am 17 Juni 2025, 09:17:42
Der Tausch von $name zu $lampenzaehler ist (auch) "Unfug"...

$name steht für das Device, wo mittels ReadingsNum der Wert (counter <- das ist der Readingname des Zählers) der Wert gelesen wird, um 1 zu addieren...

Also $name lassen (oder wenn, dann durch "Lampe" ersetzen)...

Daher:
Zitat von: uron am 17 Juni 2025, 06:57:35Ich versuche mal, den Befehl zu analysieren:
- "Lampe" steht für das Device, dessen Einschalthäufigkeit gezählt werden soll?
-> ja. Heißt es bei dir Lampe?
Zitat von: uron am 17 Juni 2025, 06:57:35- "counter:on" zählt die Einschaltbefehle?
-> jein ;) counter ist der Name des neuen Readings. on ist der "Trigger", bei dir also nicht on. Siehe Antwort betateilchen...
Zitat von: uron am 17 Juni 2025, 06:57:35- "$name" ist das Userreading, welches im Device das Zählergebnis ausweist?
-> nein. Siehe oben...

EDIT: siehe commandref (as always ;)  )
Zitat von: https://fhem.de/commandref_DE.htmluserReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:

    <reading>[:<trigger>] [<modifier>] { <perl code> }

Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).
Beispiele:

    attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }
    attr myMultiMeter userReadings energy1:counters.A.* {ReadingsVal("myMultiMeter","counters.A",0)/1250.0}, energy2:counters.B.* {ReadingsVal("myMultiMeter","counters.B",0)/1250.0}

...

Gruß, Joachim
Titel: Aw: Zahlwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: Guybrush am 17 Juni 2025, 12:01:07
ich hatte eigentlich gedacht dass das selbsterklärend war  ;D

on-for-timer ist egal. ich ging jetzt mal davon aus, dass du die states on,off bei deiner Lampe hast, was default ist. poste doch mal die defs deiner Lampe. Wenn du beim einschalten z.b. den state Ein hast, dann wäre das statt counter:on eben counter:Ein
Titel: Aw: Zahlwerk für die Einschalthäufigkeit einer Lampe
Beitrag von: uron am 17 Juni 2025, 13:19:54
Zitat von: betateilchen am 17 Juni 2025, 09:02:51Schau doch mal in den Event-Monitor, was da passiert, wenn Du "on-for-timer 1" an das device schickst. Und dann kannst Du Dir in "Create device" anschauen, wie die regex für ein notify aussehen müsste. Die gleiche regex kannst Du für das userReading verwenden.
Das war der wichtige Tipp den ich bislang nicht kannte und deshalb nie genutzt hatte. Nun läuft der counter munter.
Danke an alle, die Unterstützung geleistet haben - wieder etwas dazu gelernt!