Signalduino Entwicklung

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

Vorheriges Thema - Nächstes Thema

habeIchVergessen

würde erwarten, das die Zeile encrypted raus kommt. negiert hatte Ellert aus deinen Post herausgelesen.

Sidey

Zitat von: habeIchVergessen am 07 Mai 2016, 21:19:40
würde erwarten, das die Zeile encrypted raus kommt. negiert hatte Ellert aus deinen Post herausgelesen.

okay, auf dem pc sieht man das besser....

Ich habe die Daten jetzt mal von Hand demoduliert.
Das erwartete Ergebnis passt nicht zum Signal.... wer findet den Fehler?


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

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

habeIchVergessen

#1607
5F   4F   4F   4F   D5   ED   FF   entspricht
A0   10   A0   10   3A   28   28   (negiert + decrypted)
5F   10   00   00   9A   38   12   (decrypted)
A0   10   00   00   9A   38   12   (negiert + decrypted)

beim decrypt muss die Schleife für das XOR in ungekehrter Reihenfolge durchlaufen werden.
beim encrypt hatte ich auch noch einen Fehler (s. letzte Beispiele)

A01000019A3812 A0 10 00 01 9A 38 12
encrypted A0 B0 B0 B1 2B 13 01
enc. negiert 5F 4F 4F 4E D4 EC FE

decrypted A0 10 00 01 9A 38 12


meine Beispiele verwenden Rolling-Code 1 (0001) und nicht 0000 wie in o.g. Nachricht

Ellert

Dies ist der Code, der im FHEMduino (somfyRTS.cpp), soweit ich es verstehe, ausgeführt wird, wenn die empfangene Nachricht vollständig ist.
    if ( ! messageAvailable() ) {
      // obfuscate the frame to output (int_messageDone) and calculate checksum
      int_messageDone[0] = int_message[0];
      byte checkSum = 0 ^ int_messageDone[0] ^ (int_messageDone[0] >> 4 );
      for(int i=1; i<7; i++) {
        int_messageDone[i] = int_message[i] ^ int_message[i-1];
        checkSum ^= int_messageDone[i] ^ (int_messageDone[i] >> 4 );
      }

      // set message ready when checksum is correct
      if ( (checkSum & 0x0F) == 0 ) {
// # message looks like this
// # Ys_key_ctrl_cks_rollcode_a2a1a0
// # Ys ad 20 0ae3 a29842
// # address needs bytes 1 and 3 swapped
//      # lenght is 2+1 2+1 2+1 4+1 6 = 20

        String tmpMessage = "Ys ";
         char tmp[7];
         
         // key
         sprintf( tmp, "%2.2x ", int_messageDone[0] );
         tmpMessage += tmp;
         // command
         sprintf( tmp, "%2.2x ", (int_messageDone[1] & 0xF0) );
         tmpMessage += tmp;
         // rolling code
         sprintf( tmp, "%4.4x ", (int_messageDone[2] << 8) + int_messageDone[3] );
         tmpMessage += tmp;
         // address
         sprintf( tmp, "%2.2x%2.2x%2.2x", int_messageDone[4],int_messageDone[5],int_messageDone[6] );
         tmpMessage += tmp;
         message = tmpMessage;
         available = true;
         
#ifdef DEBUG

printMessage();
      } else {
        Serial.print("CheckSum incorrect : ");
        Serial.println( (checkSum & 0x0F), HEX);

#endif 
      }
    }
   
    // message complete --> start over
    return false;


Ich habe mich gerade mit Perl etwas angefreundet und was C oder C++ angeht habe ich keinen Schimmer, wie ich den Code laufen lassen könnte.
Aber wenn die von Sidey demodulierte Bitfolge durch den Code läuft sollte doch A01000019A3812 herauskommen.

Ich versuche erstmal den Code zu verstehen und dann in Perl umzubauen, dann könnte ich das selbst probieren, das wird mit meinen Grundkenntnissen etwas dauern.

habeIchVergessen

#1609
Rolling code war 0000 in Sideys Beispiel. Versuche es  mit Excel/Calc. Kann man schneller ändern.

Für die Manchester Kodierung gibt es laut Wikipedia 2 Varianten.


Es gibt für den Manchester-Code zwei mögliche und gleichwertige Definitionen, wie auch in der nebenstehenden Abbildung dargestellt:

1.    Eine fallende Flanke bedeutet in der Codedefinition nach G.E. Thomas eine logische Eins, eine steigende Flanke eine logische Null. Diese Definition wird auch als Biphase-L oder Manchester-II bezeichnet.[1]
2.    In der Codedefinition nach IEEE 802.3, wie sie bei 10-Mbit/s-Ethernet verwendet wird, bedeutet eine fallende Flanke eine logische Null und eine steigende Flanke eine logische Eins.


RTS verwendet die 2. (s. send_somfy_rts_bitOne in somfy_rts.c).

Sidey

Moin,

den C Code in Perl zu überführen kann ich machen, das sollte kein großer Aufwand sein.

Ich habe die Firmware compiliert, probiert die doch mal aus.

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

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

habeIchVergessen

#1611
sieht aus meiner Sicht gut aus.


YsA24500029A3812 5D18181A80B8AA ok
YsA32300039A3812
YsA42300049A3812 5B78787CE6DECC ok
YsA54500059A3812 5A1F1F1A80B8AA ok
YsA62300069A3812 597A7A7CE6DECC ok
YsA72300079A3812 587B7B7CE6DECC ok
YsA84500089A3812 5712121A80B8AA ok


habe dev-r32-vs benutzt. Richtig?

Nachtrag:
Wie können MC-Nachrichten gesendet werden (bin aus den div. Protokollen in 00_SIGNALduino.pm nicht schlau geworden)?

Ellert

Bei mir sieht es auch gut aus

Zitat
2016.05.08 13:43:06 4: SomfyR: Ys a0 10 0000 9a3812
2016.05.08 13:43:06 4: SDuino_433/msg READ: MC;LL=-1282;LH=1290;SL=-682;SH=678;D=5F4F4F4FD5EDFF;C=655;L=56;

2016.05.08 13:43:10 4: SomfyR: Ys a1 10 0001 9a3812
2016.05.08 13:43:10 4: SDuino_433/msg READ: MC;LL=-1285;LH=1287;SL=-679;SH=683;D=5E4E4E4FD5EDFF;C=656;L=56;

2016.05.08 13:43:15 4: SomfyR: Ys a2 10 0002 9a3812
2016.05.08 13:43:15 4: SDuino_433/msg READ: MC;LL=-1288;LH=1289;SL=-687;SH=677;D=5D4D4D4FD5EDFF;C=655;L=56;

2016.05.08 13:43:20 4: SomfyR: Ys a3 10 0003 9a3812
2016.05.08 13:43:20 4: SDuino_433/msg READ: MC;LL=-1289;LH=1283;SL=-692;SH=673;D=5C4C4C4FD5EDFF;C=651;L=56;

2016.05.08 13:43:29 4: SomfyR: Ys a4 10 0004 9a3812
2016.05.08 13:43:29 4: SDuino_433/msg READ: MC;LL=-1287;LH=1289;SL=-686;SH=677;D=5B4B4B4FD5EDFF;C=655;L=56;

2016.05.08 13:43:34 4: SomfyR: Ys a5 10 0005 9a3812
2016.05.08 13:43:34 4: SDuino_433/msg READ: MC;LL=-1286;LH=1288;SL=-690;SH=677;D=5A4A4A4FD5EDFF;C=654;L=56;

2016.05.08 13:43:40 4: SomfyR: Ys a6 10 0006 9a3812
2016.05.08 13:43:40 4: SDuino_433/msg READ: MC;LL=-1289;LH=1288;SL=-686;SH=680;D=5949494FD5EDFF;C=655;L=56;

2016.05.08 13:43:44 4: SomfyR: Ys a7 10 0007 9a3812
2016.05.08 13:43:44 4: SDuino_433/msg READ: MC;LL=-1285;LH=1290;SL=-686;SH=677;D=5848484FD5EDFF;C=655;L=56;

2016.05.08 13:43:50 4: SomfyR: Ys a8 10 0008 9a3812
2016.05.08 13:43:50 4: SDuino_433/msg READ: MC;LL=-1287;LH=1286;SL=-684;SH=681;D=5747474FD5EDFF;C=655;L=56;

