Node-Red & JSON

Node-Red Raspberry: hele bericht
Node-Red Raspberry: hele bericht

Ontvangen mqtt payload
Ontvangen mqtt-bericht (msg)

JSON maakt gebruik van voor de mens leesbare tekst in de vorm van data-objecten die bestaan uit een of meer attributen met bijbehorende waarden.” (bron:Wikipedia) Dat ziet er dan ongeveer zo uit: { attribuut: waarde, attribuut: waarde }, zoals we in het plaatje links(boven) kunnen zien, payload: “23.60” , humidity: “34.10”. Wat we ontdekten was dat op het Raspberry Pi meetapparaat, het hele bericht nog beschikbaar is (bovenste plaatje). Je zou verwachten dat dat ook met MQTT naar de ‘broker’ op de Home-Assistant-server (HA) verzonden wordt. Tot ons ongenoegen bleek dat niet het geval. Zie de afbeelding ‘Ontvangen mqtt-bericht (msg)’. Daar staat niet voor niets msg tussen haakjes. Het gaat om het hele bericht. Maar de ‘humidity’ ontbreekt. Om een of andere reden wordt alleen de zgn. payload verzonden.
De maker van deze dht22-module schrijft wel dat er bewust voor deze temperatuur-payload is gekozen om compatibel met een andere meter te blijven. Nota bene een ding dat alleen temperaturen meet, een thermometer dus. Niet ook vochtigheidsgehalte.

Dus op een of andere manier moet het attribuut payload de waarde van humidity gaan bevatten. Dat is blijkbaar het enige dat erdoor komt! Op allerlei manieren werd getracht de humidity in de payload te krijgen. Uiteindelijk heb ik gekozen voor de oplossing om na een korte pauze de oorspronkelijke payload te laten herschrijven door een ‘Change’-node.

Change Node
Change-node

Die daarna naar zijn eigen topic in MQTT wordt gestuurd.
MQTT payload herschreven en naar eigen topic in HA versturen
MQTT payload herschreven en naar eigen topic in HA versturen

Aangepast topic voor vochtigheidsmeting van DHT22
Aangepast topic voor vochtigheidsmeting van DHT22
Vochtigheid afzonderlijk van temperatuur in HA
Vochtigheid afzonderlijk van temperatuur in HA

Dat werkt!

Ik betwijfel wel of het in de buurt komt van de beste oplossing.

Klimaat

Nu de lamp geschakeld kan worden middels MQTT, bedacht ik me dat het ook wel leuk zou zijn als ik de temperatuur en vochtigheid die in de annex op een oude Raspberry Pi A met een DHT22-sensor wordt gemeten, zichtbaar zou kunnen maken in Home-Assistant (HA).
Na het gebruikelijke zoekwerk bleek er een Node-Red module te zijn voor de dht-sensor module

Raspberry Node-Red module voor DHT22
Raspberry Node-Red module voor DHT22

Blij word ik ervan wanneer ik niet naar de winkel hoef om voor veel geld een apparaat te kopen van een (min of meer) bekende firma. Je hebt de benodigde spullen in huis en iemand of een groep mensen heeft de moeite genomen om voor jou iets te maken dat je kunt gebruiken.
In dit geval was er een maar: “While not having the humidity as part of the payload may seem awkward, it was done with the explicit intention to preserve compatability with the node-red-controb-ds18b20-sensor node.”
Ehhh. Ik zie toch in de uitvoer ook de vochtigheidsgraad? Ja, maar je zit te kijken in de Debug-node en niet naar wat er precies naar MQTT gaat. Na dagen rommelen lijkt het er toch op dat alleen de zogenaamde “payload” naar MQTT gestuurd wordt. Dat blijkt uiteindelijk zo te zijn. Wanneer binnen HA de Node-Red omgeving wordt ingericht om te luisteren naar wat er op dat topic binnenkomt, blijkt alleen de payload te worden ontvangen.
Ontvangen mqtt payload
Ontvangen mqtt.payload

ESP8266-01 Vervolg

De vele varianten van de ESP8266 maken het vinden van de juiste software lastig.

wESPennest

De laatste dagen zit vooral het blauwe licht me dwars. Volgens de radio en televisie ben ik niet de enige. Maar dan gaat het over het mindere slapen als gevolg van het blauwe licht van het schermpje van de slimme telefoon.
Mijn probleem met het blauwe licht is een probleem met de blauwe led op de ESP8266-01.
Ja, ik heb ‘m aan de praat gekregen! Het ‘ding’ in zijn geheel.
Maar niet heel lang.

Verbindingen op broodplankje (breadboard)
Verbindingen op broodplankje (breadboard)

En wel zo. Zij het dat links een ESP8266-07 is afgebeeld. Er was geen plaatje voor de ESP8266-01.
verbindingen in schema
verbindingen in schema

