Raspberry Pi Zero – updating the gate opener with water meter OCR


My Raspberry Pi 1B+ has been opening garadge and letting me know of the conditions for work nearly 4 years. Recently I’ve decided to replace this 2014 small board computer (SBC) with newer version. I’ve also looked at better (the principle Keep it Small and Simple – KISS) solutions that became available – i.e. ESP Easy on ESP8266 (controlling the relay and reading the contact switch is not too much for this platform, even with addition of environmental sensors), but after some thinking – the option of leaving the Raspberry Pi in place won because of one additional perk that I wanted to handle – a classic water meter. Yes, such an old analogue water meter. Fun!

Raspberry Pi Zero Front
Raspberry Pi Zero Front

Continue reading Raspberry Pi Zero – updating the gate opener with water meter OCR

Domoticz part 5: Grafana, InfluxDB, Telegraf – beautiful and easy graphs

Grafana is the answer to the nagging question we’be been asking ourselves over the years – how to quickly and nicely present our data gathered from devices. InfluxDB on the other hand is the database that is as easy and simple to use, thus making it an ideal candidate for this job.
Let me show you how to quickly and easily put our data from domoticz and other devices to InfluxDB and then using Grafana – display in much more useful way than default domoticz graphs do.

What will we need?


  • InfluxDB
  • Grafana
  • bash scripts


  • Raspberry Pi – 4B+
  • OPTION: Raspberry Pi A/B/B+ lub Zero (armv6)
  • OPTION: A different ARM based micro-computer (i.e.: OPi PC” rel=”noopener” target=”_blank”>Official Store – OrangePi PC using CPU H3/H2/H5) – they could be cheaper. It’s also entirely possible to use x86 computer with Debianem, but it’s going to eat way more than 4-6W when using ARM based. Here I used finally Orange Pi PC with latest armbian distribution, tested first on latest Raspberry Pi 2



Let’s download https://www.influxdata.com/downloads/ latest InfluxDB version (at the time of writting it was 1.0.2) – “Standalone Linux Binaries (ARM)”:

cd /tmp
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.0.2_linux_armhf.tar.gz

Then we have to create user influxdb:

sudo adduser influxdb

Accept the questions with yes, add some data if you like, password.
Check if the user exists:

id influxdb

We should get similar, positive response:

uid=1001(influxdb) gid=1001(influxdb) grupy=1001(influxdb)

Now, let’s install from influxdb binary:

sudo tar xzf influxdb-1.0.2_linux_armhf.tar.gz 
cd influxdb-1.0.2-1
cp -R * /
sudo chown influxdb:influxdb -R /etc/influxdb
sudo chown influxdb:influxdb -R /var/log/influxdb
sudo mkdir -p /var/lib/influxdb
sudo chown influxdb:influxdb -R /var/lib/influxdb
sudo cp /usr/lib/influxdb/scripts/init.sh /etc/init.d/influxdb
sudo chmod 755 /etc/init.d/influxdb
sudo cp /usr/lib/influxdb/scripts/influxdb.service /etc/systemd/system

All went well? Let’s start our InfluxDB:

/etc/init.d/influxdb start

It works! Let’s make sure it starts with the system, this time using a different tool:

sudo apt-get install rcconf

Run it, push space to get “*” at influxdb.


This time it’s a bit easier let’s use the ready package from https://github.com/fg2it/grafana-on-raspberry/. Choose a package either for Raspberry Pi 2/3 (armv7) or for Raspberry Pi A/B/B+ lub Zero (armv6), and download it using wget. Here I’m using Raspberry Pi 2/3 package:

sudo apt-get install adduser libfontconfig
wget https://github.com/fg2it/grafana-on-raspberry/releases/download/v3.1.1-wheezy-jessie/grafana_3.1.1-1472506485_armhf.deb 
sudo dpkg -i grafana_3.1.1-1472506485_armhf.deb

This package tells us to add Grafana to start with the system in this way:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable grafana-server

Let’s start grafana:

sudo /bin/systemctl start grafana-server


Aktualne wersje InfluxDB zarządzamy poprzez linię komend (CLI):

pi@host:~$ influx 
Connected to http://localhost:8086 version 1.2.2
InfluxDB shell version: 1.2.2

