LÖSUNG:Dekodieren Temperatur Feuchte T/H sensor von PEARL NC7427(NC7415) 433MHz

Begonnen von maxtox, 25 September 2016, 19:37:33

Vorheriges Thema - Nächstes Thema

juergs

Hallo Eberhard,
bin bei Dir ... jetzt an Fasching mit Schlafmangel etwas schwieriger   ;D

Grüße,
Jürgen

FHEm2005

Hallo Jürgen,
das ist verständlich. Denk' mal dran, wenn alle Deine Pegel (Schlaf, Promille und Arbeitslust) wieder im Normalbereich liegen.  ;D ;D ;D
Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

PeMue

Zitat von: FHEm2005 am 10 Februar 2018, 08:00:28
... wenn alle Deine Pegel (Schlaf, Promille und Arbeitslust) wieder im Normalbereich liegen.  ;D ;D ;D
Hoffentlich kommt da nicht eine leere Menge raus  ;D ;D ;D

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

juergs

Nee.  :D
Aber noch ein "Unimplemented Device"  :'(
Zitat2018.02.10 17:10:24 4: CUL_Parse: MAPLE433 s0D425594860009;  432: 8000
2018.02.10 17:10:24 5: MAPLE433: dispatch s0D425594860009;  432: 8000
2018.02.10 17:10:24 4: CUL_TCM97001 Unknown 13 (0D425594860009) length: 14 RSSI: -69.5
2018.02.10 17:10:24 3: CUL_TCM97001 Message length: 14
2018.02.10 17:10:24 4: CUL_TCM97001 Device not implemented yet name Unknown msg 0D425594860009

An
Message length: 14
werden wir ansetzen müssen...

FHEm2005

Ich sehe eher eine Länge von 12:

Trailer vorne: 2bits
ID: 8 bits
Batterstatus: 2 Bits
Kanal: 2 Bits
temperatur: 12 bits
Feuchtigkeit: 8 Bits
CRC: 8 Bits
Trailer hinten: 6 Bits

Summe:48 bits oder 12 Nibbles
Ich wüsste nicht wie die 14 zustande kommen sollen.

Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

juergs

Hallo Eberhard,
die 14 ist die Summe der Chars der Message mit der das TCM-Modul auf das Device differenziert. ;-)

FHEm2005

hallo Jürgen,

Ich nehme das mal so hin, weil ich es nicht verstehe. :) Ich muss nicht alles verstehen. ;D

Ich hatte mal vor einiger Zeit den CRC-Check für das Modul 14_CUL_TCM... gebaut.Vielleicht hilft es Dir. Ich konnte nicht prüfen, ob es funktioniert.
################################################
#
#CRC-Check for Pearl NC7415(7427)
#
sub checkCRC_NC7415
{
my $msg = shift;
Log3 "CUL_TCM97001",3,"msg: $msg";
my @a = split("", $msg);
        my $x = undef;
my $dataBin = undef;
foreach $x (@a)
{
my $bin3=sprintf("%04b",hex($x));
$dataBin = $dataBin . $bin3;
}
        # my $dataBin = hex($msg);
my $bin = undef;

# Erzeugung der Binärzahl, über die die Prüfsumme berechnet werden soll
# nämlich Bit0 bis Bit36
my $data = ($dataBin >> 10); 

Log3 "CUL_TCM97001", 3, "data: $data";

# Berechnung der mitgelieferten CRC-Sequenz
my $CRCCHECKVAL = ($dataBin >> 6) & 0b1111 ;

my $UL1 = 1 << 35;
my $CRC = 0;
my $i = 0;

#Berechnung der CRC-Zahl
for ($i = 0; $i < 36; $i++)
{
$CRC <<= 1;
if ($data & $UL1) {$CRC |= 1};
if ($CRC & 0b10000) {$CRC ^= 0b0011};
$data <<= 1;
}
$CRC &= 0b111;
Log3 "CUL_TCM97001",3,"CRC geliefert: $CRC berechnet: $CRCCHECKVAL ";
if ($CRC == $CRCCHECKVAL)
{
      return TRUE;
}
return FALSE;
}


