event-on-change-reading bitte Hilfe

Begonnen von Moli, 28 Juli 2023, 10:25:36

Vorheriges Thema - Nächstes Thema

Moli

Guten Morgen,
ich brauche noch mal Hilfe, ich verstehe es einfach nicht...

Der erste rechnet und der zweite soll ein Telegram schicken, wenn sich der Wert ändert. (Telegram zum Testen, ob es richtig funktioniert)
So wie es jetzt ist mit event-on-change-reading .* bei beiden passiert gar nichts.
Mache ich bei beiden das raus, bekomme ich alle 5 Sekunden ein Telegram, egal ob der Wert sich ändert oder nicht.
Mache ich es nur beim Zweiten raus, bekomme ich nichts, nur beim ersten raus bekomme ich wieder alle 5 Sekunden eins. (ca.)

Wer hat die Muße und Gnade, mich in die richtige Richtung zu schubsen?

DANKE!

defmod SetHoymiles CustomReadings
attr SetHoymiles event-on-change-reading .*
attr SetHoymiles group Strom
attr SetHoymiles room Alexa
attr SetHoymiles stateFormat {\
if(ReadingsVal("Einspeisung","stromverbrauch","") >= 270) {return 90;;}\
elsif(ReadingsVal("Einspeisung","stromverbrauch","") <= 0) {return 0;;}\
else {return int((ReadingsVal("Einspeisung","stromverbrauch","") - 20) /3);;}\
}

defmod Nachteinspeisung notify SetHoymiles set myTelegramBot _msg Hoymiles: [SetHoymiles:STATE]
attr Nachteinspeisung event-on-change-reading .*
attr Nachteinspeisung room System
[/code]

Beta-User

Moin.

Vermutlich verstehe ich schon den Grundansatz mit CustomReadings nicht. Das "erzeugt" (eigentlich) alle 5 Sekunden (default) seine Readings, bei dir aber scheinbar gar keine. Warum es dann überhaupt triggert, ist mir schleierhaft, und in den Code wollte ich jetzt nicht schauen...

Mir würde es näher liegen, rein eventbasiert zu arbeiten und entweder am Ausgangsdevice (Einspeisung) ein userReading anzulegen (für den "konsolidierten Status") und dann ggf. darauf einen ReadingsProxy zu legen (den du anscheinend brauchst, um das per Sprache abfragen zu können?), oder eben den relevanten Wert (stromverbrauch) direkt in einen ReadingsProxy zu verpacken (dann mit einer Value-Umwandlung).

Warum das event-on-change... am notify einen Unterschied macht, verstehe ich zugegebenermaßen gar nicht.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

JoWiemann

Zitat von: Moli am 28 Juli 2023, 10:25:36defmod SetHoymiles CustomReadings
attr SetHoymiles event-on-change-reading .*
attr SetHoymiles group Strom
attr SetHoymiles room Alexa
attr SetHoymiles stateFormat {\
if(ReadingsVal("Einspeisung","stromverbrauch","") >= 270) {return 90;;}\
elsif(ReadingsVal("Einspeisung","stromverbrauch","") <= 0) {return 0;;}\
else {return int((ReadingsVal("Einspeisung","stromverbrauch","") - 20) /3);;}\
}

event-on-change-reading .* wirkt nur auf die eigentlichen Readings in der Form, dass ein Event nur ausgelöst wird, wenn bei einem Reading ein neuer Wert geschrieben wird.

stateFormat erzeugt kein Event das ein notify triggert. Es formatiert einfach nur den Inhalt des Internals STATE.

Zitat von: Moli am 28 Juli 2023, 10:25:36defmod Nachteinspeisung notify SetHoymiles set myTelegramBot _msg Hoymiles: [SetHoymiles:STATE]
attr Nachteinspeisung event-on-change-reading .*
attr Nachteinspeisung room System

attr Nachteinspeisung event-on-change-reading .* ist in einem notify sinnlos.

Das Modul CustomReadings kennt ein Attribut interval, mit dem das Aktualisierung-Interval festgelegt wird. Default scheint dann 5 Sekunden zu sein.

Meine Frage: Warum benötigst Du CustomReadings und erzeugts Dein benötigtes Reading nicht als userReadings im Device Einspeisung? Auch würde ich das event-on-change-reading dann schon dort setzen.

Ansonsten solltest Du Dir das nochmal anschauen: https://wiki.fhem.de/wiki/CustomReadings

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Moli

Vielen Dank für die Rückmeldung.

Deshalb hatte ich auch schon, in vielen Varianten das probiert: attr Verbrauch event-on-change-reading Verbrauch.*

Ich dachte, es wäre einfacher, nur ein notify bei Änderung zu bekommen, die ganze Zeit den gleichen Wert schicken ist ja unnütz.

Ich schaue es mir noch mal an, aber es ja nicht so, dass ich mir die fingerwundgegoogled habe :)

Danke