Aby stworzyć bazę danych wystarczy:

> create DATABASE domoticz
> quit

Current InfluxDB ara managed by (CLI):

pi@host:~$ influx 
Connected to http://localhost:8086 version 1.2.2
InfluxDB shell version: 1.2.2

Creata database:

> create DATABASE domoticz
> quit

The older version of InfluxDB by default use the web interface – by using IP of our Raspberry at port 8083. Basic configuration allows unauthorized access via http. This is the interface:

InfluxDB: Interface
InfluxDB: Interface

so, let’s just choose “Create Database”, and name our first database “domoticz”:

InfluxDB: Creating domoticz database
InfluxDB: Creating domoticz database

That is it! Either with http interface or CLI – no need to create data, tables – we can simply add data to it.

Sending from domoticz to InfluxDB

Using Domoticz – use the menu and select “HTTP”:

HTTP push in Domoticz

We need to find data that is interesting and put it into Influxdb – so let’s choose atmospheric pressure:


So how does this work? First, we choose a variable – our data, that is already in Domoticz system – from menu “Device name”. Then – we need a number to identify – I use the same as the IDX number of the device in domoticz – so here it’s “1450”. Tick the “Activate connection”, at the right side and provide URL that will be our connection via http to write toInfluxdb: IP, port – this time it’s 8086, database name, username/password if used and precision.
Method is HTTP POST, authorization – let’s leave that for later.
The most important part is the “Data:” here we enter our InfluxDB variable, that we going to use later to create graphs, it’s value and time. Keeping things small and simple, we shall call it “device_1450“. Use tshark, if you’re curious how the URL’s work, what is the response (HTTP code 204 if it’s fine). That is it – data will be stored in “domoticz”, database, no need to create types, indexes, tables – quite new approach, eh?

Sending data from any device (not domoticz)

Since InfluxDB is so easy going, everybody is getting ideas. We talk via HTTP, meaning that we can put the data using simple tools i.e. using curl, a popular program present in each modern distribution.:

apt-get install curl

Here’s and example on how to use it:

curl -i -XPOST '' --data-binary "inwisp,host=wisp value=${speed_in}"
curl -i -XPOST '' --data-binary "ouwisp,host=wisp value=${speed_out}"

This very simple example uses SNMP (the old 32-bit counters) that queries the wireless interface to ISP, to show the “Internet speed”. curl is used here to send the data to database named “snmp”, the valiable is inwisp for Input and outwisp for Output, but to spice up things a bit – we use host (it’s optional), to be able to later group the devices. Then the value – which is the speed. We don’t put extra time value – we use the current system time.
The whole script – below (it’s much easier to use telegraf, but I still love the MRTG’s approach to collect data) is an 17 yeras old 17 bash script!. I used it via screen while starting the system same way as with the – Flightradar and SDR blog entry.

#This script reads the interface speed in bits (actually the number of bits tru interface) using old 32-bit counters
#Licencja: GPL v2
#Author: lukasz.jokiel@gmail.com
#1999-06-22/23 - Initial version to test the MRTG way of doing things
#2016-11-12 - Adopted to serve as simple example for Grafana blog entry, some changes to modernize and simplify it a bit using new bash functions

#Setting up the variables
#Number (index) of the monitred interface snmpwalka
#SNMP community name, by default it is "public"
#IP of the router that we want to monitor
#How often do we check?
#Maximum values that we expect - by default its 25/4. We need that to filter out counter resets and errors
#Glowna petla - czytamy wartosci czekamy zadany czas i czytamy je znowu - odejmujemy od siebie aby wyznaczyc predkosc (tam na dole petli)
while [ 1 -eq 1 ]
 octety_wtedy_in=$(snmpget -v1 -c $community $ip_rutera$numer_interfejsu | awk '{print $4}')
 octety_wtedy_out=$(snmpget -v1 -c $community $ip_rutera$numer_interfejsu | awk '{print $4}')
 sleep $co_ile_sekund
 octety_teraz_in=$(snmpget -v1 -c $community $ip_rutera$numer_interfejsu | awk '{print $4}')
 octety_teraz_out=$(snmpget -v1 -c $community $ip_rutera$numer_interfejsu | awk '{print $4}')

