Signalduino Entwicklung

Begonnen von thoffma3, 05 Juli 2015, 23:01:00

Vorheriges Thema - Nächstes Thema

habeIchVergessen

@Ellert: wenn ich mit einem miniCUL (433) an ein SOMFY Gerät sende, dann kann SIGNALduino folgende Nachrichten empfangen.

Setup

define miniCUL CUL xxx.xxx.xxx.xxx:23 0000
define rollo SOMFY ABCDEF
set rollo on


Nachrichten

2016.05.04 22:04:03 4: sduino/msg READ: MC;LL=1266;LH=-604;SL=686;SH=-1282;D=F8808087F9B0;C=580;
2016.05.04 22:04:03 4: sduino/msg READ: MC;LL=-1208;LH=1219;SL=-676;SH=737;D=78808087F994C8;C=651;
2016.05.04 22:04:04 4: sduino/msg READ: MC;LL=1216;LH=612;SL=-600;SH=67;D=FFFFFFFEFEC0;C=617;


Devices

list miniCUL
Internals:
   CFGFN
   CMDS       BCFiAZNEkGMKUYRTVWXefmLltux
   Clients    :FS20:FHT.*:KS300:USF1000:BS:HMS: :CUL_EM:CUL_WS:CUL_FHTTK:CUL_HOERMANN: :ESA2000:CUL_IR:CUL_TX:Revolt:IT:UNIRoll:SOMFY: :STACKABLE_CC:CUL_RFR::CUL_TCM97001:CUL_REDIRECT:
   DEF        xxx.xxx.xxx.xxx:23 0000
   DeviceName xxx.xxx.xxx.xxx:23
   FD         16
   FHTID      0000
   NAME       miniCUL
   NR         158
   PARTIAL
   RAWMSG     YsA3290003EFCDAB
   STATE      Initialized
   TYPE       CUL
   VERSION    V 1.20.04 a-culfw Build: private build (unknown) miniCUL (F-Band: 868MHz)
   initString X21
   miniCUL_MSGCNT 4
   miniCUL_TIME 2016-05-04 22:09:09
   Matchlist:
     1:USF1000  ^81..(04|0c)..0101a001a5ceaa00....
     2:BS       ^81..(04|0c)..0101a001a5cf
     3:FS20     ^81..(04|0c)..0101a001
     4:FHT      ^81..(04|09|0d)..(0909a001|83098301|c409c401)..
     5:KS300    ^810d04..4027a001
     6:CUL_WS   ^K.....
     7:CUL_EM   ^E0.................$
     8:HMS      ^810e04....(1|5|9).a001
     9:CUL_FHTTK ^T[A-F0-9]{8}
     A:CUL_RFR  ^[0-9A-F]{4}U.
     B:CUL_HOERMANN ^R..........
     C:ESA2000  ^S................................$
     D:CUL_IR   ^I............
     E:CUL_TX   ^TX[A-F0-9]{10}
     F:Revolt   ^r......................$
     G:IT       ^i......
     H:STACKABLE_CC ^\*
     I:UNIRoll  ^[0-9A-F]{5}(B|D|E)
     J:SOMFY    ^Y[r|t|s]:?[A-F0-9]+
     K:CUL_TCM97001 ^s[A-F0-9]+
     L:CUL_REDIRECT ^o+
   Readings:
     2016-05-04 21:59:15   cmds             B C F i A Z N E k G M K U Y R T V W X e f m L l t u x
     2016-05-04 22:09:09   state           Initialized
Attributes:



list rollo
Internals:
   ADDRESS    ABCDEF
   CFGFN
   DEF        ABCDEF
   IODev      miniCUL
   LASTInputDev miniCUL
   MSGCNT     4
   NAME       rollo
   NR         159
   STATE      open
   TYPE       SOMFY
   exact      open
   miniCUL_MSGCNT 4
   miniCUL_RAWMSG YsA3290003EFCDAB
   miniCUL_TIME 2016-05-04 22:09:09
   move       off
   position   0
   Code:
     1          ABCDEF
   Readings:
     2016-05-04 22:09:08   enc_key         A4
     2016-05-04 22:09:08   exact           open
     2016-05-04 22:09:09   parsestate      off
     2016-05-04 22:09:08   position        0
     2016-05-04 22:09:08   rolling_code    0004
     2016-05-04 22:09:08   state           open
Attributes:
   IODev      miniCUL


Ellert

@habeIchVergessen: Leider findet sich in den Daten vom SIGNALduino nicht einmal die Adresse der gesendeten RAWMSG wieder.

ZitatCUL gesendet:
A3290003EFCDAB
SD empfangen:
F8808087F9B0
78808087F994C8
FFFFFFFEFEC0

