Anpassung 14_SD_WS.pm bei sehr hoher Luftfeuchte

Begonnen von DerD, 09 November 2026, 09:32:58

Vorheriges Thema - Nächstes Thema

DerD

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;
    }

Gruß,
Dieter

JoWiemann

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
Jörg Wiemann

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

DerD

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.
Gruß,
Dieter

JoWiemann

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
Jörg Wiemann

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

DerD

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;
    }
}
Gruß,
Dieter

Ralf9

FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

DerD

Gruß,
Dieter

Ralf9

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;
}
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7