FHEM Forum

FHEM - Hausautomations-Systeme => RFXTRX => Thema gestartet von: Zündi am 18 März 2014, 15:18:56

Titel: Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Zündi am 18 März 2014, 15:18:56
Hi,

habe mir eine defekte Oregon RAR 501 (Basis defekt) mit drei Sensoren (auf die ich scharf war) zugelegt. Leider tanzt einer gehörig aus der Reihe und zeigt ordentlich zu viel an (3,5 C)
Hat jemand eine Idee, wie ich den Wert im FHEM korrigieren kann, so dass er mir im Plotfile korrekt angezeigt wird?
Leider gibts kein Attribut zum korrigieren.

Bei dem verkorkstem Sensor handelt es sich um einen THGR122NX.
Da ich mehr da Hardware-Typ bin, und mich erst so langsam in die Programmierwelt einlerne, benötige ich Hilfe...

Zur Zeit ist der so definiert:

Zitatdefine THGR228N_2 TRX_WEATHER THGR228N_2
attr THGR228N_2 IODev TRX_0
attr THGR228N_2 alias 2
attr THGR228N_2 room TRX_WEATHER
define FileLog_THGR228N_2 FileLog ./log/THGR228N_2-%Y.log THGR228N_2
attr FileLog_THGR228N_2 logtype temp4hum4:Temp/Hum,text
attr FileLog_THGR228N_2 room TRX_WEATHER
define SVG_THGR228N_2 SVG FileLog_THGR228N_2:temp4hum4:CURRENT
attr SVG_THGR228N_2 label "THGR228N_2 Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_THGR228N_2 room Plots

Danke im Voraus für Eure Antworten!
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Joachim am 18 März 2014, 15:58:20
userereading ist dein Freund
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Zündi am 18 März 2014, 16:04:06
Danke für die schnelle Antwort, aber die hilft mir (wie oben geschrieben) in Ermangelung von Programmierkenntnissen nicht wirklich weiter... :o
So den einen oder anderen Hinweis benötige ich schon...  :-[
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: marvin78 am 18 März 2014, 16:05:33
Der neue Hinweis lautet: commandref ;) Dort ist UserReading ausführlich beschrieben.
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Zündi am 18 März 2014, 16:25:10
Ja, danke. Da war ich schon drüber gestolpert, da ich nach offset gesucht hatte...
Nur bin ich offensichtlich zu blöd, um zu erkennen, wie ich mit den vorhanden Korrekturmöglichkeiten des userReadings so was einfach hinbekomme, wie von einem Messwerten einen Konstanten Wert zu subtrahieren. Leider... :(

userReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:

    <reading>[:<trigger>] [<modifier>] { <perl code> }

Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).
Beispiele:

    attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }
    attr myMultiMeter userReadings energy1:counters.A {ReadingsVal("myMultiMeter","counters.A",0)/1250.0}, energy2:counters.B {ReadingsVal("myMultiMeter","counters.B",0)/1250.0}

<modifier> kann die folgenden Werte haben:

    none: als ob man es gar nicht spezifiziert hätte.
    difference: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert gesetzt.
    differential: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet, falls der Unterschied unter eine Sekunde liegt.
    offset: wenn der aktuellen Wert kleiner als der vorherige Wert ist wird der vorherige Wert zum Reading addiert. Das Reading kann dann als offset verwendet werden um einen Zähler der durch Sromverlust zurückgesetzt wird zu korrigieren.
    monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton wachsender Zähler ableiten.

Beispiel:

    attr myPowerMeter userReadings power differential { ReadingsVal("myPowerMeter","counters.A",0)/1250.0}

Achtung: Falls difference oder differential spezifiziert ist, dann werden für die Berechnung ältere Werte benötigt, d.h. der Wert wird frühestens beim zweiten Änderung gesetzt.
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: marvin78 am 18 März 2014, 16:30:47
attr THGR228N_2 userReadings realTemp:temperature { ReadingsVal("THGR228N_2 ","temperature",0)-3.5 }

