Dewpoint berechnung von Zwave z.B. "humidity 67 %"

Begonnen von robin13, 19 Mai 2015, 14:28:14

Vorheriges Thema - Nächstes Thema

robin13

Ich wuerde gerne dewpoint berechnen und habe so ein configuration dafuer eingetragen:


define dew_all dewpoint dewpoint .* temperature humidity dewpoint


Da output von zwave humidity und temepratur so aussieht:


humidity: 64 %
temperature: 16.5 C


Kriege ich solche fehler:


2015.05.19 14:19:26 1: PERL WARNING: Argument "65 %" isn't numeric in numeric le (<=) at ./FHEM/98_dewpoint.pm line 264.


Ist es moeglich der Format der output von den ZWave multisensor so ein zu richten dass es nicht den "%" oder "C" als postfix hat, sondern nur den numerischen Wert damit solche Berechnungen leichter gehen?

micha80

Aber natürlich ;)


attr device userReadings Feuchtigkeit {ReadingsNum("device","humidity","1");;}


Dann hast du im device ein reading Feuchtigkeit...

robin13

Ich habe das interpretiert das es so gehen sollte:


attr ZWave_Aeotec_multisensor_.* userReadings humidity {ReadingsNum("device","humidity","1");;}
attr ZWave_Aeotec_multisensor_.* userReadings temperature {ReadingsNum("device","temperature","1");;}
attr ZWave_Aeotec_multisensor_.* userReadings luminance {ReadingsNum("device","luminance","1");;}


Das ergibt aber in den Logfiles jetzt was eigenartiges:


2015-05-19_16:31:25 ZWave_Aeotec_multisensor_01 battery: 87 %
2015-05-19_16:31:25 ZWave_Aeotec_multisensor_01 luminance: 1
2015-05-19_16:31:26 ZWave_Aeotec_multisensor_01 luminance: 521 Lux
2015-05-19_16:31:26 ZWave_Aeotec_multisensor_01 luminance: 1
2015-05-19_16:31:26 ZWave_Aeotec_multisensor_01 humidity: 64 %
2015-05-19_16:31:26 ZWave_Aeotec_multisensor_01 luminance: 1
2015-05-19_16:31:26 ZWave_Aeotec_multisensor_01 temperature: 14.7 C
2015-05-19_16:31:26 ZWave_Aeotec_multisensor_01 luminance: 1


Was habe ich da falsch gemacht?
Gibt's dokumentation zur Funktion ReadingsNum?

micha80

versuchs mal damit:

attr ZWave_Aeotec_multisensor_01 userReadings humidity_NUM {ReadingsNum("ZWave_Aeotec_multisensor_01","humidity","1");;}


ich weiß nicht, ob du das gleiche reading überschreiben kannst, darum war es eingedeutscht

rudolfkoenig

Ich sehe das Problem bzw. die Loesung im dewpoint Modul, da diese Form (Wert Einheit) relativ haeufig ist, und nicht auf das ZWave Modul beschraenkt ist.

Man kann pro Geraet nur ein userReadings setzen, die unterschiedlichen Readings muss man in eine Zeile definieren. Es heisst ja auch userReadings und nicht userReading. Existierende Werte kann man nur bedingt ueberschreiben (und man sollte es eigentlich nicht tun): Events werden fuer beide generiert, im Device bleibt nur das im userReading spezifizierte uebrig

robin13

Wenn ich pro Device nur einen userReadings definieren kann, aber dieser nur einen Ziel-Feld hat, gibt es dann eine Loesung wie ich wie oben angedeutet alle drei werte umschreiben kann?
Waere es auch eine Moeglichkeit den ZWave Module an zu passen das die Einheiten weggelassen werden?


krikan

Vielleicht kannst Du den Vorschlag von http://www.fhemwiki.de/wiki/Dewpoint nehmen und den Taupunkt im userReading selbst berechnen.

ZitatWaere es auch eine Moeglichkeit den ZWave Module an zu passen das die Einheiten weggelassen werden?
Fände ich nicht gut. Wie Rudi schon schrieb, sollte das Modul dewpoint dies lösen.

robin13

Ah... interesant!  Nur leider kriege ich jetzt solche Fehler:

