Autor Thema: LÖSUNG:Dekodieren Temperatur Feuchte T/H sensor von PEARL NC7427(NC7415) 433MHz  (Gelesen 16547 mal)

Offline juergs

  • Hero Member
  • *****
  • Beiträge: 1073
Hallo Eberhard,
bin bei Dir ... jetzt an Fasching mit Schlafmangel etwas schwieriger   ;D

Grüße,
Jürgen

Offline FHEm2005

  • Sr. Member
  • ****
  • Beiträge: 588
    • Squeezebox mit RFID-Karten steuern
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
FHEM auf RaspPi 3 mit CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge und Tradfri-Bridge

Online PeMue

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4250
... 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
1x FB7170 (29.04.88) 5.7 1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F)
1x RPi BV2LCDCSM 1.63 5.7 2xMAX HKT, 1xMAX RT, V200KW1
1xFB 7490 (113.06.05) 5.7 1xCUL V3 1.63 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 1xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU 1xRFXtrx 90 1xWT440H 1xCM160 3xTFA30.3150 5xFA21

Offline juergs

  • Hero Member
  • *****
  • Beiträge: 1073
Nee.  :D
Aber noch ein "Unimplemented Device"  :'(
Zitat
2018.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: 14werden wir ansetzen müssen...
« Letzte Änderung: 10 Februar 2018, 17:16:07 von juergs »

Offline FHEm2005

  • Sr. Member
  • ****
  • Beiträge: 588
    • Squeezebox mit RFID-Karten steuern
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
FHEM auf RaspPi 3 mit CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge und Tradfri-Bridge

Offline juergs

  • Hero Member
  • *****
  • Beiträge: 1073
Hallo Eberhard,
die 14 ist die Summe der Chars der Message mit der das TCM-Modul auf das Device differenziert. ;-)

Offline FHEm2005

  • Sr. Member
  • ****
  • Beiträge: 588
    • Squeezebox mit RFID-Karten steuern
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

FHEM auf RaspPi 3 mit CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge und Tradfri-Bridge

Offline juergs

  • Hero Member
  • *****
  • Beiträge: 1073
Hallo Eberhard,

Zitat
Ich 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
Zitat
2018.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.
« Letzte Änderung: 11 Februar 2018, 19:56:55 von juergs »

Offline juergs

  • Hero Member
  • *****
  • Beiträge: 1073
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:
Zitat
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: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
« Letzte Änderung: 11 Februar 2018, 19:59:27 von juergs »

Offline FHEm2005

  • Sr. Member
  • ****
  • Beiträge: 588
    • Squeezebox mit RFID-Karten steuern
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
FHEM auf RaspPi 3 mit CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge und Tradfri-Bridge

Offline FHEm2005

  • Sr. Member
  • ****
  • Beiträge: 588
    • Squeezebox mit RFID-Karten steuern
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
FHEM auf RaspPi 3 mit CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge und Tradfri-Bridge

Offline juergs

  • Hero Member
  • *****
  • Beiträge: 1073
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

Offline cb1969

  • New Member
  • *
  • Beiträge: 7
Hallo,
gibt es hier noch Aktivitäten?
Gruß
Christian

Offline FHEm2005

  • Sr. Member
  • ****
  • Beiträge: 588
    • Squeezebox mit RFID-Karten steuern
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
FHEM auf RaspPi 3 mit CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge und Tradfri-Bridge

Offline juergs

  • Hero Member
  • *****
  • Beiträge: 1073
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 ;)

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

Wie wahr ....

Grüße,
Jürgen