Wie könnte mir das von Dir Geschriebene weiterhelfen?

hjgode

Hi Sascha

dass die Fake FTDI Chips alle dieslbe serial haben, ist mir neu und bisher auch nicht bei mir aufgefallen.

Die CH340 (oder so) haben gar keine serial. Da entscheidet dann das Los, über welchen device Namen man die dann nach einem Systemstart ansprechen kann.

Die Fake FTDI Chips kann man am Aufdruck unterscheiden, der ist viel ungenauer als bei den Originalen. Aber wahrscheinlich sieht man das nur, wenn man Original und Fake direkt miteinander vergleicht.

Unter Windows erkennt der FTDI Treiber die Dinger daran, dass ein bestimmter EEPROM-Schreibzugriff ausgeführt wird, der beim Original so nicht funktioniert: http://electronics.stackexchange.com/questions/196154/how-to-detect-fake-ftdi-chips

~Josef
Debian SID mit aktuellem FHEM, nanoCUL 866, JeeLink EC3000, fhemduino, SIGNALduino,
3 x TFA TH Sensor, 1 x TFA TH Arduino Sender, 3 x EC3000, 4 x Elro Schaltsteckdosen, ESA2000
offline: Wibo Funkthermostat, 2 x ELV Funkthermostat FHT80, 2 FS20 ST4 Funksteckdose

habeIchVergessen

Zitat von: Ellert am 04 Mai 2016, 22:34:02
Wie könnte mir das von Dir Geschriebene weiterhelfen?

hatte deinen Post so verstanden, dass keine Daten empfangen werden.
Die Manchester-Dekodierung findest du in signalDecoder.cpp

Sidey

Hi Ellert,

ich werde mir das mal mit Hilfe der NPY Files ansehen.

Wenn das Signal Manchester codiert ist, sollte das kein großes Thema sein.

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Sidey

Hi Ellert,

ich werde mir das mal mit Hilfe der NPY Files ansehen.

Wenn das Signal Manchester codiert ist, sollte das kein großes Thema sein.

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Sidey

Zitat von: Ellert am 04 Mai 2016, 19:44:23
Der Empfang der Rohnachricht von Somfy gelingt fast nie mit Firmwareversion: V 3.2.0-b17, nur MC aktiviert

Hallo Ellert,

1. Mit der b17 ist es schwierig das Signal zu empfangen. Mit der aktuellen Firmware klappt das schon eher, da der Musterpuffer größer ist. Allerdings gibt es auch hier ein kleines Problem, was ich nun gefunden habe.

2. Ich habe jetzt folgendes aus dem NPY: somfy_A0_0000_12389A_10_YsA01000019A3812.npy  demoduliert:
MC;LL=-1246;LH=1215;SL=-622;SH=715;D=5F4F4F4FD5EDF;C=643;L=56;
MC;LL=-1246;LH=1215;SL=-702;SH=715;D=5F4F4F4FD5EDF;C=643;L=56;
MC;LL=-1246;LH=1215;SL=-702;SH=715;D=5F4F4F4FD5EDF;C=643;L=56;
MC;LL=-1246;LH=1215;SL=-702;SH=715;D=5F4F4F4FD5EDF;C=643;L=56;



Wenn ich jetzt annehme, dass das Gewünschte Ergebnis A010... ist dann kommt man da wie folgt hin:

Alle bits von 5F invertiert ergeben A0. Soweit ich das aus den angehängten c Dateien entnehmen konnte, werden die bits noch ein bisschen hin und her geschoben, damit das angezeigte Ergebnis kommt.


Grüße Sidey

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Ellert

#1597
@Sidey:
ZitatMit der aktuellen Firmware
Ich habe jetzt nach einem Update mit
update all https://raw.githubusercontent.com/RFD-FHEM/RFFHEM/dev-r32/controls_signalduino.txt
die Version
# $Id: 00_SIGNALduino.pm 104841  2016-04-28 20:00:00Z v3.2.1-dev $
und    
V 3.2.0-b22 SIGNALduino - compiled at Apr 18 2016 22:59:19
heute geflasht.

Der SD liefert wenn ich mit einem nanoCUL433 (mit den Parametern, so wie auch die Aufzeichnung vom Logikanalysator gemacht wurde) sende:
Zitat2016.05.07 12:06:16 4: SDuino_433/msg READ: MC;LL=-1991;LH=1916;SL=-1016;SH=935;D=56EBDB6E8;C=950;L=35;
2016.05.07 12:06:17 4: SDuino_433/msg READ: MC;LL=-515;LH=310;SL=-156;SH=108;D=FCF9FC;C=139;L=22;

