RFLink na ESP - odczyt/sterowanie urządzeniami RF 433MHz z D1 mini

Projekt RFLink ma już swoje lata i wiąże się z zakupem dedykowanej bramki.
http://www.rflink.nl/blog2/easyha
Bazuje jednak na bibliotekach Arduino i odnalazłem projekt w oparciu o ESP8266 i ESP32 z komunikacją MQTT:

Jak nie skorzystać skoro w domu stacja pogodowa z radiowymi czujnikami temperatury i wilgotności. Na dodatek czujniki znajdują się na liście obsługiwanych urządzeń.
Pozostało zaopatrzyć się w jakiś odbiornik radiowy. Tu nie ma większego znaczenia co użyjemy. Ja zakupiłem zestaw STX882 ASK nadajnik + odbiornik SRX882 za całe 12,50 PLN.
Projekt wymaga kompilacji własnego pliku bin. Z pomocą VSC i PlatformIO IDE udało się skompilować plik pod płytkę Wemos D1 mini.

firmware.bin (673,0 KB)

Program posiada bardzo przyjemny i prosty webowy interfejs. To z niego dokonujemy całej konfiguracji, łącznie z przypisaniem GPIO i konfiguracją MQTT.




Po poprawnym podłączeniu odbiornika radiowego do D1 mini - zaczęły płynąć odczyty z moich czujników temperatury i wilgotności do brokera MQTT pod tematem dom/ESP00/msg
Pod taką postacią:

20;0A;F007_TH;ID=45b30;TEMP=0017;HUM=86;BAT=OK;
20;09;F007_TH;ID=45f82;TEMP=00f1;HUM=42;BAT=OK;

Do tego odszukany w czeluściach warsztatu czujnik ruchu G-Hama TYPE: RF302PIR:

20;0B;EV1527;ID=0203fa;SWITCH=01;CMD=ON;

Pozostało stworzyć encje w HA. Tu wielkie podziękowania dla mojego mistrza szablonów @Stravi :wave:
Jak zawsze Dawid służył swoją wiedzą i chęcią pomocy. I tak powstały cztery sensory:

obraz

#czujniki RF433
- platform: mqtt
  name: "RF_nord_temperatura"
  state_topic: "dom/ESP00/msg"
  unit_of_measurement: "°C"
  value_template: >-
        {% if "45b30" in value -%}
          {% set temp = value.split(';')[4][5:] -%}
          {% if (temp[:1] | int) > 0 -%}
            {% set temp = "-" + temp[1:] -%}
          {%- endif -%}
          {{temp |int(base=16) /10 }}
        {% else %}
          {{states('sensor.RF_nord_temperatura')}}
        {%- endif -%}
- platform: mqtt
  name: "RF_nord_wilgotnosc"
  state_topic: "dom/ESP00/msg"
  unit_of_measurement: "°C"
  value_template: >-     
        {% if "45b30" in value -%}
          {{value.split(';')[5][4:] }}
        {% else %}
          {{states('sensor.RF_nord_wilgotnosc')}}
        {%- endif -%}
- platform: mqtt
  name: "RF_strych_temperatura"
  state_topic: "dom/ESP00/msg"
  unit_of_measurement: "°C"
  value_template: >-
        {% if "45f82" in value -%}
          {% set temp = value.split(';')[4][5:] -%}
          {% if (temp[:1] | int) > 0 -%}
            {% set temp = "-" + temp[1:] -%}
          {%- endif -%}
          {{temp |int(base=16) /10 }}
        {% else %}
          {{states('sensor.RF_strych_temperatura')}}
        {%- endif -%}
- platform: mqtt
  name: "RF_strych_wilgotnosc"
  state_topic: "dom/ESP00/msg"
  unit_of_measurement: "%"
  value_template: >-     
        {% if "45f82" in value -%}
          {{value.split(';')[5][4:] }}
        {% else %}
          {{states('sensor.RF_strych_wilgotnosc')}}
        {%- endif -%}

oraz czujnik binarny (PIR):

obraz

#czujnik PIR RF433
  - platform: mqtt
    name: PIR_RF
    state_topic: dom/ESP00/msg
    device_class: motion
    force_update: true
    off_delay: 10
    value_template: >-     
        {% if "0203fa" in value -%}
          {{ "ON" }}
        {% else %}
          {{states('binary_sensor.pir_rf')}}
        {%- endif -%}

