Egyirányú RF Bridge E1WRF-D (DIY)
2019. március 20. írta: eNeS

Egyirányú RF Bridge E1WRF-D (DIY)

Ezúttal a korábban bemutatott DIY RF-WiFi bridge életképességét igazoló projekt felturbózásáról és dobozba szereléséről ejtek pár szót.

Már korábban belengettem, hogy több projektnél is elő fognak kerülni a címezhető Neopixel LED-ek (amik nagy kedvenceim lettek), ebbe példának okáért egy 8-as modul került.

Így néz ki dobozolást követően jelen projekt, a feliratozás még hátravan:

rfb.jpg

A célom egy 8 rádiós zóna állapotát helyileg megjeleníteni képes, kézileg nyugtázható másodjelző készítése volt, ami WiFi-n továbbítja is a beérkező RF jeleket MQTT-n keresztül a Domoticz számára.

Íme a szükséges eszközök listája és jelen áruk a nagy e-piacon:

Eszköz Bruttó ár
D1 Mini ESP8266 fejlesztői lap (*) 678 Ft
5x7cm protolap (*) 100 Ft
Nyomógomb 13mm x 2 2 x 10 Ft
100x60x25mm műanyag doboz (*) 237 Ft
WS2812 8-bit (*) 275 Ft
Szintillesztő (*) 274 Ft
RXB12 rádiós vevő DC3.3-5V 433Mhz (*) 240 Ft
1 db spirálantenna (*) 50 Ft
DC-DC feszültségátalakító 12V->5V (*) 200 Ft
DC 5.5 jack tápcsatlakozó (*) 55 Ft
Összesen:  2129 Ft

 

Természetesen lehet direktben 5V-os dugasztápot is használni, így nem lenne szükség feszültségátalakítóra, jelen esetben egyszerűen a telepítés helyén a 12V már adott volt.

Bekötési rajz:

bekotes-rfbridge.jpg

ESP lábkiosztás:

Láb cimke Alternatív megnevezés Rákötött eszköz
TX GPIO1/D10 -
RX GPIO3/D9 -
D1 GPIO5/SCL -
D2 GPIO4/SDA -
D3 GPIO0 Nyomógomb
D4 GPIO2 Nyomógomb
A0 TOUT -
D0 GPIO16/WAKE -
D5 GPIO14 -
D6 GPIO12 WS2812-DI
D7 GPIO13 RF Data
D8 GPIO15 -

 

És íme a pőre igazság, így néz ki a panel szemből amit a doboz takar: (bekötési rajz szerint)

rfb_front.jpg

Nem állítom, hogy díjnyertes munka lenne, és megélnék a forrasztási tudásomból, viszont nem ér össze semmi olyan, ami nem kell, hogy összeérjen és működik, nekem ennyi elég. :)

És így néz ki a másik oldal, miután a fekete dobozt a megfelelő helyeken megfúrtam, hogy a két nyomógomb átférjen.

rfb_inside.jpg

A D1 minit nem lehet eltéveszteni, a balra levő antennás RF vevőben pedig könnyen felismerhető az általam legjobb ár/érték arányúnak talált RXB12, a piros szinű panel egy szintillesztő, ami az 5V-os jelek 3.3V-ra alakítására való, a mellette levő zöld panel egy DC tápfeszültség átalakító, ami a bejövő 12V-ot a sokkal barátibb 5V-ra alakítja. (az ESP-nek és a LED sornak) Mint látható, a melegragasztó is előkerült ismét...

espeasy_inside.png

 

Érdeklődők kedvéért a bináris (4MB flash-hez): ESPEasy.4M.2018dec.zip

ESPEasy eszközök:

rfb_espeasy.jpg

Az eszköz lelke a P111 RF Receiver plugin, ami az RCSwitch könyvtárat használva dekódolja a bejövő 433Mhz-es jeleket, és egy számmal reprezentálja, ami alkalmas további feldolgozásra. (erről már írtam korábban) Ezúttal nem állítottam be MQTT IDX-et a plugin beállításainál, mert a Rules szabályrendszerben fogom megadni, minden kódnak más IDX-et és állapotot.

