Erweiterung einer HMConfig_AskSinPPCustom.pm Datei für einen SDS011

Begonnen von ritchie, 02 Mai 2026, 20:07:57

Vorheriges Thema - Nächstes Thema

ritchie

Hallo Zusammen,

ich habe ein Board mit der Software "HB-UNI-Sen-DUST.ino" erstellt und im Debug Mode erscheinen auch die korrekten Werte:

ZitatPM25: 34
PM10: 113

Ich habe für die Einbindung die Datei "HMConfig_AskSinPPCustom.pm" und "HMMsg.pm" in FHEM eingebunden.

Ich habe in der Datei ""HMConfig_AskSinPPCustom.pm" folgende Definition eingefügt:

$HMConfig::culHmModel{"F314"} = {name  => "HB-UNI-Sen-DUST",st => "custom", cyc   => '',rxt   => '', lst   => '', chn   => "01" };
$customMsg{"HB-UNI-Sen-DUST"} = sub {
  my ($msg, $hash) = @_;

  main::Log 1,"HB-UNI-Sen-DUST Executed";

  my $pm25_avg = $msg->payloadWord(0) / 10;
  my $pm10_avg = $msg->payloadWord(2) / 10;
  my $pm25_max = $msg->payloadWord(4) / 10;
  my $pm10_max = $msg->payloadWord(6) / 10;
  my $pm25_min = $msg->payloadWord(8) / 10;
  my $pm10_min = $msg->payloadWord(10) / 10;

  my @evtEt=();
  my $device = main::CUL_HM_id2Hash($msg->from);

  push @evtEt,[$device,1,"pm10_min:".$pm10_min];
  push @evtEt,[$device,1,"pm10_avg:".$pm10_avg];
  push @evtEt,[$device,1,"pm10_max:".$pm10_max];
  push @evtEt,[$device,1,"pm25_min:".$pm25_min];
  push @evtEt,[$device,1,"pm25_avg:".$pm25_avg];
  push @evtEt,[$device,1,"pm25_max:".$pm25_max];

  return @evtEt;
};

Wenn die das Teil mit Pairing in FHEM einbinde, bekomme ich das Teil auch in FHEM zu sehen.
Wenn ich dann aber getConfig() mache, bekomme ich nicht die entsprechen Register für die Messwerte zu sehen.

Du darfst diesen Dateianhang nicht ansehen.

Ebenso sehe ich im Logfile keinen Eintrag "HB-UNI-Sen-DUST Executed" der mir sagen würde, das meine Erweiterung überhaupt
durchlaufen wird.

Kennt sich jemand mit der Erweiterung der "HMConfig_AskSinPPCustom.pm" aus und kann mir sagen, wo mein Fehler ist.