Im Grunde stehe es aber alles in der Commandref.
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Zündi am 18 März 2014, 16:37:45
Hi marvin,

mag sein, setzt aber voraus, dass man Perl versteht.
ICH habe zumindestens nun verstanden, dass ich mich die nächste Zeit mal intensiv mit Perl auseinandersetzen muss.

Danke für den fertigen Codeschnipsel!  :)

Nur zum Verständnis, damit ich hier auch etwas draus lerne:
Ist realTemp eine Systemvariable (der Trigger) für den tatsächlichen Messwert oder frei gewählt?
Wenn es der Trigger ist, wie bekomme ich den Name der Variablen heraus?

Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: marvin78 am 18 März 2014, 16:39:41
Das hat mir Perl eigentlich fast nichts bis nichts zu tun. Commandref lesen hätte hier tatsächlich geholfen. Ein / (geteilt durch) durch ein - (Minus) zu ersetzen setzt kein Wissen in Perl voraus.

realTemp ist frei gewählt und ist dein neues Reading im Sensor. Steht aber auch alles in der Commandref. Ganz ohne Perl.

Der Trigger ist temperature und ist dein Temperatur-Reading aus dem Sensor welches den falschen Wert beinhaltet.
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Zündi am 18 März 2014, 16:50:41
Mhmm, funktioniert bloss nicht. Damit setzt er die RealTemp statisch auf -3,1 (entspricht der Abweichung)
siehe Link:

https://www.dropbox.com/s/huwoq83r6co5wpr/Screenshot%202014-03-18%2016.47.35.png (https://www.dropbox.com/s/huwoq83r6co5wpr/Screenshot%202014-03-18%2016.47.35.png)
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Zündi am 18 März 2014, 16:57:21
Internals:
   CFGFN     
   CODE       THGR228N_2
   DEF        THGR228N_2
   IODev      TRX_0
   LASTInputDev TRX_0
   MSGCNT     355
   NAME       THGR228N_2
   NR         142942
   STATE      T: 24.3 H: 43 BAT: ok
   TRX_0_MSGCNT 355
   TRX_0_RAWMSG 0a52012b580200f32b0189
   TRX_0_TIME 2014-03-18 16:55:54
   TYPE       TRX_WEATHER
   Readings:
     2014-03-18 16:55:55   battery         ok
     2014-03-18 16:55:55   humidity        43
     2014-03-18 16:55:55   realTemp        -3.1
     2014-03-18 16:55:55   state           T: 24.3 H: 43 BAT: ok
     2014-03-18 16:55:55   temperature     24.3
Attributes:
   IODev      TRX_0
   alias      2
   event-min-interval 600
   event-on-change-reading state
   event-on-update-reading .*
   room       TRX_WEATHER
   userReadings realTemp:temperature { ReadingsVal("THGR228N_2 ","temperature",0)-3.1 }
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: marvin78 am 18 März 2014, 16:58:46
userReadings realTemp:temperature { ReadingsVal("THGR228N_2 ","temperature",0)-3.1 }

Da ist ein Leerzeichen zu viel (zugegegen aus meinen Code, der aber ja nur ein Pseudocode war):

userReadings realTemp:temperature { ReadingsVal("THGR228N_2","temperature",0)-3.1 }
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Zündi am 18 März 2014, 17:05:06
Du bist mein Held  ;)
Das wars, jetzt passt die Ausgabe!

Und ich hab wieder (ein bisschen) was dazu gelernt.
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: Puschel74 am 18 März 2014, 19:07:03
Hallo,

Screenshots bitte über die Forumsfunktion einbetten.
Nicht jeder will auf externen Hostern vorbei schauen  ;)
Danke.

Grüße
Titel: Antw:Korrektur eines Messwertes Temp/Hum Sensors
Beitrag von: mcbuh am 11 September 2015, 23:39:15
Ich hab dann noch eine Frage. Bekomme ich es jetzt noch irgendwie hin das Grad Celsius dahinter steht?