[patch] 98_dewpoint.pm

Begonnen von hotbso, 23 Oktober 2017, 10:43:18

Vorheriges Thema - Nächstes Thema

hotbso

Die Berechnungen von Taupunkt und absoluter Feuchte hatten nach meiner Auffassung ein paar Probleme:

Das ganze sind ja alles semi-empirische Näherungen.

- Die Parameter für die Berechnung für T<0 waren nicht vollständig implementiert.
- Für die Berechnung der absoluten Feuchte wurde eine andere Näherung als beim Taupunkt verwendet

Ich das ganze mal aufgeräumt und die Parameter aus Wikipedia genommen mit nachvollziehbarer Quellenangabe. Ausserdem habe ich die Berechnung des Partialdrucks in eine eigene Routine ausgelagert, die dann auch von anderen Wettermodulen aufrufbar ist.

Die ganze Eventlogik ist nicht angetastet.

- holger

sash.sc

Was hast du denn genau aufgeräumt?

Gesendet von meinem SM-T560 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

hotbso

Sowohl beim Taupunkt als auch bei der Abs Feuchte wurde der Dampfdruck berechnet, allerdings mit unterschiedlichen Formeln und unterschiedlichen Parametern. Das habe ich vereinheitlicht.

stgeran

Anfängerfrage: wie spiele ich den patch ein?
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

CoolTux

Zitat von: hotbso am 23 Oktober 2017, 10:43:18
Die Berechnungen von Taupunkt und absoluter Feuchte hatten nach meiner Auffassung ein paar Probleme:

Das ganze sind ja alles semi-empirische Näherungen.

- Die Parameter für die Berechnung für T<0 waren nicht vollständig implementiert.
- Für die Berechnung der absoluten Feuchte wurde eine andere Näherung als beim Taupunkt verwendet

Ich das ganze mal aufgeräumt und die Parameter aus Wikipedia genommen mit nachvollziehbarer Quellenangabe. Ausserdem habe ich die Berechnung des Partialdrucks in eine eigene Routine ausgelagert, die dann auch von anderen Wettermodulen aufrufbar ist.

Die ganze Eventlogik ist nicht angetastet.

- holger

Ich schlage vor Du schreibst, so fern noch nicht geschehen, dem Joachim noch eine kurze Mail mit Link zum Thread.




Grüße
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

mahowi

Zitat von: stgeran am 24 Oktober 2017, 13:00:15
Anfängerfrage: wie spiele ich den patch ein?
Im FHEM-Verzeichnis, in dem die Module sind (meist /opt/fhem/FHEM) patch -p0 -i 98_dewpoint.patch eingeben. Natürlich entweder als User fhem oder mit sudo als root.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

hotbso

Zitat von: CoolTux am 24 Oktober 2017, 13:03:22
Ich schlage vor Du schreibst, so fern noch nicht geschehen, dem Joachim noch eine kurze Mail mit Link zum Thread.

Ich habe ihm gerade eine PM geschickt.

stgeran

Ok, d.h. runterladen in verzeichnis der xxx.pm copieren und dann die Befehlszeile ausführen. Kann das patch dann gelöscht werden, oder kann es einfach im Verzeichnis bleiben?
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

mahowi

Du kannst hinter dem -i auch den Pfad zum Patch mitgeben, also z.B. sudo patch -p0 -i /home/pi/Downloads/98_dewpoint.patch
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

sash.sc

Ist der Patch schon eingespielt worden?

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

hotbso

Nein, habe Joachim eine PM geschickt und mir das auf Wiedervorlage gelegt.

Omega

Vor einiger Zeit hatte ich ein kleines Problem mit dewpoint.
Geholfen hatte mir der Hinweis von Rudolf (s.a. https://forum.fhem.de/index.php/topic,21458.msg492235.html#msg492235):
ZitatDewpoint ist ein altes FHEM Modul, und greift auf die Readings noch direkt mit $dev->{READINGS}{$temp_name}{VAL} zu.
Sollte in ReadingsNum($devName, $temp_name, 20) geaendert werden.

Hast du das bereits auch berücksichtigt? Falls nicht: wäre schön, wenn du das bei Gelegenheit auch gleich mit übernimmst. Danke.

LG
Holger


NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

hotbso

Der Patch zur Berechnung ist jetzt drin. Um die anderen Sachen kümmere ich demnächst. (Bin jetzt Maintainer von 98_dewpoint).

n0bbi

Cool, freut mich, dass dieses nützliche Modul weitergepflegt wird. Vielen Dank! :)

