jan 012018
 

Als je dit weblog regelmatig bezoekt, dan weet je dat we afgelopen week druk bezig zijn geweest met het last-minute deelnemen aan een experiment dat het RIVM, samen met anderen nu voor het tweede achtereenvolgende jaar uitgevoerd hebben: het meten van de hoeveelheden fijnstof tijdens de jaarwisseling.

Daarbij wordt gebruik gemaakt van relatief goedkope sensoren die door particulieren ook zelf opgehangen kunnen worden. Dat brengt uiteraard veel uitdagingen met zich mee, zo hebben wij zelf ook gemerkt toen we wilden deelnemen. Naar aanleiding van de aankondiging heb ik al een tweetal blogposts geschreven naar aanleiding van informatie die ik sindsdien gevonden had: blogpost #1 en blogpost #2. Zoals zo veel dingen lijkt het eenvoudig, maar komt er toch heel wat meer bij kijken als je het goed wilt doen.

Omdat het voor ons onmogelijk was om een Nova SDS011 sensor tijdig in huis te krijgen, zijn we aan de slag gegaan met een Shinyei PPD 42NJ samen met een BME280, een super kleine geïntegreerde sensor voor zowel luchtvochtigheid, temperatuur, luchtdruk en hoogte. Dat geheel werd in een PVC T-stuk bevestigd en achter het Frans balkon van ons huis opgehangen. De gebruikte code was een combinatie van de code van het RIVM van vorig jaar (voor de Shinyei) met de code van dit jaar (voor de SDS011 + BME280). Ik heb de code nog iets verder aangepast op basis van het script waar ik eerder over schreef zodat we ook zelf de ruwe waarden van de sensoren konden volgen. Dat was maar goed ook, want op de officiële site bleef de lijn van de meting bijna vlak:

 Sowieso worden voor de Shinyei sensoren alleen de ruwe PM2.5 metingen doorgegeven die dan op de server omgerekend zouden moeten worden naar µg/m3. Of dat hier helemaal goed gaat weet ik niet, maar omdat onze sensor pas 2 dagen voor de jaarwisseling online kwam ontbrak het aan de mogelijkheid hier nog echt contact over te hebben met het RIVM. Voor de duidelijkheid: vanuit het RIVM werd de afgelopen heel snel, vriendelijk en uitvoerig via de mail gecommuniceerd. Niets dan complimenten daarover!

De stevige piek die je in de afbeelding ziet was toen ik na registratie toch even het script met de omrekening gebruikt had (foei). Maakt niet uit, de grafiek die ik in Google Sheets liet maken (met dat stukje eruit geknipt) laat wél voldoende verschil tussen (ruwe) waarden zien om interessant te zijn.

Lees verder….

Deel dit bericht:
dec 302017
 

Een blogpost over een oplossing waarvan ik zelf inmiddels al geconstateerd heb dat hij tóch niet zo handig is? Moet kunnen. Want ik wil in ieder geval even documenteren hoe ik e.e.a. voor elkaar gekregen heb. Wie weet heeft iemand anders er toch nog wat aan.

Naast de fijnstofsensor voor het RIVM experiment heb ik er ook eentje gemaakt die ik in de woonkamer opgesteld heb. Gewoon om te zien hoe in huis eventueel het niveau fijnstof zou stijgen als we in de keuken aan het koken waren, of een paar uur wafels stonden te bakken.

Ik wilde de data snel kunnen verwerken zonder teveel gedoe met databases of zo, zou het niet handig en mogelijk zijn om de data op te slaan in een Google Sheet?

Ik weet inmiddels dat als ik het kan verzinnen, iemand anders dat ongetwijfeld ook al gedaan heeft. Zo ook nu. En lang geleden al.In 2011 schreef Martin Hawksey een script waarmee  je via een URL data door kunt geven aan  een Google Sheet. Je moet een Sheet aanmaken en dan in de Script editor het script inplakken. Eenmalig moet je dan de Setup() procedure uitvoeren en via Publish > Deploy as web app het script publiceren. Daarbij moet je er dan voor kiezen om het script ook voor “Anonymous” beschikbaar maken. Google zal dan moord en brand schreeuwen omdat het script niet door hen getest is etc.