#Najpierw sprawdzamy czy czasem nie będziemy dzielić przez zero, oraz czy się licznik nie przepełnił... Jesli cos jest nie tak to wartosc na 1
 if [ $octety_wtedy_in -eq $octety_teraz_in ]

 if  [ $octety_wtedy_in -gt $octety_teraz_in ]

 if [ $octety_wtedy_out -eq $octety_teraz_out ]

 if  [ $octety_wtedy_out -gt $octety_teraz_out ]

 #Maly debug - wyswietlamy ile nam wyszlo
 echo Wtedy In: $octety_wtedy_in
 echo Wtedy Out: $octety_wtedy_out
 echo Teraz In: $octety_teraz_in
 echo Teraz Out: $octety_teraz_out

 #Liczymy roznice


 #Jeszcze raz sprawdzamy czy nie mamy zlego wyniku (poprzednie nie wylapia jednej sytuacji... no jakiej?) 
 if [ $roznica_in -lt 0 ]

 if [ $roznica_out -lt 0 ]

 if [ $roznica_in -gt $max_possible_in ]

 if [ $roznica_out -gt $max_possible_out ]
 #Mamy nasza predkosc
 #Czyscimy kosnsole aby usunac poprzednie wyniki
 echo "Prędkość IN: "${predkosc_in}"kbps"
 echo "Prędkość OUT: "${predkosc_out}"kbps"
 #Saving data in snmp database InfluxDB
 curl -i -XPOST '' --data-binary "inwisp,host=wisp value=${predkosc_in}"
 curl -i -XPOST '' --data-binary "ouwisp,host=wisp value=${predkosc_out}"

The stored data in snmp database should give you the following reply:

HTTP/1.1 204 No Content
Request-Id: a11318b7-a590-11e6-cea7-000000000000
X-Influxdb-Version: 0.11.0
Date: Sun, 13 Nov 2016 11:02:39 GMT

The other way to find out if we’re in the database is to use the Influxdb HTTP interface and issue from the menu – SHOW MEASUREMENTS:

Grafana – finally we’re getting to the beautiful graphs!

Grafana runs on port 3000, login and password admin/admin – now choose in left top corner – Data Sources. Add Source and type in – Type, URL, Access at proxy, user and password for the database:

Grafana: Add Data Source - InfluxDB
Grafana: Add Data Source – InfluxDB

If the data source is working – we can go to “Dashboard” and create our first :

Grafana: Add new Dashboard
Grafana: Add new Dashboard

Next – let’s add our first graph:

Grafana: Panel
Grafana: Panel

Now we see the default panel with single data series to plot/graph. It looks nice, but this is not our data yet:

Grafana: First Graph
Grafana: First Graph

Next step – select our database from the “Panel data source” – change from -Grafana- to SNMP. “A” – our data series should look like this:

Grafana: Add db, toggle edit mode
Grafana: Add db, toggle edit mode

Green line is gone, because we need to provide correct data – we do it in the same way – changing to the edit mode in the query “A” and fill in just like in exemple below. Next choose again SNMP “+ Data query” and fill in the “B” query – all changes are updated on the fly:

Grafana: example Internet speed series data entry
Grafana: example Internet speed series data entry

Go to “Axes” menu – here, select proper data type – “Unit”, “data rate” -> “kilobits/sec”. In the “General” name the Panel “Internet” and this is it. The floppy disc icon saves our new dashboard:

Grafana: first graph
Grafana: first graph

It’s time now to install aditional grafana puligns to get more of the graphs, gauges etc: https://grafana.net/plugins


The last interesting piece of software is Telegraf. This a very feature-rich piece of monitoring software, that is able to gather data from aplication statues, interfaces, CPU, and runs also on Linux> Simple installation follows simple configuration.
First – create new databes in InfluxDB – “telegrafPI” but this time using command line:

pi@orangepipic-grafana:~$ influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.0
InfluxDB shell version: 1.1.0
> create database telegrafPI

Now let’s install telegraf:
We can either add repository:

deb https://repos.influxdata.com/debian jessie stable



or get appropriate pacakge from:

wget https://dl.influxdata.com/telegraf/releases/telegraf-1.1.2_linux_armhf.tar.gz
tar xvfz telegraf-1.1.2_linux_armhf.tar.gz

or even use

