Arduino FS20 / FS20V / RFM69 library

Begonnen von Noname, 07 Juni 2020, 12:51:16

Vorheriges Thema - Nächstes Thema

Noname

Hallo,

ich stelle meine FS20 Arduino library für die Öffentlichkeit zur Verfügung.

Ich selbst habe noch FS20 Komponenten mit Rollo Aktoren, Funksteckdosen, Wetterstation usw. in Verwendung.
Alles funktioniert trotz LTE ohne Probleme, deswegen werde ich auch nicht auf Homematic oder ähnliches umstellen.
Da ich einige FS20 "Spezial" Aktoren benötigte habe ich meinen alten "BASECOM-AVR" Code versucht in eine
Arduino libary umzustellen. In "BASECOM-AVR" habe ich das RFM12 verwendete, für Arduino habe mich für den Nachfolger,
RFM69 entschieden.

Da ich das erste mal mit Arduino zu tun hatte, kann man sicherlich einiges einfacher Programmieren,
für Verbesserung bin ich immer offen!

Was kann man damit alles machen:
- Senden und Empfangen von FS20 (Standard ELV)
- Senden und Empfangen von FS20V (Messwertverarbeitung)

Als Beispiel sind 2 Projekte mit in der Libary:
- FS20_RFM69_SHT11_LowPower (Senden von Temperatur und Luftfeuchtigkeit, Batteriebetrieben)
- FS20_RFM69_mit_ext_Versorgung (Senden eins Zähler und Empfang eines Sollwert, Netzteil)

Meine Projekte:
- Mengenabhängige Bewässerung für die Terrasse
- Überwachung Garagentor mit Steuerung
- Temperatur und Feuchtigkeitssensor

bananas

Hallo,
schöne Lösung.
Ich habe deinen Code mal in einem 1-Kanal-Empfänger untergebracht und dabei den Hauscode, wie auch die Adresse im EEprom gespeichert. Hierbei ist mit allerdings aufgefallen, dass nicht alle Adressen gelesen (erkannt) werden.
Beispiel:  die FS20 Adresse 2211 (50)  funktioniert, die Adresse 2234 (5b) wird nicht erkannt. Das geschieht auch noch bei einigen anderen Adressen. Irgendwo muss da noch ein Fehler in der RFM69SlowRF stecken.
Das ist auch in deinen Beispielen so. Ist dir das auch mal aufgefallen?


Noname

Hallo,

hatte heute erst deine Nachricht bemerkt.

Ich habe das Beispiel FS20_RFM69_mit_ext_Versorgung.ini mit Adresse 5B getestet,
ich kann leider kein Fehler feststellen. (Arduino-1.8.12)

Ich habe den Wert 123 in Fhem gesetzt, der ist auch im Atmega angekommen.
Sofort nach dem Empfang wurde der Wert 0 zu Fhem zurückgesendet, war auch OK.

define Test_5b FS20V ABCD 5B
attr Test_5b IODev CUL
attr Test_5b model FS20V_Set
attr Test_5b room Test

siehe Arduino Werkzeug, Serieller Monitor:

14:33:35.526 -> Receive HC:ABCD ADR:5B BEF:80 ERW:7B Value:7B
14:33:37.532 -> Receive Value:123
14:33:37.581 -> init RFM69
14:33:37.581 -> 1 - 84 - 10000100
14:33:37.581 -> 2 - 68 - 1101000
14:33:37.581 -> 3 - 3 - 11
14:33:37.581 -> 4 - D1 - 11010001
14:33:37.581 -> 7 - D9 - 11011001
14:33:37.581 -> 8 - 16 - 10110
14:33:37.581 -> 9 - 66 - 1100110
14:33:37.581 -> 11 - 7F - 1111111
14:33:37.581 -> 13 - F - 1111
14:33:37.581 -> 19 - 4A - 1001010
14:33:37.581 -> 1B - 40 - 1000000
14:33:37.581 -> 29 - DC - 11011100
14:33:37.581 -> 1 - 8C - 10001100
14:33:37.581 -> 5A - 5D - 1011101
14:33:37.581 -> 5C - 7C - 1111100
14:33:38.129 -> send FS20_Receive_Value Result: 1
14:33:38.129 -> receive FS20

bananas

Ich habe den Eintrag:

Zitatif ((FS20_RX_Pos == 58 && FS20_RX_Bit[38] != 1 && FS20_RX_Bit[40] != 1) || FS20_RX_Pos == 67)

in
Zitatif ((FS20_RX_Pos == 58 && FS20_RX_Bit[38] <= 1 && FS20_RX_Bit[40] != 1) || FS20_RX_Pos == 67)

geändert. Damit werden auch alle Adressen geprüft, wo das Erweiterungsbit 1 ist.  ;D

Gruß


KölnSolar

Ich verlinke mal diese tolle Arbeit in die Bastelecke.
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Noname

Hallo bananas,

danke für die Info!

if ((FS20_RX_Pos == 58 && FS20_RX_Bit[38] <= 1 && FS20_RX_Bit[40] != 1) || FS20_RX_Pos == 67)

Leider kann ich deine Änderung nicht nachvollziehen. FS20_RX_Bit[38] kann nur den Wert 0 oder 1 haben.
<= kleiner 0 geht also gar nicht.

Wenn das Bit FS20_RX_Bit[38] 1 ist muss das Erweiterungsbyte ausgewertet werden, ist das Bit FS20_RX_Bit[38] 0
wird kein Erweiterungsbyte gesendet und es kann schon nach 58 Bits decodiert werden.

http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol

Kannst du mir deine Änderung nochmals etwas genauer erläutern?

Schöne Grüße


bananas

Hallo,

bin erst heute wieder zum Lesen gekommen...
Nun zur Antwort:   if ((FS20_RX_Pos == 58 && FS20_RX_Bit[38] != 1    ...... steht im Original so drin, Das bedeutet aber doch, dass Bit 38 nur !=1 (nicht gleich 1) also nur 0 kann und nie 1. Meine Änderung lässt 0 und 1 zu. (<=1 enthält 0 und  1) .

Sehe ich da was falsch?

Gruß

Noname

Hi Servus,
also wenn das bit 0 ist kann nach 58 Bit schon decodiert werden, da kein Erweiterungsbyte
eingeschoben wird. Ansonsten erst nach 67.
FS20_RX_Bit[38] == 0 könnte auch so geschrieben werden! Aber nicht FS20_RX_Bit[38] <= 1 so.