De werking is dan eenvoudig. Op de eerste rij van de sheet zet je de namen van de waarden die je wilt doorgeven. Tip: noem de eerste kolom “Timestamp”, dan voegt het script automatisch datum en tijd in waarop de nieuwer data is ingevoerd.

Daarna kun je via GET of POST de data doorsturen naar de Google Sheet waarbij elke waarde gelijk moet zijn aan de titel van een kolom (hoofdlettergevoelig).

Ik gebruikte een NodeMCU ESP8266. Omdat Google een beveiligde verbinding gebruikt moet je gebruik maken van een andere bibliotheek dan normaal:

#include <WiFiClientSecure.h>
en
WiFiClientSecure client2;

Lees verder….

Deel dit bericht:
dec 282017
 

OK, één bericht nog dan voordat ik ga schrijven over onze eerste fijnstofmeter die (als alles volgens plan gaat) ook tijdens de jaarwisseling online te volgen is.

Naast de bestelde Shinyei PPD42 die vorig jaar door het RIVM gebruikt is, hebben we een tweetal DSM501 modules van Samyong in huis en blijkt er nog een Plantower PMS5003 onderweg te zijn die (vanwege een wat vaag leveringsprobleem) waarschijnlijk ingehaald wordt door de Novafitness SDS011 die het RIVM dit jaar gebruikt (en die ook door o.a. OK Lab Stuttgart gebruikt wordt).

Dus was ik verder op zoek gegaan naar info specifiek voor die sensoren.

In dit bericht over de DSM501 module wordt ook gesproken over de Air Quality Index (IAQ, IQA) en de bijbehorende verschillen tussen de  Europese Common Air Quality Index (CAQI) die in 5 stappen van 0 tot 100 loopt en de 6 niveaus van de AQI index die in de VS en China gebruikt worden en die van 0 tot 500 (of meer) loopt. En er blijken meer smaken te zijn. Het bericht legt uit hoe de verschillende indexen te berekenen.

Op het forum van The Things Network kun je een hele thread vinden over sensoren met de nodige verwijzingen. Hier is een beschrijving te vinden van (nog) een oplossing gebaseerd op LoraWAN

Het aansluiten van de PMS5003 gaat net weer wat anders dan van de andere sensoren, maar ook daar is informatie over te vinden online. Hij maakt gebruik van een seriële verbinding, net zoals (zo begrijp ik van het RIVM) de SDS011.

Dit bericht ten slotte is niet erg positief over de betrouwbaarheid van de PPDN402 en op dit blog deden ze een test in de keuken waarbij de conclusie was dat het aantal deeltjes dat daar de lucht in geslingerd wordt minstens zo erg is als buiten.

Lees verder….

Deel dit bericht:
dec 212017
 

In de categorie “zodra je je ergens in begint te verdiepen ontdek je hoe weinig je er over weet/wist” even een follow-up op mijn bericht van gisteren over het zelf meten van fijnstof. Joost Wesseling van het RIVM reageerde dezelfde avond (laat) nog op mijn vraag voor wat meer informatie over het initiatief om tijdens de jaarwisseling zelf mee fijnstof te meten. Uit zijn mail bleek dat ze bij het RIVM (uiteraard) ook weten van het Venlose initiatief en Teus Hagen. Ze zijn afgelopen jaar bij hem op bezoek geweest (filmpje).

Op de YouTube pagina van Samen milieu meten vond ik ook nog een paar andere filmpjes die antwoord geven op vragen die ik nog had. Bijvoorbeeld over de te kiezen behuizing voor het geheel. Er staan 3 low-tech voorbeelden online: PVC T-stuk (video door Joost), yoghurt-emmer, plastic fles. Ik wist dat ik zelf een 4e optie gezien had op een van oorsprong Duitse site, maar die ook info in het Nederlands aanbieden: PVC bochten. Die site van OK Lab Stuttgart is sowieso een plek waar je wel een uurtje zoet kunt zijn. Je kunt daar je sensor ook aanmelden zodat jouw metingen permanent, dus niet alleen tijdens oud en nieuw op een online kaart weergegeven worden. Ook hier met ondersteuning voor Nederland en er zijn nog genoeg plekken waar nog niet gemeten wordt.

