98_dewpoint.pm erzeugt kein setstate ..... dewpoint x.y

Begonnen von Patrik.S, 04 Februar 2015, 21:00:27

Vorheriges Thema - Nächstes Thema

Patrik.S

Ich benötige einen STATE für dewpoint, damit mir andFHEM diesen auch anzeigen kann als Graph,
kann aber absolut nicht erkennen, warum es bei mir (als einziger) nicht klappt.

Der Versuch eine allgemeine Antwort zu bekommen im Anfängerforum (http://forum.fhem.de/index.php/topic,32852.0.html) hat nicht geholfen, also debugge ich gerade das Perl Modul.


Als Workaround habe ich von Hand diese Werte in die fhem.save geschrieben, damit andFHEM mit den Button zum Graphen anzeigen um den Taupunkt erweitert:
setstate CUL_WS_Aussen 2014-07-19 00:00:00 dewpoint 0.0
setstate CUL_WS_KellerTreppe 2014-07-19 00:00:00 dewpoint 0.0
setstate CUL_WS_KriechKeller 2014-07-19 00:00:00 dewpoint 0.0


Um dem STATE auch den dewpoint hinzuzufügen, muss mal lauf Beschreibung und Code so eine Definition machen:
define dew_state dewpoint dewpoint .* T H D

Fhem erkennt emine Definition als:

Internals
CMD_TYPE dewpoint
DEF dewpoint .* T H D
DEV_REGEXP .*
HUM_NAME H
NAME dewtest
NEW_NAME D
NR 47
NTFY_ORDER 10-dewtest
STATE active
TEMP_NAME T
TYPE dewpoint


Das eingeschaltete Logging hat mir dann erstmal gezeigt, das ein Codezeile verbessert werden könnte.
# $Id: 98_dewpoint.pm 6757 2014-10-12 18:58:57Z joachim09876 $

In Zeile 147 sollte vielleicht aus Debugging Gründen auch der Teil "new_name=$new_name" mit ausgegeben werden, damit man sehen kann, ob die drei optionalen Namen auch richtig ankommen
Aktuell:

Log 1, "dewpoint_notify: cmd_type=$cmd_type devname=$devName dewname=$hashName, dev=$devName, dev_regex=$re temp_name=$temp_name hum_name=$hum_name" if ($dewpoint_debug == 1);


Neu:

Log 1, "$0 dewpoint_notify: cmd_type=$cmd_type devname=$devName dewname=$hashName, dev=$devName, dev_regex=$re temp_name=$temp_name hum_name=$hum_name new_name=$new_name" if ($dewpoint_debug == 1);


Zusätzlich habe ich die Zeile 305 einkommentieren müssen, damit etwas rausgeschrieben wird. Ist das so gewollt das die inaktiv ist?

Log 1,">dev=$devName, lastval='$lastval' devSTATE='".$dev->{STATE}."' state=".$dev->{READINGS}{state}{VAL}."'";


Da der STATE zu diesem Zeitpunkt kein "D: ...." enthält, habe ich die Logzeile nochmal nach der Zeile 320 ans Ende des else Zweiges gepackt.
Mit dem Ergebnis, das zwar "devSTATE" den dewpoint (D: 9.0) enhält, aber nicht der State

vor dem ganzen "if ($lastval...."
2015.02.04 20:29:27 1: >dev=CUL_WS_KellerTreppe, lastval='T: 15.8  H: 64' devSTATE='T: 15.8  H: 64' state=T: 15.8  H: 64'
Danach:
2015.02.04 20:29:27 1: >dev=CUL_WS_KellerTreppe, lastval='T: 15.8  H: 64' devSTATE='T: 15.8  H: 64 D: 9.0' state=T: 15.8  H: 64'



Ein paar andere extra eingebaute Logausgaben haben auch nur gezeigt, das die Definition soweit richtig ist (wobei ich den Namen von "dew_state" über Einzelnamen pro Sensor zu "dewtest" geändert habe, daher hier jetzt andere Logausgaben zur obigen Definition....)
2015.02.03 23:30:50 5: Loading ./FHEM/98_dewpoint.pm
2015.02.03 23:30:51 1: dewpoint_Define() def=dewtest dewpoint dewpoint .* T H D
2015.02.03 23:30:51 1: dewpoint_Define() dewtest dewpoint dewpoint .* T H D
2015.02.03 23:30:51 1: dewpoint_Define() a[0]=dewtest
2015.02.03 23:30:51 1: dewpoint_Define() a[1]=dewpoint
2015.02.03 23:30:51 1: dewpoint_Define() a[2]=dewpoint
2015.02.03 23:30:51 1: dewpoint_Define() a[3]=.*
2015.02.03 23:30:51 1: dewpoint_Define() a[4]=T
2015.02.03 23:30:51 1: dewpoint_Define() a[5]=H
2015.02.03 23:30:51 1: dewpoint_Define() a[6]=D

Das trifft dann den erwarteten Codeblock:

  if ($cmd_type eq "dewpoint") {
# define <name> dewpoint dewpoint devicename-regex [temp_name hum_name new_name]
  if(@a == 7) {
  $hash->{TEMP_NAME} = $a[4];
  $hash->{HUM_NAME} = $a[5];
  $hash->{NEW_NAME} = $a[6];


Die fhem.save habe ich auch mal gelöscht, für den Fall, das sich alte Einträge behindern.

Ich weiß nicht mehr weiter  :(

Das Logfile:

.......
2015.02.03 23:30:50 5: GOT CUL fhtid: 1234
2015.02.03 23:30:50 5: Cmd: >define dewtest dewpoint dewpoint .* T H D<
2015.02.03 23:30:50 5: Loading ./FHEM/98_dewpoint.pm
2015.02.03 23:30:51 1: dewpoint_Define() def=dewtest dewpoint dewpoint .* T H D
2015.02.03 23:30:51 1: dewpoint_Define() dewtest dewpoint dewpoint .* T H D
2015.02.03 23:30:51 1: dewpoint_Define() a[0]=dewtest
2015.02.03 23:30:51 1: dewpoint_Define() a[1]=dewpoint
2015.02.03 23:30:51 1: dewpoint_Define() a[2]=dewpoint
2015.02.03 23:30:51 1: dewpoint_Define() a[3]=.*
2015.02.03 23:30:51 1: dewpoint_Define() a[4]=T
2015.02.03 23:30:51 1: dewpoint_Define() a[5]=H
2015.02.03 23:30:51 1: dewpoint_Define() a[6]=D
2015.02.03 23:30:51 5: Cmd: >define CUL_WS_KellerTreppe CUL_WS 1<
2015.02.03 23:30:51 5: Loading ./FHEM/14_CUL_WS.pm
2015.02.03 23:30:51 5: Cmd: >attr CUL_WS_KellerTreppe room CUL_WS<
2015.02.03 23:30:51 5: Cmd: >define FileLog_CUL_WS_KellerTreppe FileLog ./log/CUL_WS_KellerTreppe-%Y.log CUL_WS_KellerTreppe:T:.*<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_KellerTreppe custom_graph1 8:D:@°C@Taupunkt<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_KellerTreppe logtype temp4hum6:Temp/Hum,text<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_KellerTreppe room CUL_WS<
2015.02.03 23:30:51 5: Cmd: >define weblink_CUL_WS_KellerTreppe SVG FileLog_CUL_WS_KellerTreppe:temp4hum6:CURRENT<
2015.02.03 23:30:51 5: Loading ./FHEM/98_SVG.pm
2015.02.03 23:30:51 5: Cmd: >attr weblink_CUL_WS_KellerTreppe label "CUL_WS_KellerTreppe Min $data{min1}, Max $data{max1}, Last $data{currval1}"<
2015.02.03 23:30:51 5: Cmd: >attr weblink_CUL_WS_KellerTreppe room Plots<
2015.02.03 23:30:51 5: Cmd: >define CUL_WS_Aussen CUL_WS 2<
2015.02.03 23:30:51 5: Cmd: >attr CUL_WS_Aussen room CUL_WS<
2015.02.03 23:30:51 5: Cmd: >define FileLog_CUL_WS_Aussen FileLog ./log/CUL_WS_Aussen-%Y.log CUL_WS_Aussen:T:.*<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_Aussen custom_graph2 8:D:@°C@Taupunkt<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_Aussen logtype temp4hum6:Temp/Hum,text<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_Aussen room CUL_WS<
2015.02.03 23:30:51 5: Cmd: >define weblink_CUL_WS_Aussen SVG FileLog_CUL_WS_Aussen:temp4hum6:CURRENT<
2015.02.03 23:30:51 5: Cmd: >attr weblink_CUL_WS_Aussen label "CUL_WS_Aussen Min $data{min1}, Max $data{max1}, Last $data{currval1}"<
2015.02.03 23:30:51 5: Cmd: >attr weblink_CUL_WS_Aussen room Plots<
2015.02.03 23:30:51 5: Cmd: >define CUL_WS_KriechKeller CUL_WS 3<
2015.02.03 23:30:51 5: Cmd: >attr CUL_WS_KriechKeller room CUL_WS<
2015.02.03 23:30:51 5: Cmd: >define FileLog_CUL_WS_KriechKeller FileLog ./log/CUL_WS_KriechKeller-%Y.log CUL_WS_KriechKeller:T:.*<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_KriechKeller custom_graph3 8:D:@°C@Taupunkt<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_KriechKeller logtype temp4hum6:Temp/Hum,text<
2015.02.03 23:30:51 5: Cmd: >attr FileLog_CUL_WS_KriechKeller room CUL_WS<
2015.02.03 23:30:51 5: Cmd: >define weblink_CUL_WS_KriechKeller SVG FileLog_CUL_WS_KriechKeller:temp4hum6:CURRENT<
2015.02.03 23:30:51 5: Cmd: >attr weblink_CUL_WS_KriechKeller label "CUL_WS_KriechKeller Min $data{min1}, Max $data{max1}, Last $data{currval1}"<
2015.02.03 23:30:51 5: Cmd: >attr weblink_CUL_WS_KriechKeller room Plots<

.....

2015.02.03 23:30:51 1: Including ./log/fhem.save
2015.02.03 23:30:51 5: Cmd: >setstate BadLuefter_N 2015-02-03 23:28:38<
2015.02.03 23:30:51 5: Cmd: >setstate BadLuefter_Trig_N 2015-02-03 23:28:38<
2015.02.03 23:30:51 5: Cmd: >setstate CUL1 2015-02-03 23:26:43 cmds  B C F i A G M R T V W X e f m l t u x<
2015.02.03 23:30:51 5: Cmd: >setstate CUL1 2015-02-03 23:29:44 state Initialized<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_Aussen T: -1.0  H: 89.1 D: -2.7<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_Aussen 2015-02-03 23:28:30 DEVFAMILY WS300<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_Aussen 2015-02-03 23:28:30 DEVTYPE S300TH<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_Aussen 2015-02-03 23:28:30 humidity 89.1<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_Aussen 2015-02-03 23:28:30 state T: -1.0  H: 89.1<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_Aussen 2015-02-03 23:28:30 temperature -1.0<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KellerTreppe T: 15.8  H: 64.4 D: 9.1<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KellerTreppe 2015-02-03 23:29:44 DEVFAMILY WS300<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KellerTreppe 2015-02-03 23:29:44 DEVTYPE S300TH<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KellerTreppe 2015-02-03 23:29:44 humidity 64.4<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KellerTreppe 2015-02-03 23:29:44 state T: 15.8  H: 64.4<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KellerTreppe 2015-02-03 23:29:44 temperature 15.8<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KriechKeller T: 15.2  H: 64.3 D: 8.5<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KriechKeller 2015-02-03 23:28:38 DEVFAMILY WS300<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KriechKeller 2015-02-03 23:28:38 DEVTYPE S300TH<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KriechKeller 2015-02-03 23:28:38 humidity 64.3<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KriechKeller 2015-02-03 23:28:38 state T: 15.2  H: 64.3<
2015.02.03 23:30:51 5: Cmd: >setstate CUL_WS_KriechKeller 2015-02-03 23:28:38 temperature 15.2<
2015.02.03 23:30:51 5: Cmd: >setstate FHEM_init 2015-02-03 23:26:44<
2015.02.03 23:30:51 5: Cmd: >setstate FileLog_CUL_WS_Aussen active<
2015.02.03 23:30:51 5: Cmd: >setstate FileLog_CUL_WS_KellerTreppe active<
2015.02.03 23:30:51 5: Cmd: >setstate FileLog_CUL_WS_KriechKeller active<
2015.02.03 23:30:51 5: Cmd: >setstate Logfile active<
2015.02.03 23:30:51 5: Cmd: >setstate act_on_RelaisUL active<
2015.02.03 23:30:51 5: Cmd: >setstate act_on_RelaisWT active<
2015.02.03 23:30:51 5: Cmd: >setstate dewtest active<
2015.02.03 23:30:51 5: Cmd: >setstate eventTypes active<
2015.02.03 23:30:51 5: Cmd: >setstate global <no definition><
2015.02.03 23:30:51 5: Cmd: >setstate weblink_CUL_WS_Aussen initialized<
2015.02.03 23:30:51 5: Cmd: >setstate weblink_CUL_WS_KellerTreppe initialized<
2015.02.03 23:30:51 5: Cmd: >setstate weblink_CUL_WS_KriechKeller initialized<

2015.02.03 23:30:51 5: Triggering global (1 changes)
2015.02.03 23:30:51 5: Notify loop for global INITIALIZED
2015.02.03 23:30:51 1: dewpoint_notify: cmd_type=dewpoint devname=global dewname=dewtest, dev=global, dev_regex=.* temp_name=T hum_name=H new_name=D
2015.02.03 23:30:51 1: dewpoint_notify: s='INITIALIZED'
2015.02.03 23:30:51 5: Triggering FHEM_init
2015.02.03 23:30:51 4: FHEM_init exec {system("gpio -p write 200 0");;system("gpio -p write 201 0")}
2015.02.03 23:30:51 5: Cmd: >{system("gpio -p write 200 0");system("gpio -p write 201 0")}<
2015.02.03 23:30:51 3: FHEM_init return value: -1
2015.02.03 23:30:51 0: Server started with 25 defined entities (version $Id: fhem.pl 6913 2014-11-08 10:32:44Z rudolfkoenig $, os linux, user pi, pid 10146)
2015.02.03 23:31:26 5: CUL/RAW: /K91101089E2

2015.02.03 23:31:26 4: CUL_Parse: CUL1 K91101089E2 -89
2015.02.03 23:31:26 5: CUL1 dispatch K91101089
2015.02.03 23:31:27 4: CUL_WS S300TH CUL_WS_Aussen: T: -1.0  H: 89.1
2015.02.03 23:31:27 5: Triggering CUL_WS_Aussen (3 changes)
2015.02.03 23:31:27 5: Notify loop for CUL_WS_Aussen T: -1.0  H: 89.1
2015.02.03 23:31:27 1: dewpoint_notify: cmd_type=dewpoint devname=CUL_WS_Aussen dewname=dewtest, dev=CUL_WS_Aussen, dev_regex=.* temp_name=T hum_name=H new_name=D
2015.02.03 23:31:27 1: dewpoint_notify: s='T: -1.0  H: 89.1'
2015.02.03 23:31:27 1: dewpoint_notify: evName='T:' val=-1.0'
2015.02.03 23:31:27 1: dewpoint_notify T: H:, temp=-1.0 hum=89.1
2015.02.03 23:31:27 1: dewpoint_notify: s='temperature: -1.0'
2015.02.03 23:31:27 1: dewpoint_notify: evName='temperature:' val=-1.0'
2015.02.03 23:31:27 1: dewpoint_notify: s='humidity: 89.1'
2015.02.03 23:31:27 1: dewpoint_notify: evName='humidity:' val=89.1'
2015.02.03 23:31:27 1: dewpoint_notify: dewpoint=-2.7
2015.02.03 23:31:27 1: sensor = D
2015.02.03 23:31:27 1: temp_name = T
2015.02.03 23:31:27 1: >dev=CUL_WS_Aussen, lastval='T: -1.0  H: 89.1' devSTATE='T: -1.0  H: 89.1' state=T: -1.0  H: 89.1'
2015.02.03 23:31:27 1: >dev=CUL_WS_Aussen, lastval='T: -1.0  H: 89.1' devSTATE='T: -1.0  H: 89.1 D: -2.7' state=T: -1.0  H: 89.1'
2015.02.03 23:31:27 1: >current=T: -1.0  H: 89.1 D: -2.7
2015.02.03 23:31:27 1: dewpoint_notify: current=T: -1.0  H: 89.1 D: -2.7
2015.02.03 23:31:27 4: eventTypes: CUL_WS CUL_WS_Aussen T: -1.0  H: 89.1 D: -2.7 -> T: -.*  H: .* D: -.*
2015.02.03 23:31:27 4: eventTypes: CUL_WS CUL_WS_Aussen temperature: -1.0 -> temperature: -.*
2015.02.03 23:31:27 4: eventTypes: CUL_WS CUL_WS_Aussen humidity: 89.1 -> humidity: .*
2015.02.03 23:31:27 4: eventTypes: CUL_WS CUL_WS_Aussen state: T: -1.0  H: 89.1 -> state: T: -.*  H: .*
2015.02.03 23:32:41 5: CUL/RAW: /K0159416425

Patrik.S

Auch wenn ich den Perl Code anders verstanden habe, aber durch rumprobieren habe ich nun eine funktionierende Variante hinbekommen.

Ich MUSS diese Definition benutzen, um weiterhin im Logfile die zusätzliche Spalte D mit seinem Wert zu bekommen:
define dew_values dewpoint dewpoint .* T H D

Und diese Definition ist nur zusätzlich nötig:
define dew_states dewpoint dewpoint .*

um das interne Attribut gesetzt zu bekommen(das als "setstate ..... dewpoint x.y" wird), wodurch andFHEM dann alle drei Spalten auswerten kann.

Kann mir das einer erklären?