till24

Hallo zusammen,

es gab vor einiger Zeit (2-3 Wochen) ein offizielles Update für das dewpoint modul. Ich vermute mal, dass ich den Patch nicht ausführen muss, wenn ich das "offizielle" Update gemacht habe?
Leider sind meine Werte für die absoulte Feuchte seit dem Update auf ganze Zahlen gerundet -  es werden also keine Nachkommastellen mehr angezeigt. Hat diesen Fehler noch jemand?

Fixel2012

Bei mir hat werden komma zahlen angezeigt.

dewpoint 3.6
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

hotbso

Nein, den Patch brauchst du nicht mehr zu installieren. Am Montag werde ich eine neue Version Einchecken und dann noch Mal die absolute Feuchte kontrollieren.
- Holger

till24

super, danke, dann warte ich erstmal den Montag ab!

hotbso

Die neue Version ist jetzt im Repository, kommt also ab morgen mit UPDATE.
Es konnte tatsächlich sein, dass wg. eines gerundeten Zwischenergebnisses die abs. Feute oft (oder immer) ganzzahlig war.
Bitte auch https://forum.fhem.de/index.php/topic,21458.0.html beachten.

till24

Ich habe das Update installiert, bekomme aber leider weiterhin nur ganzzahlige Werte für dewpoint und absFeuchte. Ich habe auch schon die dewpoint devices gelöscht und neu angelernt, leider ohne Erfolg..

hotbso

Hhm, dann setze doch bitte mal in einem Dewpoint Device das Attribut verbose auf 5 und poste ein Stück aus dem Log.

till24

Hier der Auszug aus dem Log (wiederholt sich dann so):


2017.12.05 11:13:45 4: dewpoint_notify: cmd_type=dewpoint devname=XMI_198d00015273g dewname=absFeuchte_Badezimmer, dev=XMI_198d00015273g, dev_regex=XMI_198d00015273g temp_name=temperature hum_name=humidity
2017.12.05 11:13:45 5: dewpoint_notify: s='battery: 2.965'
2017.12.05 11:13:45 5: dewpoint_notify: evName='battery:' val=2.965'
2017.12.05 11:13:45 5: dewpoint_notify: s='batterystate: ok'
2017.12.05 11:13:45 5: dewpoint_notify: evName='batterystate:' val=ok'
2017.12.05 11:13:45 5: dewpoint_notify: s='temperature: 17.22'
2017.12.05 11:13:45 5: dewpoint_notify: evName='temperature:' val=17.22'
2017.12.05 11:13:45 5: dewpoint_notify temperature! dev=XMI_198d00015273g, temp_name=temperature, temp=17.22
2017.12.05 11:13:45 5: dewpoint_notify: s='humidity: 66.79'
2017.12.05 11:13:45 5: dewpoint_notify: evName='humidity:' val=66.79'
2017.12.05 11:13:45 5: dewpoint_notify humidity! dev=XMI_198d00015273g, hum_name=humidity, hum=66.79
2017.12.05 11:13:45 5: dewpoint_notify: s='pressure: 101.604'
2017.12.05 11:13:45 5: dewpoint_notify: evName='pressure:' val=101.604'
2017.12.05 11:13:45 5: dewpoint timeout=1
2017.12.05 11:13:45 5: dewpoint_notify: dewpoint=11
2017.12.05 11:13:45 5: dewpoint absFeuchte= 10
2017.12.05 11:13:45 5: dewpoint_notify: current=11

hotbso

Ich kann mir das ganze nur so erklären, dass die Funktion "round" bei Dir anders definiert ist. Hast Du vielleicht eine eigene in 99_MyUtils.pm ?
"round" wird innerhalb von FHEM überall verwendet, tritt das Problem nur beim dewpoint auf ?

Nur noch mal zur Vollständigkeit:
Die erste Zeile vom 98_dewpoint.pm ist: # $Id: 98_dewpoint.pm 15551 2017-12-04 09:04:37Z hotbso $

oder ?



hotbso

Gib doch mal im command fenster ein:
{Log(1, round(12.345, 1));;}

Steht 12.3 im log ?

mahowi

#24
Bei mir steht 12 im Log.