2016.05.08 13:43:56 4: SomfyR: Ys a9 10 0009 9a3812
2016.05.08 13:43:56 4: SDuino_433/msg READ: MC;LL=-1292;LH=1287;SL=-687;SH=676;D=5646464FD5EDFF;C=654;L=56;

2016.05.08 13:44:00 4: SomfyR: Ys aa 10 000a 9a3812
2016.05.08 13:44:00 4: SDuino_433/msg READ: MC;LL=-1288;LH=1288;SL=-683;SH=676;D=5545454FD5EDFF;C=654;L=56;

2016.05.08 13:44:05 4: SomfyR: Ys ab 10 000b 9a3812
2016.05.08 13:44:05 4: SDuino_433/msg READ: MC;LL=-1288;LH=1290;SL=-686;SH=678;D=5444444FD5EDFF;C=655;L=56;

2016.05.08 13:44:09 4: SomfyR: Ys ac 10 000c 9a3812
2016.05.08 13:44:09 4: SDuino_433/msg READ: MC;LL=-1288;LH=1284;SL=-683;SH=677;D=5343434FD5EDFF;C=653;L=56;

2016.05.08 13:44:14 4: SomfyR: Ys ad 10 000d 9a3812
2016.05.08 13:44:14 4: SDuino_433/msg READ: MC;LL=-1295;LH=1283;SL=-686;SH=677;D=5242424FD5EDFF;C=653;L=56;


Key: 5= A bleibt konstant, 2.Stelle wird hochgezählt

ctrl_cks_rollcode: ändert sich

D5EDFF die Adresse ändert sich nicht.

so sollte es sein, denke ich.

habeIchVergessen

@Sidey: im Anhang ein modifiziertes 00_SIGNALduino.pm

Ausgabe sieht wie folgt aus:


2016.05.08 16:34:07 4: sduino/msg READ: MC;LL=-1304;LH=1274;SL=-696;SH=669;D=5777774FD5EDFF;C=647;L=56;
2016.05.08 16:34:07 4: sduino: Found manchester Protocol id 99 clock 647 -> Somfy RTS
2016.05.08 16:34:07 4: sduino: Somfy RTS protocol
raw: 5777774FD5EDFF
enc: A88888B02A1200
dec: A82000389A3812

2016.05.08 16:34:07 3: sduino: Unknown code A82000389A3812, help me!
2016.05.08 16:34:08 4: CUL_Parse: miniCUL YsA82000389A3812

Sidey

Kannst Du einen Patch oder einen Pull Request machen? Das würde die Änderungen sichtbar machen.
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

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

habeIchVergessen

ich hoffe du meintest github (s. hier).
für fhem habe ich kein account.

Ralf9

Zitat von: habeIchVergessen am 08 Mai 2016, 16:40:49
im Anhang ein modifiziertes 00_SIGNALduino.pm

Ich habe es bei mir mal eingebaut und mit einem dummy Device simuliert. Sieht schon recht gut aus. Ich werde es mal commiten:

2016.05.08 17:40:40 4: sduinoD/msg get raw: MC;LL=-1282;LH=1290;SL=-682;SH=678;D=5F4F4F4FD5EDFF;C=655;
2016.05.08 17:40:40 4: sduinoD: Found manchester Protocol id 43 clock 655 -> Somfy RTS
2016.05.08 17:40:40 4: sduinoD: Somfy RTS protocol
raw: 5F4F4F4FD5EDFF
enc: A0B0B0B02A1200
dec: A01000009A3812

2016.05.08 17:40:40 5: sduinoD: converted Data to (YsA01000009A3812)
2016.05.08 17:40:40 5: sduinoD dispatch YsA01000009A3812
2016.05.08 17:40:40 1: SOMFY Unknown device 12389A, please define it
2016.05.08 17:40:40 2: autocreate: define SOMFY_12389A SOMFY 12389A
2016.05.08 17:40:40 2: autocreate: define FileLog_SOMFY_12389A FileLog ./log/SOMFY_12389A-%Y-%m.log SOMFY_12389A