In het schema zijn linksboven REST en GPIO_16 met elkaar verbonden. Dat is niet helemaal correct. Op mijn ESP8266-01 zijn RST en GPIO_16 hetzelfde. Ja, ik weet dat REST en RST niet hetzelfde zijn.
Bedrading:
ESP8266 ===============FTDI
RX ———————————- TX
Gpio0 ——————————- Ground to Flash
Gpio2 ——————————- CTS
Ground —————————— Ground
VCC ——————————— VCC
Gpio16=ReSeT ———————— VCC
CH_PD Chip PowerDown —————- VCC
TX ———————————- RX

Afijn, zo is het me dus uiteindelijk gelukt om de ESP8266-01 iets te laten doen. En het begon met de klassieke Blink-sketch. Die werkte in zoverre dat het blauwe ledje wel erg veel aan was en er nauwelijks sprake was van een pauze. Terwijl in de code de eenheden gelijk waren aan elkaar. Toen ging ik Jonathan Oxer’s BlinkOTA gebruiken. Hetzelfde probleem. Inmiddels ben ik een paar schetsen verder en nog steeds wil het blauwe ledje zich niet gedragen volgens de code. In sommige code wordt de LED op pin 16 gezet, maar in de eerste schetsen wordt pin 13 gebruikt.
Ik heb de officiële documentatie van Espressif behoorlijk doorgespit maar heb nergens een verwijzing gevonden dat de blauwe led op pin 13 staat. In schetsen/sketches van de Arduino IDE voor o.a. de ‘generic ESP8266’ wordt wel pin 13 gebruikt. Naar het schijnt is er iets met de timing van het signaal. En pin 13 wordt ook gebruikt door TX. Of, zoals ik ergens las, je kunt niet tegelijkertijd (via TX) iets naar de seriële poort schrijven en naar de blauwe led. Maar ja, wat is tegelijk? De commando’s volgen elkaar op. Is er dan nog sprake van gelijk?

In het zoeken naar informatie heb ik door schade en schande geleerd om heel specifiek op de term ESP8266-01 te zoeken. Zelfs routiniers als Pete Scargill roepen wel erg makkelijk dat iets kan of werkt met een ESP8266, maar dan gaat het over een versie 12 of 07 blijkt dan na lezing.
Ik had bewust voor de simpelste versie gekozen, maar besef nu dat iets meer pinnen om te verbinden wel handig was geweest. Nu moet ik nog kritischer zoeker naar leuke projecten die op een paar pinnen werken. Dat is leergeld dat je betaald.

Interessante links;
iot-playground.com/ met steun van de EU!
oud mobieltje als schakelaar voor een ‘access-point-using-arduino-ide’
https://tech.scargill.net/ — Pete Scargill
hackster.io
verrassend goede inleiding, veel te laat gevonden

ESP8266

Over de problemen die ik ben tegengekomen bij het hakken/hacken van de ESP8266 en de Sonoff Basic.

2 & 3 maart 2019

In oktober 2017 bestelde ik in China een paar dingetjes. Wat ik bestelde was een gevolg van het bekijken van een tiental video’s op youtube van de ingenieur Andreas Spiess – ‘the guy with the Swiss accent’. Ik werd behoorlijk aan het schudden gebracht door Herr Spiess. Het lijkt allemaal heel makkelijk wanneer hij iets doet. Je gaat al gauw denken dat JIJ het ook kunt. Behalve dan dat ik geen ingenieur ben en helemaal geen technische opleiding heb genoten. Wel heb ik veel computerervaring.

De dingetjes die ik bestelde hadden een gemeenschappelijk thema: ESP8266. Een kleine microprocessor voorzien van WiFi. De ESP8266 en zijn modernere broertje, de esp32, zijn ongelooflijk aantrekkelijk wanneer het om het automatiseren van het huis gaat.

Om de esp8266 te programmeren (i.c. te hakken/hacken) heb je een verbinding met een computer nodig. Die verbinding loopt dan via de usb-bus van de computer en wordt dan omgevormd naar een signaal voor een seriële poort, i.c. seriële terminal. Dat dingetje, hier FTDI genoemd, kocht ik voor iets minder dan twee euro. Hier in de winkel betaal je er al gauw € 20,– voor. Eén ding had ik over het hoofd gezien. de aansluiting op de FTDI was Mini-USB-B, terwijl ik had gedacht dat het standaard micro-USB was. In de kluwen kabeltjes vond ik uiteindelijk een mini-usb-b –> naar usb 2.0.

breadboard, raspi zero, esp8266
breadboard, raspi zero, esp8266

Ik begon met de standaard ESP8266-1 en verbond die met Dupont-draadjes met een Raspberry Pi Zero. Ik had gedacht de 5V die van de Raspberry Pi’s gehaald kan worden met een voltage-deler met behulp van een paar weerstanden aan te passen aan de pakweg 3 Volt die nodig is voor de ESP. De eerste tijd zwalkte ik heen weer tussen verschillende Raspi’s omdat het allemaal niet zo soepel verliep. Uiteindelijk bleek dat het vermoedelijk niet werkte omdat er te weinig stroom geleverd kan worden door de Raspi’s in het begin, waar zich een vraagpiek voordoet. Voor de stroomvoorziening ben ik toen overgeschakeld naar 4 oplaadbare AA-accu’s. Een accu levert 1,24 Volt; 4 x 1,24 is ca. 5 Volt. Meting liet echter zien dat ik boven de 5V zat. Dat moet dan nog een beetje zakken om rond de 3 à 3,3 Volt uit te komen. Opnieuw greep ik naar de mijns inziens simpelste oplossing, de ‘voltage divider’.
En ik was overgeschakeld naar een oude Raspberry Pi B (v.1) die ik nog had liggen.

Nu ik het niet meer nodig heb kom ik een link tegen die me misschien uit de str*nt had kunnen halen, hoewel de tekst ook hier niet heel erg duidelijk is. Ik bedoel met name het stuk onder het kopje Wire RaspberryPi:

Op enig moment, terug bij de raspi zero, had ik eindelijk even succes. Terwijl ik bezig was de instelling van de esp8266 met behulp van AT-commando’s te wijzigen, was het etenstijd. Vol optimisme sloot ik alles af om morgen terug te komen en de succesvolle verkenningen voort te zetten.

Dat bleek een illusie.

Na nog veel meer gerommel besloot ik dan toch maar de FTDI in te zetten. Maar ook die stond succes in de weg.

Na veel gestoei, forums napluizen, websites bezoeken en youtube-filmpjes bestuderen, besloot ik het voorlopig maar te laten. In afwachting van nieuwe informatie die misschien op zou duiken en frisse inzichten in mijn fouten etc. Misschien was de FTDI, de usb naar serieel converter, de tussenverbinding van dingetje en computer wel ondeugdelijk. Of na al mijn gepruts de ESP8266 zelf. Je weet het toch nooit met dat Chinese spul. Vroeger jatten de Japanners alles en probeerden het te verbeteren. Maar in China lijkt het vaak op iets bekends, maar het betekenisvolle woord hierbij is lijkt. We leven steeds meer in een wereld van schijn en nep. Ik weet nog dat het woord virtueel voor het eerst tot me doordrong.

Voor de stroomvoorziening werden ook andere mij onbekende oplossingen genoemd als Schottki diodes. Dat leek me nog complexer. Samen met de FTDI had ik ook al 10 stuks ‘logic level shifters’ gekocht. Niet omdat ik wist hoe ze werkten, maar om de belofte en de schamele prijs. Ook die werden nog tevergeefs geprobeerd nog voordat de FTDI zijn kunsten mocht vertonen. Gezegd moet wel worden dat een behoorlijke handleiding ook ontbrak. De bekeken youtubers hadden nou net niet de goedkope omzetter die ik had gekocht. Mogelijke conclusie is dat ze met hun optredens toch behoorlijk verdienen en zich dat allemaal kunnen veroorloven. Als het moeilijk wordt maken we het makkelijker en kopen wat goeds.

De lente brak aan en de zoektocht ging verder.

Later, rond kerstmis begonnen de gedachten dat ik toch maar weer eens verder moest regelmatig te verschijnen. In allerlei publicaties komen pagina’s met leuke projectjes voor de donkere dagen langs. Dus waarom niet.
Maar ja, het geheugen hè. Gelukkig had ik onderweg een verzameling van links naar documenten en websites gemaakt in een tekstdocument en in Keep ook wat. Maar toch.
Voordeel is wel dat het dan een soort van verse start is. Omdat het toch de beste optie leek besloot ik verder te gaan met de FTDI. Omdat opnieuw succes uitbleef en ik twijfels kreeg over de usb-poorten aan de voorkant van mijn pc, schakelde ik voor de computer over naar een redelijk luxe laptop met Mint 18. Maar ook daar kreeg ik het niet voor elkaar.

Sonoff met pinheaders verbonden met Dupont-draadjes met de FTDI
Sonoff met pinheaders verbonden met Dupont-draadjes met de FTDI

De FTDI werd grondig bestudeerd en de meter werd erop losgelaten. Door een video van Jonathan Oxer, van https://www.superhouse.tv over het traceren van verbindingen op een bordje kreeg ik een beter idee over hoe de converter in elkaar stak. Tijdens het doormeten van de FTDI merkte ik rare spanningsschommelingen op. Gelukkig heb ik een heel technische buurman en die suggereerde uiteindelijk dat een beetje contactspray misschien uitkomst zou brengen. Contactspray?! Dat heb ik niet in mijn keukenkastje, maar hij gelukkig wel. Sprayen, wriemelen, meten en waarachtig het lampje van de ESP8266 begon ineens te branden. Dat had ik lang niet gezien. Er was hoop.