Aus der Doku zu Math::Round:
Zitatround LIST

Rounds the number(s) to the nearest integer. In scalar context, returns a single value; in list context, returns a list of values. Numbers that are halfway between two integers are rounded "to infinity"; i.e., positive values are rounded up (e.g., 2.5 becomes 3) and negative values down (e.g., -2.5 becomes -3).

Du müsstest nearest verwenden:
Zitatnearest TARGET, LIST

Rounds the number(s) to the nearest multiple of the target value. TARGET must be positive. In scalar context, returns a single value; in list context, returns a list of values. Numbers that are halfway between two multiples of the target will be rounded to infinity. For example:

nearest(10, 44) yields 40
nearest(10, 46) 50
nearest(10, 45) 50
nearest(25, 328) 325
nearest(.1, 4.567) 4.6
nearest(10, -45) -50
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

igami

Aus der 99_Utils.pm

sub
round($$)
{
  my($v,$n) = @_;
  return sprintf("%.${n}f",$v);
}
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

till24

bei mir steht auch 12 im Log. Ich habe nichts an der 99_Utils.pm geändert.

hotbso

Dann scheint doch irgendwas das round aus 99_Utils zu überschreiben.
fhem.pl nutzt selber jede Menge round mit 2 Argumenten, dass kann doch dann nur das aus 99_Utils.pm sein, oder ?

sash.sc

Zitat von: hotbso am 05 Dezember 2017, 16:45:01
Gib doch mal im command fenster ein:
{Log(1, round(12.345, 1));;}

Steht 12.3 im log ?
Beim mir 12.3

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

hotbso

Die mit der 12 können ja mal folgendes eingeben, dann kommt raus wo "round" definiert ist.

{use B;; my $o=B::svref_2object(\&round);; Log(1, $o->FILE);;}

Bei mir kommt das:

2017.12.05 19:28:19 1: ./FHEM/99_Utils.pm

till24

bei mir kommt das:

2017.12.05 19:42:09 1: /usr/share/perl5/Math/Round.pm

hotbso

Zitat von: till24 am 05 Dezember 2017, 19:45:30
bei mir kommt das:

2017.12.05 19:42:09 1: /usr/share/perl5/Math/Round.pm
Das heißt ja dann wohl:

Wenn man ein Modul benutzt, das Math::Round importiert, torpediert das andere Module inklusive fhem.pl.


Gesendet von meinem Nexus 5X mit Tapatalk


mahowi

Bei mir ist es auch
/usr/share/perl5/Math/Round.pm


Math::Round wird von mehreren Modulen genutzt:
pi@raspberrypi:/opt/fhem/FHEM $ grep Math\:\:Round *
00_SIGNALduino.pm:#use Math::Round qw();
14_SD_WS09.pm:    #use Math::Round qw/nearest/;
31_MilightDevice.pm:#use Math::Round ();
31_MilightDevice.pm:  #return Math::Round::round($number);
31_MilightDevice.pm:  <p>Requires perl module Math::Round</p>
45_Plugwise.pm:#use Math::Round;
71_XiaomiSmartHome_Device.pm:use Math::Round qw/nearest/;
71_XiaomiSmartHome.pm:eval "use Math::Round";
98_MediaList.pm:use Math::Round qw/round/;


Meiner Meinung nach ist es etwas unglücklich, interne Funktionen genauso wie Perl-eigene zu benennen.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

hotbso

Bei den meisten ist es kommentiert,

Über bleiben
pi@raspberrypi:/opt/fhem/FHEM $ grep Math\:\:Round *
71_XiaomiSmartHome_Device.pm:use Math::Round qw/nearest/;
71_XiaomiSmartHome.pm:eval "use Math::Round";
98_MediaList.pm:use Math::Round qw/round/;


Die 71_Xiaomi* sind nicht Teil des "offiziellen" Release. Bleibt eigentlich nur 98_MediaList.pm .

@till24: Benutzt Du eins von diesen Modulen ?

till24

Ja, ich benutze die Xiaomi Module..

hotbso

Ich habe in den entsprechenden Foren einen Hinweis hinterlassen.

Gesendet von meinem Nexus 5X mit Tapatalk


mahowi

#36
Ich sehe es nach wie vor als problematisch, das intern eine Funktion eines offiziellen Perl-Moduls überschrieben wird. Da nirgendwo daraufhin gewiesen wird, kann es hier auch zu unvorhersehbaren Problemen mit eigenen Routinen in z.B. 99_myUtils.pm kommen.