Op instructables.com staat een beschrijving van het opzetten van een configuratie met de Shinyei PPD42 sensor waarbij ze een belangrijke hack toepassen: ze plakken de opening bij het detectiegebied af zodat er geen licht op valt, dat schijnt de hoeveelheid “ruis” bij de metingen te verminderen.

Ook heb ik inmiddels de beschrijving gevonden van het gebruik van de Shinyei sensor in combinatie met The Things Network (TTN). Het voordeel daarvan is dat je sensoren ook kunt ophangen in gebieden waar je geen toegang tot een draadloos netwerk hebt, al is dit wel een sensor waarvoor je een stopcontact in de buurt moet hebben want op een batterij gaat het vanwege de continue metingen niet werken.

Bij de beschrijving van de TTN-oplossing werd verwezen naar de behuizing die je hierboven bij het bericht afgebeeld ziet. Kost zo’n €20,- in aanschaf. Iets duurder, maar als je niet zo van het knutselen bent wat mij betreft ook wel een optie.
Lees verder….

Deel dit bericht:
sep 042017
 

Ik heb nog geen tijd gehad om zelf te spelen met Chatfuel, maar ik vond het voorbeeld dat My Electronics Lab gerealiseerd had met Chatfuel interessant genoeg voor een blogpost. Chatfuel is een (gratis) online dienst waarmee je zo te zien relatief eenvoudig een Facebook chatbot kunt bouwen. Die chatbot herkent de teksten die een gebruik intypt en reageert daar dan op. Dat hoeft niet alleen met tekst. In het voorbeeld hierboven verstuurd de chatbot GET-commando’s naar een (andere gratis) online MQTT-server. Een ESP8266 die een verbinding met die server heeft reageert daar dan weer op en schakelt een LED-lampje aan of weer uit. Die LED kan dan ook van alles anders zijn. Omgekeerd kun je je ook voorstellen dat je op deze manier informatie van sensoren opvraagt.

 

Deel dit bericht:
mei 142017
 

At AliExpress they sell a number of cheap GPS modules that you can use for Arduino. I ordered one (this one) GY-NEO6MV2 for €6,82 incl. free shipping (the seller doesn’t offer free shipping anymore so you might want to shop around a bit) and wanted to try it out on the LoPy. Now, I wanted to say that using it is really easy, it is, but then again there were more than enough bumps in the road to get it to work the way I wanted it. But hey, what is life without some challenges?

First things first: the GPS module is easy to use. It use UART to connect to it. As soon as you have got something that is willing to listen to it, power it (it worked using 3.3V), it start sending you GPS data that you only need to interpret. I soldered 4 header pins to the module, connected the VCC to the 3.3V, GND to GND on the Pyboard, the TX line to “P11” and the RX line to “P12”.

As soon as you connect power to the LoPy, the GPS unit is powered. The red light blinking means that the unit is working and sending data. You just need to listen to it.  The code to do that is available here on GitHub.

To start listening:  com = UART(1,pins=(config.TX, config.RX), baudrate=9600)

To interpret the data coming from the module, I use the MicropyGPS module. It is initialized using my_gps = MicropyGPS().

After that it is a matter of checking if there is any data available, and then feed it character by character to the module:

if com.any():
    my_sentence = com.readline()
    for x in my_sentence:
        my_gps.update(chr(x))

 

Lees verder….

Deel dit bericht:
apr 202017
 

De Amazon Dash knoppen zijn heerlijk controversieel. Het idee: je hebt een knop (gewoon, een knop met niet verwisselbare batterij en wifi ingebouwd). Als je daar op drukt, dan wordt er automatisch dat ene product waarvan je ook het logo/merk op de knop ziet (ok, dat kun je dan wel zelf instellen vooraf) in je mandje bij Amazon gelegd. Gemakkelijk: plak er eentje in het kastje op de badkamer en als iemand de laatste wc-rol pakt, drukt die gewoon even op de Dash knop om hem bij te bestellen.

Ja ja, super ernstig, fout, verspillend, gemakzuchtig. Geloof me, ik zou er nooit eentje gebruiken. Tenminste niet voor het doel waar ze voor verkocht worden. Want zo’n Dash knop kost maar 5 euro. Helaas, wel in Duitsland te koop, nog niet in Nederland.

