Autor Thema: Modul für HB-UNI-Sen-CAP-MOIST  (Gelesen 1267 mal)

Offline joffi

  • New Member
  • *
  • Beiträge: 9
Modul für HB-UNI-Sen-CAP-MOIST
« am: 14 Juli 2019, 23:43:38 »
Hallo,
habe einen DIY Sensor für 7x Bodenfeuchtemessung zusammengebaut.
https://technikkram.net/2019/05/anleitung-diy-feuchtigkeitssensor-fuer-gartenbewaesserung-bausatz-homematic
Der Sensor meldet sich bei FHEM als HM_F31103 und Modell "unknown". Für HOMEMATIC hat Jerome Pech ein Addon geschrieben um es dort einzubinden.
Gibt es ein Modul, das man anpassen kann (dachte da an HMConfig_SenTHPL.pm).
Hat einer Erfahrung mit so etwas und kann mir einen Hinweis geben, wo ich mich einlesen kann, wie das ganze funktioniert?
Liebe Grüße

Offline papa

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1543
Antw:Modul für HB-UNI-Sen-CAP-MOIST
« Antwort #1 am: 15 Juli 2019, 20:45:34 »
Bin bin gerade dabei, einige Geräte in dem AskSin++ Addon zu integrieren. Habe mal den aktuellen Stand eingecheckt. Der HB-UNI-Sen-CAP-MOIST-T ist da mit drin. Aber nur mit einen Channel. FHEM unterstützt die variable Anzahl der Kanaäle leider nicht. Bitte das ReadMe beachten und entspreched in FHEM installieren.

https://github.com/pa-pa/AskSinPP/tree/master/examples/custom/contrib/FHEM
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Offline joffi

  • New Member
  • *
  • Beiträge: 9
Antw:Modul für HB-UNI-Sen-CAP-MOIST
« Antwort #2 am: 15 Juli 2019, 23:18:03 »
Hi,
nett dass du dich so schnell meldest.
Mein Sensor hat das Model "F311". Nachdem ich es in der HMConfig_AskSin...pm angepasst habe wird der Sensor auch definiert. Allerdings bekomme ich keine Werte.
Hier die Ausgabe des seriellen Monitors vom Arduino:
AskSin++ V4.1.0 (Jul 14 2019 18:40:57)
Address Space: 32 - 319
CC init1
CC Version: 14
 - ready
iVcc: 3372
eVcc: 3753
Config Freq: 0x21661A
ID: F31103  Serial: JPCAPM0003
*LOW BAT Limit: 22
*Wake-On-Radio: 0
*Sendeintervall: 30
Config changed List1
*HIGHValue (#1): 830
*LOWValue  (#1): 420
Config changed List1
*HIGHValue (#2): 830
*LOWValue  (#2): 420
Config changed List1
*HIGHValue (#3): 830
*LOWValue  (#3): 420
Config changed List1
*HIGHValue (#4): 830
*LOWValue  (#4): 420
Config changed List1
*HIGHValue (#5): 830
*LOWValue  (#5): 420
Config changed List1
*HIGHValue (#6): 830
*LOWValue  (#6): 420
Config changed List1
*HIGHValue (#7): 830
*LOWValue  (#7): 420
+Sensor    (#7) V: 830
+Humidity  (#7) %: 0
+Battery   (#7) V: 38
<- 0E 01 84 70 F31103 000000 00 00 00 07 26  - 3311
+Sensor    (#6) V: 833
+Humidity  (#6) %: 0
+Battery   (#6) V: 38
<- 0E 02 84 70 F31103 000000 00 00 00 06 26  - 3954
+Sensor    (#5) V: 840
+Humidity  (#5) %: 0
+Battery   (#5) V: 38
<- 0E 03 84 70 F31103 000000 00 00 00 05 26  - 4595
+Sensor    (#4) V: 787
+Humidity  (#4) %: 11
+Battery   (#4) V: 38
<- 0E 04 84 70 F31103 000000 00 00 0B 04 26  - 5238
+Sensor    (#3) V: 799
+Humidity  (#3) %: 8
+Battery   (#3) V: 38
<- 0E 05 84 70 F31103 000000 00 00 08 03 26  - 5879
+Sensor    (#2) V: 802
+Humidity  (#2) %: 7
+Battery   (#2) V: 38
<- 0E 06 84 70 F31103 000000 00 00 07 02 26  - 6522
+Sensor    (#1) V: 806
+Humidity  (#1) %: 6
+Battery   (#1) V: 38
<- 0E 07 84 70 F31103 000000 00 00 06 01 26  - 7163
Für die 7 Chanels wird also immer gesendet hier für Channel 1
<- 0E 07 84 70 F31103 000000 00 00 06 01 26  - 7163
Kannst Du mir sagen, was diese Werte bedeuten? Das einzige was mir klar ist, ist F31103 (ID des Senders)
Liebe Grüße

Offline papa

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1543
Antw:Modul für HB-UNI-Sen-CAP-MOIST
« Antwort #3 am: 16 Juli 2019, 07:48:06 »
Sicherlich weil das Addon einen CAP-MOST-T implementiert. Der hat im Kanal 1 einen Temperatursensor und dadurch auch ein unterschiedliches Nachrichtenformat. Du kannst nicht einfach das Model ändern und glaucb dass dann alles wie von Hexenhand funktioniert.
Außerdem scheint für jeden Kanal eine extra Nachricht gesendet zu werden. Das ist bei dem aktuellen Sketch auch nicht mehr der Fall.
Welche Version des Sketches verwendest Du denn ?
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Offline joffi

  • New Member
  • *
  • Beiträge: 9
Antw:Modul für HB-UNI-Sen-CAP-MOIST
« Antwort #4 am: 17 Juli 2019, 01:16:00 »
Hallo,
habe heute den aktuellen Sketch von Jerome auf die 7 Analog-Kanäle angepasst und hochgeladen. Jetzt sendet er nur noch eine Zeile mit 8 Kanälen (1. ist für die Batterie. Dann habe ich dein Modul hergenommen, und F312   mit Temperatursensor auf F311 kopiert und angepasst (obwohl ich nicht so genau wusste was ich tat:)).###########################
## Eingefügt FP 16.07.2019
###########################
$HMConfig::culHmModel{"F311"} = {name=>"HB-UNI-Sen-CAP-MOIST",st=>'custom',cyc=>'',rxt=>'',lst=>'',chn=>"Batery:1:1,Feuchte:2:8"};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST00"}{fwUpdate} = "<filename>";
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST01"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST02"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST03"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST04"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST05"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST06"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST07"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST08"} = {};
$HMConfig::culHmRegModel{"HB-UNI-Sen-CAP-MOIST"}   = { lowBatteryLimit=>1, transmitInterval=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST01"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST02"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST03"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST04"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST05"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST06"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST07"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST08"} = { highValue=>1, lowValue=>1 };

$customMsg{"HB-UNI-Sen-CAP-MOIST"} = sub {
  my ($msg,$target) = @_;
  my @evtEt=();
  my $cnum = $msg->payloadByte(1) & 0x3f; # get channel from byte 1 of payload
  #Log 1,"cnum ".$cnum;#FP
  #Log 1,"msg ".$msg;
  my $device = main::CUL_HM_id2Hash($msg->from);
  #Log 1,"cnum ".$device;#FP
  push @evtEt,[$device,1,"battery:".(($msg->payloadByte(0) & 0x80)==0x80 ? "low" : "ok")];
  my $channel = $main::modules{CUL_HM}{defptr}{$msg->channelId($cnum)};
  #Log 1,"channel ".$channel; #FP
  if( defined($channel) ) {
    #my $temp = $msg->payloadWord(2);
    my $bat = $msg->payloadByte(4);
    push @evtEt,[$channel,1,"batVoltage:".$bat/10 ." V"];
    #push @evtEt,[$channel,1,"temperature:".$temp/10];
    push @evtEt,[$channel,1,"state:".$bat/10];
  }
  for( my $offset=3; $offset < length($msg->payload)/2; $offset += 2 ) {
    $cnum = $msg->payloadByte($offset) & 0x3f; # get channel for next value
#Log 1,"cnum1 ".$cnum; #FP
    $channel = $main::modules{CUL_HM}{defptr}{$msg->channelId($cnum)};
#Log 1,"channel ".$channel; #FP
    if( defined($channel) ) {
      my $moist = $msg->payloadByte($offset+1);
      push @evtEt,[$channel,1,"humidity:".$moist." %"];
      push @evtEt,[$channel,1,"state:".$moist];
    }
    else {
      Log 1,"No channel for ".$msg->channelId($cnum);
    }
  }
  return @evtEt;
};
Nun bekomme ich die 8 Analog-Werte nach FHEM.
Das einzige was mich noch glücklicher machen würde ist, wenn ich mit regset highValue 795 die Sensoren auch noch kalibrieren könnte.
Kannst Du mir da auch weiterhelfen?
Aber erstmal vielen vielen  Dank für deinen Tip mit dem aktuellen Sketch!!

Offline papa

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1543
Antw:Modul für HB-UNI-Sen-CAP-MOIST
« Antwort #5 am: 18 Juli 2019, 09:22:44 »
Bist Du Dir sicher, dass da die richtigen Werte ankommen ? Ich habe gerade keine Zeit - auf jeden Fall muss der Battery-Kanal erst mla weg:
$HMConfig::culHmModel{"F311"} = {name=>"HB-UNI-Sen-CAP-MOIST",st=>'custom',cyc=>'',rxt=>'',lst=>'',chn=>"Feuchte:1:7"};
Und dann müssen die Daten noch richtig zu den Kanälen zugeordnet werden. Bin mir aber nicht sicher, ob das so passt.
$customMsg{"HB-UNI-Sen-CAP-MOIST"} = sub {
  my ($msg,$target) = @_;
  my @evtEt=();
  my $cnum = $msg->payloadByte(1) & 0x3f; # get channel from byte 1 of payload
  #Log 1,"cnum ".$cnum;#FP
  #Log 1,"msg ".$msg;
  my $device = main::CUL_HM_id2Hash($msg->from);
  #Log 1,"cnum ".$device;#FP
  push @evtEt,[$device,1,"battery:".(($msg->payloadByte(0) & 0x80)==0x80 ? "low" : "ok")];
  my $channel = $main::modules{CUL_HM}{defptr}{$msg->channelId($cnum)};
  #Log 1,"channel ".$channel; #FP
  for( my $offset=0; $offset < length($msg->payload)/2; $offset += 2 ) {
    $cnum = $msg->payloadByte($offset) & 0x3f; # get channel for next value
#Log 1,"cnum1 ".$cnum; #FP
    $channel = $main::modules{CUL_HM}{defptr}{$msg->channelId($cnum)};
#Log 1,"channel ".$channel; #FP
    if( defined($channel) ) {
      my $moist = $msg->payloadByte($offset+1);
      push @evtEt,[$channel,1,"humidity:".$moist." %"];
      push @evtEt,[$channel,1,"state:".$moist];
    }
    else {
      Log 1,"No channel for ".$msg->channelId($cnum);
    }
  }
  return @evtEt;
};
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Offline joffi

  • New Member
  • *
  • Beiträge: 9
Antw:Modul für HB-UNI-Sen-CAP-MOIST
« Antwort #6 am: 19 Juli 2019, 00:35:54 »
Ja ich bin mir sicher, dass die Werte richtig sind.
Mein Sender sendet 8 Kanäle, wobei der 1. Kanal der Batterie Wert ist.
<- 1A 01 86 53 F31100 000000 00 41 22 42 06 43 04 44 02 45 03 46 03 47 01 48 01  - 1568
Wenn ich deinen Vorschlag übernehme, wird der Batteriewert in Feuchte_01 geschrieben.
Ich habe dein Modul jetzt wie folgt abgeändert:
###########################
## Eingefügt FP 16.07.2019
###########################
$HMConfig::culHmModel{"F311"} = {name=>"HB-UNI-Sen-CAP-MOIST",st=>'custom',cyc=>'',rxt=>'c:l',lst=>'1',chn=>"Batterie:1:1,Feuchte:2:8"};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST00"}{fwUpdate} = "<filename>";
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST01"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST02"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST03"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST04"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST05"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST06"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST07"} = {};
$HMConfig::culHmChanSets{"HB-UNI-Sen-CAP-MOIST08"} = {};
$HMConfig::culHmRegModel{"HB-UNI-Sen-CAP-MOIST"}   = { lowBatteryLimit=>1, transmitInterval=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST01"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST02"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST03"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST04"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST05"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST06"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST07"} = { highValue=>1, lowValue=>1 };
$HMConfig::culHmRegChan {"HB-UNI-Sen-CAP-MOIST08"} = { highValue=>1, lowValue=>1 };

$customMsg{"HB-UNI-Sen-CAP-MOIST"} = sub {
  my ($msg,$target) = @_;
  my @evtEt=();
  my $cnum = $msg->payloadByte(1) & 0x3f; # get channel from byte 1 of payload
  #Log 1,"cnum ".$cnum;#FP
  #Log 1,"msg ".$msg;
  my $device = main::CUL_HM_id2Hash($msg->from);
  #Log 1,"cnum ".$device;#FP
  push @evtEt,[$device,1,"battery:".(($msg->payloadByte(0) & 0x80)==0x80 ? "low" : "ok")];
  my $channel = $main::modules{CUL_HM}{defptr}{$msg->channelId($cnum)};
  #Log 1,"channel ".$channel; #FP
  if( defined($channel) ) {
    #my $temp = $msg->payloadWord(2);
    my $bat = $msg->payloadByte(2);
    push @evtEt,[$channel,1,"batVoltage:".$bat/10 ." V"];
    #push @evtEt,[$channel,1,"temperature:".$temp/10];
    push @evtEt,[$channel,1,"state:".$bat/10];
  }
  for( my $offset=3; $offset < length($msg->payload)/2; $offset += 2 ) {
    $cnum = $msg->payloadByte($offset) & 0x3f; # get channel for next value
#Log 1,"cnum1 ".$cnum; #FP
    $channel = $main::modules{CUL_HM}{defptr}{$msg->channelId($cnum)};
#Log 1,"channel ".$channel; #FP
    if( defined($channel) ) {
      my $moist = $msg->payloadByte($offset+1);
      push @evtEt,[$channel,1,"humidity:".$moist." %"];
      push @evtEt,[$channel,1,"state:".$moist];
    }
    else {
      Log 1,"No channel for ".$msg->channelId($cnum);
    }
  }
  return @evtEt;
};
Damit klappt alles. Auch kann ich die Regs setzten. Allerdings werden die Werte erst übernommen, nachdem ich einmal den Konfig-Button am Sender gedrückt habe.

Offline papa

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1543
Antw:Modul für HB-UNI-Sen-CAP-MOIST
« Antwort #7 am: 19 Juli 2019, 10:16:53 »
Na super. Dann kann ich das ja mal mit aufnehmen.
Es kann sein, dass der Sensor nur alle X Nachrichten eine Ack fordert. Dann würden auch die Register übertragen werden.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Offline joffi

  • New Member
  • *
  • Beiträge: 9
Antw:Modul für HB-UNI-Sen-CAP-MOIST
« Antwort #8 am: 20 Juli 2019, 02:06:01 »
Danke für deine Hilfe!

 

decade-submarginal