Signalduino Entwicklung

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

Vorheriges Thema - Nächstes Thema

Ralf9

Zitat von: bmilos am 09 Juni 2016, 20:31:00
Könnte man die 10_IT.pm noch ein wenig erweitern, damit es volkommen automatisch generiert wird?

Ich sehe dabei das Problem wie die Routine beim automatisch generieren erkennen soll, ob ein "on" oder ein "off" gesendet wird.
Die bisher bekannten günstigen Fenstersensoren haben gar kein off.

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

Sidey

Zitat von: Ralf9 am 09 Juni 2016, 08:56:07
"return undef;"  durch
return "";
zu ersetzen?

Hmm, bin ich etwas unsicher muss ich zugeben.
undef ermöglicht ja einem anderen logischen Modul mit den Daten zu arbeiten.
Geben wir etwas anderes zurück, dann kann es von einem anderen Modul nicht mehr bearbeitet werden.

Die Frage ist, soll ein anderes Modul die Daten noch empfangen können, wenn der crc nicht stimmt. Derzeit kennen wir kein Gerät, was als P12 erkannt wird, dann aber keines ist.

Wir könnten aber alternativ mal überlegen ob wir nicht ein Catch all Modul entwickeln oder das SIGNALduino_un einfach dafür verwenden.
Das müsste eigentlich immer erst am Schluss mit den Nachrichten versorgt werden. Dort könnten wir die dann auch ordentlich entsorgen.


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

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

Sidey

Zitat von: habeIchVergessen am 09 Juni 2016, 00:02:44
clock für Manchester senden ist 690 (s. SM).

Ich habe herausgefunden, wie es bei einer niedrigeren clock nicht klappt:
https://github.com/RFD-FHEM/SIGNALDuino/commit/5b9a7d93948f4eb8007f5e26d641c3f56e2377b4

Code ist angepasst, ich teste das jetzt mal und entscheide dann, ob es so schon für eine neue Firmware taugt.

Zitat von: habeIchVergessen am 09 Juni 2016, 00:02:44
Daraus ergeben sich im ersten SR für
P0=-2760   -4 * clock
P1=2760    4 * clock
P2=4830    7 * clock
P3=-690

Ja, den P3 habe ich weggelassen, da ich das schon in der Manchester Codierung umgesetzt habe.

Zitat von: habeIchVergessen am 09 Juni 2016, 00:02:44
und im zweiten SR für P0 -33.810 (-49 * clock).
Es handelt sich um eine 16 Bit Variable, in der ich das speichern möchte. -32768 wäre da der Minimalwert.
Ob diese lange Pause des nichts Sendens wirklich notwendig ist. Ich nehme an, nein. Wenn doch, kann man auch P0=-16900 und D=00 schreiben.
So kommt man auf 33800... 30000 wird aber auch dicke langen.



Zitat von: habeIchVergessen am 09 Juni 2016, 00:02:44
Was empfängt sduino, wenn ein CUL sendet?

Das muss jemand testen der so ein Gerät hat.

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

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

habeIchVergessen

so habe mit sduino