2016.05.08 17:43:14 4: sduinoD/msg get raw: MC;LL=-1282;LH=1290;SL=-682;SH=678;D=5F4F4F4FD5EDFF;C=655;
2016.05.08 17:43:14 4: sduinoD: Found manchester Protocol id 43 clock 655 -> Somfy RTS
2016.05.08 17:43:14 4: sduinoD: Somfy RTS protocol
raw: 5F4F4F4FD5EDFF
enc: A0B0B0B02A1200
dec: A01000009A3812

2016.05.08 17:43:14 5: sduinoD: converted Data to (YsA01000009A3812)
2016.05.08 17:43:14 5: sduinoD dispatch YsA01000009A3812
2016.05.08 17:43:14 4: SOMFY SOMFY_12389A stop


Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

habeIchVergessen

Danke.

habe mich an der Syntax zum Senden versucht

set sduino sendMsg P99#D10101001010001100000000000111001100110100011100000010010#R7


schön wäre natürlich

set sduino sendMsg P99#DA94600399A3812#R7


Leider habe ich keine Ahnung, was hier wie gesetzt werden muss

"99" => ## Somfy RTS
{
name => 'Somfy RTS',
id => '99',
zero => [1,-3],
one => [3,-1],
sync => [1,-11],
start => [-28],
clockrange      => [630,689], # min , max
clockabs => 660,
format => 'manchester',
#preamble => '',
#clientmodule => '', # not used now
modulematch => '^A[0-9A-F]+',
length_min => '56',
length_max => '56',
method          => \&SIGNALduino_SomfyRTS # Call to process this message
},   


Wer kann da helfen? Und wenn was gehen sollte, wer kann testen (habe noch keine Somfy-Devices im Einsatz; denke aber drüber nach)?

Ellert

#1618
Könnte man das Modul Modul 10_SOMFY.pm oder 14_FHEMduino_SomfyR.pm nutzen um ein Device anzulegen?

Müsste der SD dann nicht in folgendem Format dispatchen, also mit Leerzeichen.

aus der Modul 10_SOMFY.pm:
Zitat#############################
sub SOMFY_Parse($$) {
   my ($hash, $msg) = @_;

   # Msg format:
   # Ys AB 2C 004B 010010
   # address needs bytes 1 and 3 swapped

aus der Modul 14_FHEMduino_SomfyR.pm:
[/b]
Zitat#############################
sub FHEMduino_SomfyR_Parse($$){

# Msg format:
# Ys AB 2C 004B 010010
# address HAS ALREADY bytes 1 and 3 swapped

Verstehe ich das Richtig?

Falls auch das Senden in den SD implementiert werden sollte, dann könnte vielleicht das Modul 10_SOMFY.pm verwendet werden?

aus der Modul 10_SOMFY.pm:
Zitat#####################################
sub SOMFY_SendCommand($@)
.
.
.
   # message looks like this
   # Ys_key_ctrl_cks_rollcode_a0_a1_a2
   # Ys ad 20 0ae3 a2 98 42

   my $enckey = uc(ReadingsVal($name, "enc_key", "A0"));
   my $rollingcode = uc(ReadingsVal($name, "rolling_code", "0000"));

   if($command eq "XX") {
      # use user-supplied custom command
      $command = $args[1];
   }

   $message = "s"
     . $enckey
     . $command
     . $rollingcode
     . uc( $hash->{ADDRESS} );
.
.
.
   ## Send Message to IODev using IOWrite
   Log3($name,5,"SOMFY_sendCommand: $name -> message :$message: ");
   IOWrite( $hash, "Y", $message );

Wäre das ein Ansatz diese Module zubenutzen?

Edit: Ich sehe in Ralf9's Beitrag gerade, dass es mit dem SOMFY Modul funktioniert.

Jarnsen

Ihr könnt euch auch das Dooyamodul ansehen... Es basiert ja auf dem Somfymodul... Und kann senden und empfangen... Incl autocreate... Vielleicht hilft das weiter...


Gesendet von iPhone mit Tapatalk
1 x RPi2,
1 x nanoCUL433, 1 x nanoCUL868, 1 x SIGNALduino433
Sonos/SonosSpeak, Homebridge, 2 x Enigma2, 10 x Nobily Rollläden, 3 x Intertechno Steckdosen
Pushover, Abfallerinnerung, MySensors, 7 x Max!