ESPimaticRF : verstuur RF verkeer over wifi vanuit Pimatic

Door Koffie op zondag 13 november 2016 18:25 - Reacties (12)
Categorie: -, Views: 2.858

Een lang verwachte feature voor Pimatic is eindelijk beschikbaar: verzenden van RF verkeer over wifi op plekken waar de Pimatic op de Raspberry Pi geen bereik heeft :Y)

Wat heb je nodig :?
Een werkende Pimatic installatie
ESPimaticRF
Minstens 2 ESP8266 modules
Minstens 1 setje sender/receiver (zorg dat je een zogenoemd superheterodyne setje hebt)
Arduino IDE 1.6.5
ESP8266 core for Arduino 2.3.0

Het probleem :?
Normaal zul je een Raspberry Pi hebben met daarop Pimatic, waar vervolgens een Arduino Nano aan hangt voor het RF verkeer (zie ook : Koffie's tweakblog: Native RF zenden en ontvangen met pimatic)
Het nadeel hiervan is dat de Raspberry Pi vaak ergens weggewerkt word (bij mij bijvoorbeeld in de meterkast) en je niet altijd overal een voldoende RF bereik hebt. Het gevolg is dat niet elk RF signaal door Pimatic ontvangen word, of een uitgezonden signaal niet altijd aankomt.

De oplossing
Met ESPimaticRF kun je het RF signaal eerst over wifi laten versturen zodat het vanaf een andere plek alsnog als RF verstuurd word. andersom kan ook : ergens op een andere plek word het RF signaal opgepikt om vervolgens via wifi naar Pimatic gestuurd te worden.
Het systeem is zo opgebouwd dat je op meerdere plekken een zogenoemde node kunt neerleggen, welke allemaal met Pimatic communiceren. Op deze manier kun jet het RF bereik enorm vergroten. In theorie zou je zelfs een node ergens op een totaal ander adres kunnen installeren en zo met 1 groot Pimatic netwerk bouwen.

Hoe installeer ik het :?
Ik ga er vanuit dat je reeds een werkend Pimatic systeem hebt, met Arduino Nano en RF hardware zoals uitgelegd in Koffie's tweakblog: Native RF zenden en ontvangen met pimatic
Neem een ESP8266 (bij vooorkeur een NodeMCU).
Download de software van Github en op ESPimaticRF.ino in je Arduino IDE
Zorg dat je de correct ESP in je boardmanager hebt geselecteerd, met voldoende SPIFFS ruimte (3M SPIFFS).
Compileer en upload de code naar je ESP
Na het uploaden zal de ESP opnieuw opstarten en, indien nodig, de SPIFFS formatteren. Dit kan even duren - hou de boel in de gaten via de Serial Monitor
De ESP zal nu in AP modus gestart zijn. Verbind je pc/table/telefoon met het wifi netwerk van de ESP (SSID : ESPimaticRF , wachtwoord espimaticrf).
Ga naar http://192.168.4.1 en vul hier je eigen wifi gegevens in.
De ESP zal nu wederom opnieuw opstarten en verbinden met je eigen wifi netwerk.
Op de Serial Monitor kun je zien welk DHCP adres de module heeft gekregen van je wifi.
Ga naar het nieuwe IP adres met je favoriete browser. Je zult nu een simepel upload pagina zien. Upload nu alle bestanden in de directory "SPIFFS" van de github download.
Wanneer de upload klaar is, start de ESP handmatig opnieuw op.
Ga nu wederom naar het IP adres van de ESP met je browser, de volledige webGUI is nu beschikbaar.
Kies Menu -> System -> Config

http://zooi.oostindie.com/images/148espimaticrf_config.png

We gaan de ESP configureren om als 'homeduino' te reageren. Bij mode kies je dus voor de optie 'homeduino'.
De homeduino kan zowel met als zonder RF hardware werken, we beginnen zonder. Laat de opties 'Receiver pin' en 'Transmitter pin' dus leeg.
Bij Receive Action kies je voor 'Do nothing' (er hang immers geen onvanger aan deze module.
Bij Transmit Action kies je voor 'Transmit to all nodes' (wederom : we hebben aan deze ESP geen RF hardware hangen).
Bij UDP repeat is het een beetje kiezen wat het beste voor je werkt. Het versturen van RF over wifi gaat via UDP. Omdat UDP van zichzelf een onbetrouwbaar protocol is, word het pakket een paar keer herhaald. Afhankelijk van de afstand die je met de modules moet overbruggen adviseer ik een waarde tussen de 3 en de 6.
Bij API key vul je een API key in die door alle ESP's gebruikt zal worden. Belangrijk : deze API key moet hetzelfde zijn als de optionele API key in config van de homeduino plugin in Pimatic!
De wifi velden zijn al ingevuld.
Sla de wijzigingen op en herstart de ESP om config te laden.

Je kunt de ESP nu van je computer loskoppelen en aan je Rasperry Pi aansluiten. Let op dat je pimatic eerst stopt voordat je de ESP middels USB aan de Raspberry Pi koppelt.
Start nu Pimatic op en controleer de logfile. Als het goed is denkt Pimatic nog steeds dat er een doodnormale homeduino aangesloten is.

Nu nemen we nog een ESP en voorzien deze wederom van ESPimaticRF software. Deze keer sluiten we ook een RF zender en ontvanger aan.
Herhaal deze stappen als bij de vorige module om de ESP te configureren.
Bij 'mode' kies je echter deze keer voor 'node'.
Vul de correcte Transmitter pin en Receiver pin in (GPIO nummering!).
Bij Receive action kies je voor 'send to Pimatic' , bij Transmit action kies je voor 'Transmit with local RF'.
Zorg ervoor dat je bij Pimatic IP het correct IP/FQDN van je Pimatic installatie kiest en bij Pimatic Port de juiste port waarop het draait.
Bij Black/Whitelist mode kiezen we voorlopig 'Allow everything'.
Sla de wijzigingen op en herstart de ESP.
Indien je dit nog niet gedaan hebt, sluit nu eerst de RF modules aan op de correcte GPIO's

Laat de node nog aan je computer verbonden en op de Serial Monitor. Wissel nu een RFdevice op pimatic van status, als het goed is moet je nu op de Serial Monitor zien dat er een pakket van de homeduino binnenkomt, en nog mooier : de local RF zender op de node zal nu het RF verkeer gaan versturen.

Het werkt, wat kan ik er verder nog mee :?
Met bovenstaande uitleg heb je een basic netwerk van ESP's kunnen maken. Wat de node ontvangt word keurig naar Pimatic verstuurd, en wat Pimatic over RF wil versturen komt keurig bij de node terecht.
Je kunt nu verder gaan met het finetunen van de configuratie. Zo kun je alsnog een RF zender en ontvanger aan de homeduino koppelen, en in de config aangeven dat deze gebruikt kunnen worden.
Ook kun je een extra ESP installeren in node mode en deze ergens anders plaatsen. Beide nodes zullen dan het verkeer wat door de homeduino verstuurd word ontvangen en uitzenden.
Dit laatste kan natuurlijk een probleem zijn als beide nodes binnen het bereik van een RF device liggen. Deze kan dan meerdere keren hetzelfde signaal ontvangen.
Daarom kan er gebruik gemaakt worden van blacklisting of whitelisting.
Via de config kun je aangeven welke modus de node moet hebben (allow everything, allow everything except blacklist of allow nothing except whitelist).
Om nu een bepaal device aan de blacklist of whitelist toe te voegen ga je als volgt te werk :
Zorg dat de node communicatie van de homeduino kan ontvangen
Vanaf Pimatic schakel je 1 keer het device waar het om gaat
Op de WebGUI van de node ga je nu naar Menu -> System -> BlackWhitelist , als de opdracht voor het RFdevice bij deze node aangekomen is, zul je hier het protocol , ID en unit zien.
Kies nu voor Blacklist of Whitelist
Afhankelijk van de gekozen configratie zal het nieuwe device expliciet wel of niet toegelaten worden.

Om een bepaald device te kunnen black/whitelisten moet het protocol bekend zijn (en herkend worden) binnen ESPimaticRF. Alle protocollen staan beschreven in protocols.json.
Op moment van publiceren van deze blogpost staan er nog maar een paar protocollen beschreven (switch1 t/m switch5 en dimmer1).
Ik hoop op korte termijn het aantal protocollen hierin snel uit te breiden, hou de github pagina in de gaten voor updates.

Mocht je nog vragen hebben kan dat altijd hier, in het GoT topc (https://gathering.tweakers.net/forum/list_messages/1609839) of op het Pimatic forum (https://forum.pimatic.org...t-espimaticrf-coming-soon)