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
Was hast du denn genau aufgeräumt?
Gesendet von meinem SM-T560 mit Tapatalk
Sowohl beim Taupunkt als auch bei der Abs Feuchte wurde der Dampfdruck berechnet, allerdings mit unterschiedlichen Formeln und unterschiedlichen Parametern. Das habe ich vereinheitlicht.
Anfängerfrage: wie spiele ich den patch ein?
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
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.
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.
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?
Du kannst hinter dem -i auch den Pfad zum Patch mitgeben, also z.B. sudo patch -p0 -i /home/pi/Downloads/98_dewpoint.patch
Ist der Patch schon eingespielt worden?
Gesendet von meinem E6653 mit Tapatalk
Nein, habe Joachim eine PM geschickt und mir das auf Wiedervorlage gelegt.
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
Der Patch zur Berechnung ist jetzt drin. Um die anderen Sachen kümmere ich demnächst. (Bin jetzt Maintainer von 98_dewpoint).
Cool, freut mich, dass dieses nützliche Modul weitergepflegt wird. Vielen Dank! :)
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?
Bei mir hat werden komma zahlen angezeigt.
dewpoint 3.6
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
super, danke, dann warte ich erstmal den Montag ab!
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 (https://forum.fhem.de/index.php/topic,21458.0.html) beachten.
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..
Hhm, dann setze doch bitte mal in einem Dewpoint Device das Attribut verbose auf 5 und poste ein Stück aus dem Log.
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
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 ?
Gib doch mal im command fenster ein:
{Log(1, round(12.345, 1));;}
Steht 12.3 im log ?
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
Aus der 99_Utils.pm
sub
round($$)
{
my($v,$n) = @_;
return sprintf("%.${n}f",$v);
}
bei mir steht auch 12 im Log. Ich habe nichts an der 99_Utils.pm geändert.
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 ?
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
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
bei mir kommt das:
2017.12.05 19:42:09 1: /usr/share/perl5/Math/Round.pm
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
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.
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 ?
Ja, ich benutze die Xiaomi Module..
Ich habe in den entsprechenden Foren einen Hinweis hinterlassen.
Gesendet von meinem Nexus 5X mit Tapatalk
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 (https://forum.fhem.de/index.php/topic,80656.msg726962.html#msg726962)
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 (https://forum.fhem.de/index.php/topic,64716.msg561943.html#msg561943)
Baue ich demnächst ein.
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.
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 (https://forum.fhem.de/index.php/topic,64716.msg561943.html#msg561943)
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.
Habe die Version soeben eingecheckt. Bei mir geht auch Dblog.
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
Hallo Nik,
peinlich 8-( .
Habe das korrigiert und eingecheckt.
Gruss
Holger
Danke!