Hallo zusammen,
physikalisch korrekt wird derzeit bei >100% LF ein Fehler zurückgegeben. Nun haben die Sensoren ja aber eine Toleranz, und in unserer Nebelecke sagt mein Sensor heute 101% LF. Also eigentlich alles korrekt und auch korrekt mir eine Fehlermeldung zuzuwerfen.
Ich kann das natürlich bei mir anpassen - bis zum nächsten Update. Wäre es denn möglich das auf 105% aufzuweiten?
Also den Code im Modul statt
if ($hum > 100) {
Log3 $name, 3, "$ioname: SD_WS_Parse $deviceCode - ERROR humidity $hum";
return "";
}
ein
if ($hum > 105) {
Log3 $name, 3, "$ioname: SD_WS_Parse $deviceCode - ERROR humidity $hum";
return "";
} elsif ($hum > 100) {
$hum = 100;
}
Hallo,
ich würde hier keine Fallunterscheidung machen. Im Log den Fehler dokumentieren und 100 zurückgeben. Ansonsten fallen weiteren Berechnungen, wie z.B. der Taupunkt auf die Nase.
Grüße Jörg
Hallo Jörg,
ich verstehe dann nicht so ganz wie du es meinst.
Aktuell wird ja nur ein Fehler geloggt aber eben kein Wert, auch nicht die 100, zurückgegeben.
Zitat von: DerD am 11 November 2026, 16:45:24Hallo Jörg,
ich verstehe dann nicht so ganz wie du es meinst.
Aktuell wird ja nur ein Fehler geloggt aber eben kein Wert, auch nicht die 100, zurückgegeben.
Hallo Dieter,
ich habe jetzt ins Modul geschaut und würde den Code wie folgt ändern:
if (defined $hum) {
if ($hum < 1 || $hum > 100) {
Log3 $name, 3, "$ioname: SD_WS_Parse $deviceCode - ERROR humidity $hum";
return -1;
}
}
Du kannst dann für Deinen speziellen Fall ein userReading definieren, dass den Wert auf -1 auf 100 korrigiert. Grundsätzlich deuten Werte außerhalb des Intervalls [1..100] auf einen fehlerhaften Sensor hin. Von daher würde ich hier keine Toleranz einbauen wollen. Ist aber nur meine Meinung.
Grüße Jörg
Hallo Jörg,
ich würde das anders schreiben, bei einem Sensor für LF deuten Werte über 100 oder unter 0 auf einen defekten oder dummen Sensor hin. Ich habe leider zweiteres. Da hat einer für die Firmware einfach nicht aufgepasst und lässt größere Werte durch. Wenn man die Toleranzen der Sensoren von +/-5 oder 10% kennt, heißt das ja praktisch nichts.
Dein Vorschlag unterscheidet nun leider nicht zwischen zu tief (Null darf zudem ja dennoch sein) und zu hoch, wäre daher folgendes Ansatz möglich?
if (defined $hum) {
if ($hum < 0) {
Log3 $name, 3, "$ioname: SD_WS_Parse $deviceCode - ERROR humidity $hum";
return -1;
}
elsif ($hum > 100) {
Log3 $name, 3, "$ioname: SD_WS_Parse $deviceCode - ERROR humidity $hum";
return 101;
}
}
Welche ProtokollID hat der Sensor?
Gruß Ralf
37
Da davon bis jetzt nur die ID 37 betroffen ist müsste es reichen dies nur für die ID 37 einzubauen.
In der 14_SD_WS.pm:
if ($protocol eq "37") { # Bresser 7009994
...
$hum = SD_WS_binaryToNumber($bitData,24,31);
if ($hum > 100 && $hum < 106) {
$hum = 100;
}