2016.05.07 12:10:16 4: SDuino_433/msg READ: MC;LL=-1986;LH=1921;SL=-1007;SH=944;D=ADD7B6ED0;C=954;L=34;
2016.05.07 12:10:19 4: SDuino_433/msg READ: MC;LL=-671;LH=430;SL=-328;SH=185;D=001FC;C=204;L=18;

2016.05.07 12:14:16 4: SDuino_433/msg READ: MC;LL=-1992;LH=1633;SL=-1016;SH=939;D=ADD7B6E58;C=857;L=34;
2016.05.07 12:14:17 4: SDuino_433/msg READ: MC;LL=-929;LH=314;SL=-355;SH=119;D=1FFFE;C=144;L=19;
Erwartet hätte ich auch 5F4F4F4FD5EDF.

Wie wollen wir weiter machen?

Gruß
Ellert

Mir ist noch aufgefallen. dass in der somfyRTS.cpp für den FHEMduino für die Empfangene Nachricht 56 bit erwartet werden (Zeile 91), das sind 14 Hex-Zeichen, Vom Signalduino wurden nur 5F4F4F4FD5EDF, also 13 Zeichen empfangen.

habeIchVergessen

@Ellert + Sidey

wenn ich den Code richtig verstanden habe,


// calculate checksum
airdata[1] |= (somfy_rts_calc_checksum(airdata) & 0x0F);

// save unencrypted data to return later
somfy_rts_frame_t *unencrypted = malloc(SOMFY_RTS_FRAME_SIZE);
memcpy(unencrypted, airdata, SOMFY_RTS_FRAME_SIZE);

// "encrypt"
for (i = 1; i < SOMFY_RTS_FRAME_SIZE; i++) {
airdata[i] = airdata[i] ^ airdata[i-1];
}


dann bleibt Byte 0 immer im Orginal erhalten.


Check
A01000019A3812 A0 10 00 01 9A 38 12 01
Byte 1 + check A0 11 00 01 9A 38 12
encrypted A0 B1 11 01 9B A2 2A

decrypted A0 11 00 01 9A 38 12


Somit würde ich die Zeile encrypted als empfangene Daten erwarten.

Ellert

@habeIchVergessen, Sidey
Ich habe wenig Erfahrung in der Bitschieberei, aber wenn der verschlüsselte Wert richtig ist, dann müsste der SIGNALduino
Zitat5F  4E  EE  FE  64  5C  C5
decodieren, da Sidey festgestellt hat, dass der negierten Wert decodiert wird.

Sidey

Ich muss die Firmware erst noch mal neu kompilieren.

Die Unit Tests liefen alle erfolgreich. Ich habe es jetzt einige Stunden laufen.

Zunächst wird mal alles das Empfangen, was auch vorher ging.
Allerdings werden nun viel mehr Meldungen zum Auswerten übergeben. Da bin ich noch unsicher, ob das Signale sind oder einfach nur rauschen.

Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

habeIchVergessen

hätte ich den Code richtig verstanden, dann wäre mir früher aufgefallen, dass die Checksumme 01 falsch ist. Hier die korrigierten Daten


Check
A01000019A3812 A0 10 00 01 9A 38 12 00
Byte 1 + check A0 10 00 01 9A 38 12
encrypted A0 B0 10 01 9B A2 2A

enc. negiert 5F 4F EF FE 64 5D D5

decrypted A0 10 00 01 9A 38 12


Sidey

@habeichvergessen:

Ich kann dir leider nicht so ganz folgen...
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

habeIchVergessen

airdata wird nach dem Setzen der Checksumme in uncrypted kopiert. Somit ist die Checksumme bereits in den ausgegebenen Daten von CUL (YsA01000019A3812) enthalten.

Ergo: die berechnete Checksumme 01 von hier war falsch.
Außerdem waren die letzen 4 Stellen der negierten Daten von Ellert nur fast richtig. enc. negiert sollte raus kommen, wenn SIGNALduino MC nur negiert empfängt.

Sidey

Hmm,

so ganz verstehe ich die Sache mit der Checksum, mit negiert usw. noch nicht.
Im Signalduino wird Manchester nach IEEE Standard demoduliert.

Was die anderen Empfänger da machen ist mir nicht ganz plausibel. Da wird scheinbar völlig unabhängig von einer Synchonisation mit einer bitwertigkeit von 1 angefangen zu demodulieren. Wieso diese konstante 1 genommen wird, verstehe ich nicht.

Man kann jetzt viel darüber diskutieren, was richtig und was falsch ist. Mir würde es erst mal helfen, wenn ich wüsste, was andere Empfänger empfangen, bevor die Werte verändert werden. Ich nehme an, das ist airdata? Demnach sollte airdata vom SIGNALduino ermittlet werden, richtig?

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker