FSK mit dem SIGNALDuino

Begonnen von Ralf9, 22 Dezember 2019, 17:30:36

Vorheriges Thema - Nächstes Thema

Ralf9

Ab meiner firmware V 3.3.4.
https://forum.fhem.de/index.php/topic,82379.msg1010643.html#msg1010643
und
V 4.x.x
https://forum.fhem.de/index.php/topic,106278.msg1001477.html#msg1001477
ist auch ein Empfangen und Senden von FSK modulierten Signalen möglich. Es gibt auch 10 EEPROM Speicherbänke in denen die cc1101 Register gespeichert werden können.


Der sduino hat die Option, verschiedene Funk-Modi für die dauerhafte Nutzung zu speichern und zwischen den gespeicherten Funk-Modi per raw-Befehl flexibel und einfach umzuschalten.
In dem übernächsten Beitrag sind noch weitere Funk-Modi aufgeführt
u.a.
1. Empfang von IT+ Protokoll(Lacrosse Sensoren; FSK-Modulation bei 17.241 und 9.579 kbps)
2. Senden/Empfang von PCA301 (Funkmesssteckdosen bisher in der Regel nur per Jeelink oder LaCrosse Gateway zu empfangen)
3. Kopp Free Control

hier sind weitere Infos zu FSK mit dem SIGNALDuino:
https://forum.fhem.de/index.php/topic,106594.msg1150650.html#msg1150650


Für die einfache u. flexible Umschaltung werden im EEPROM (z.B. Nano oder Promini) 10 Speicherbänke, die mit 0-9 adressiert werden, genutzt. Die firmware des sduino hat zur Verwaltung die folgenden raw-Befehle:
- get raw e<0-9>je nach Speicherbank; der Befehl initialisiert und aktiviert die jeweilige Speicherbank mit Standard-Settings[FactoryReset])
- get raw b<0-9> je nach Speicherbank; der Befehl aktiviert die angegebene Speicherbank, dazu wird der cc1101 mit den in der Speicherbank gespeicherten Registern initialisiert.
   mit nachgestelltem W, also set raw bNW, wird die "Standard-Bank" dauerhaft im EEPROM gespeichert, so dass der sduino immer in diesem
   Modus startet
- get raw CW, damit kann eine folge von cc1101 Registern gesetzt und in die aktuelle EEPROM Speicherbank geschrieben werden.
-  get raw b oder b?   damit wird eine Info über die aktive Speicherbank ausgegeben




Ab der firmware 4.x (z.Zt. nur für den Maple Mini) werden auch bis zu vier cc1101 Module und ein LAN-Modul unterstützt
https://forum.fhem.de/index.php/topic,106278.0.html

Für die zusätzlichen cc1101 gibt es die folgenden raw Befehle:

CR - configRadio
MIt CRE<A-D> kann ein cc1101 Modul aktiviert werden. z.B. CREA aktiviert das erste cc1101 Modul A
MIt CRD<A-D> kann ein cc1101 Modul deaktiviert werden. z.B. CRDA deaktiviert das erste cc1101 Modul A

Der Befehl b wurde erweitert:
b <A-D><0-9>  damit wird ein cc1101 (A-D) mit einer Speicherbank (0-9) initialisiert. z.B. mit bA3 wird das das erste cc1101 Modul A mit der Speicherbank 3 initalisiert.
b<A-D> damit wird ein cc1101 (A-D) selektiert. Die Befehle zum lesen und schreiben vom EEPROM und cc1101 Registern werden auf das selektierte cc1101 angewendet. Z.B. mit bA wird das erste cc1101 Modul A selektiert.




Ein FSK Sendekommando sieht so aus:
SN;R=13;N=4;D=07FA5E1921CC0F02F0000000000000;
13 Wiederholungen
Mit N=4 wird angegeben, dass mit dem cc1101 Modul gesendet wird, das der Kopp Free Controll Speicherbank zugeordnet ist. Wenn z.B. die Bank 4 für Kopp verwendet wird und mit bA4 das cc1101 Modul A der Bank 4 zugeordnet ist, dann wird das cc1101 Modul A zum Senden verwendet.

Eine raw Nachricht sieht z.B. so aus:
MN;D=07FA5E1721CC0F02FE000000000000;N=4;
Mit dem N=4 kann das 00_Signalduino Modul die raw Nachricht der Protocol ID 102 zuordnen und entsprechend weiter verarbeiten.




Für die FSK und EEPROM Speicherbank unterstützung ist eine angepasste und erweiterte Version der 00_SIGNALduino.pm und die signalduino_protocols.pm notwendig:
https://forum.fhem.de/index.php/topic,111653.msg1058900.html#msg1058900
https://github.com/Ralf9/RFFHEM/issues/4

In dem übernächsten Beitrag sind die die für FSK notwendigen Registeränderungen beschrieben.


Für einige Protokolle sind angepasste Module notwendig
- 101 (PCA 301)
https://github.com/Ralf9/36_PCA301.pm
- 102 (Kopp) siehe Anlage
und das angepasste und erweiterte Modul 14_SD_WS.pm:
- 107 (DP100,  WH51)
- 108 (Bresser 5in1)
- 115 (Bresser 5in1 neu und Bresser 6in1 )
- 116 (DP60, WH57)
- 204 (WH24 WH65A/B)
- 205 (WH25 WH25A)
- 206 (W136)
https://github.com/Ralf9/14_SD_WS/blob/main/FHEM/14_SD_WS.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

HomeAuto_User

Bitte ergänzen.
Laut http://www.panstamp.org/forum/showthread.php?tid=3070 ist noch bei

Mode 1 - IT+ 17.241 kbps
Mode 2 - IT+ 9.579 kbps


ein Synchronwort 0x2DD4 wichtig.
Das betrifft bestimmt

0x04 SYNC1
0x05 SYNC0

"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Ralf9

#2
hier gehts u.a. um die für FSK notwendigen Registeränderungen.

Ab meiner firmware V 3.3.4.0 dev 200121 gibts ein neues Kommando "CW", damit kann eine folge von cc1101 Registern gesetzt und in die aktuelle EEPROM Speicherbank geschrieben werden. Es kann damit auch gleich die Konfigvariable ccN (Adr 3D) und ccmode (Adr 3E) gesetzt werden.

Ab der Firmware 4.1.0-dev200427 und 3.3.4-dev200914 wurde der CW Befehl (cc register write) erweitert, es kann nun auch eine max 8 Zeichen (Adr 0x40 bis 0x47) Bankkurzbeschreibung ins EEPROM geschrieben werden.

Bevor die cc1101 Registersequenz an den sduino gesendet wird, muß der EEPROM Speicherbereich mit e oder e<0-9> mit einem Factoryreset initialisiert werden. Wird eine nicht initialisierte Bank aktiviert, dann wird die Bank automatisch mit Standard-Settings[FactoryReset]) initialisiert.

Bei meiner Variante der 00_SIGNALduino.pm gibts seit 03.11.20 ein "set sduino rfmode", damit wird dann die ausgewählte Registersequenz mit dem CW Befehl gesendet.
Für die Firmware V3.3.5 und V4.2.2 gibts auch optimierte cc1101 Registerkonfigurationen "set sduino rfmodeTesting"

Hier ist eine Übersicht der rfmodes
https://ralf9.github.io/SD_rfmode.html

Die CW Befehle stehen in der ProtocolList und können auch mit "get sduino raw ..." oder im seriellen Monitor gesendet werden
https://github.com/Ralf9/RFFHEM/blob/dev/FHEM/lib/signalduino_protocols.pm

Mode 1 - IT+ 17.241 kbps und Mode 2 - IT+ 9.579 kbps (LaCrosse) sind aus der rf_native.c vom cul

Für ältere Versionen gibt es unten eine History.




Konfiguration von RaspII für async Mode von Kopp Free Control (GFSK)

ccreg 00: 0D 2E 2D 47 D3 91 3D 04 32 00 00 06 00 21 65 6A 
ccreg 10: 97 83 16 63 B9 47 07 00 18 14 6C 07 00 91 87 6B 
ccreg 20: F8 B6 11 EF 2A 16 1F 41 00 59 7F 3F 88 31 0B

reichen diese Register gegenüber default?

00  IOCFG2 0D  Serial Data Output. Used for asynchronous serial mode.
01  IOCFG1 2E 
02  IOCFG0 2D

0B  FSCTRL1 06
0C  FSCTRL0 00

10  MDMCFG4 97
11  MDMCFG3 83
12  MDMCFG2 16
13  MDMCFG1 63
14  MDMCFG0 B9
15  DEVIATN 47



History:

für ältere Versionen als V 4.1.0-dev200427 und 3.3.4-dev200914

Wichtig: Bevor die cc1101 Registersequenz an den sduino gesendet wird, muß der EEPROM Speicherbereich mit e oder e<0-9> mit einem Factoryreset initialisiert werden.

Mode 1 - IT+ 17.241 kbps (LaCrosse)  -  ccN=0,  ccmode=3
get sduino raw CW0001,012E,0246,0302,042D,05D4,06FF,0700,0802,0D21,0E65,0F6A,1089,115C,1206,1322,14F8,1556,1700,1818,1916,1B43,1C68,1D91,2211,23E9,242A,2500,2611,3D00,3E03