2016.06.10 01:10:32 4: sduino/msg READ: SC;R=6;SR;P0=-2720;P1=2720;P2=4760;P3=-680;D=1010101010101023;SM;C=690;D=A1B1B1B02A1200;SR;P0=-4760;D=0000000;
2016.06.10 01:11:45 4: sduino/msg READ: MU;P0=715;P1=-372;P2=2789;P3=-2660;P4=4820;P5=-1352;P6=1410;P7=-663;D=01232323232323456567070705076507670705076507670705076507670707070705656567070705670567070707070707070;CP=0;
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 21 -> einhell garagedoor matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 26 -> remote26 matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 27 -> remote27 matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 28 -> IC Ledspot matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 31 -> pollin isotronic matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 36 -> socket36 matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 39 -> X10 Protocol matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 42 -> MKT motionsensor matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 5 -> unitec6899 matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 8 -> TX3 Protocol matches, trying to demodulate
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 9 -> CTW 600 matches, trying to demodulate
2016.06.10 01:11:45 4: sduino/msg READ: MU;P0=-32001;P1=2754;P2=-2694;P3=4788;P4=-1411;P5=1351;P6=-728;P7=654;D=012121212121212345456767674765476567674765476567674765476567676767674545456767674567456767676767676767;CP=7;
2016.06.10 01:11:45 4: sduino: Fingerprint for MU Protocol id 21 -> einhell garagedoor matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 26 -> remote26 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 27 -> remote27 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 28 -> IC Ledspot matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 31 -> pollin isotronic matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 36 -> socket36 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 39 -> X10 Protocol matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 42 -> MKT motionsensor matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 5 -> unitec6899 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 8 -> TX3 Protocol matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 9 -> CTW 600 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino/msg READ: MU;P0=-32001;P1=2705;P2=-2745;P3=4736;P4=-1428;P5=1335;P6=-732;P7=651;D=012121212121212345456767674765476567674765476567674765476567676767674545456767674567456767676767676767;CP=7;
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 21 -> einhell garagedoor matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 26 -> remote26 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 27 -> remote27 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 28 -> IC Ledspot matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 31 -> pollin isotronic matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 36 -> socket36 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 39 -> X10 Protocol matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 42 -> MKT motionsensor matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 5 -> unitec6899 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 8 -> TX3 Protocol matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 9 -> CTW 600 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino/msg READ: MU;P0=-32001;P1=2712;P2=-2735;P3=4752;P4=-1403;P5=1360;P6=-715;P7=667;D=012121212121212345456767674765476567674765476567674765476567676767674545456767674567456767676767676767;CP=7;
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 21 -> einhell garagedoor matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 26 -> remote26 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 27 -> remote27 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 28 -> IC Ledspot matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 31 -> pollin isotronic matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 36 -> socket36 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 39 -> X10 Protocol matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 42 -> MKT motionsensor matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 5 -> unitec6899 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 8 -> TX3 Protocol matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 9 -> CTW 600 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino/msg READ: MU;P0=-32001;P1=2718;P2=-2730;P3=4756;P4=-1400;P5=1365;P6=-711;P7=669;D=012121212121212345456767674765476567674765476567674765476567676767674545456767674567456767676767676767;CP=7;
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 21 -> einhell garagedoor matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 26 -> remote26 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 27 -> remote27 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 28 -> IC Ledspot matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 31 -> pollin isotronic matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 36 -> socket36 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 39 -> X10 Protocol matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 42 -> MKT motionsensor matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 5 -> unitec6899 matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 8 -> TX3 Protocol matches, trying to demodulate
2016.06.10 01:11:46 4: sduino: Fingerprint for MU Protocol id 9 -> CTW 600 matches, trying to demodulate
2016.06.10 01:11:47 4: sduino/msg READ: MU;P0=-32001;P1=2724;P2=-2725;P3=4760;P4=-1400;P5=1365;P6=-711;P7=669;D=012121212121212345456767674765476567674765476567674765476567676767674545456767674567456767676767676767;CP=7;
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 21 -> einhell garagedoor matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 26 -> remote26 matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 27 -> remote27 matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 28 -> IC Ledspot matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 31 -> pollin isotronic matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 36 -> socket36 matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 39 -> X10 Protocol matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 42 -> MKT motionsensor matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 5 -> unitec6899 matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 8 -> TX3 Protocol matches, trying to demodulate
2016.06.10 01:11:47 4: sduino: Fingerprint for MU Protocol id 9 -> CTW 600 matches, trying to demodulate


und minuCUL gesendet

2016.06.10 01:30:07 5: Cmd: >set miniCUL raw YsA110000112389A<
2016.06.10 01:30:07 3: set miniCUL raw YsA110000112389A
2016.06.10 01:30:07 5: SW: YsA110000112389A
2016.06.10 01:30:07 5: Triggering miniCUL (1 changes)
2016.06.10 01:30:07 5: Starting notify loop for miniCUL, first event raw YsA110000112389A
2016.06.10 01:30:07 5: Notify from Device: miniCUL recieved
2016.06.10 01:30:07 4: sduino/msg READ: MC;LL=-1246;LH=1316;SL=-651;SH=707;D=50D8D8D8150900;C=674;L=56;
2016.06.10 01:30:07 4: sduino/msg READ: MC;LL=-1322;LH=1244;SL=-732;SH=640;D=50D8D8D814;C=627;L=39;
2016.06.10 01:30:07 4: sduino/msg READ: MC;LL=-1294;LH=1281;SL=-687;SH=677;D=50D8D8D8150900;C=652;L=56;
2016.06.10 01:30:07 4: sduino: Found manchester Protocol id 43 clock 652 -> Somfy RTS
2016.06.10 01:30:07 4: sduino/msg READ: MC;LL=-1279;LH=1294;SL=-678;SH=686;D=50D8D8D8150900;C=659;L=56;
2016.06.10 01:30:07 4: sduino: Found manchester Protocol id 43 clock 659 -> Somfy RTS
2016.06.10 01:30:07 4: sduino/msg READ: MC;LL=-1279;LH=1294;SL=-673;SH=689;D=50D8D8D8150900;C=660;L=56;
2016.06.10 01:30:07 4: sduino: Found manchester Protocol id 43 clock 660 -> Somfy RTS
2016.06.10 01:30:08 5: CUL/RAW: /YsA11000019A3812
2016.06.10 01:30:08 5: CUL/RAW: YsA11000019A3812/

