diff options
| author | Trygve Laugstøl <trygvis@inamo.no> | 2018-04-20 09:44:25 +0200 | 
|---|---|---|
| committer | Trygve Laugstøl <trygvis@inamo.no> | 2018-04-20 09:53:27 +0200 | 
| commit | a1035c3f39c0952e09571be076bf6a4cb2fb966c (patch) | |
| tree | f3859fac3328b4d722f2d14a2c28ef0d2a142180 /what-is-iot-slides.tex | |
| parent | eb0cfce8013d4bfcd45cc1162cce865e655ac459 (diff) | |
| download | iot-workshop-ndc-2018-a1035c3f39c0952e09571be076bf6a4cb2fb966c.tar.gz iot-workshop-ndc-2018-a1035c3f39c0952e09571be076bf6a4cb2fb966c.tar.bz2 iot-workshop-ndc-2018-a1035c3f39c0952e09571be076bf6a4cb2fb966c.tar.xz iot-workshop-ndc-2018-a1035c3f39c0952e09571be076bf6a4cb2fb966c.zip | |
wip
Diffstat (limited to 'what-is-iot-slides.tex')
| -rw-r--r-- | what-is-iot-slides.tex | 305 | 
1 files changed, 300 insertions, 5 deletions
| diff --git a/what-is-iot-slides.tex b/what-is-iot-slides.tex index ea08852..bf541c1 100644 --- a/what-is-iot-slides.tex +++ b/what-is-iot-slides.tex @@ -178,6 +178,13 @@ TX\strut  \end{frame} +\begin{frame}{ESP8266 details - Arduino} +\protect\hypertarget{esp8266-details---arduino}{} + +https://github.com/esp8266/Arduino + +\end{frame} +  \hypertarget{going-back-to-basics}{%  \section{Going back to basics}\label{going-back-to-basics}} @@ -354,6 +361,15 @@ maximum value is 64k, 65536.}  \end{frame} +\hypertarget{lecture-esp8266-aka-nodemcu-aka-esp-12}{% +\section{Lecture: ESP8266 aka NodeMCU aka +ESP-12}\label{lecture-esp8266-aka-nodemcu-aka-esp-12}} + +\begin{frame}{ESP8266 software layers} +\protect\hypertarget{esp8266-software-layers}{} + +\end{frame} +  \hypertarget{lecture-mqtt}{%  \section{Lecture: MQTT}\label{lecture-mqtt}} @@ -368,10 +384,253 @@ maximum value is 64k, 65536.}    \href{https://en.wikipedia.org/wiki/MQTT}{Wikipedia: MQTT}  \end{itemize} +\note{MQTT is \emph{the} standard for IoT applications (and lots of +other useful stuff to). Using HTTP is just silly. + +Supports SSL, and requires TCP. + +Has UDP-like semantics with “fire and forget” but on a higher level (the +message always have to be delivered and ACKed by the broker, not it’s +final recipient. + +Version 3.1.1 er den som gjelder, V 3.1 er rar, de andre finnes ikke +(før standardisering).} + +\end{frame} + +\begin{frame}{MQTT - The protocol} +\protect\hypertarget{mqtt---the-protocol}{} + +Agents have one of two roles: + +\begin{itemize} +\tightlist +\item +  \emph{Client} + +  \begin{itemize} +  \tightlist +  \item +    Publishes \emph{messages} +  \item +    Subscribes / unsubscribes to \emph{topics} +  \end{itemize} +\item +  \emph{Broker} (aka Server) + +  \begin{itemize} +  \tightlist +  \item +    Handles network connections +  \item +    Keeps subscription state +  \item +    Manages client + +    \begin{itemize} +    \tightlist +    \item +      Disconnects +    \item +      \emph{(last) will} +    \end{itemize} +  \item +    Persistence +  \end{itemize} +\end{itemize} + +\note{http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html + +Subscriptions are not permanent. The connection is (unlike HTTP) +stateful. + +Some messages may be persistent, but only one per topic. You will often +end up with a “proper” mq on the backend if queuing is needed.} + +\end{frame} + +\begin{frame}[fragile]{MQTT - The protocol - MQTT Topic} +\protect\hypertarget{mqtt---the-protocol---mqtt-topic}{} + +\begin{itemize} +\tightlist +\item +  Topic name: \texttt{foo/bar/baz} +\item +  Topic filter + +  \begin{itemize} +  \tightlist +  \item +    \texttt{foo/bar/?} +  \item +    \texttt{foo/\#} +  \end{itemize} +\end{itemize} + +\end{frame} + +\begin{frame}[fragile]{MQTT - The protocol - MQTT Topic} +\protect\hypertarget{mqtt---the-protocol---mqtt-topic-1}{} + +The temperature sensor: + +\begin{itemize} +\tightlist +\item +  Publishes on: + +  \begin{itemize} +  \tightlist +  \item +    \texttt{myapp/\$device-id/temperature} +  \item +    \texttt{myapp/\$device-id/humidity} +  \item +    \texttt{myapp/\$device-id/altert} +  \end{itemize} +\item +  Subscribes to: + +  \begin{itemize} +  \tightlist +  \item +    \texttt{myapp/\$device-id/command} +  \end{itemize} +\end{itemize} + +The central application: + +\begin{itemize} +\tightlist +\item +  Subscribes to: + +  \begin{itemize} +  \tightlist +  \item +    \texttt{myapp/\#/temperature} +  \item +    \texttt{myapp/\#/humidity} +  \end{itemize} +\item +  Publishes on: + +  \begin{itemize} +  \tightlist +  \item +    \texttt{myapp/\$device-id/command} +  \end{itemize} +\end{itemize} + +\note{Typical first round of implementation. + +Commands can be: * load new firmware (maybe an URL and firmware +signature). * Set new calibration values * Change reading interval, +altert levels (autonomous operation)} +  \end{frame} -\begin{frame}{MQTT Implementations} -\protect\hypertarget{mqtt-implementations}{} +\begin{frame}{MQTT - The protocol - MQTT Packet} +\protect\hypertarget{mqtt---the-protocol---mqtt-packet}{} + +\begin{itemize} +\tightlist +\item +  Very small +\end{itemize} + +\begin{itemize} +\tightlist +\item +  Packet type + flags +\item +  Packet identifier +\item +  Payload + +  \begin{itemize} +  \tightlist +  \item +    Size +  \item +    Payload +  \end{itemize} +\end{itemize} + +\note{Only packet type + flags (1 byte) is required, everything else is +optional. + +The size field is variable length encoded, 0-127 bytes is 1 byte, +128-16383 use 2 bytes etc, up to 4 bytes for 256MB payload.} + +\end{frame} + +\begin{frame}[fragile]{MQTT - The protocol - MQTT Topic - more} +\protect\hypertarget{mqtt---the-protocol---mqtt-topic---more}{} + +Enten må den holdes rett etter “\#\# MQTT - The protocol - MQTT Topic” +ellers kanskje flyttes etter “patterns”. + +The central application is split: + +\begin{itemize} +\tightlist +\item +  An aggregating agent: + +  \begin{itemize} +  \tightlist +  \item +    \texttt{myapp/\#/temperature} +  \item +    \texttt{myapp/\#/humidity} +  \end{itemize} +\item +  Emailing agent + +  \begin{itemize} +  \tightlist +  \item +    \texttt{myapp/\$device-id/altert} +  \end{itemize} +\item +  Publishes on: + +  \begin{itemize} +  \tightlist +  \item +    \texttt{myapp/\$device-id/command} +  \end{itemize} +\end{itemize} + +\note{} + +\end{frame} + +\begin{frame}{MQTT - Patterns} +\protect\hypertarget{mqtt---patterns}{} + +Må utvides + +Explain: + +\begin{itemize} +\tightlist +\item +  Message sizes with MQTT +\item +  “will” messages +\item +  Push vs pull, central applications can push to clients +\item +  mostly mqtt, some http +\end{itemize} + +\end{frame} + +\begin{frame}{MQTT - Implementations} +\protect\hypertarget{mqtt---implementations}{}  \begin{itemize}  \tightlist @@ -379,8 +638,16 @@ maximum value is 64k, 65536.}    Mosquitto  \item    Eclipse Paho +\item +  RabbitMQ +\item +  ActiveMQ  \end{itemize} +\note{RabbitMQ has a separate connector that must be installed Not sure +about ActiveMQ but it is at least a part of the project so it is +releases at the same time.} +  \end{frame}  \begin{frame}{MQTT Cloud Connectors} @@ -414,20 +681,48 @@ maximum value is 64k, 65536.}    \end{itemize}  \end{itemize} +\note{In between are: + +\begin{itemize} +\tightlist +\item +  self hosted +\item +  Generic bridges +\end{itemize}} +  \end{frame}  \hypertarget{notes}{%  \section{Notes}\label{notes}} -\begin{frame}{Assignments} -\protect\hypertarget{assignments}{} +\hypertarget{assignments}{% +\section{Assignments}\label{assignments}} + +\begin{frame}{Assignment 1: Blink a led} +\protect\hypertarget{assignment-1-blink-a-led}{} + +\end{frame} + +\begin{frame}{Assignment 2: Connect to Wi-Fi} +\protect\hypertarget{assignment-2-connect-to-wi-fi}{} + +\end{frame} + +\begin{frame}{Assignment 3: Connect to MQTT broker} +\protect\hypertarget{assignment-3-connect-to-mqtt-broker}{} + +\end{frame} + +\begin{frame}{Assignment 4: Network play time} +\protect\hypertarget{assignment-4-network-play-time}{}  \begin{itemize}  \item    Measure round trip time/latency. Measure UDP, TCP. Measure when the    packet size is greater than the MTU  \item -  Measure ISR timing +  Notice variations in RTT  \end{itemize}  \end{frame} | 