ZitatERROR:

Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command if, try help. Unknown command return, try help. Unknown command }, try help. Unknown command my, try help. Unknown command my, try help. Unknown command if, try help. Unknown command return, try help. Unknown command }, try help. Unknown command }, try help.

Wie funktioniert es hier mit code contribution - wenn ich richtig sehe ist alles in Subversion was ein bischen einschraenkend ist fuer contribution... ich koennte das Dewpoint modul gerne anpassen und einen pull-request machen wenn's auf github waere?

rudolfkoenig

Zitataber dieser nur einen Ziel-Feld hat
Wer hat das wo behauptet? Ich zitiere mich: "Es heisst ja auch userReadings und nicht userReading"

ZitatWie funktioniert es hier mit code contribution
Kann man an diversen Stellen nachlesen: diff erstellen, in dem im MAINTAINER.txt beschriebenen Forumsbereich posten, und dem Maintainer beschreiben, wozu es gut sein soll. Kannst du bitte erlaeutern, warum ein pull request einfacher ist?
MAn ist unser Hauptproblem in diesem Bereich, dass manche Maintainer keine Zeit/Lust mehr haben, und ein Nachfolger auch nicht klar ist. Wie man das mit technischen Mitteln loest, ist mir noch ein Raetsel.

ollir

Zitat von: robin13 am 20 Mai 2015, 06:45:56
Wenn ich pro Device nur einen userReadings definieren kann, aber dieser nur einen Ziel-Feld hat, gibt es dann eine Loesung wie ich wie oben angedeutet alle drei werte umschreiben kann?

Um es kurz zu machen: mehrere UserReadings werden durch ein Komma getrennt.

VG

flurin

Zitat von: robin13 am 20 Mai 2015, 06:45:56
Wenn ich pro Device nur einen userReadings definieren kann, aber dieser nur einen Ziel-Feld hat, gibt es dann eine Loesung wie ich wie oben angedeutet alle drei werte umschreiben kann?
Waere es auch eine Moeglichkeit den ZWave Module an zu passen das die Einheiten weggelassen werden?

Eine Alternative mit DOIF:


define di_filter DOIF ([ZWave_Aeotec_multisensor_01])
(setreading ZWave_Aeotec_multisensor_01 temp_num [ZWave_Aeotec_multisensor_01:temperature:d],
setreading ZWave_Aeotec_multisensor_01 hum_num [ZWave_Aeotec_multisensor_01:humidity:d],
setreading ZWave_Aeotec_multisensor_01 lum_num [ZWave_Aeotec_multisensor_01:luminance:d])
attr di_filter do always


Bei ZWave_Aeotec_multisensor_01 werden die Readings temp_num, hum_num und lum_num ohne Einheit zusätzlich gespeichert.

rudolfkoenig

Diese Loesung ist nicht DOIF spezifisch, mit notify, setreading und ReadingsNum geht es genauso.
Der Haken: die so generierten Readings koennen weder geloggt noch mit dewpoint/average/etc bereichert werden, da FHEM keine rekursiven Trigger erlaubt. Sonst waere dieser DOIF eine Endlosschleife.

flurin

Okey, Danke für den Hinweis.

Zitat von: rudolfkoenig am 20 Mai 2015, 11:25:37
Diese Loesung ist nicht DOIF spezifisch, mit notify, setreading und ReadingsNum geht es genauso.

Stimmt, ich finde "[ZWave_Aeotec_multisensor_01:temperature:d]" ein Tick einfacher als "ReadingsNum("ZWave_Aeotec_multisensor_01","temperature","1")" aber das ist eine Kleinigkeit.

Zitat von: rudolfkoenig am 20 Mai 2015, 11:25:37
Der Haken: die so generierten Readings koennen weder geloggt noch mit dewpoint/average/etc bereichert werden, da FHEM keine rekursiven Trigger erlaubt. Sonst waere dieser DOIF eine Endlosschleife.

Mit einem zusätzlichen Dummy könnte man es lösen. In diesem Fall würde ich jedoch userReadings nehmen.

Anderseits, wenn man das Reading direkt in einer Bedingung filtern möchte, ist es recht einfach:


define di_test DOIF ([ZWave_Aeotec_multisensor_01:temperature:d] > 20) (set ....)