2016.06.10 01:30:08 4: CUL_Parse: miniCUL YsA11000019A3812
2016.06.10 01:30:08 5: miniCUL dispatch YsA11000019A3812
2016.06.10 01:30:08 4: SOMFY rollo stop
2016.06.10 01:30:08 5: Triggering rollo (3 changes)
2016.06.10 01:30:08 5: Starting notify loop for rollo, first event enc_key: A1
2016.06.10 01:30:08 5: Notify from Device: rollo recieved
2016.06.10 01:30:08 4: sduino/msg READ: MC;LL=-1278;LH=1297;SL=-674;SH=689;D=50D8D8D8150900;C=661;L=56;
2016.06.10 01:30:08 4: sduino: Found manchester Protocol id 43 clock 661 -> Somfy RTS


und jeweils mit LogikAnalyse aufgezeichnet. Sieht für mich ähnlich aus (ich vergleiche da nur Striche).

miniCUL: 50D8D8D8150900 shl 1 ist das erwartete Ergebnis (A1B1B1B02A1200).
sduino: was in den MUs steht, entspricht ja durchaus dem Gesendeten. Nur kann da kein MC detektiert werden.

Ralf9

Zitat von: Sidey am 09 Juni 2016, 23:18:49
Die Frage ist, soll ein anderes Modul die Daten noch empfangen können, wenn der crc nicht stimmt. Derzeit kennen wir kein Gerät, was als P12 erkannt wird, dann aber keines ist.

Das müsste dann ja ein Sensor sein, der auch einen Header von 0x75 hat, dies dürfte recht unwahrscheinlich sein.
Ich fände es besser, wenn wir anstatt "return undef;"
return "";
verwenden würden.
Falls es dann doch so einen Sensor geben sollte, der von einem anderes Modul verarbeitet werden soll, ist dies schnell wieder zurückgeändert.

Beim Cul erscheint, wenn die crc nicht stimmt, im log:
2016.06.08 20:10:22 3: CUL_0: Unknown code P12#752BBA4AD7BE3C511F07, help me!

Wem dies stört, der muß z.Zt. beim return das undef durch "" ersetzen und ein:
exclude from update" 14_Hideki.pm

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

Sidey

Ich wollte es halt mal für alle Protokolle lösen, stimmt aber, dass es dann nicht für den CUL klappt.
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

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

Sidey

Zitat von: habeIchVergessen am 10 Juni 2016, 01:49:56
sduino: was in den MUs steht, entspricht ja durchaus dem Gesendeten. Nur kann da kein MC detektiert werden.

Mein fix hat noch nicht geholfen.
Ich muss mir wohl was anderes überlegen, diese Preamble vor dem eigentlichen MC Signal ist das Problem. Die bringt die Berechnung des Taktes durcheinander.

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

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

habeIchVergessen

habe noch ein wenig mir der Debug-Option gespielt (Sketch).


Message received:

Sync: 15948 -> SyncFact: 25.56, Clock: 624, Tol: 62, PattLen: 8 , Pulse: -32001, 624, mStart: 0, MCD: 0
Signal: 0102323231320132023231320132023231320132023232323231010102323231023102323232323232323454545454545454710102323231320132023231320132023231320132023232323231010102323231023102323232323232323.  [187]
Pattern:  P0: 26*[,1331] P1: 25*[,-1383] P2: 60*[,-734] P3: 60*[,624] P4: 8*[,-3044] P5: 7*[,2733] P6: 0*[] P7: 1*[,4768]
MU/MC check: mcrst:mcrst:  --  chk MC -- 0 1 2 3 4 5 6 7 equalcnt: 1  MC equalcnt matched  MC neg and pos pattern cnt is equal  tstclock: 651 MC LL:1, MC LH:0, MC SL:2, MC SH:3
  -- MC found --