“inkludowane” do odpowiednich plików konfiguracji HA.
Proponuję wykonać własne próby z tym co się ma pod ręką. Otwarte protokoły radiowe wykorzystywane są w wielu różnych produktach i często się powtarzają.

5 polubień

Super ! Od czasu przesiadki na HA RFlink leży i się kurzy - mam ciągłe problemy z Mysensors .

Zamówiłem STX882 - idę w Twoje ślady !

Nasuwa się jednak kilka pytań - możliwe że już znasz odpowiedzi :

  1. Skoro jest to tak proste i tanie, to z czego wynika cena RFlinka ? Wydaje się że z pracy autorów nad rozpoznawaniem różnych sygnałów RF (nowych urządzeń pojawiających się na rynku - pojawiają się pewnie jako obsługiwane w kolejnych wersjach firmware)

  2. Jak wygląda aktualizacja, tzn. zakładam że pojawia się nowy firmware na rflink.nl , czy trzeba kompilować nowy bin dla wemosa ? Jak to zrobić ?

  3. na której wersji firmware Rflinka jest to zbudowane ? R48 ?

  4. Co z innymi częstotliwościami - 868MHz 2,4GHz ? Trzeba budować nowe urządzenie (kolejny Wemos), czy wystarczy podpiąć kolejny nadajnik / odbiornik ?

  5. dlaczego SRX882 a nie RXB6 tak jak w projekcie na github ?

  6. jak zasieg w porównaniu do RFlink (dokręcana duża antena ) ?

PS.
Aktualnie zrobiłem sobie bramkę 2,4Ghz do oświetlenia Milight na ESP. Też fajny projekt :

Witamy na forum.
Wiem tyle co przeczytałem na stronach projektów. Nie jestem programistą, a zwykłym dłubaczem chałupnikiem. Osiągnąłem zakładany cel, którym było zintegrowanie tego co mam już w domu z HA.
Postaram się odpowiedzieć na pytania…

To pytanie raczej do sprzedawcy, na jakiej podstawie wycenia produkt. Ale wątpię aby odpowiedział. Zasadniczo cena nie odzwierciedla często wartości poniesionych nakładów. Cena jest taka za jaką skłonny będziesz bramkę kupić. Jak widać na Twoim przykładzie - kupiłeś.

Jeśli chcesz nadal kupować nowe produkty w technologii radiowej, to może być problem. Widać po projekcie RFLink, że w naturalny sposób obumiera, bo zwyczajnie takich produktów jest coraz mniej. Zigbee, Z-Wave i na horyzoncie nowe standardy wypierają starsze bez mesh.
Więc jeśli działa, to nie będę się interesował aktualizacją tego. Dlatego też wolę projekty oparte o MQTT, ponieważ jest małe ryzyko, że jakaś aktualizacja HA to złamie. Ten protokół jest elastyczny w zastosowaniu. Był też na moim celowniki inny, starszy projekt (raptem 2 lata), ale “stare” biblioteki nie pozwalały mi na skuteczną kompilację pliku bin.

Co do samej kompilacji… obecnie korzystam z Visual Studio Code.
Prostym rozwiązaniem jest też użycie platformy Gitpod:

Nie mam pojęcia, raczej to nie jest kopia firmware, a wykorzystanie bibliotek, które o ile się zorientowałem, pochodzą z projektu Arduino.

Poczytaj na stronach projektów. RFLink chyba za wiele nowego nie wnosi, jak znajdziesz urządzenie na liście obsługiwanych, to trzeba szukać szczegółów na drugim projekcie z ESP.
Moim zdaniem najbardziej obiecującym i żywym obecnie jest projekt:

Jest trochę zawile opisany, ale ma gotowe binarki, pełne wsparcie dla HA i aktywne forum. Myślę, że niedługo RFLink zostanie wchłonięty przez nich, ale gdy jest sprzedaż u monopolisty, to pewnie łatwo się nie podda.

Bo miałem go w szufladzie i zadziałał, nie ma żadnych konkretnych wytycznych. Informacja na stronie:

Nie mam porównania. Ale to odbiornik, jak do niego doleci z nadajnika to odczyta (tak mi się zdaje). Nie widzę żadnego problemu. Najdalszy czujnik (nadajnik) ok. 20m od odbiornika, po drodze sporo ścian.
Antenka minimalistyczna.


Dzięki za szybką i wyczerpującą odpowiedź.

RF traktuję jako wsparcie dla starych urządzeń, jeżeli chodzi o komunikację bezprzewodową to tylko zigbee2mqtt .

1 polubienie

Witaj,

w którym miejscu konfigurowałeś GPIO? Panel Radio?
Domyślne ustawienia mam takie same jak na Twoim screen-ie

Pozdrawiam
Paweł

Witamy na forum.

Tak, to ta zakładka - nawet nie zmieniałem konfiguracji. Numery odpowiadają numeracji GPIO. Domyślnie są przygotowane pod Odbiornik i nadajnik, dlatego jest dwie pary RX i TX.

obraz

Dzięki,
Czyli zostałeś na tych domyślnych ustawienia? mam z tym problem bo patrząc na tabelkę - powinienem się podpiąć pod D5-D8. Sygnał (data) na D7 - czyli GPIO 13 a w ustawieniach na GPIO 13 jest domyślnie TX Nmos. Natomiast RX Data jest na GPIO 12 - czyli D6.

Jak masz u siebie to podpięte? mam taki sam odbiornik.

Pozdrawiam
Paweł

Wychodzi na to, że nie… przepraszam ale nie pamiętam, a moduł mam w takim miejscu, że trudno i do niego się dostać. Chyba kierowałem się tą tabelą z dokumentacji:
obraz

Czyli wszystkie GPIO w zakładce jako nieużywane -1 za wyjątkiem GPIO13 (D7) w ustawieniu jako RX DATA
Zasilanie dla SRX882 dajesz 5V. Sygnał DATA z odbiornika jest z logiką 3,3V więc nie trzeba nic zmieniać.

Ok, wielkie dzięki - będzie testowane :wink:

niestety, wygląda na to, że odbiornik nic nie odczytuje. Połączenie z MQTT jest ale raportuje jedynie stan online/offline

Mam taki pomysł aby sprawdzić sam odbiornik. Podpiąć go pod konwerter TTL/UART do USB i sprawdzić na kompie jakimś serial monitorem czy sypie danymi. Wówczas zyskasz pewność, że działa.
Spróbuj z pinem D5, sprawdź wspólne masy i zapewnij dobre zasilanie. Tyle mogę podpowiedzieć.

Cześć,
podpowiedzcie proszę co robię nie tak, że mi mosquito broker w home assistancie nie widzi urządzenia.


inne urządzenia na tym samym module mqtt broker znalazł

Domyślam się, że broker masz poza bramką AIS i nie ma z nią nic wspólnego…
Więc raczej tylko pozostaje sprawdzić hasło i komunikację w programie MQTT Explorer.

Widać, że połączenie jest:

Co to oznacza, że znalazł.
W HA jeśli w MQTT nie ma komunikatu konfiguracji, to urządzenie nie zostanie rozpoznane.
Należy je (encje HA) stworzyć wówczas na podstawie przesyłanych danych z brokera do HA w pliku konfiguracji.
Tak jak np ja to zrobiłem w tym temacie (pierwszy post).

Polecam:

Widzę, że pytasz na innym forum ale odpowiem dokładniej tutaj:

Przykład konfiguracji sensorów w HA na bazie platformy MQTT
msg z brokera MQTT

20;0A;F007_TH;ID=45b30;TEMP=0017;HUM=86;BAT=OK;

sensor w konfiguracji HA przerabiający, za pomocą szablonu, część msg w nową encję RF_nord_temperatura

#czujniki RF433
- platform: mqtt
  name: "RF_nord_temperatura"
  state_topic: "dom/ESP00/msg"
  unit_of_measurement: "°C"
  value_template: >-
        {% if "45b30" in value -%}
          {% set temp = value.split(';')[4][5:] -%}
          {% if (temp[:1] | int) > 0 -%}
            {% set temp = "-" + temp[1:] -%}
          {%- endif -%}
          {{temp |int(base=16) /10 }}
        {% else %}
          {{states('sensor.RF_nord_temperatura')}}
        {%- endif -%}

Jeśli nie masz zapisów w w pliku configuration.yaml odsyłających do osobnych plików sensor.yaml, to pierwszy wiersz otwiera zapis sensor i dalej zachowanie składni YAML (wcięcia, spacje).
Więcej TU

# Example configuration.yaml entry
sensor:
  - platform: mqtt
    state_topic: "home/bedroom/temperature"

Szczegóły w dokumentacji HA

Przy Twoich danych wejściowych z MQTT będzie potrzebny jeszcze zapis wykorzystujący #szablony

Poniżej przykład z dokumentacji HA:

# Example configuration.yaml entry
sensor:
  - platform: mqtt
    name: "Timer 1"
    state_topic: "tele/sonoff/sensor"
    value_template: "{{ value_json.Timer1.Arm }}"
    json_attributes_topic: "tele/sonoff/sensor"
    json_attributes_template: "{{ value_json.Timer1 | tojson }}"
  - platform: mqtt
    name: "Timer 2"
    state_topic: "tele/sonoff/sensor"
    value_template: "{{ value_json.Timer2.Arm }}"
    json_attributes_topic: "tele/sonoff/sensor"
    json_attributes_template: "{{ value_json.Timer2 | tojson }}"

Zobacz jak zrobił to mistrz szablonów @Stravi, podaj zawartość msg (jako tekst sformatowany) z MQTT, a zaraz napiszemy sensor dla Ciebie :wink:.

1 polubienie

Dziękuję, zaraz do tego usiądę.

To może krok po kroku bo moja stara i siwa głowa zbyt wielu kroków na raz nie ogarnie :slight_smile:
Mój msg odczytany z MQTT Explorera wygląda tak:
msg = 20;D3;Xiron;ID=0902;TEMP=0084;HUM=55;BAT=LOW;CHN=0002; (widzę, że temp. zapisana jest jest jako wartość hex. Po zamianie na dec trzeba ją podzielić jeszcze przez 10, żeby otrzymać temp. w st. Celsjusza)

Napisz mi proszę na początek jak odczytać w HA całą zawartość msg na razie bez zajmowania się temperaturą itp. (sensor wypluwający zawartość msg)

Ten wiersz odpowiada za zamienię zapisu z szesnastkowego.

Zapis ustalający jednostkę:

unit_of_measurement: "°C"

To tak nie działa… Nie ma sensora, trzeba je tworzyć z otrzymywanych danych MQTT.
To co widzisz w MQTT Explorer w msg trafia w takiej samej formie do HA. Szablon pozwala wydobywać z tej wiadomości interesujące nas dane i zamienić na to co chcesz otrzymać jako dany, pojedyńczy czujnik w HA.


Broker MQTT nie przerabia wiadomości, on je tylko rozdziela w/g tematów i subskrypcji pomiędzy klientami. Jeśli HA słucha (subskrybuje) na danym temacie wiadomości z RFLink’a to ją otrzyma (bez zmian treści).
Czyli z jednej wiadomości msg tworzysz w HA zapisem w yaml czujnik temperatury, innym sensor dla baterii, a jeszcze innym czujnik wilgotności.
Jak działają szablony to może @Stravi lepiej przedstawi. Je nie jestem programistą i nie rozumiem tej składni, brakuje mi podstaw.
Powtórzę, wszystko powstaje na bazie tej samej wiadomości z czujnika radiowego w msg przesłanego po MQTT do HA.

Nie dotyczy tego przypadku ale warto wiedzieć:
Klient MQTT może opublikować dla HA wiadomość konfiguracyjną. W niej mogą być informacje przedstawiające urządzenie i od razu tworzą się gotowe encje.

Jeśli twórca projektu RFLink nie przewidział funkcji auto discavery dla zintegrowania z HA, to musisz sam skonfigurować i utworzyć encje z danych wejściowych w konfiguracji HA.

Przykład jak zrobiłem autodiscovery pod HA (w Tasmota) dla czujnika ruchu:

@andrzejski udało się ogarnąć czy w czymś pomóc?

Co do tego czym są szablony to polecam dokumentację HA. Tutaj na forum też już klika razy poruszaliśmy ten temat i starałem się zawsze pomóc znaleźć odpowiedni szablon, tylko potrzebuję dane, które mają być obrobione i co z nich ma być wyciągnięte.

Rozwiązane na innym forum z pomocą NR:

Doszedł kolejny pośrednik, ale co tam…