danach hatte ich die eigentliche Brechnung der Daten unter der Rubrik: # Länge $msg == 12 ******************************************************************* eingetragen. Er stand bei mir unter "elseif (length($msg) == 12". alsoeWenn Du jetzt sagst, das Länge $msg ==14 ist, muss ich mich nicht wundern, dass es nie funktioniert hatte.

Diesen Code hatte ich mal hier irgendwann gepostet. Der Einfachheit halber hier noch einmal:

   # ######################################################################################
#   Hinzugefuegt von Fhem2005
#   Aufbereitung der Daten von NC 7415 (7427)
# ######################################################################################

if (checkCRC_NC7415($msg) == TRUE && ($readedModel eq "NC7415" || $readedModel eq "Type1" || $readedModel eq "Unknown")
|| checkCRC_Type1($msg) == TRUE && ($readedModel eq "Type1" || $readedModel eq "GT_WT_02" || $readedModel eq "Unknown"))
{
#     2    E    4       0    A    9    A    C    8    3    4    0   
# 00|10 1110 01|00| 00|00 1010 1001 10|10 1100 10|00 00|11 01|00 0000 
#   |    ID    |B | CH|       T       |     H    |     | PZ  |
#
# bit 0 und 1 sind immer Null
# bit 2 bis 9 enthalten eine ID, die sich bei Batteriewechsel aendert
# bit 10 und 11 enthalten den Batteriestatus  [B]
# bit 12 und 13 die Kanalnummer 1-2-3 [CH]
# bit 14 bis 25 die Temperatur [T]
# bit 26 bis 33 die Feuchtigkeit [H]
# bit 34 bis 37 unbekannt
# bit 38 bis 41 die Pruefziffer (0 - 15) [PZ]
# bit 42 bis 47 immer Null   
# Es kommen noch zwei weitere Bits an, also insgesamt 14 bytes

#$def = $modules{CUL_TCM97001}{defptr}{$idType3};
     
 
$temp  = (hex($a[3].$a[4])& 0x3C) >> 2;
$temp += ((hex($a[4].$a[5])& 0x3C) >> 2) * 16;
$temp += ((hex($a[5].$a[6])& 0x3C) >> 2) * 256;
$temp = (($temp-900)/10 - 32)*5/9;
$temp = int(10 * $temp + 0.5) / 10; 

Log3 $name , 3, "T: $temp";
 
$humidity = (hex($a[6].$a[7])& 0x3C) >> 2;
$humidity += ((hex($a[7].$a[8])& 0x3C) >> 2) * 16;

if ($humidity > 100)
{
# HH - Workaround
$humidity = 100;
}
elsif ($humidity < 20)
{
# LL - Workaround
$humidity = 20;
}

if (checkValues($temp, $humidity))
{
$channel = (hex($a[3]) & 0xC) >> 2;
$batbit  = (hex($a[2]) & 0x3);
$mode    = (hex($a[2]) & 0x4) >> 2;
if (checkCRC_NC7415($msg) == TRUE)
{
$model="NC7415";
}
else
{
$model="Type1";
}
   # ************** Ende der Änderungen von FHEM2005


Ich poste extra nicht die ganze Datei, weil diese nicht lauffähig ist. Nicht das Jemand glaubt es wäre eine neue Version. Wenn der obige Code Müll ist, ignoriere ihn einfach. War nur gut gemeint. Ich sehe gerade dass ich damals schon bemerkt hatte, dass 2 Bytes mehr ankommen, wusste aber nichts damit anzufangen (2. Codeblock am Ende der anfänglichen Bemerkungen). Dann beißt sich natürlich der Platz, wo ich meinen Code hingeschrieben hatte. Da ich fast Null Perl kann, bin ich hier dann aus raus.

Gruß Eberhard

Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

juergs

Hallo Eberhard,

ZitatIch konnte nicht prüfen, ob es funktioniert.
Genau das ist auch mein Problem!

Ich bin bis jetzt folgendermaßen vorgegangen um unter Windows 10 Perl-Code Debuggen zu können:

1.  VSCode  Einstellen + vscode
https://stackoverflow.com/questions/41734738/debugging-perl-with-visual-studio-code
2. Perl-Debug Addin direkt in VSCode hinzugefügt Infos
3. In Perl "PadWalker" installiert.  "cpan padwalker" in Konsole ausführen (Strawberry Perl).
4. Die Einstellungen für FHEM in launch.json aus dem Japanischen  übersetzt, mit nützlichen Tipps.
Hier meine Einstellungen für launch.json:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387   
    "version": "0.2.0",
    "configurations":
    [
        {
            "type": "perl",
            "request": "launch",
            "exec": "D:\\Strawberry\\perl\\bin\\perl.exe",
            "execArgs": ["-Mfhem::14_CUL_TCM97001", "-MFHEM::SetExtensions"],
            "name": "Perl Debug",
            "root": "${workspaceRoot}",
            //"program": "${workspaceRoot}/${relativeFile}",
            "program": "D:\\fhem\\fhem-5.7\\fhem.pl",
            "inc": ["D:\\fhem\\fhem-5.7\\FHEM"],
            "args": ["fhem.cfg"],
            "stopOnEntry": true
        }
    ]
}


Um erfahren zu müssen, daß das (visuelle) Debuggen von Perl-Code auf flacher Skript-Ebene sehr gut geht,
aber bei der Einbindung der dynamischen Fhem-Module es doch schwieriger wird als erwartet.
Das hier
"execArgs": ["-Mfhem::14_CUL_TCM97001", "-MFHEM::SetExtensions"],
hab ich geraten, scheint teilweise zu funktionieren, aber wiederum auch nicht ... 
Das Debuggen der FHEM.pl geht schon mal (immerhin) ...

Da das mit dem "normalen" Debuggen in VSCode jetzt klappt, kann man ja erst mal mit einem einfachen Testcase anfangen.  :)