enter ManchesterpatternDecoder::doDecode
mlen:187:mstart: 0 signal:LlLsSsSsSlSsLlSsLsSsSlSsLlSsLsSsSlSsLlSsLsSsSsSsSsSlLlLlLsSsSsSlLsSlLsSsSsSsSsSsSsSsSH(vcnt:55:mpos:85:mstart:0:mend:85:found: MC found: 
MC;LL=-1383;LH=1331;SL=-734;SH=624;D=A1B1B1B02A1200;C=651;L=55;
Message received:


Sketch:     LlLsSsSsSlSsLlSsLsSsSlSsLlSsLsSsSlSsLlSsLsSsSsSsSsSlLlLlLsSsSsSlLsSlLsSsSsSsSsSsSsSsS
Theorie: sLlLsSsSsSlSsLlSsLsSsSlSsLlSsLsSsSlSsLlSsLsSsSsSsSsSlLlLlLsSsSsSlLsSlLsSsSsSsSsSsSsSsSs

Wie man sehen kann, fängt eine Nachricht immer mit einem s/S an (in der Theorie). Ein praktischer Test hat das aber nicht bestätigt (ManchesterpatternDecoder::doDecode - "Start vom MC Signal suchen" nur auf Short oder Long).

Außerdem fällt auf, dass scheinbar zwei Nachrichten in "Signal: " enthalten sind (45454545454545471 sollte der Vorspann also 1. SR + halber Pulse vom ersten Bit sein).

Sidey

Hi,

Danke fürs mithelfen.
Das 1. Bit muss nicht mit der Raw Message manipuliert werden.
Das sollte der Sendecode automatisch machen. Bei mir klappt das auch.

Im Nachrichtenpuffer können auch mehrere Wiederholungen sein, das ist korrekt.

Es gibt Dokumentationen, dass man sich auf ein Manchester Signal nur mit einem long syncen kann. Das Führt in diesem Fall aber zu einer falschen Demodulation, deshalb habe ich es angepasst.

Was den Bug mit der Clock angeht. Der steckt in der Methode isManchester.
In dieser Funktion wird auf Basis des Musterpuffers der Takt bestimmt und noch ein paar andere Prüfungen vollzogen.

Das funktioniert leider nicht richtig, da die Preamble zu einer falschen Erkennung führt.
Das hat bislang immer ganz gut funktioniert, da der Musterpuffer früher nur 6 Werte aufnehmen konnte. Mittlerweile sind es 8.

Mir ist noch keine Lösung eingefallen, wie man hier die richtigen findet.
Ich denke in die Richtung, dass ich jeden Pulslänge (nur poaitive) gegen jeden anderen vergleiche.
Die mit der besten Übereinstimmung (man müsste also etwas berechnen), ist dann die Clock..

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

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

Ralf9

Zitat von: Sidey am 11 Juni 2016, 09:37:54
Mir ist noch keine Lösung eingefallen, wie man hier die richtigen findet.
Ich denke in die Richtung, dass ich jeden Pulslänge (nur poaitive) gegen jeden anderen vergleiche.
Die mit der besten Übereinstimmung (man müsste also etwas berechnen), ist dann die Clock..

Wenn ich das richtig sehe, dann müsste doch der Clock die kleinste Pulslänge sein.
Die Ermittlung des clocks müsste sich vereinfachen, wenn man annimmt, daß der clock max 2000 sein kann.

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

Ein Vorteil von Manchester ist ja der ausgeglichene Energieverbrauch  (sprich Anzahl von low und high shorts ist gleich). Alles was >= 3x clock/short ist, ist unzulässig und somit Anfang/Ende vom Signal.

Sidey

Kann man so leider nicht genau sagen.

Grundsätzlich könnte man die maximale clock über die Baudrate berechnen. Bei 300 baud liegt die aber ganz bestimmt über 1300 uS.

Als Workaround müsste man die Clock verwerfen, wenn >1000 uS. Das würde helfen.
Richig erkennen wäre aber so immer noch nicht sichergestellt.

Mir kommt folgende Idee:

Alle Einträge im Musterpuffer aufsteigend sortieren.
Der 1. Positive Puls wäre dann eine valide clock.
Mit dem Wert könnte man alle restlichen Pulse prüfen in der Art (1* Pulslänge oder 2* Pulslänge).

Finden sich nicht alle Pulse wird mit dem 2. Positiven Puls gerechnet....

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

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

habeIchVergessen

#1767
eine Idee, wie Clock in einer sortierten Liste der Frequenzen Pulse ermittelt werden kann.

kurz: Summe abs 2 * Long und 2 * Short / 6 => clock. Die dann gegen die Einzelfrequenzenpulse testen.


void test() {
  int pattern[maxNumPattern];
  byte sorted[maxNumPattern];

  pattern[0] =  1331;
  pattern[1] = -1383;
  pattern[2] =  -734;
  pattern[3] =   624;
  pattern[4] = -3044;
  pattern[5] =  2733;
  pattern[6] =  4768;
  pattern[7] =   128;

  // init
  sorted[0] = 0;
  byte pCnt = 8;
  byte sCnt = 1;
 
  for (byte p=1; p<pCnt; p++) {
    for (byte s=0; s<sCnt; s++) {
      if (abs(pattern[p]) > abs(pattern[sorted[s]])) {
        for (byte r=sCnt; r>s; r--) {
          sorted[r] = sorted[r - 1];
        }
        sorted[s] = p;
        sCnt++;
        break;
      }
    }

    if (sCnt == p) {
      sorted[p] = p;
      sCnt++;
    }
  }

  int clock, clockIdx;
  for (byte p=0; p<pCnt - 3; p++) {
    clock = (abs(pattern[sorted[p]]) + abs(pattern[sorted[p+1]]) + abs(pattern[sorted[p+2]]) + abs(pattern[sorted[p+3]])) / 6;

    if (
      // two longs
      abs(abs(pattern[sorted[p]]) - 2 * (float)clock) / clock <= 0.1 && abs(abs(pattern[sorted[p+1]]) - 2 * (float)clock) / clock <= 0.1 &&
      // two shorts
      abs(abs(pattern[sorted[p+2]]) - (float)clock) / clock <= 0.1 && abs(abs(pattern[sorted[p+3]]) - (float)clock) / clock <= 0.1
    ) {
      // we found a clock
      clockIdx = p;
      break;
    } else {
      clock = -1;
    }
  }
 
  Serial.print("\n\nTest clock: ");
  Serial.print(clock);Serial.print(" ");
  for (byte p=0; p<pCnt; p++) {
    Serial.print(sorted[p]);
    Serial.print(" ");
    Serial.print(pattern[sorted[p]]);
    Serial.print(", ");
  }
  Serial.println();
}


Ausgabe:

Test clock: 678 6 4768, 4 -3044, 5 2733, 1 -1383, 0 1331, 2 -734, 3 624, 7 128,

habeIchVergessen

@Sidey:

ich habe mal den ManchesterpatternDecoder so umgestaltet, dass ich verstehen kann, was passiert (neuer Branch dev-r32-mctest).
was ist neu:

  • Preamble Erkennung (clock-basiert)
  • Erkennung long auf Pulsegrenze
  • clock-Berechnung basierend auf den bekannten Pulsen

Wenn Nachrichten günstig im Buffer liegen, können alle bisher betrachteten Sendearten (CUL, SD SM/SC:SR:SM/SC:SR:SM:SR) ordentlich empfangen werden.
Leider scheint die Verwaltung vom Buffer sehr eng mit der alten Implementierung verwoben zu sein und bereitet mir ordentlich Probleme.

Ggf. findest du die Zeit, um es dir mal anzuschauen.

Sidey

Zitat von: habeIchVergessen am 17 Juni 2016, 13:16:43
Ggf. findest du die Zeit, um es dir mal anzuschauen.

Hallo habeIchVergessen,

erst einmal vielen Dank, dass Du dich so konstruktiv mit einbringst.
Ich schaue mir deinen code an. Auf Anhieb habe ich noch nicht alles verstanden. Am besten ich kommentiere in Github.

Ich hatte vor 2 Tagen die Funktion isManchester nach den letzten Erkenntnissen umgebaut.
https://github.com/RFD-FHEM/SIGNALDuino/commit/a5bacf59d793e72bc2bd3b4dd083ea6f3646893d

Die hast Du noch nicht, da wir parallel gearbeitet haben.

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

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