Viele Grüße
R.
IPU662  IPFIRE & FHEM (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD / Ubuntu  (1Wire - USB) - Produktiv

ritchie

Hi,

erste Fehler behoben. Ich bekomme jetzt auch die korrekten Eigenschaften. Muss das aber noch genau prüfen.
Zugriffsberechtigung waren unter anderem falsch.

Viele Grüße
R.
IPU662  IPFIRE & FHEM (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD / Ubuntu  (1Wire - USB) - Produktiv

papa

Hi.

Gut das Du Dir erst mal selber helfen konntest. Das ist aber alles schon ganz schön lange her. Aber wenn es noch probleme gibt, werde ich versuchen zu helfen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

ritchie

Hi,

habe dann in der Nacht so viel geändert, das es morgens plötzlich nicht mehr lief.
So muss ich das ganze jetzt nochmals von vorne machen.
Kein Problem. Das Problem liegt wohl zwischen meinen Ohren ;-)

Viele Grüße
R.
IPU662  IPFIRE & FHEM (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD / Ubuntu  (1Wire - USB) - Produktiv

ritchie

Hallo papa,

ich muss nochmals auf hoffentlich Dein gutes Gedächnis zurückgreifen. Ich versuche nochmals einen Anlauf.
Ich habe jetzt auch Chat GPT dazu einiges gefragt, bin mir aber nicht sicher, ob das alles stimmt, was von da kommt.
Hier mein Code:

$HMConfig::culHmModel{"F314"} = {name  => "HB-UNI-Sen-DUST",st => "custom", cyc  => '',rxt  => '', lst  => '', chn  => "01" };
# Nicht "$customMsg{"HB-UNI-Sen-DUST"}
$customMsg{"F314"} = sub {
  my ($msg, $hash) = @_;

  main::Log 1,"HB-UNI-Sen-DUST Executed";

  return () unless $msg->isValues;    # Remark from chatgpt

  my $pm25_avg = $msg->payloadWord(0) / 10;
  my $pm10_avg = $msg->payloadWord(2) / 10;
  my $pm25_max = $msg->payloadWord(4) / 10;
  my $pm10_max = $msg->payloadWord(6) / 10;
  my $pm25_min = $msg->payloadWord(8) / 10;
  my $pm10_min = $msg->payloadWord(10) / 10;

  my @evtEt=();
  my $device = main::CUL_HM_id2Hash($msg->from); 
  push @evtEt,[$device,1,"pm10_min:".$pm10_min];
  push @evtEt,[$device,1,"pm10_avg:".$pm10_avg];
  push @evtEt,[$device,1,"pm10_max:".$pm10_max];
  push @evtEt,[$device,1,"pm25_min:".$pm25_min];
  push @evtEt,[$device,1,"pm25_avg:".$pm25_avg];
  push @evtEt,[$device,1,"pm25_max:".$pm25_max];
 
  return @evtEt;
};

Hierzu hätte ich folgende Fragen.

- Muss in $CustomMsg die DeviceID also "F314" stehen oder der der Devicename "HB-UNI-Sen-DUST".
  Chatgpt meint, das der Aufruf über die ID erfolgt. Wenn ich mir jedoch andere Definitionen
  in der Datei ansehen, scheint das nicht zu stimmen, da hier der Devicename steht.

- Die Zeile "return () unless $msg->isValues;" hat mir Chatgpt empfohlen. Wäre die O.k.

- Muss ich die Datei "10_CUL_HM.pm" entsprechend erweitern ?
  Das Modul wird geladen, aber ich erhalte nie die Meldung ""HB-UNI-Sen-DUST Executed".

- Gibt es eine Erklärung, was genau in der Definition von
  $HMConfig::culHmModel{"F314"} = {name  => "HB-UNI-Sen-DUST",st => "custom", cyc  => '',rxt  => '', lst  => '', chn  => "01" }; 
Stehen muss, damit ich prüfen kann, ob meine Definition stimmt.

In meinem Device steht derzeit
// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0xF3, 0x14, 0x01},          // Device ID
  "JPDUST0001",                // Device Serial
  {0xF3, 0x14},                // Device Model
  0x10,                        // Firmware Version
  0x53,    // Device Type 0x53 oder as::DeviceType::THSensor
  {0x01, 0x01}                // Info Bytes
};

Viele Grüße
R.
IPU662  IPFIRE & FHEM (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD / Ubuntu  (1Wire - USB) - Produktiv

ritchie

Hallo Zusammen,

nach einigen Tests und Änderungen der Datei "HMConfig_AskSinPPCustom.pm" habe ich jetzt zumindestens einen stabile Anzeige der Eigenschaften in FHEM. Leider immer noch nicht die gewünschten Eigenschaften von PM25 und PM10.

Hier wird als Model jetzt korrekt der "HB-UNI-Sen-DUST" auch nach dem getConfig angezeigt.
Du darfst diesen Dateianhang nicht ansehen.
Hier jetzt der aktuelle Ausschnitt der "HMConfig_AskSinPPCustom.pm" für mein Device:

$HMConfig::culHmModel{"F314"} = {name  => "HB-UNI-Sen-DUST",st => "custom", cyc=>'00:10',rxt   => '', lst   => '', chn=>"value:1:1" };
$HMConfig::culHmRegChan{"F31401"} = $HMConfig::culHmRegType{custom_dimmer};
$HMConfig::culHmChanSets{"F31401"} = "";
$HMConfig::culHmRegDefine{"F31401"} = {};

# Nicht "$customMsg{"HB-UNI-Sen-DUST"}

$customMsg{"F314"} = sub {
  my ($msg, $hash) = @_;

main::Log 1,"HB-UNI-Sen-DUST Executed";   

  my $pm25_avg = $msg->payloadWord(0) / 10;
  my $pm10_avg = $msg->payloadWord(1) / 10;
  my $pm25_max = $msg->payloadWord(2) / 10;
  my $pm10_max = $msg->payloadWord(3) / 10;
  my $pm25_min = $msg->payloadWord(4) / 10;
  my $pm10_min = $msg->payloadWord(5) / 10;

  my @evtEt=();
  my $device = main::CUL_HM_id2Hash($msg->from); 
  push @evtEt,[$device,1,"pm10_min:".$pm10_min];
  push @evtEt,[$device,1,"pm10_avg:".$pm10_avg];
  push @evtEt,[$device,1,"pm10_max:".$pm10_max];
  push @evtEt,[$device,1,"pm25_min:".$pm25_min];
  push @evtEt,[$device,1,"pm25_avg:".$pm25_avg];
  push @evtEt,[$device,1,"pm25_max:".$pm25_max];
 
  return @evtEt;
};

# -------

sub HMConfig_AskSinPPCustom_Initialize ($) {
  main::Log 1,"Rerun Literal reverse mapping";
  foreach my $rN  (keys %HMConfig::culHmRegDefine){ #create literal inverse for fast search
    if ($HMConfig::culHmRegDefine{$rN}{lit}){# literal assigned => create inverse
      foreach my $lit (keys %{$HMConfig::culHmRegDefine{$rN}{lit}}){
        $HMConfig::culHmRegDefine{$rN}{litInv}{$HMConfig::culHmRegDefine{$rN}{lit}{$lit}}=$lit;
      }
    }
  }
};

$main::modules{HMConfig_AskSinPPCustom}{Initialize} = \&HMConfig_AskSinPPCustom_Initialize;

Einige Codeänderungen habe ich mit Hilfe von Chatgpt vorgenommen, damit die perl-Fehler des
Moduls im Logfile nicht mehr auftauchen.

Generell wird jedoch die Init-Routine des perl-Moduls und die CustomMsg nicht durchlaufen.
Chatgpt ist der festen Auffassung das hier der Eintrag "$customMsg{"F314"}" zu verwenden ist,
jedoch verwenden alle anderen Homebrew Einträge den jeweiligen Modulname "$customMsg{"HB-UNI-Sen-DUST"}"

Das muss ich noch weiter austesten.

Seltsam ist auch, das laut Aussage von Chatgpt das Pairing nicht korrekt abgeschlossen sein soll,
da in der Eigenschaft "cfgState" noch "Updating" steht. Ich habe noch Fensterkontakte, welche ich mit SinAsk
umgebaut habe, welche korrekt laufen und auch im "cfgState" noch "Updating" stehen haben.

Hier chn=>"value:1:1"  muss wohl Anfangs und EndChannel stehen, Wobei ich den "Channelname" hier mal mit Value belegt habe, wie ich Ihn bei anderen Einträgen auch gesehen habe.

Ich bekomme aber im FHEM nach dem Pairing immer noch diese Fehlermeldungen

2026.05.10 09:44:20 1: PERL WARNING: Use of uninitialized value in string comparison (cmp) at /opt/fhem/FHEM/10_CUL_HM.pm line 4596.
2026.05.10 09:44:20 1: PERL WARNING: Use of uninitialized value in string ne at /opt/fhem/FHEM/10_CUL_HM.pm line 4604.
2026.05.10 09:44:20 1: PERL WARNING: Use of uninitialized value $h in string ne at /opt/fhem/FHEM/10_CUL_HM.pm line 4604.

Viele Grüße
R.



IPU662  IPFIRE & FHEM (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD / Ubuntu  (1Wire - USB) - Produktiv