wget https://repos.influxdata.com/debian/pool/stable/t/telegraf/telegraf_1.1.1-1_armhf.deb
dpkg -i telegraf_1.1.1-1_armhf.deb

Configuration is dead simple telegraf pre-configures the file based on what we tell it to, then we should save it in:


So to get you started lets monitor CPU:

sudo mkdir -p /etc/telegraf
sudo telegraf --config telegraf.conf -input-filter cpu:mem -output-filter influxdb > /etc/telegraf/telegraf.conf/

Based that this is the same computer we monitor where influxdB is installed – of not – choose proper IP of the DB host.
In Grafana – after adding new database source, we’re using the following data series for plotting:

A: SELECT last("usage_idle") FROM "cpu" WHERE $timeFilter GROUP BY time(1m) fill(none)
B: SELECT last("usage_user") FROM "cpu" WHERE $timeFilter GROUP BY time(1m) fill(none)
C: SELECT last("usage_system") FROM "cpu" WHERE $timeFilter GROUP BY time(1m) fill(none)
D: SELECT last("usage_guest") FROM "cpu" WHERE $timeFilter GROUP BY time(1m) fill(none)
E: SELECT last("usage_irq") FROM "cpu" WHERE $timeFilter GROUP BY time(1m) fill(none)

To get the result below, tick the “Stacked” in Display tab:

Grafana + Telegraf: CPU Example
Grafana + Telegraf: CPU Example

Other projects

Grafana with InfluxDB is also used in the SMOG measurements..

Grafana versions 5.x and 6.x and missing PhantomJS

Have noticed that screenshot functionality is no longer working? There’s no PhantomJS bundled with Grafana for Rasbperry Pi (and armfh) – so you cannot save it to *.PNG.

What does the error look like:

Jun 10 19:12:01 grafana grafana-server[268]: 2019/07/10 19:12:01 [render.go:41 RenderToPng()] [E] Failed to render to png:
 fork/exec /var/lib/grafana/vendor/phantomjs/phantomjs: no such file or directory 


lvl=eror msg="executable not found" logger=rendering executable=/usr/share/grafana/tools/phantomjs/phantomjs
lvl=eror msg="Rendering failed - PhantomJS isn't included in arm build per default" logger=context userId=1 orgId=1 uname=admin error="PhantomJS executable not found"

You can also see:

Grafana Render Error
Grafana Render Error

To restore the screenshot functionality:
– download from https://github.com/fg2it/phantomjs-on-raspberry/blob/master/rpi-2-3/wheezy-jessie/v2.1.1/phantomjs_2.1.1_armhf.deb latest version here we got the RPi version (select Download link or copy the link and use wget/curl on RPi)
– install:

sudo dpkg -i phantomjs_2.1.1_armhf.deb

– execute form console:

cd /usr/share/grafana/tools/phantomjs
sudo ln -s /usr/local/bin/phantomjs

This brings back the screenshots.

And this is it, go and create beautiful graphs!

Raspberry Pi 4 – a surprise but also radical change in the project’s direction

RPI 4 ze strony fundacji
The new Raspberry Pi 4 is a very interesting change in the direction of the original project. Why? I will summarize what we already know, right after the premiere:

  • new CPU, with much more computing power – not because of the clock, but ARM cores in version A72. The execution process – 28nm, is perhaps not the newest (it has never been) and, as tests show – the current is the higher temperature of the plate, and clearly the warmer PMIC system than in RPi 3B +
  • 4GB RAM is the only option to purchase, in addition to very specialized solutions like a mediacenter
  • The key change is the the overall performance boost of the computer – the fast processor, the DDR4 memory (twice as fast as before), but the best decision is to directly connect to the CPU GigabitEthernet port (simplifying) and dramatically increasing the performance of USB ports. The fact that USB 3.0 was added is not as important as the transfer speed that you can actually get. This opens up completely new horizons for RPi – for example: connecting additional ‘power ups’ – machine learning sticks via USB
  • Power: at last no problems – the USB-C connector simply allows you to send more – more power. It’s now 5V / 3A – this simply means a powerful charger, but it does not mean that we will use the fast charging modes offered by USB 3.0 PD (so a 9V charger from the phone will not do us any good). Mini USB previously – was one of the main problems of the platform, to few amps…
  • “New” Raspbian based on Debian Buster still needs some work – stability, and the availability of libraries, but this will probably change quickly
  • The Raspberry Pi Foundation annouced new firmware for the USB controller – which will result in lowering overal temperature of the board – 4-5 degress, the controler iteslf about 10 degrees less, and the system will consume less power.

To summarize – the new Raspberry Pi 4 is definitely not anymore a computer for hobbyists and science, sometimes adapted to professional solutions – it is an efficient SBC for semi-professional projects out of the box.

The Raspbery Pi 4 enters a completely new path – especially for effective applications of popular buzzwords – AI / Machine Learning.

Update – January 2020

After a few months of presence on the market, you can summarize the pros and cons of the new tile from the Raspberry foundation:


  • unable to boot from PXE / NFS / DHCP
  • unable to boot from USB
  • the problem of simultaneous use of WiFi and UHD 4K video mode


  • lowering the demand for electricity and cooling – thanks to the improved USB bridge firmware

This last issue seems to me the most problematic and makes me wait for the next version – Raspberry Pi 4B + – since we have a USB bridge in the main chip (SoC) – what was the point of adding a foreign VIA bridge?

0.96″ OLED SSD1306 display and Raspberry Pi

[Update: 2019-03-30] Our reader, Paweł Kopacz, noticed that pip, setuptools and wheel are also needed
Quick and visually compelling projects don’t come easy ? Naaah, just like last time – let’s get on a very nice and easy project – attaching display onto Raspberry Pi. As we were chating on the Malinowe Pi Group, Hubert Wu pointed me to a OLED 128×64 display, monochrome. With a quite decent resolution of 128×64 and based on OLED technology this is a nice 0.96 inch display. Well, my first computer was running at Hi-Res of 640×400 and monochrome too. Priced at $3-$5 pops-up as: ”0.96″ I2C IIC Serial 128X64” in popular stores and is clearly based on original Adafruit SSD1306 – which would be my first choice!

Wyświetlacz OLED SSD1306 - grafika
A OLED SSD1306 display

What will you need?


  • git, python-devel, python-pip (installable under Raspbian on RPi)
  • Library with examples from Adafruit: Adafruit_Python_SSD1306



This external display connected to RPi (and which is independent from HDMI or Composite video outputs), is very useful for small projects – and for me – when need to know what the IP address is 🙂


First let’s connect power – VCC and GND to 3,3 and GND on RPi, then SDA and SCL to GPIO0 (GPIO 2 @ RPi B+, 2 i 3) and GPIO1 (GPIO 3 @ RPi B+, 2 i 3):

OLED SSD1306 display - connecting to RPi...
OLED SSD1306 display – connecting to RPi…

The wiring is quite simple and all pins are adjacent (well we omit GPIO4!). During first wiring attempt i mixed up VCC and GND! RPi greeted me with low light on it’s green LED, but all was fine after proper wiring. This is the view from the display:

OLED SSD1306 - wiring
OLED SSD1306 – wiring


On the software side we are going to turn on the I2C (GPIOO or GPIO2 and GPIO1 or GPIO3) in our RPi, by means of running raspi-config, then choose Interfacing Options–>>I2C–>Enable
After reboot – we should install the software, but first – let’s update the system:

sudo apt-get update && sudo apt-get upgrade

Next the software:

sudo apt-get install build-essential python-dev python-pip python-imaging python-smbus git

Then the RPi.GPIO:

sudo pip install RPi.GPIO

Now – let’s get via git the Adafruit library with examples:

sudo python -m pip install --upgrade pip setuptools wheel
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install


Let’s find out if this works…

cd Adafruit_Python_SSD1306/examples/
nano shapes.py

Now edit the shapes.py and find the line that tells it to use the I2C version of the display:

disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, i2c_bus=1)

This is correct, add “#’ at the begging of the other lines that define the ‘disp‘ variable

sudo python shapes.py

Wow, it works! There’re more examples – a very nice – animate.py and image.py, just don’t forget to edit them to use the proper definition of the ‘disp’.
As bonus – we can use our own fonts (TTF format) – i.e.: 16pix height:

Wyświetlacz OLED SSD1306 - tekst
OLED SSD1306 – own font/text

