ESPimaticRF : verstuur RF verkeer over wifi vanuit Pimatic

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

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)

DIY draadloze temperatuursensor voor pimatic - en meer! - Update

Door Koffie op zaterdag 23 januari 2016 13:42 - Reacties (23)
Categorie: -, Views: 7.878

[Update]
Na het plaatsen van deze blogpost is er het nodige op de Github repo geplaatst.
Vragen/problemen kun je kwijt in het issues 'forum' , ook is er een wiki aangemaakt. Er zijn inmiddels ook wat aanpassingen doorgevoerd op de code, lees even de release notes door op Git ;)

Zo'n 2 jaar geleden plaatste ik deze post : Koffie's tweakblog: DIY draadloze temperatuursensor voor pilight
Met deze sensor kon ik de temperatuur in de woonkamer meten en met RF naar pilight verzenden. In de tussentijd is er weer een hoop veranderd.
Zoals lezers van mijn spaarzame blogposts weten ben ik al lange tijd volledig over op Pimatic, een domotica systeem wat ik zelf erg fijn vind.

http://zooi.oostindie.com/images/49920160123_125539_tn.jpg

De hardware markt is ook veranderd. Inmiddels koop je voor een paar dollars een ESP8266. Een ESP is nog het best uit te leggen als 'een Arduino op 80 Mhz, meer flash geheugen onboard wifi'. Ja je leest het goed, fully wifi op een chip zo groot als een stuiver :Y)
Dit opent natuurlijk een wereld aan mogelijkheden.
Een lange wens was om een soort alles in 1 module te bouwen, waarbij ik in een config kan aangeven wat zijn functie is en gaan met die banaan, zonder dat ik voor elk mini-projectje de code hoef aan te passen.

Om dit voor elkaar te krijgen heb ik mijn persoonlijke wensen op een rijtje gezet en ben ik begonnen met schrijven van code en testen met diverse sensoren.
Mijn persoonlijk eisenpakket was/is:

- Compatible met Pimatic
- Temperatuur meten en versturen
- Eventueel luchtvochtigheid meten en versturen
- Relays aansturen
- infrarood zenden
- Weergave van temperatuur, leesbaar op grote afstand

Uiteindelijk is daar mijn project ESPimatic uit voortgekomen. Alle bovenstaande eisen zitten in de code, het is slechts een kwestie van de juiste hardware aan of uit zetten. De module is volledige te besturen vie een webinterface. Zelfs vervangen van een nieuwe flash of HTML bestanden kan vanaf de website.

http://zooi.oostindie.com/images/585espimatic_02.png

Wat heb ik allemaal nodig :?
Om te beginnen een ESP, Zelf gebruik ik een ESP8266-12 met 4mb flash. Daarnaast heb je de sensor naar wens nodig (DS18B20, DHTxx, max7219 LED Matrix).


Hoe installeer ik het :?
Download de code: https://github.com/koffienl/ESPimatic
Compileer de code met Arduino en upload deze via serial naar je ESP.

OK, software staat er op, en nu :?
De eerste keer zal de ESP opstarten in Access Point modus. Maak met verbinding met SSID ESPimatic en wachtwoord espimatic.
Ga met je browser naar 192.168.4.1 , je ziet nu een simpele pagina om je wifi gegevens in te vullen. Na het invullen zal de ESP herstarten en verbinding maken met je wifi netwerk.
Zoek op welk IP adres van je DHCP server heeft gekregen (is te zien op console of in je router/DHCP), en ga er met je browser naar toe.
Je ziet nu wederom een simpele pagina. Met deze pagina upload je 1 voor 1 alle HTML bestanden die je van GitHub hebt gedownload.
Herstart nu voor de laatste keer je ESP en maak verbinding met je browser naar het IP adres.
Je ziet nu de website zoals bedoeld is voor ESPimatic.
Begin door in het menu System -> GPIO aan te vinken welke GPIO's je tot je beschikking hebt. Vervolgens ga je in het menu System -> Pimatic om daar je pimatic API gegevens in te vullen.
Je bent nu klaar om sensoren aan of uit te zetten.
GPIO's die je niet in het begin als zijnde beschikbaar hebt aangevuld en GPIO's in gebruik door sensoren kun je niet kiezen.

Wat kan ik met al die pagina's :?
Een korte toelichting op alle pagina's en menu optie's die er zijn:

Hardware -> DS18B20
Hier kun je een DS18B20 aan of uit zetten. Vul ook in hoe de variabele in pimatic heet zodat de temperatuur naar pimatic verstuurd kan worden

Hardware -> LED Matrix
Wanneer je 2 max7219 LED Matrix'en goed hebt aangesloten kun je die hier aan zetten. Let op : CLK moet naar GPIO14 en DIN naar GPIO13. CS gaat op de GPIO die je hier kiest.
Selecteer ook wat je wil zien op je matrix.

Hardware -> IR LED
Wanneer je een IR code weet voor je apparatuur (zie hiervoor http://www.righto.com/200...rared-remote-library.html ) kun je de ESPimatic een IR code laten versturen. In pimatic heb ik een variabele aangemaakt (bijvoorbeeld $ACwoonkamerON en als inhoud de IR code van mijn airco. Vervolgens heb ik een dummyswitch aangemaakt met de volgende rule:

code:
1
IF ACon is turned on THEN execute "sudo curl  --silent --data 'action=ir&value=$ACslaapkamerON' http://esp01/api > /dev/null"


Pimatic verstuurd dan naar de 'api' van ESPimatic de IR code, de ESP zal deze vervolgens naar de IR LED sturen.

Hardware -> Relay
Er kunnen tot maximaal 4 relais aangesloten worden op de ESP. Hier kun je de functie aan of uit zetten en de GPIO instellen.

Hardware -> DHT
Indien je liever een DHTxx gebruikt ipv een DS18B20 dan kan dat. Persoonlijk vind ik een DHT(11) verre van accuraat en stabiel .. andere zweren er bij. Je zou in theorie ook een DHT22 kunnen aansturen, maar omdat ik die niet heb weet ik niet of dat werkt. Volgens de code moet het werken ;)

System -> Wifi
Wijzig hier je wifi instellingen. Wanneer de ESP bij opstarten geen verbinding met wifi kan maken, zal deze altijd als Access Point opstarten (zelfde gegevens als bij eerste keer gebruiken).

System -> Pimatic
Hier kun je al je Pimatic gegevens invullen

System -> Firmware
Hier kun je een BIN file uploaden. Let op dat je bij het compileren in Arduino de juiste ESP aangeeft. Je kan zoveel flash hebben als je wil, maar als de draaiende BIN gecompileerd is als een 1mb chip gaat het simpelweg niet lukken.

System -> GPIO
Hier kun je beschikbare GPIO's instellen.

System -> Reset
Dit zal *alle* opgeslagen settings verwijderen, inclusief wifi gegevens. Deze gegevens zijn niet te herstellen!

System -> Filemanager
Hier kun je de HTML files uploaden en/of verwijderen. Let op : bestaande bestanden zullen zonder bevestiging overschreven worden. Verwijderde bestanden zijn niet meer terug te halen.
Wanneer je root.html verwijderd, zal de ESP opstarten met een versimpelde filemanager als root.

Refresh
Refresh haalt de specifieke instellingen van de pagina waar je je bevind opnieuw op.

Reboot
Hiermee herstart je de ESP.

De ESPimatic heeft ook een simpele 'api' waarmee je via een HTTP opdracht commando's kunt versturen.
Syntax van de URL is : http://esp-ip/api?action=[action]&value=[value]
De volgende opdrachten zijn mogelijk:

action = ir , value = 3420,1592,500,1128, ...... hiermee laat je een IR code versturen
action = reboot , value = true Herstart de ESP
action = matrix_brightness value=[0-8] wijzig de helderheid van deLED Matrix
action = matrix_display , value = [on-off[ Zet de LED Matrix uit
action = relay[1-4] , value = [on-off[ Zet relay x aan of uit
action = clearerror , value =[wifi,ds18b20,eeprom,upgrade] Hiermee verwijder je bepaalde errors, dat wprd echter ook al gedaan door de webpagina die de foutmelding ontvangt.
action = reset , value=true Hiermee verwijder je alle opgeslagen gegevens, inclusief wifi