Noch zur dataLength $msg=14:

                                               12345678901234
2018-02-11 13:19:39 CUL_TCM97001 Unknown Code: 0D41919483C00C

Zitat2018.02.11 13:20:30 4: CUL_TCM97001 Device not implemented yet name Unknown msg 0D41919483C00C
2018.02.11 13:20:30 4: CUL_Parse: MAPLE433 s0D41919483C00C; 432: 7984
2018.02.11 13:20:30 5: MAPLE433: dispatch s0D41919483C00C; 432: 7984
2018.02.11 13:20:30 4: CUL_TCM97001 Unknown 13 (0D41919483C00C) length: 14 RSSI: -68
2018.02.11 13:20:30 3: CUL_TCM97001 Message length: 14


http://perldoc.perl.org/perldebug.html
Open Perl IDE
http://www.lost-sunglasses.de/documentation/user-manual/environment.html
Scheitert wohl an Win10...
Win32 does not define $Win32::VERSION--version check failed at perl5db.pl line 435.
BEGIN failed--compilation aborted.
Compilation failed in require at perl5db.pl line 435.

juergs

Muss mich aber wieder etwas in das NCS-Protokoll + CRC-Bildung "einarbeiten" ...
Let's test NCS7415 ...
onException: Integer overflow in hexadecimal number


anbei mal der TestCase:
@Eberhard, ist das die aktuellste Version?

Telegramme kommen nicht immer vollständig rein:
Zitat2018-02-11 19:57:42 CUL_TCM97001 Unknown Code: 0D43D1948300
2018-02-11 19:57:42 CUL_TCM97001 Unknown Code: 0D43D1948300
2018-02-11 19:57:42 CUL_TCM97001 Unknown Code: 0D43D1948300
2018-02-11 19:57:42 CUL_TCM97001 Unknown Code: 0D43D1948300
2018-02-11 19:57:43 CUL_TCM97001 Unknown Code: 0D43D1948300
2018-02-11 19:57:43 CUL_TCM97001 Unknown Code: 5420039380
2018-02-11 19:57:44 CUL_TCM97001 Unknown Code: C501C002C0

FHEm2005

Hallo Jürgen,