The image.py allows you to display monochrome picture in PPM – use GIMP to save and use dithering to get acceptable results:

Wyświetlacz OLED SSD1306 - grafika
OLED SSD1306 – graphics

Well, as you see – the input characteristics of the image matters, but at leas you can see the logo

Now all that is left is to use python or bash to display IP address of you RPi!

Wyświetlacz OLED SSD1306 - tekst
OLED SSD1306 – text

[UPDATED 03-02-2018] SMOG sensor – 2,5 and 10 micro meter particles

[Last changes]:
07-11-2017: Additional data from richer stations, Open-Smog Integration
20-12-2017: USB power control on Raspberry Pi 3, thanks to reader
02-03-2018: New API from GIOŚ Poland

SMOG is common nowadays in big cities. Let’s put together a working, precise own SMOG sensor, first for the 2,5 and 10 μm size particles. There is one issue – the choices are many, but only few are reliable, precise and have affordable price. Finally – after a log searching, I’ve chosen Nova Fitness SDS011:

  • precision is OK
  • fan included
  • ability to mount a small tube to access external air
  • very realiable
  • UART with USB converter included
  • Low Total cost: around $40 (with Orange Pi Zero) up to $60 (with Raspberry Pi)

Continue reading [UPDATED 03-02-2018] SMOG sensor – 2,5 and 10 micro meter particles

ESP8266 and SMOG part four: Sleep mode for SDS011 in ESPEasy MEGA 2.0

The SMOG sensor project became a bit complex – along with the addition of relay. In the mean time thanks to Gijs Noorlander and yours- since you build, ask and use the sensor – we got updated version of ESPEasy MEGA 2.0 for ESP8266.

Why the new blog entry? That’s because Gijs added the included in SDS011 function that when sent over serial connections allows to put SDS011 to sleep. Simple, elegant solution to extend the life and quality of the measurements of the SDS011 – better than relay approach.

ESP8266 ESP Easy MEGA 2.0
ESP8266 ESP Easy MEGA 2.0

Now, just by means of connecting extra jumper cable we can go back to a simpler version of the sensor – a union of first version with addition of the temperature and humidity sensor form the second one.
Continue reading ESP8266 and SMOG part four: Sleep mode for SDS011 in ESPEasy MEGA 2.0

Measuring air quality using Bosch BME680 and AMS CCS811 – IAQ, TVOC, eCO2

BME680 on Raspberry Pi 3

Measurement of basic environmental data in our apartment – temperature and humidity is one of the most popular applications of commonly available sensors for Raspberry Pi (RPi), Orange Pi (OPi) and ESP8266.

Then we added ability to measure the SMOG otuside and inside and today we will deal with two new and very interesting air quality sensors.
Continue reading Measuring air quality using Bosch BME680 and AMS CCS811 – IAQ, TVOC, eCO2

Domoticz part 8 – Stable instance of Domoticz, 24/7/365 mode – high availability at home

As a result, a both fresh and advanced user finds himself in a situation where the system – ceases to work at all, or requires frequent restarts, or worse causes quick degradation of the main storage device – which is often (micro) SD card.

Is there a simple and effective solution to increase Domoticz’s availability on Raspberry Pi / Orange Pi?

Sure there is! But first – before you begin – make a copy of your (micro)SD working used in domoticz instance on your Raspberry Pi/Orange Pi.
CAUTION: We will perform operations that may lead to the loss of all data – so make sure you have a copy!

What will you need?


  • monit
  • rsync


  • harddrive either classic HDD or better SSD, small is OK from 32GB up to 128GB
  • heatsinks for Raspberry Pi/Orange Pi
  • USB 2.0 or 3.0 to SATA adapter – so we can connect the harddrive via USB port

Continue reading Domoticz part 8 – Stable instance of Domoticz, 24/7/365 mode – high availability at home

ESP8266 and SMOG part three: sensor protection, cloud upload

Last time we updated our simple SMOG sensor with display (OLED) and added BME 280 to verify the SMOG measurements – the environmental sensor – as we know that humidity over 70% can add up to the SMOG.
It’s time now to protect our sensor.
Continue reading ESP8266 and SMOG part three: sensor protection, cloud upload

Embedded devices: Linux on Raspberry Pi, ESP 8266 and others