Hauptmenü

[gelöst] notify und sprintf

Begonnen von aficianado, 22 Juni 2019, 14:32:04

Vorheriges Thema - Nächstes Thema

aficianado

Hallo Miteinander,

habe eine Pumpensteuerung mit 2 Wasserschaltern w1,w2 und 2 Pumpen p1,p2 und möchte deren Zustand  über ein notify loggen. w1,w2,p1,p2 werden in einem room ordentlich aktualisiert angezeigt und das loggen klappt auch:

define act_AnbTei at +*00:05:00 {\
  my $w1= Value("AnbTei_w1");;\
  my $w2= Value("AnbTei_w2");;\
  my $p1= Value("AnbTei_p1");;\
  my $p2= Value("AnbTei_p2");;\
  my $dat= sprintf("%d %d %d %d",$w1,$w2,$p1,$p2);;\
  fhem ("set AnbTei $dat");;\
}

geloggt wird 2019-06-22_14:23:24 AnbTei 1 0 0 0

jetzt würde ich aber gerne alle Änderungen mitbekommen und deshalb habe ich einen dummy AnbTei_ch (für change), der bei jeder Änderung von w1,w2,p1,p2 hochgezählt wird, ich habe nur die Kopfzeile angepasst:

define act_AnbTei notify AnbTei_ch {\
  my $w1= Value("AnbTei_w1");;\
  my $w2= Value("AnbTei_w2");;\
  my $p1= Value("AnbTei_p1");;\
  my $p2= Value("AnbTei_p2");;\
  my $dat= sprintf("%d %d %d %d",$w1,$w2,$p1,$p2);;\
  fhem ("set AnbTei $dat");;\
}

geloggt wird:
2019-06-22_14:28:46 AnbTei 43d 43d 43d 43d

ich bekomme als 4x die Variable AnbTei_ch und nicht w1,w2,p1,p2 wie zuvor?

Warum? Was mache ich falsch?

Besten Dank für jeden Tip im voraus !
RaPi3, esp8266, LoRa, Tasmota

CoolTux

Bitte den Code in Codetags setzen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

aficianado

Hallo Miteinander,

habe eine Pumpensteuerung mit 2 Wasserschaltern w1,w2 und 2 Pumpen p1,p2 und möchte deren Zustand  über ein notify loggen. w1,w2,p1,p2 werden in einem room ordentlich aktualisiert angezeigt und das loggen klappt auch:

define act_AnbTei at +*00:05:00 {\
  my $w1= Value("AnbTei_w1");;\
  my $w2= Value("AnbTei_w2");;\
  my $p1= Value("AnbTei_p1");;\
  my $p2= Value("AnbTei_p2");;\
  my $dat= sprintf("%d %d %d %d",$w1,$w2,$p1,$p2);;\
  fhem ("set AnbTei $dat");;\
}


geloggt wird 2019-06-22_14:23:24 AnbTei 1 0 0 0

jetzt würde ich aber gerne alle Änderungen mitbekommen und deshalb habe ich einen dummy AnbTei_ch (für change), der bei jeder Änderung von w1,w2,p1,p2 hochgezählt wird, ich habe nur die Kopfzeile angepasst:


define act_AnbTei notify AnbTei_ch {\
  my $w1= Value("AnbTei_w1");;\
  my $w2= Value("AnbTei_w2");;\
  my $p1= Value("AnbTei_p1");;\
  my $p2= Value("AnbTei_p2");;\
  my $dat= sprintf("%d %d %d %d",$w1,$w2,$p1,$p2);;\
  fhem ("set AnbTei $dat");;\
}


geloggt wird:
2019-06-22_14:28:46 AnbTei 43d 43d 43d 43d

ich bekomme als 4x die Variable AnbTei_ch und nicht w1,w2,p1,p2 wie zuvor?
Wieso verhält sich sprintf in Abhängigkeit der Kopfzeile anders?

Gibt es da einen anderen Weg?

Besten Dank für jeden Tip im voraus !
Beitrag editieren
RaPi3, esp8266, LoRa, Tasmota

TomLee

Frag mal einfach so, da ich nicht mitkomme.

Warum das ganze, weshalb nicht gleich ein FileLog -welches nur diese vier Daten loggt- erstellen ?
Oder sollen die vier Werte unbedingt in einer Zeile im Log stehen ?

Gruß

Thomas

aficianado

wie könnte das denn aussehen mit dem Filelog?
Ich würde gerne die 4 Werte in einem Diagramm sehen.

Nur am Rande interessiert mich warum das notify das sprintf beeinflusst ;-))

Danke für jeden Hinweis!
RaPi3, esp8266, LoRa, Tasmota

TomLee

Also ob mein Weg der richtige ist kann ich dir nicht sagen, aber er ist einfach und funktioniert.

Ich würde mit

define AnbTei FileLog ./log/AnbTei-%Y.log 1

in der Befehlszeile ein Jahres-Log erstellen.

Im erstellten Device mit set AnbTei addRegexpPart <einesdeinervierdevices>  <regexp> alle deine vier Geräte hinzufügen.
Mit removeRegexpPart bei der 1 noch den Platzhalter 1 enfernen den wir nur in der Definition gebraucht haben.

Wenn dich damit beschäftigt hast und alles klappt dann drückst auf  Create SVG plot und hast schonmal ein Diagramm, ist aber ein anderes Thema.

Gruß

Thomas

aficianado

Danke für den Tip!


define AnbTei dummy
define act_AnbTei notify AnbTei_ch {\
  my $w1= Value("AnbTei_w1");;\
  my $w2= Value("AnbTei_w2");;\
  my $p1= Value("AnbTei_p1");;\
  my $p2= Value("AnbTei_p2");;\
  fhem ("set AnbTei $w1 $w2 $p1 $p2");;\
}
define FileLog_AnbTei FileLog ./log/log-AnbTei.log AnbTei
attr FileLog_AnbTei logtype text


So funktioniert das jetzt. Wenn ich allerdings das sprintf von vorher verwende, dann geht es nicht. Aber das ist eine andere Frage und ich kann mit dem workaround prima leben!!

Danke an Alle!!
RaPi3, esp8266, LoRa, Tasmota