Mode 2 - IT+ 9.579 kbps (LaCrosse)   -  ccN=2,  ccmode=3

get sduino raw CW0001,012E,0246,0302,042D,05D4,06FF,0700,0802,0D21,0E65,0F6A,1088,1182,1206,1322,14F8,1556,1700,1818,1916,1B43,1C68,1D91,2211,23E9,242A,2500,2611,3D02,3E03


Mode 3 - PCA 301 - 868.9500MHz, 6.631kbps  -  ccN=3,   ccmode=3
get sduino raw CW0001,012E,0246,0307,042D,05D4,06FF,0700,0802,0D21,0E6B,0FD0,1088,110B,1206,1322,14F8,1553,1700,1818,1916,1B43,1C68,1D91,2211,23E9,242A,2500,2611,3D03,3E03

Kopp Free Control Datarate: 4785,5 Baud (GFSK)  -  ccN=4,   ccmode=2
get sduino raw CW0001,012E,0206,0304,04AA,0554,060F,07E0,0800,0D21,0E65,0F6A,1097,1183,1216,1363,1547,170C,1829,1936,1C40,1D91,23E9,242A,2500,3D04,3E02

ECOWITT/FineOffset WH51 - Datarate: 17.241 kbps   -  ccN=6,   ccmode=3
CW0001,012E,0246,0303,042D,05D4,06FF,0700,0802,0D21,0E65,0FE8,1009,115C,1206,1322,14F8,1556,1700,1818,1916,1B43,1C68,1D91,2211,23E9,242A,2500,2611,3D06,3E03

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

plin

Ich habe gerade noch mal den minimalistischen Ansatz verfolgt: Zurück zu SIGNALDuino_nanocc1101_331rc7.hex, Register 12 auf GFSK bzw. 2-FSK geändert und bei ccconf: freq:868.275MHz bWidth:650KHz rAmpl:42dB sens:4dB (DataRate:5603.79Baud, Modulation:GFSK)
empfange ich jetzt MU-Nachrichten.

Der SDUINO hat das Register auf
0x12 MDMCFG2  - 0x30 -> 00110000 (ASK/OOK)
gesetzt.

Die für FSK relevanten Varianten sind
00000000 (2-FSK)
00010000 (GFSK)
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

RaspII

#4
Ich habe noch ein paar Fragen:
Welchen SDR Stick hast Du?, dabei geht es mir um die Genauigkeit der Frequenz

Bzgl. Der Datenrate:  Im Datenblatt deines Senderchips steht 20khz
, bist Du Dir bei  2482 Baud ganz sicher?

Nachtrag:
Kannst du nicht den Originalsender  zum Testen mit der culfw nehmen?
RaspII

plin

Zitat von: RaspII am 24 Dezember 2019, 10:47:53
Welchen SDR Stick hast Du?, dabei geht es mir um die Genauigkeit der Frequenz
E4000 USB DVB-T RTL-SDR Realtek RTL2832U R820T DVB-T Tuner Receiver

Zitat von: RaspII am 24 Dezember 2019, 10:47:53
Bzgl. Der Datenrate:  Im Datenblatt deines Senderchips steht 20khz
, bist Du Dir bei ca. 2khz ganz sicher?
Die ca. 2.500 Baud habe ich aus den empfangenen Daten errechnet.

Zitat von: RaspII am 24 Dezember 2019, 10:47:53
Kannst du nicht den Originalsender  zum Testen mit der culfw nehmen?
Ich teste immer mit dem Original-Sender der RIO FB. Ich muss meinen SDUINO dann gleich noch mal auf die culfw umschießen. Ist die V 1.67 die geeignete Version?
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

RaspII