Inmiddels wilde ik wel eens iets zien met een ESP8266 dat werkte. In mijn kast lagen al een tijd een paar Sonoffs Basic stof te verzamelen. Die had ik ook gekocht omdat daarin de ESP8266 een vooraanstaande rol speelt en ze goed hakbaar zouden zijn. Deze Sonoff kan alleen maar op afstand schakelen. Ik besloot het gewoon eens direct vanuit het doosje te proberen met zo’n Sonoff. Kijk voor een ruimer aanbod op Sonoff.nl. Bijvoorbeeld naar hun afstandsbediende lampfitting of hun eigen merk lampen.
Ik bevestigde het ding in een soort tussensnoer, zodat het ‘mobiel’ inzetbaar zou zijn. In aanmerking kwam een felle stroomvretende halogeenlamp (met een lompe trafo als steker).
Voor de bediening gebruik je – standaard – de eWelink app. Die vraagt je voor de configuratie je hemd van je lijf en maakt volgens zeggen gebruik van ‘Amazon Web Servers’; ergens in de wolk dus. Maar wel interessant. De Sonoff maakt samen met je telefoon of tablet gebruik van WiFi om iets aan of uit te schakelen.

Maar ik had meer van hetzelfde. En hier komt opnieuw SuperHouse.tv om de hoek kijken. Vooral de aangenaam rustige en overwogen presentatie van Jonathan Oxer zijn voor mij een verademing vergeleken met sommige video’s van Andreas Spies.

Eerst deed ik een poging om zonder solderen een verbinding te maken met de Sonoff en de FTDI-omvormer. Dat rammelde. Gelukkig had ik in een doosje nog wat ‘pin headers’ liggen om te solderen. Dat voelde echt beter. Het lampje op de Sonoff ging aan. Maar verder dan dat kwam ik niet. Geen aanmelding te zien van een usb-verbinding in dmesg. (Oh ja, ik werk standaard met Linux) en ook geen seriële terminal. Na een paar dagen zoeken en etteren begon ik het idee te krijgen dat het ledje van de Sonoff aanging omdat er alleen voeding was. Maar geen datacommunicatie. Het usb-kabeltje zou weleens rot kunnen zijn, of alleen bedacht om wat te laden. De lokale winkelier gebeld om te vragen of die soms nog een mini-usb-kabeltje had liggen. Dat was er. Een fietstochtje later had ik een kabeltje dat zou moeten werken.
Waarachtig! Halleluja. Ik kon communiceren met de ESP8266 van de Sonoff. Oxer volgend werden de volgende stappen gezet met esptool.py en de Sonoff-Tasmota-software van arendst (naar ik meen Theo Arends).

Klakkeloos volgen is soms niet het slimste om te doen. Bij esptool.py wilde geen enkele opdracht werken omdat er geen programma zou zijn terwijl ik dat net geïnstalleerd had. ???
Ineens bedacht ik me dat ik met python aan het werken was en dat het dus weleens ./esptool.py zou kunnen zijn. En inderdaad!
Ik kreeg de beschikbare geheugengrootte in beeld en nog veel meer belangrijks, als het toekomstige mac-adres etc. Net als dhr. Oxer besloot ik de originele software eerst maar veilig te stellen. Daarna werd een upload van de inmiddels beruchte Sonoff-Tasmota verricht.
Even later zat ik met een brede grijns tegen een werkende Sonoff-Tasmota aan te kijken. Dit exemplaar wordt de vervanger van de schakelaar van de halogeenlamp. Dan heb ik de eWelink app ook niet meer nodig en weten de Chinezen niet wanneer het licht uitgaat.

De volgende stap is om een MQTT-server op een Raspberry in te richten en met behulp van Node-Red te gaan praten met de lamp. Dan wil ik me ook nog met het Zigbee-protocol bezig gaan houden omdat Philips Hue, Ikea Trädfors en ook de door Aldi geleverde Tint-producten zich via een Zigbee-gateway laten aanspreken. En daarna wordt het tijd om een beslissing te nemen over welk thuisautomatiseringssysteem (steigerwerk/framework) als eerste aan bod komt. Er zijn er inmiddels ettelijke.

esp8266
ESP8266

Wat er zoal mis kan gaan:

  • te weinig kennis
  • spreekt de taal van de techneut/ingenieur niet
  • te weinig financiën
  • te weinig stroom
  • verkeerde spanning
  • slecht contact
  • verkeerde usb-kabel