Communiceren met Internet of Things

door Peter Martin / @pe7er

Joomladagen Nederland 2017 in Zeist,
zaterdag 1 april 2017

Over mij


Peter Martin (@pe7er)




Lent (Nijmegen-Noord), Netherlands

Over mij

www.db8.nl
Joomla support & development


Options Manager
(betaald Component)
- Importeer instellingen van extensies in nieuwe website.


Organiseert:
* Linux Usergroup Nijmegen
* Open Coffee Nijmegen

Joomla vrijwilliger:
* Global Forum Moderator
* Joomla! Operations
   Department Coordinator
* Mentor GSoC 2016 + 2017

* Joomla Bug Squad
* Pizza Bugs & Fun (in NL)

* voormalig Joomla Community
   Leadership Team (6 yr)

Overzicht Presentatie

  • Internet of Things (IoT)
  • IoT “projectje”
  • MQTT
  • Demo



Vragen bij voorkeur aan het eind

Presentatie: http://slides.db8.nl/
IoT code: https://github.com/pe7er/db8iot

1. Internet of Things (IoT)

“Het Internet of Things (IoT)
is een netwerk van apparaten,
verbonden met elkaar via TCP/IP (internet)
die autonoom communiceren
#IoT #jd17nl
@pe7er (precies 140 tekens)

Kijk uit!

We weten allemaal wat er gebeurde in de film “The Terminator”

Wat maakt IoT populair?

Samsung Family Hub koelkast
5,999.99 USD

Smarter FridgeCam
99.99 GBP

IoT in de koelkast?
niet voor mij!

Arduino

Microcontroller

ESP8266

Wifi chip

Wifi aan Arduino toevoegen

ESP8266
- goedkoop: USD $ 0.66 (eBay)
- volledige TCP/IP stack
- verbindt met Wi-Fi router

Communicatie:
Hayes-style "AT" (modem)

Chinese documentatie

Acht pinnen van ESP8266-01

GPIO: General-purpose
input/output

Input
Sensoren
   - temperatuur
   - beweging
   - geluid
   - licht
   - aanraken / drukknop
   - luchtdruk

Output
Signalen
    - licht (LED)
    - schakelaar (Relay)
    - geluid
    - beelscherm

ESP8266

stand-alone gebruik zonder Arduino
flash de chip met eigen code!

- Software Development Kit (SDK)
- esp-open-sdk (GCC toolchain)
- NodeMCU + LUA scripts

- Arduino IDE + ESP8266WiFi library !

2. Mijn eerste IOT “projectje”

Pinnetjes passen niet over gootje

Oplossing: bruggetje bouwen

USB naar TTL seriële interface

Flashing de ESP8266 chip

Temperatuur sensor

Via ThingSpeak.com (RESTFull)

48 uur later... batterij leeg

Mijn IOT “projectje”


1-op-1 communicatie

RESTFull
(Webserver nodig)

And Now For Something Completely Different...

Enkele Message Protocollen

6LoWPAN (IPv6 over Low power Wireless Personal Area Networks). DASH7 active RFID. MyriaNed wireless sensor network (WSN) platform. Z-Wave wireless communications protocol for home automation. ZigBee for personal area networks with small, low-power digital radios. Low-Power Wide-Area Network (LPWAN). Thread protocol for household devices to communicate on a network. Matrix open protocol for real-time communication. Constrained Application Protocol (CoAP) used for very simple electronics devices. AMQP (Advanced Message Queuing Protocol). STOMP (Simple (or Streaming) Text Oriented Message Protocol). MQTT (MQ Telemetry Transport).

3. MQTT

- berichten protocol
- abonneer / publiceer

- eenvoudig en lichtgewicht
- laag op TCP/IP


(IBM) “MQ Telemetry Transport”
Officiële standaard: ISO/IEC PRF 20922

“WhatsApp voor apparaten”


WhatsApp Server = Broker (server)

WhatsApp Groep = Topic (onderwerp)

Lid van Groep = Subscriber (abonnee)

Posten in Groep = Publiceer op Topic

Onderwerpen

Topic naam: hiërarchisch opgebouwd met schuine strepen

huis/keuken/temp
huis/woonkamer/licht
huis/woonkamer/temp
huis/badkamer/temp
garage/temp

Wildcards in Topics


Single level: +
huis/+/temp

huis/keuken/temp
huis/woonkamer/licht
huis/woonkamer/temp
huis/badkamer/temp
garage/temp

Wildcards in Topics


Multi level: #
huis/#

huis/keuken/temp
huis/woonkamer/licht
huis/woonkamer/temp
huis/badkamer/temp
garage/temp

MQTT Veiligheid

Authenticatie

Toegang met MQTT Broker

- gebruikersnaam + wachtwoord

- X509 Client certificaat
(Public/Private Keys)

- OAuth 2.0

Autorisatie

Gebruik beperken MQTT onderdelen

- toegestane topics

- toegestane handelingen
(publish en/of subscribe)

- toegestane QoS niveaus

Veilige communicatie

veilige communicatie
tussen client & broker

- beveilig verbinding
   Transport Layer Security (TLS)
    MQTT over SSL / TLS (via Let’s Encrypt)


- beveilig boodschap
   encryptie van MQTT boodschap

Wat heb je nodig voor MQTT ?

MQTT Broker Services

ThingSpeak.com

io.adafruit.com

CloudMQTT.com

Lijst van
publiekelijk toegankelijke
MQTT brokers

(voor testen)


MQTT Broker op Linux


Mosquitto
An Open Source MQTT v3.1/v3.1.1 Broker







MQTT Client voor PC

MQTT.fx (in Java)
voor: Windows, Apple, Linux, Unix







MQTT Client voor Smartphones


MyMQTT
MQTT Client
MQTT Dashboard


MQTT Tester
ICPDAS MQTT
MQTTInspector


M2Mqtt

MQTT Client Arduino / ESP8266

Code editor: Arduino IDE v1.6.9
+ esp8266 v2.2.0 library installeren
om ESP te kunnen flashen



Om op ESP + MQTT te gebruiken in C++ code:
          libraries PubSubClient + ESP8266WiFi toevoegen
          en in C++ code:

// include MQTT library
#include <PubSubClient.h>
// include ESP8266
#include <ESP8266WiFi.h>

MQTT Client scripts

Python:
Mosquitto module


PHP:
bluerhinos/phpMQTT










4. Demo

Sorry,

de demo heeft geen sheets...
Je had er bij moeten zijn!


Er is een video beschikbaar van soortgelijke presentatie:
Joomla World Conference 2016 op YouYube.


Of bekijk de video van
JandBeyond 2016 (Europese Joomla conferentie).

Bedankt!





Presentatie: http://slides.db8.nl/linux.html

IoT code: https://github.com/pe7er/db8iot


Peter Martin
e-mail: info at db8.nl
twitter: @pe7er

Photo Credits 1/2

Photo Credits 2/2