Want zo’n knop is natuurlijk een heel hackbaar ding. Nou ja, wil je het allemaal veilig maken en zo, dan kost het wat meer werk, maar voor 5 euro kan ik niet zo’n compacte knop maken die een signaal via mijn wifi netwerk verstuurd. Een ESP8266 kost zo’n 2-3 euro, hier zit een mooie compacte behuizing omheen, een kleine drukknop, het enige nadeel vind ik wel (ook een beetje principieel) dat de batterij niet te vervangen is. Dus als die leeg is (na zo’n 1.000 keer gebruik), dan moet je de knop weg gooien (en niet gewoon in de grijze kliko vanwege die ingelaste batterij).

Dat is één van de redenen waarom deze hack van de knoppen eigenlijk niet zo “goed” is, al is het idee natuurlijk super: een ouder heeft een viertal Dash knoppen aangepast zodat dochterlief van 4 zelf de muziek via het Sonos systeem aan en uit kon zetten. Een Raspberry Pi met daarop o.a. de scapy library vangt de signalen op die de Dash knop verstuurt als deze verbinding wil maken met Amazon. De truc is om de setup van de knop niet helemaal af te ronden zodat deze wél verbinding met je wifi netwerk kan maken, maar niet met Amazon.

Dat principe is natuurlijk ook op andere dingen toe te passen, bijvoorbeeld om apparaten op afstand aan en uit te schakelen. In dit bericht kun je lezen dat dat niet zo heel veilig is aangezien anderen dan zo’n zelfde script zouden kunnen gebruiken om je lampen, apparaten etc. aan te sturen.
Nou klopt dat inderdaad, maar dat is net zo waar voor de meeste “KlikAanKlikUit”-achtige systemen die veel in gebruik zijn.

Hoe dan ook, leuk voorbeeld, en scapy is de moeite waard om wat dieper in te duiken. YouTube heeft er zo te zien voldoende filmpjes over.

Deel dit bericht:
 Reacties uitgeschakeld voor Leuk (en onveilig) idee: Amazon Dash knoppen  Tags: , ,
apr 072017
 

What happens if you take a LoRaWAN node with you in a train while you travel across the Netherlands for about 2,5 hours? I did not know and wanted to find out today because I had to be in Zwolle for a meeting.

So I charged a big external battery (with 2 USB ports), drilled a couple of holes in a plastic container to guide through the micro-USB connectors, and put in some bubble foil inside for safe transport. I drilled another hole to connect the external antenna for the LoPy node. Besides the LoPy, I put the Marvin in the box, with the temperature/humidity sensor on the outside of it. Not that it really mattered, today was going to be about finding gateways while I was on the road.

Things did not look good for the experiment though in the morning. The Things Network (TTN) backbone was acting up again. That was a bummer, because I still had to change the code on the LoPy. It had the code installed for the Circuit Playground and I wasn’t planning on bringing that also. So I changed the code to a simple “send a number every 30 seconds” but was not able to test it before leaving for the train.

To make matters more balanced: I decided to have the Marvin connect to the KPN network (still got 60 days left on my free trial), but the Hookbin.com server decided that today was a good day to refuse to work. And I needed a place to store the data sent by the Marvin. Luckily I found loggly.com another site that you can use as a destination for KPN nodes. I think it is better than Hookbin btw because it keeps more records and even the free plan should be enough for most people. Another nice thing was that Loggly also can act as an HTTP-integration for TTN, so I could collect both the data sent via KPN and the data sent via TTN in one single place. Quick tip: Loggly provides you with an http:// url for the endpoint, KPN doesn’t accept http:// but you can simply change the provided url to https:// and then it works.

OK, into the train. I wasn’t really sure what to expect. A train means lots of metal and a fast moving object (and nodes).

Lees verder….

Deel dit bericht:
apr 052017
 

One of the challenges left with regards to the LoPy was to find a way to actually connect sensors to the node. I had little luck with the DHT11 temperature/moisture sensor (one of the drawbacks of MicroPython over regular Arduino code is the lack of libraries) and didn’t have any I2C sensors lying around. But I did of course still had the Circuit Playground by Adafruit and I knew how to talk to that one from another device using the hardware serial RX/TX connection because I had already connected it to a micro:bit that way (the posts are here, but in Dutch).