A Neopixel plugin felel a LED-ek meghajtásáért, aminek ugye az a lényege, hogy egy adatlábon tud megcímezni több LED-et, ez esetben 8-at, amit a plugin beállításainál meg is kell adni, mint maximális számot. Az egyes LED-eket a Neopixel paranccsal tudjuk felkapcsolni.

A Dummy változók pedig a státuszok nyilvántartásáért felelnek, egyelőre csak az első 4-es blokkot használom, illetve a legutolsó LED mutatja, hogy aktív-e a kijelzés, de ez felhasználható másra is a későbbiekben persze...

A szabályrendszert ezúttal kétfelé bontottam, mert egy fájl maximum 2048 bájt hosszú lehet, és eléggé összetettre sikerült. Az egyes gomb (btn1) megnyomásával lehet aktiválni/deaktiválni a visszajelző rendszert, ha a megadott kódok ilyenkor beérkeznek, a megfelelő LED-ek pirosra váltanak 30 másodpercre, majd másodpercenként halványítja őket a "Timer2" eseménykezelő. A kék csatornát viszont meghagyja, ezzel jelezve, hogy ott mozgás volt. A kék fényeket a kettes gomb (btn2) megnyomásával lehet nyugtázni-törölni.

Rules1.txt:


on System#Boot do
 NeoPixelAll,0,5,0
 taskvalueset,7,1,0
 taskvalueset,7,2,0
 event,doack
 Publish domoticz/in,{"idx":20,"nvalue":0.00,"svalue":"Off"}
 Publish domoticz/in,{"idx":21,"nvalue":0.00,"svalue":"Off"}
endon

on btn1#Switch do
 if [btn1#Switch]<1 and [global#State]>0
  event,disablewatch 
 endif
 if [btn1#Switch]<1 and [global#State]<1
  event,enablewatch
 endif
endon

On Clock#Time=All,08:30 do
 event,disablewatch
endon

On Clock#Time=All,20:30 do
 event,enablewatch
endon

on disablewatch do
  timerset,2,0
  event,doack
  NeoPixel,8,0,0,0
  taskvalueset,7,1,0
endon

on enablewatch do
  timerset,2,1
  NeoPixel,8,0,5,0
  taskvalueset,7,1,1
endon

on btn2#Switch do
 if [btn2#Switch]<1 
  event,doack
  taskvalueset,7,2,0
 endif
endon

on doack do
 taskvalueset,5,1,-1
 taskvalueset,5,2,-1
 taskvalueset,5,3,-1
 taskvalueset,5,4,-1
 taskvalueset,6,1,-1
 taskvalueset,6,2,-1
 taskvalueset,6,3,-1
 taskvalueset,6,4,-1
 timerset,1,1
endon

on Rules#Timer=1 do
 NeoPixelAll,0,0,0
endon

on motion1 do
 if [global#State]>0
  taskvalueset,5,1,20
 endif
endon

on Rules#Timer=2 do
 if [firstp#1]>-1
  NeoPixel,1,[firstp#1],0,4
  taskvalueset,5,1,([firstp#1]-1)
  taskvalueset,7,2,1
 endif
 if [firstp#2]>-1
  NeoPixel,2,[firstp#2],0,4
  taskvalueset,5,2,([firstp#2]-1)
  taskvalueset,7,2,1
 endif
 if [firstp#3]>-1
  NeoPixel,3,[firstp#3],0,4
  taskvalueset,5,3,([firstp#3]-1)
  taskvalueset,7,2,1
 endif
 if [firstp#4]>-1
  NeoPixel,4,[firstp#4],0,4
  taskvalueset,5,4,([firstp#4]-1)
  taskvalueset,7,2,1
 endif
 if [global#State]>0
  timerset,2,1
 endif
 if [global#Level]>0 and [global#State]>0
  NeoPixel,8,0,0,4
 endif
 if [global#Level]<1 and [global#State]>0
  NeoPixel,8,0,4,0
 endif
endon

Extra még, hogy az "event,motion1" parancs meghívásával lehet a legelső LED-et aktiválni, ami nem rádiós, hanem WiFi-s mozgásérzékelő zóna, és egy másik ESP modul küldi WiFi-n keresztül ennek. Ütemezés is van beépítve, 20:30-kor bekapcsol a figyelő és 8:30-kor pedig kikapcsol automatán - ez ugyanaz a funkció, amit az 1-es gomb megnyomásával is el lehet érni.

De mindez csak a kirakat, a háttérben a kódok feldolgozását és továbbítását a következő fájl tartalmazza.

rules2.txt:


on rfin#RF do
 if [rfin#RF]=3008216
  taskvalueset,5,2,30
  Publish domoticz/in,{"idx":20,"nvalue":1.00,"svalue":"On"}
 endif
 if [rfin#RF]=3008210
  taskvalueset,5,2,10
  Publish domoticz/in,{"idx":20,"nvalue":0.00,"svalue":"Off"}
 endif
 if [rfin#RF]=3054346
  taskvalueset,5,4,30
  Publish domoticz/in,{"idx":21,"nvalue":1.00,"svalue":"On"}
 endif
endon

Az rfin a P111 eszköz neve lett, amit felvettem az RF az első és egyetlen érték megnevezése benne. És ezt vizsgálja a fenti eseménykezelő, amikor az rfin#RF-re érkezik egy kód, akkor megnézi, egyezik-e egy ismert értékkel. (ezt az eseménynapló/Log-ból lehet előzetesen kinyerni!) Ha egyezés van, akkor a megfelelő Domoticz IDX-re küldi az On/Off állapotot (az első eszköz - 20 - egy két állapotú rádiós nyitásérzékelő) vagy csak az On állapotot, amit a Domoticz oldalán kell kezelnünk a (a második eszköz - 21 - egy kizárólag egyetlen kódot mozgásra szóró rádiós mozgásérzékelő) Ez utóbbinak az Off állapotra visszaállítását a Domoticz-on belül a "Kikapcsolás késleltetése" paraméterrel tudjuk megoldani. A taskvalueset parancsok pedig egyszerűen a megfelelő Dummy változókba írják, hogy az adott LED-en a vörös fény milyen intenzitással/meddig világítson.

Nem állítom, hogy egyszerű a beüzemelése, viszont ez egy működő egyirányú RF433->MQTT bridge. Kézzel tanítható, és nem szórja tele a Domoticz eseménynaplóját a szomszéd rádiós kódjaival - persze ettől függetlenül az ESP azokat is dekódolja, de nem továbbítja.

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr3114663061

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

knisa 2019.03.23. 11:31:23

Nagyon köszönöm a sok hasznos információt tartalmazó írásaid. Saját rendszerem fejlesztésénél írásaidat veszem alapul, azokat gondolom tovább.
Most is lenne kérdésem. Az alap RF Bridge-t használnám úgy, hogy rules-ben lennének a kódok megtanítva, a digitális jeleket már látom a rules2.txt-ben, de analóg jeleket (pl hőmérő), hogyan kell továbbítani az eszközhöz tartozó IDX-re? Köszönöm segítségedet.

eNeS 2019.03.23. 17:04:12

@knisa: Típustól függ. Az nvalue értéket 0 ilyenkor, az svalue tartalmazza a nem digitális értékeket pontosvesszővel elválasztva, ha több tartozik az eszközhöz. Pl hőmérséklet és páratartalom esetén:
Publish domoticz/in,{"idx":20,"nvalue":0.00,"svalue":"25.4;60;0"}
De ennél sokkal egyszerűbb beállítani a hőmérő eszköznél az ESPEasy-ben az IDX-et, és csak az adott eszközt megfuttatni a taskrun,<eszközsorszám> paranccsal Rules-ban, mert így az ESPEasy mag gondoskodik az eszköznek megfelelő üzenetformátumról, ami tartalmazza a Wifi jelerősséget is.

pagocs 2019.03.24. 16:45:33

Hali. Én is sok hasznos dolgot találtam már a blog-odon, so thx, hogy megosztod ezeket.
Ha valakit esetleg érdekel akkor ebben a témakörben csináltam egy saját MQTT Wifi gatewayt (+Domoticz driver-t) az RFLINK Gateway-hez (www.rflink.nl/blog2/) ESP32 alapon.
Illetve van egy saját RF decoder over MQTT prototype-om ami kezeli: Acurite 899 eső szezort, KERUI PIR és DOOR/WINDOW szenzort, illetve az olcsó Kinai RF kapcsolókat jelenleg.

eNeS 2019.03.24. 19:13:09

@pagocs: ez jól hangzik és hol érhető el?

pagocs 2019.03.24. 21:24:08

Egyenlőre nem raktam fel GIT-re, mert ahhoz leírást kellene csinálni és arra nem volt egyenlőre időm. Illetve a domoticz driver-t is fel kellene még tolni pool request-re... Melyik érdekelne?

eNeS 2019.03.25. 10:06:13

@pagocs: az RF dekóder érdekelne, mivel az rtl_433+Domoticz egyelőre leginkább csak hőmérőket tud kezelni. én is gondolkoztam egy mqtt dekóderre, de ha már kész van, nem állok neki. :) de ráér majd ha fent lesz git-en.

Hypervisor 2019.03.26. 20:40:41

@eNeS ajánlom figyelmedbe ezt az adó-vevőt www.aliexpress.com/item/CC1101-Wireless-RF-Transceiver-315-433-868-915MHZ-SMA-Antenna-Wireless-Module-1-8-3-6V/32858137093.html kb 3,5$ 387-464 MHz és 779-928 MHz -ne működik. Alapból 433MHz ami állítható. Van hozzá sniffer progi ESP8266-ra és frekvencia kereső is.

Én ezzel olvastam le egy pár soros programmal a távirányítós konnektorom kódját. ESP8266 hez lib: github.com/LSatan/RCSwitch-CC1101-Driver-Lib

eNeS 2019.03.26. 22:08:12

@Hypervisor: vettem már korábban cc1101 lapkát (nem olyat, mint a képen levő, hanem antenna nélkülit), Raspberryvel akartam használni, de kb egy hónapnyi hiábavaló sikertelen kísérletezés után ki is dobtam, mert semmilyen libbel nem tudtam vele adatokat küldeni... aztán nyertem liciten egy olyan antennával és lábakkal rendelkező olyat is, amit linkeltél, de még nem volt kedvem újra kísérletezni azóta.

knisa 2019.05.08. 22:38:10

Még egyszer köszönöm a sok hasznos leírást. Ezen blogból csak az RF->Wifi bridge részt meg is építettem. Mozgásérzékelővel már jól megy. Rendeltem 2db Sonoff ajtó/ablak szenzort, de mindkettő csak ajtó nyitáskor sugároz kódot.
Így nem tudom használni. Mit lehet ilyenkor tenni? Rosszakat kaptam?

eNeS 2019.05.09. 07:08:25

@knisa: Nem hiszem hogy rosszakat kaptál, ugyanis nem mindegyik típus ad kétféle kódot, a Sonoff talán csak pont nyitásra ad, ezért nem is érdemes venni. Nem tudom hány olyan típus van (nem sok) ami nyitásra és csukásra is ad kódot, én csak ezt az egyet ismerem:
bitekmindenhol.blog.hu/2019/03/17/rf433mhz-es_nyitaserzekelo

knisa 2019.05.24. 18:43:54

Üdv Mindenkinek!
Most jött meg a Kerui KR-D026 ajtó/ablak nyitás érzékelő. Nagyon szuper!
Különböző kódokat sugároz nyitáskor, záráskor, szabotázskor és elem alacsony jelzéskor.