Autor Thema: Meldung Stromausfall  (Gelesen 253 mal)

Offline lt1014

  • New Member
  • *
  • Beiträge: 19
Meldung Stromausfall
« am: 19 Juni 2019, 23:14:21 »
Hallo,

ich habe Erfolgreich eine UPS mit NUT eingebunden, funktiniert alles.

define UPS NUT powerwalker localhost:3493
Ich bekomme unter anderem folgende Readings:

battery.charge
state

der "state" kennt die Zustände "OL DISCHRG" und "OL CHRG" das heist hier kann ich sehen, ob Stromausfall oder nicht.
Über ein notify möchte ich mir per "Pushover" eine Mitteilung aufs Handy schicken lassen. Das geht im Prinzip, aber:

define usv_alarm notify UPS:.* {push_usv()}push_usv() = Funktion in 99_myUtils.pm, die funktioniert.

bewirkt, dass ich Meldungen bekomme, auch wenn sich das Reading "battery.charge" ändert, und das macht es immer wenn nicht 100% geladen.
Das erscheint mit auch logisch.
Das hab ich geändert in:

define usv_alarm notify UPS:state:.* {push_usv()}
in der Hoffnung das nur gemeldet wird, wenn sich der "state" ändert, aber jetzt kommt gar keine Meldung mehr.
Wo liegt mein Denkfehler, ich dachte ich hätte das halbwegs begriffen, aber...

Danke für eure Hilfe
Willi

Nachtrag:

Zusätzlich schreibe ich ich "battery.charge" noch in ein Filelog, um das dann in einer Kurve darzustellen.
Um nur Änderungen abzuspeichern, habe ich folgendes gemacht:

attr UPS event-on-change-reading battery.charge
Das Filelog wird dann auch geschrieben, wie ich das möchte. Kann es sein dass sich das dann so auswirkt, dass eine Änderung des "state" im notify oben nicht durch kommt?
Wie kann ich das dann lösen?

Nochmal Danke
Willi


« Letzte Änderung: 19 Juni 2019, 23:47:30 von lt1014 »
Fritzbox 7490
Raspberry 3
Eigenbau 433MHz Sender
Rolläden Rohrmotor24

Offline KölnSolar

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3438
Antw:Meldung Stromausfall
« Antwort #1 am: 20 Juni 2019, 07:08:16 »
Hallo Willi,
event-on-change-reading battery.charge dürfte keinen Einfluss auf state haben.
Ich denke, Dein regexp im notify passt nicht. Am besten im event monitor die events prüfen und regexp generieren lassen.
Grüße Markus
RPi3/2 Stretch-STV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-CUL868-FS20A4-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty-Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)

Offline Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 3273
Antw:Meldung Stromausfall
« Antwort #2 am: 20 Juni 2019, 07:19:03 »
Nimm state mit in den event-on-change auf.
Dein state produziert gerade keine Events und somit triggert das notify nicht.

Und für die zukunft:
Es ist immer besser ein komplettes list zu posten anstatt einzelner brocken davon.

Gesendet von meinem Telekom Puls mit Tapatalk


Offline rcmcronny

  • Full Member
  • ***
  • Beiträge: 105
Antw:Meldung Stromausfall
« Antwort #3 am: 20 Juni 2019, 10:50:19 »
Hallo,

ich bin mir ziemlich sicher, das bei einem Stromausfall dann ein Status "ON BATTERY" kommt, das Sollte mit dem Flag OB gekennzeichnet sein (prüf das doch per "Stecker ziehen" :) ).
Dann könntest Du darauf triggern, das OL ist "ON-LINE"

EDIT: Schau mal hier: https://forum.fhem.de/index.php/topic,27172.msg771352.html#msg771352

Ronny
« Letzte Änderung: 20 Juni 2019, 11:08:14 von rcmcronny »

Offline lt1014

  • New Member
  • *
  • Beiträge: 19
Antw:Meldung Stromausfall
« Antwort #4 am: 20 Juni 2019, 14:26:09 »
Danke euch allen.

Ich hab's geschaft, und zwar so:
defmod UPS NUT powerwalker localhost:3493
attr UPS event-on-change-reading battery.charge,state

defmod UPS_STATUS dummy
attr UPS_STATUS event-on-change-reading .*

defmod usv_alarm notify UPS:.* {copy_usv()}
defmod UPSstate_OB notify UPS_STATUS:OB.* set Push msg Stromausfall
defmod UPSstate_OL notify UPS_STATUS:OL.* set Push msg Strom ok

und in 99_myUtils.pm
sub copy_usv
  {
  my $t = ReadingsVal( "UPS", "state", 0 );
  fhem( "set UPS_STATUS $t" );
  }

Allso über eine dummy Variable. Vielleich umständlich aber so funktionierts.

Eine Frage hätte ich noch:

In meiner Funktion copy_usv wird der Inhalt einer Variable erst in die temporäre Variable $t gespeichert und diese dann in die dummy Variable übertragen.
Ich wollte nun den Umweg über $t weglassen und habs so versucht:
 sub copy_usv
  {
  fhem( "set UPS_STATUS ReadingsVal( "UPS", "state", 0 )" );
  }

Das geht so aber nicht. Auch in fhem direkt funktionierts so nicht:
 {fhem( "set UPS_STATUS ReadingsVal( "UPS", "state", 0 )" );}
Könnte mir bitte jemand erklären warum nicht bzw. wies denn gehen würde?

Gruß
Willi
Fritzbox 7490
Raspberry 3
Eigenbau 433MHz Sender
Rolläden Rohrmotor24

 

decade-submarginal