So surely it should be possible to connect it to a LoPy and send the sensor data to The Things Network (TTN) that way? Is was. Not as easy and simple as I had hoped, but in the end it worked. Since it is rather a complex structure, I made a small graphic to explain how all the parts go together.

Let’s start with the easy parts: I have got a LoPy Nano Gateway up and running. That is not a full compliant LoRaWAN gateway, but it takes care of receiving messages send via LoRa / 868 Mhz and relaying them, via WiFi, via my WiFi Router, the internet, to the The Things Network (TTN) backend. That is the regular part.

On the right end lower corner, the action starts with the LoPy Node. It is connected via two cables to the Circuit Playground (CPG). One cable goes from the TX port of the LoPy Node to the RX port of the CPG. The other one goes from the TX port of the CPG to the RX port of the LoPy Node. The LoPy Node sends a signal (a digit ranging from 1 to 10) over the serial connection to the CPG. After the CPG receives the signal, it reads the three build in sensors for light, noise and temperature. It then converts the values to a 12 byte HEX string value and sends that back over the serial connection toe the LoPy Node. After sending the signal, the LoPy node waits a bit, giving the CPG time to return the value, then it reads the values and sends that via LoRa to the first available gateway, in this case the LoPy Nano Gateway on my desk.

After the gateway has delivered the messages to TTN, a Payload function translates the received value back into three individual values. It then send them, via the Integrations option, to the Swagger server where it the is available in JSON format. See, easy peasy. 🙂

I uploaded all the code to Github. You can find it here. The code in the LoPy-flash folder is (of course) intended for the LoPy Node, the code in the Circuit Playground folder needs to be uploaded to the CPG via the regular Arduino IDE. I made some changes to the LoPy node code provided by Pycom: I added the option to have the LoPy Node also connect to your local WiFi. Not necessary, but it makes it easier to debug/connect. If you leave that info blank, it will just ignore. Also, if you take the node outside of the range of you WiFi network, it will just ignore it. Another thing that I changed, is the use of config.py for the Node, so that you only need 1 place to change all the info. Finally I choose OTAA instead of ABP as the authentication for the node.

Lees verder….

Deel dit bericht:
jan 092017
 

De vakantie is al weer voorbij, dus dit project zal waarschijnlijk even moeten wachten. Maar ik wilde e.e.a. toch al even “noteren”. Ik kwam er namelijk achter dat mijn CV-ketel ondersteuning heeft voor OpenTherm. En dat biedt mogelijkheden. Want eigenlijk vind ik het wel jammer dat mijn ATAG WiZe gewoon een “domme” thermostaat is. Maar zo’n flitsend kastje dat ook info naar de leverancier stuurt of waar ik maandelijks een abonnement voor betaal, dat hoef ik ook niet.

In plaats daarvan kan ik een OpenTherm Gateway tussen mijn CV-ketel en (bijvoorbeeld) een Raspberry Pi plaatsen. Met een script kan ik dan het geheel aan mijn reeds aanwezige MQTT-server koppelen en daarmee ook aan mijn OpenHab server. Daarmee kan ik dan de activiteiten van de CV-ketel uitlezen en aanpassen, voor zover de thermostaat dat al niet doet.

Heel erge haast heeft het niet. Ik heb de WiZe nu ook al zo ingesteld dat hij ’s nachts en overdag de thermostaat lager zet met uitzondering van het weekend en de dagen dat een van ons thuis werkt/studeert. De OpenTherm gateway maakt het mogelijk om ook vanaf afstand de thermostaat te beïnvloeden, door hem bijvoorbeeld tijdens de vakantie uit te schakelen, tijdelijk warmer te zetten etc.

De kant en klare versies van de Opentherm Gateway kit zijn uitverkocht. De kit die je zelf moet solderen is wel nog te bestellen en ja, zelf samenstellen is natuurlijk veel leuker, maar dan moet het dus nog even wachten.

Twee links om bij de hand te houden:
* Topic op Tweakers hierover
* De bronpagina van alle info

Deel dit bericht: