FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: NewbieNew am 15 August 2020, 09:38:19

Titel: Befehl ausführen wenn sich Leistungsaufnahme ändert.
Beitrag von: NewbieNew am 15 August 2020, 09:38:19
Hallo an alle,
ich habe einen Blackout.

Folgendes:
Ich lasse mir immer nach 30 min die Leistungsaufnahme eines Gerätes schicken.

defmod VDR_Kontrolle at +*00:30:00 set Telegram message VDR-Server [VDR_ST:ENERGY_Power] Watt

Dies möchte ich mir nun nur noch bei Änderungen zusenden lassen. So etwa bei einem Schwellwert um 40 Watt, darüber "ein" darunter "aus"

Mein Notify läuft nicht:

defmod Telegram_notify_1 notify VDR_ST:ENERGY_Power<40 set Telegram message.VDR-Server Aus

Wo könnte mein Fehler liegen? Gerne hätte ich noch die Zeit dazu übermittelt.

Und kann man das notify per Hand "auslösen", da ich an die Messsteckdose nicht so einfach rankomme.

Dankeschön

Titel: Antw:Befehl ausführen wenn sich Leistungsaufnahme ändert.
Beitrag von: Otto123 am 15 August 2020, 10:03:53
Moin,

an der Stelle VDR_ST:ENERGY_Power<40 muss ein Trigger stehen, ein Vergleich geht dort nicht. Du kannst Dir das Gerüst mit dem Trigger im Eventmonitor erstellen lassen. Könnte so aussehen:
VDR_ST:ENERGY_Power:.*
Danach hast Du im $EVENT irgendwo den Wert stehen, eventuell im $EVTPART1
dann kannst Du einen Vergleich machen:
IF ($EVTPART1 < 40)(Tu was)
Wenn Du mehr machen willst ist es meist besser im Ausführungsteil direkt auf PERL zu gehen:
{if ($EVTPART1 < 40){fhem("FHEM Befehl")}}

Von Hand auslösen kannst Du ein notify mit dem trigger Befehl.
trigger VDR_ST ENERGY_Power: 39

Wie gesagt das  mit den Events muss alles nicht stimmen, das ist von mir geraten.

Ich will mal noch nachtragen: In engen Grenzen kann man eine Art Größenvergleich auch mit regExp im Trigger machen:
Das hier würde auf den Wertebereich 10-39 triggern
VDR_ST:ENERGY_Power:.[1-3][0-9]

Gruß Otto
Titel: Antw:Befehl ausführen wenn sich Leistungsaufnahme ändert.
Beitrag von: NewbieNew am 20 August 2020, 07:29:25
Moin,
ganz so einfach ist es doch nicht.

defmod Telegram_notify_1 notify VDR_ST:ENERGY_Power:.* {if ($EVTPART1 < 40){fhem("set Telegram message VDR-Server Aus")}}


Da das Gerät VDR_ST die Werte aller 2 Minuten sendet (über MQTT) bekomme ich die Werte auch im 2-Minuten Abstand gesendet.

Gibts da eventuell noch eine Lösung?

Danke
Titel: Antw:Befehl ausführen wenn sich Leistungsaufnahme ändert.
Beitrag von: Damian am 20 August 2020, 07:41:29
Zitat von: NewbieNew am 20 August 2020, 07:29:25
Moin,
ganz so einfach ist es doch nicht.

defmod Telegram_notify_1 notify VDR_ST:ENERGY_Power:.* {if ($EVTPART1 < 40){fhem("set Telegram message VDR-Server Aus")}}


Da das Gerät VDR_ST die Werte aller 2 Minuten sendet (über MQTT) bekomme ich die Werte auch im 2-Minuten Abstand gesendet.

Gibts da eventuell noch eine Lösung?

Danke

ja, siehe https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Titel: Antw:Befehl ausführen wenn sich Leistungsaufnahme ändert.
Beitrag von: Otto123 am 20 August 2020, 09:45:47
Zitat von: NewbieNew am 20 August 2020, 07:29:25
Gibts da eventuell noch eine Lösung?
Moin,

nein, eine Lösung gibt es nicht. Es gibt wahrscheinlich hunderte.  :) Die Frage was willst Du denn: Einmal ein Nachricht? Jede halbe Stunde?

Grundlegend: event-on-change-reading ist immer eine gute Maßnahme um die Flut an Events einzudämmen.
Du kannst andere Kriterien mit in die Auswertung nehmen.
Du kannst im Gerät einfach ein UserReadings definieren und dieses auswerten.

Wenn es einfach nur den Zustandswechsel informieren soll: (nicht getestet)
attr VDR_ST event-on-change-reading .*
attr VDR_ST userReadings Zustand:ENERGY_Power.* {ReadingsNum($name,'ENERGY_Power',0)<40?'aus':'ein'}
defmod Telegram_notify_1 notify VDR_ST:Zustand:(aus|ein) set Telegram message VDR-Server $EVTPART1


Gruß Otto