antony@notes:~/misc$ cat "楊世宏老師-IOT-Intro.md"
楊世宏老師 : IOT Intro
楊世宏老師 : IOT Intro
[TOC]
IOT 講義連結
IoT Solution Architecture

機房監控系統

- 電流感測器
- 型號:PZEM-004T
- 安裝位置:一條電源延長線中間剪一段連上去,另外抽一條 USB 線,這條 USB 線就是用來傳送 Sensor 收集到的數據。
- 接法:將延長線的電源接到牆壁插座,延長線的插座接要偵測的電器,只要將想偵測的電器接到延長線的插座就可以收集到數據
- USB 線:傳送 Sensor 收集到的數據到 Windows or Linux 機器(都可以),這台機器收到以後,會將資料傳到雲端,這台機器就是扮演 IOT Gateway 的角色。
:::spoiler 電流感測器圖片

:::
:::spoiler 距離感測器圖片

:::
IOT Gateway
定義:
- 能夠處理和蒐集 IoT Device 的資料
- 具備網際網路傳輸能力的機器
IOT Device
- 又稱為 Sensor
- 通常不具有網際網路的傳輸能力。
- 有些人會直接在 Sensor 上面加工,讓它具有網際網路傳輸的能力,缺點是該 Sensor 就只能傳它自己的資料,不能同時接多個 Sensor 。
傳輸方法

從 IOT Gateway 傳到 MQTT broker ,是透過 MQTT 通訊協定
:::spoiler MQTT 通訊協定
:::info
- 主要是用來傳輸資料,傳輸資料消耗的流量低。
- Client 端會與 Server 端建立通道,一旦通道建立成功,除非 Clinet 端主動結束通道,不然通道不會結束。
- Server 端可以主動傳資料到 Client 端,不需得到 Client 端同意。
- Server 無須知道 Client 端的 IP 位址也能進行即時的雙向溝通。

:::
MQTT Broker
- 它是 MQTT 的中心,允許 Clinet 端收集和傳送資料。
- 做資料的中轉,所有設備會將資料傳到 broker 上面, broker 會根據 Subscriber 的需求,將資料轉送給 Subscriber (資料科學家)
MQTT Client
- Publisher ,代表 IOT Gaeway ,發布者
- 可自定義 Topic
- Subscriber ,資料科學家,訂閱者
- Topic 設為
#,代表一次訂閱 Broker 的所有內容
- Topic 設為
- Publisher ,代表 IOT Gaeway ,發布者
Topic
- 資料的分類
- 例如:
iotdata/powermeter/{MQTT_Broker_hostname}
Payload
- Topic 的內容
:::danger
- 重點整理
- clinet( 資料科學家 ) 與 client ( IOT Gayeway ) 溝通會需要透過 MQTT 的 Broker。
- Topic 由發布者定義。
- broker 本身不會儲存資料,他是中間的轉寄站。
- Subscriber 一定要先訂閱 Topic 才會接收到 Publisher 發布的 Topic 資料。
- MQTT Broker 收到 Publisher 發布的資料後,發現沒有 Subscriber 訂閱,則將資料丟掉。 :::
MQTT Client 端命令
- Mosquitto
- 由 Eclipse 公司設計的 program
- 讓我們可以扮演 MQTT client 的角色
- Ubuntu Linux 安裝方法:
sudo apt install mosquitto-clients - Alpine Linux 安裝方法:
sudo apk add mosquitto-clients
:::success
MQTT Subscribe 命令
mosquitto_sub -v -t 'iotdata/powermeter/J509-12' \
-h 'pu230.oc99.org' \
-p 1883 \
-u 'bigred' \
-P 'bigred'-v 詳細資訊,收到的資訊會看到資料是哪個 Topic
-t Puberlisher 端的 Topic
-h MQTT broker 網址
-p port 號
以下為連接到 broker 使用的帳號密碼:
-u 帳號
-P 密碼
執行完命令後,看到卡住是正常的,因為他正在等待 Puberlisher 傳資料給他。 :::
:::success
MQTT Publish 命令
mosquitto_pub -t 'iotdata/powermeter/J509-12' \
-h 'pu230.oc99.org' \
-p 1883 \
-u "bigred"\
-P 'bigred' \
-m 'Hello'-m Topic 內容
:::
Install MQTT Broker on alpine
prepare
$ sudo apk update && sudo apk add podman
$ sudo rc-update add cgroups
$ sudo rc-service cgroups startCreate work directory
$ mkdir iot && cd iot Setting mosquitto config file and password_file
Create Config file
$ nano mosquitto.conf
listener 1883
allow_anonymous false
password_file /mosquitto/data/password_fileCreate password_file
$ touch password_fileCreate mosquitto container
$ sudo podman run -itd \
--restart=always \
--name mosquitto \
-p 1883:1883 \
-v ./mosquitto.conf:/mosquitto/config/mosquitto.conf \
-v ./password_file:/mosquitto/data/password_file \
eclipse-mosquittoCreate mosquttio user
Use mosquitto_passwd command to create user, please replace {USERNAME} and {PASSWORD} to you wanted.
# Add user
$ sudo podman exec -it mosquitto mosquitto_passwd -b /mosquitto/data/password_file {USERNAME} {PASSWORD}
# Reload password_file
$ sudo podman exec -it mosquitto kill -SIGHUP 1