Vielleicht kann Rudi was dazu sagen, er ist Maintainer der 99_Utils.pm.

Edit: Ich habe mal einen neuen Thread dazu aufgemacht: [99_Utils.pm] round() in Konflikt mit Math::Round
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

igami

Bei mir wird für dewpoint zwar ein Event erzeugt, jedoch werden die Werte in der Detailansicht nicht aktualisiert und DbLog bekommt davon auch nichts mit.
Das gleiche Problem gab es schon beim powerMap Modul. Die Lösung ist hier: Events aus X_Notify() heraus erzeugen
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

hotbso


hotbso

Hhm, das Modul lag ja lange Jahre ziemlich brach.
Die Funktion deviceEvents aus dem Zitat wird hier noch gar nicht verwendet (wollte ich demnächst mal einbauen). Von daher passt das Beispiel aus dem Link (glaube ich zumindest) nicht so ganz. Muss ich mir noch mal genau ansehen.

hotbso

Zitat von: igami am 14 Dezember 2017, 16:42:38
Bei mir wird für dewpoint zwar ein Event erzeugt, jedoch werden die Werte in der Detailansicht nicht aktualisiert und DbLog bekommt davon auch nichts mit.
Das gleiche Problem gab es schon beim powerMap Modul. Die Lösung ist hier: Events aus X_Notify() heraus erzeugen
Ich habe das Verfahren aus dem Link jetzt mal sinngemäß übernommen.
Events gibt es jetzt nur noch, wenn das Reading dewpoint durch die Filter event-on-(update|change)-reading durchgeht.

Updates im Webinterface sind bei mir seit einigen Wochen generell sehr problematisch und funktionieren nur sporadisch oder zeitlich um Minuten verzögert. Ich vermute, dass das Webinterface hier auch beteiligt ist.

DbLog benutze ich nicht, bitte teste die anhängende Version doch mal.

hotbso

Habe die Version soeben eingecheckt. Bei mir geht auch Dblog.

Mr. Flash

Hallo Holger,

vielen Dank für die neue Version von 98_dewpoint.pm

Leider scheint sich da ein kleiner Fehler eingeschlichen zu haben, bei mir steht im Logfile:

2017.12.30 11:04:47 3: dewpoint_notify: alarm OFF
2017.12.30 11:07:21 3: dewpoint_notify: alarm ON
Undefined subroutine &main::Logr called at ./FHEM/98_dewpoint.pm line 386.


In Zeile 386 von "98_dewpoint.pm" steht dann anstelle von "Log3" ein "Logr", diese Funktion wird natürlich nicht gefunden.
Könntest Du das bitte korrigieren und ein Update bereitstellen? Vielen Dank.

Grüße,
Nik
RPi 3B+; Buster; FHEM 5.9; S.USV basic; BME280; TSL25911.
HM: CFG-LAN (0.965),CFG-USB-2,CC-RT-DN,Dis-(EP-)WM55,ES-PMSw1-Pl,ES-TX-WM,LC-Dim1T-FM,LC-Sw1-FM,LC-Sw2-FM,MOD-RPI-PCB,OU-CFM-Pl,RC-Dis-H-x-EU,SCI-3-FM,Sec-MDIR-2,-RHS,-SD,-SC-2,-SCo,-Sir-WM,-TiS,-WDS-2,TC-IT-WM-W-EU,WDS10-TH-O,WDS30-OT2-SM

hotbso

Hallo Nik,

peinlich 8-( .

Habe das korrigiert und eingecheckt.

Gruss
Holger

Mr. Flash

RPi 3B+; Buster; FHEM 5.9; S.USV basic; BME280; TSL25911.
HM: CFG-LAN (0.965),CFG-USB-2,CC-RT-DN,Dis-(EP-)WM55,ES-PMSw1-Pl,ES-TX-WM,LC-Dim1T-FM,LC-Sw1-FM,LC-Sw2-FM,MOD-RPI-PCB,OU-CFM-Pl,RC-Dis-H-x-EU,SCI-3-FM,Sec-MDIR-2,-RHS,-SD,-SC-2,-SCo,-Sir-WM,-TiS,-WDS-2,TC-IT-WM-W-EU,WDS10-TH-O,WDS30-OT2-SM