auch für mich ist das Thema lange her.

Der empfangene Code 0D43D1948300 deutet auf folgende Eigenschaften hin:

LD= 00
ID = 53
Bat = schwach
Kanal = 1
Temp = 21,9 °C bzw. 71,5 °F
rel. Feuchte = 37
CRC =12
Zitat@Eberhard, ist das die aktuellste Version?
Ich habe nur diese Version und die hat bei mir nicht funktioniert. Mit der beschriebenen Vorgehensweise kann ich nichts anfangen, weil ich kein Perl kann.
Den von Dir empfangenen Code habe ich in ein selbst  gebasteltes Excel-Sheet eingesetzt und dann das Ergebnis abgelesen. Ich kann Dir wohl sagen, wie das Ergebnis aus dem Datentelegramm erzeugt wird, mit der Implementierung in das Modul kann ich Dir nicht helfen. Ich habe dir erst einmal das Excel-Sheet beigefügt. Die empfangene Sequenz (12byte)nur in Zelle B5 eingeben und das Ergebnis im Bereich D38:L44 ablesen. Jede Änderung in einem anderen Feld kann die gesamte Berechnung zerstören.
Die enthaltenen Tabellen CRC und Tabelle 3 sind Reste meiner Versuche die CRC herauszufinden. Da haben wir ja bereits eine Lösung. Alles das was kürzer als 12 byte ist kannst Du vernachlässigen. Die gehören vermutlich zu anderen empfangenen Sensoren.

Da bei mir die Sensoren über userReadings funktionieren, kann ich Dir noch die dort hinterlegte Berechnung geben - damit bin ich aber schon am Ende.

Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

FHEm2005

HalloJürgen,

Zitat@Eberhard, ist das die aktuellste Version?

Die geposteten Codeschnipsel sind definitiv nicht aus der aktuellen Version, sondern irgendwann habe ich versucht meinen Progarmmtext in das damalige Modul einzuarbeiten.  Das war damals diese Version: $Id: 14_CUL_TCM97001.pm 12994 2017-01-07 07:49:53Z bjoernh $

Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

juergs

Hallo Eberhard,
danke für die Info.
Bin gerade ein Influenza-Opfer, dauert also noch ein bisschen, bis ich wieder klar denken kann .. </hust>

Jürgen

cb1969


FHEm2005

Hallo Jürgen,
ich hoffe Du hast Deine Erkältung gut überstanden. ;) ;) ;)
Ich bin offensichtlich nicht der Einzige, der sehnsüchtig auf die Einarbeitung meiner damaligen Vorarbeit wartet. Es wird leider nicht einfacher sich jedes Mal erneut in dieses Thema einzuarbeiten.
Es gibt diesen Sensor (Außensensor) immer noch bei Pearl zu einem Preis von 3,40€ (!!) zu haben. Meine beiden Sensoren warten dringen auf die Erweiterung des Moduls.

Vielleicht schaffen wir es doch noch dieses Jahr.

Viele Grüße
Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

juergs

Zitat von: FHEm2005 am 14 September 2018, 08:59:33
Hallo Jürgen,
ich hoffe Du hast Deine Erkältung gut überstanden. ;) ;) ;)
Ich bin offensichtlich nicht der Einzige, der sehnsüchtig auf die Einarbeitung meiner damaligen Vorarbeit wartet. Es wird leider nicht einfacher sich jedes Mal erneut in dieses Thema einzuarbeiten.
Es gibt diesen Sensor (Außensensor) immer noch bei Pearl zu einem Preis von 3,40€ (!!) zu haben. Meine beiden Sensoren warten dringen auf die Erweiterung des Moduls.

Vielleicht schaffen wir es doch noch dieses Jahr.

Viele Grüße
Eberhard


Hallo Zusammen,

... ok, ich sehe die Tage Tage werden kürzer...
Dann müssen wir wohl die Prio für diese Projekt wieder nach oben drehen. :D ;)

ZitatEs wird leider nicht einfacher sich jedes Mal erneut in dieses Thema einzuarbeiten.

Wie wahr ....

Grüße,
Jürgen