Den E4000 Stick habe ich auch, der hat gegenüber den Professionellen Sticks aber eine nicht unerhebliche Frequenzabweichung.
Falls Du den Offset noch nicht ermittelt hast, hier steht wie es geht (den Offset dann bei SDRSharp eingeben.
https://www.turais.de/ein-rtl_sdr-mit-kalibrate-sdr-kalibrieren

Bzgl. NanoCUL Firmware gehe vor wie hier beschrieben und nehme auch die dort angehängte FW:
https://forum.fhem.de/index.php/topic,82379.msg1004482.html#msg1004482

Die culfw ist leider nicht so flexibel wie der Signalduino, ich müsst Dir deshalb ggf. Spezialversionen machen. Heute und die Feiertage habe ich aber nur limitierte Zeit (später am Abend), evt. die nächste Stunde noch sporadisch
RaspII

plin

Ich habe meinen SDUINO wieder auf Deine culfw aus dem Posting geändert, krS3 abgesetzt:
2019.12.24 11:52:38 3: set nanoCUL raw krS3
2019.12.24 11:52:38 5: SW: krS3
2019.12.24 11:52:38 5: CUL/RAW: /krS-ReceiveStart

Danach habe ich die Frequenz auf 868.275 MHz und bWidth auf 101 kHz geändert => kein Empfang von irgendwelchen Signalen
Dann die Frequenz auf 868.140 MHz abgeändert  => kein Empfang von irgendwelchen Signalen

>eine nicht unerhebliche Frequenzabweichung.
Deshalb will ich ja GFSK bzw. 2-FSK senden können. Mit URH und SDR kann ich dann schauen, ob das Spektrum der Original FB und des SDUINO auf denselben Frequenzen liegen. Mein letzter Stand vor einem Jahr hat 868.140 MHz als Trägerfrequenz ergeben.

FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

RaspII

Hallo,
Sorry, Du kannst die Frequenz nicht ändern, alle Parameter sind fest auf "Kopp" eingestellt.
Da die Firmware mit anderen Protokollen coexistiert, kann man noch die Befehle zum Ändern der Frequenz etc. absetzen, diese haben aber keine Auswirkung. Ich wollte das angehen, sofern ich eine Möglichkeit finde, dass die Kopp FW mit den anderen Protokollen gleichzeitig genutzt werden kann (das scheitert aktuell noch an den Empfangsparamentern)

D-h. ich  muss ich Dir jeweils eine Spezialversionen bauen. Das macht aber nichts, damit sollten wir schnell weiterkommen, sofern wir die genaue Sendefrequenz kennen.

Ich lese mal das Datenblatt des TDK5110 genauer studieren und Dir dann eine Version bauen.
Schön wäre, wenn Du bis dahin die genaue Frequenz via RTL SDR ermitteln könntest (wie oben beschrieben den offset ermitteln, dann ist das Ding genau genug).

Wenn ich das Datenblatt richtig verstanden habe (ich habe nur mit dem Handy reingeschaut), geht es erst bei 834MHz los.

RaspII

plin

#9
@RaspII:

Zwischendurch mal wieder ein kleiner Versuch mit SDUINO V 3.3.4-dev:

  • Reg12: W1410 -> GFSK
  • Reg15: W1740 -> Deviation = 25 kHz
  • ccconf: freq:868.307MHz bWidth:58KHz rAmpl:42dB sens:4dB (DataRate:5603.79Baud, Modulation:GFSK)

Ich kann mit der bWidth 58 kHz MU-Signale empfangen. Bei einer Deviation von 25 kHz sieht das Sendesignal optisch schon ganz ansprechend aus (siehe Anlagen).

Ich muss jetzt erst mal schauen, ob ich unter den Rahmenbedingungen komplette Codesequenzen empfangen und dekodieren kann. Die bisherigen Signale sehen noch nicht so sauber aus.

Die eigene culfw lohnt sich meines Erachtens erst, wenn ich weiß wie das Zielsignal aussehen soll.
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

HomeAuto_User

Hallo,
schaut mal bitte nach Deviation & Datenrate. Da gibt es unter Umständen Abhängigkeiten.

Schaut mal hier Bsp. https://www.silabs.com/community/wireless/proprietary/knowledge-base.entry.html/2015/02/17/calculation_of_theo-S9wI


Gesendet von iPhone mit Tapatalk Pro
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

RaspII

@plin
Zeigt SDR# für dein FB und den Sduino die selbe Frequenz?
RaspII

RaspII

Wenn es Dir nur um FSK senden geht, dann schicke den String:
kt30F96E0110000J
Zu meiner Firmware

(Dann siehst Du auch gleich das Frequenz-Delta)
RaspII

plin

Zitat von: RaspII am 24 Dezember 2019, 13:14:53
@plin
Zeigt SDR# für dein FB und den Sduino die selbe Frequenz?
ja, die beiden Screenshots sind mit denselben Einstellungen geschossen worden. Die beiden Frequenzspitzen  liegen in beiden Fällen bei ca. 868.249 MHz (low) und ca. 868.300 MHz (high).
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

plin

Zitat von: HomeAuto_User am 24 Dezember 2019, 13:12:30
Hallo,
schaut mal bitte nach Deviation & Datenrate. Da gibt es unter Umständen Abhängigkeiten.
ja, das wurde mir bei der Nutzung des RF Studios auch sehr schnell bewusst. Deshalb glaubte ich einen ganzen Satz von Registeränderungen durchführen zu müssen, um ins Ziel zu kommen. Vor einem Jahr mit wenig Erfolg. Mit meinen wenigen Änderungen scheine ich aber auf einem guten Weg zu sein.
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB