今天介紹一下比較生活篇的應用藍芽 溫濕度計的資料收集與呈現。
今天登場的是小米的米家藍牙溫濕度計
米家藍牙溫濕度計
主要特點即時監測室內溫濕度變化家中溫濕度一目了然溫濕度與人體舒適度、健康情況息息相關。
LCD 螢幕顯示,字體清晰,輕鬆讀取。
但是如果要自行收集資料整合呢?是否可行?
我們這邊使用 bluetoothctl 來做裝置掃描與讀取測試,各位可以看到米家藍牙溫濕度計(MJ_HT_V1)接收讀取到詳盡的資訊。
pi@ras2:~ $ sudo bluetoothctl
[NEW] Controller B8:27:EB:C9:C4:A8 ras2 [default]
[NEW] Device 4C:65:A8:DA:1F:CC MJ_HT_V1
[NEW] Primary Service
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service002d
0000fe95-0000-1000-8000-00805f9b34fb
Xiaomi Inc.
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service002d/char0039
00000014-0000-1000-8000-00805f9b34fb
Hardcopy Data Channel
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service002d/char0037
00000013-0000-1000-8000-00805f9b34fb
Unknown
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service002d/char0035
00000010-0000-1000-8000-00805f9b34fb
UPNP
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service002d/char0033
00000004-0000-1000-8000-00805f9b34fb
Unknown
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service002d/char0031
00000002-0000-1000-8000-00805f9b34fb
Unknown
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service002d/char002e
00000001-0000-1000-8000-00805f9b34fb
SDP
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service002d/char002e/desc0030
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
[NEW] Primary Service
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0025
00001530-1212-efde-1523-785feabcd123
Vendor specific
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0025/char002b
00001534-1212-efde-1523-785feabcd123
Vendor specific
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0025/char0028
00001531-1212-efde-1523-785feabcd123
Vendor specific
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0025/char0028/desc002a
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0025/char0026
00001532-1212-efde-1523-785feabcd123
Vendor specific
[NEW] Primary Service
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service001a
0000180a-0000-1000-8000-00805f9b34fb
Device Information
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service001a/char0023
00002a26-0000-1000-8000-00805f9b34fb
Firmware Revision String
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service001a/char0021
00002a27-0000-1000-8000-00805f9b34fb
Hardware Revision String
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service001a/char001f
00002a25-0000-1000-8000-00805f9b34fb
Serial Number String
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service001a/char001d
00002a24-0000-1000-8000-00805f9b34fb
Model Number String
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service001a/char001b
00002a29-0000-1000-8000-00805f9b34fb
Manufacturer Name String
[NEW] Primary Service
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0016
0000180f-0000-1000-8000-00805f9b34fb
Battery Service
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0016/char0017
00002a19-0000-1000-8000-00805f9b34fb
Battery Level
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0016/char0017/desc0019
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
[NEW] Primary Service
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service000c
226c0000-6476-4566-7562-66734470666d
Vendor specific
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service000c/char0012
226cbb55-6476-4566-7562-66734470666d
Vendor specific
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service000c/char0012/desc0015
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service000c/char0012/desc0014
00002901-0000-1000-8000-00805f9b34fb
Characteristic User Description
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service000c/char000d
226caa55-6476-4566-7562-66734470666d
Vendor specific
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service000c/char000d/desc0011
00002904-0000-1000-8000-00805f9b34fb
Characteristic Format
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service000c/char000d/desc0010
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service000c/char000d/desc000f
00002901-0000-1000-8000-00805f9b34fb
Characteristic User Description
[NEW] Primary Service
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0008
00001801-0000-1000-8000-00805f9b34fb
Generic Attribute Profile
[NEW] Characteristic
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0008/char0009
00002a05-0000-1000-8000-00805f9b34fb
Service Changed
[NEW] Descriptor
/org/bluez/hci0/dev_4C_65_A8_DA_1F_CC/service0008/char0009/desc000b
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
[CHG] Device 4C:65:A8:DA:1F:CC ServicesResolved: no
[CHG] Device 4C:65:A8:DA:1F:CC Connected: no
[bluetooth]# exit
.......
...
pi@ras2:~ $
這邊我們介紹如何接收米家藍牙溫濕度計資料送到 MQTT。
依樣我先不介紹寫程式,的方式而是使用套件快速來使用。
這邊使用的是xiaomi-ble-mqtt是 python 開發的程式。
那我們依照說明直接安裝下載:
安裝系統套件:
sudo pip3 install bluepy
sudo pip3 install paho-mqtt
clone 程式:
git clone https://github.com/algirdasc/xiaomi-ble-mqtt.git
cd xiaomi-ble-mqtt
複製 devices.ini.sample 到 devices.ini 做編輯設定
devices.ini
[bedroom] ;;名稱
device_mac = 4C:65:A8:DA:1F:CC ;;裝置藍牙位置
topic = sensors/mi/1 ;;MQTT 消息
availability_topic = sensors/mi/availability ;;MQTT 狀態 消息
average = 5 ;;平均
timeout = 10 ;;遇時間
執行測試,各位可以看到已經抓到完整資料連同電池狀態都有。
pi@ras2:~/xiaomi-ble-mqtt $ /usr/bin/python3.5 /home/pi/xiaomi-ble-mqtt/data-read.py
2019-10-03 22:00:56.451549 bedroom : {"battery": 62.0, "humidity": 56.6, "average": 5, "temperature": 27.2}
pi@ras2:~/xiaomi-ble-mqtt $
加入排程定時擷取資料。
pi@ras2:~/xiaomi-ble-mqtt $ crontab -e
* * * * * /usr/bin/python3.5 /home/pi/xiaomi-ble-mqtt/data-read.py >> /home/pi/xiaomi-ble-mqtt/xiaomi-ble.log 2>&1
此時我們使用 MQTT 軟體 連線去訂閱看看資料:
這裡可以看到資料順利接收!!
那我們現在把它啟動送資料到 influsDB 依樣使用 Grafana 來呈現.
建立一個新的設定檔 telegraf-ble.conf
pi@ras2:~ $ cat telegraf-ble.conf
[[inputs.mqtt_consumer]]
## MQTT broker URLs to be used. The format should be scheme://host:port,
## schema can be tcp, ssl, or ws.
servers = ["tcp://192.168.0.51:1883"]
## Topics that will be subscribed to.
topics = [
"sensors/mi/#",
]
## The message topic will be stored in a tag specified by this value. If set
## to the empty string no topic tag will be created.
# topic_tag = "topic"
## QoS policy for messages
## 0 = at most once
## 1 = at least once
## 2 = exactly once
##
## When using a QoS of 1 or 2, you should enable persistent_session to allow
## resuming unacknowledged messages.
# qos = 0
## Connection timeout for initial connection in seconds
# connection_timeout = "30s"
## Maximum messages to read from the broker that have not been written by an
## output. For best throughput set based on the number of metrics within
## each message and the size of the output's metric_batch_size.
##
## For example, if each message from the queue contains 10 metrics and the
## output metric_batch_size is 1000, setting this to 100 will ensure that a
## full batch is collected and the write is triggered immediately without
## waiting until the next flush_interval.
# max_undelivered_messages = 1000
## Persistent session disables clearing of the client session on connection.
## In order for this option to work you must also set client_id to identity
## the client. To receive messages that arrived while the client is offline,
## also set the qos option to 1 or 2 and don't forget to also set the QoS when
## publishing.
# persistent_session = false
## If unset, a random client ID will be generated.
client_id = "Telegraf-ble-duhvebwv"
## Optional TLS Config
# tls_ca = "/etc/telegraf/ca.pem"
# tls_cert = "/etc/telegraf/cert.pem"
# tls_key = "/etc/telegraf/key.pem"
## Use TLS but skip chain & host verification
# insecure_skip_verify = false
## Data format to consume.
## Each data format has its own unique set of configuration options, read
## more about them here:
## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
data_format = "json"
[[outputs.influxdb]]
urls = ["http://192.168.0.51:8086"]
database = "db0"
username = "telegraf"
password = "telegraf"
執行 Docker
$ docker run -d --name=telegraf-ble -v $PWD/telegraf-ble.conf:/etc/telegraf/telegraf.conf:ro arm32v7/telegraf
設定圖表!
這裡我們就可以方便地用複製再修改即可。
選擇訂閱的資料
在選擇欄位
這裡可以看到最後的呈現!
再做點調整增加
最後分享一下這個儀表板。 只要用匯入即可。
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": 2,
"links": [],
"panels": [
{
"gridPos": {
"h": 9,
"w": 5,
"x": 0,
"y": 0
},
"id": 2,
"options": {
"fieldOptions": {
"calcs": [
"mean"
],
"defaults": {
"mappings": [],
"max": 50,
"min": 0,
"thresholds": [
{
"color": "blue",
"value": null
},
{
"color": "green",
"value": 18
},
{
"color": "yellow",
"value": 27
},
{
"color": "red",
"value": 38
}
],
"title": "客廳溫度",
"unit": "celsius"
},
"override": {},
"values": false
},
"orientation": "auto",
"showThresholdLabels": false,
"showThresholdMarkers": true
},
"pluginVersion": "6.3.6",
"targets": [
{
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "home/temp"
}
]
}
],
"timeFrom": null,
"timeShift": null,
"title": "",
"type": "gauge"
},
{
"gridPos": {
"h": 9,
"w": 5,
"x": 5,
"y": 0
},
"id": 7,
"options": {
"fieldOptions": {
"calcs": [
"mean"
],
"defaults": {
"mappings": [],
"max": 50,
"min": 0,
"thresholds": [
{
"color": "blue",
"value": null
},
{
"color": "green",
"value": 18
},
{
"color": "yellow",
"value": 27
},
{
"color": "red",
"value": 38
}
],
"title": "臥室溫度",
"unit": "celsius"
},
"override": {},
"values": false
},
"orientation": "auto",
"showThresholdLabels": false,
"showThresholdMarkers": true
},
"pluginVersion": "6.3.6",
"targets": [
{
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"temperature"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "sensors/mi/1"
}
]
}
],
"timeFrom": null,
"timeShift": null,
"title": "",
"type": "gauge"
},
{
"gridPos": {
"h": 9,
"w": 4,
"x": 10,
"y": 0
},
"id": 12,
"options": {
"displayMode": "lcd",
"fieldOptions": {
"calcs": [
"mean"
],
"defaults": {
"mappings": [],
"max": 100,
"min": 0,
"thresholds": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
],
"title": "臥室裝置電量"
},
"override": {},
"values": false
},
"orientation": "vertical"
},
"pluginVersion": "6.3.6",
"targets": [
{
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"battery"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "sensors/mi/1"
}
]
}
],
"timeFrom": null,
"timeShift": null,
"title": "",
"type": "bargauge"
},
{
"gridPos": {
"h": 9,
"w": 5,
"x": 14,
"y": 0
},
"id": 3,
"options": {
"fieldOptions": {
"calcs": [
"mean"
],
"defaults": {
"mappings": [],
"max": 100,
"min": 0,
"thresholds": [
{
"color": "red",
"value": null
},
{
"color": "green",
"value": 40
},
{
"color": "dark-blue",
"value": 70
}
],
"title": "客廳濕度",
"unit": "humidity"
},
"override": {},
"values": false
},
"orientation": "auto",
"showThresholdLabels": false,
"showThresholdMarkers": true
},
"pluginVersion": "6.3.6",
"targets": [
{
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "home/hum"
}
]
}
],
"timeFrom": null,
"timeShift": null,
"title": "",
"type": "gauge"
},
{
"gridPos": {
"h": 9,
"w": 5,
"x": 19,
"y": 0
},
"id": 8,
"options": {
"fieldOptions": {
"calcs": [
"mean"
],
"defaults": {
"mappings": [],
"max": 100,
"min": 0,
"thresholds": [
{
"color": "red",
"value": null
},
{
"color": "green",
"value": 40
},
{
"color": "dark-blue",
"value": 70
}
],
"title": "臥室濕度",
"unit": "humidity"
},
"override": {},
"values": false
},
"orientation": "auto",
"showThresholdLabels": false,
"showThresholdMarkers": true
},
"pluginVersion": "6.3.6",
"targets": [
{
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"humidity"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "sensors/mi/1"
}
]
}
],
"timeFrom": null,
"timeShift": null,
"title": "",
"type": "gauge"
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 9
},
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "connected",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"alias": "濕度",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "home/hum"
}
]
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "客廳濕度歷史",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": null,
"format": "humidity",
"label": "濕度",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "celsius",
"label": "溫度",
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": true,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 7,
"w": 12,
"x": 12,
"y": 9
},
"id": 9,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "connected",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"alias": "濕度",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"humidity"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "sensors/mi/1"
}
]
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "臥室濕度歷史",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": null,
"format": "humidity",
"label": "濕度",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "celsius",
"label": "溫度",
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": true,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 6,
"w": 12,
"x": 0,
"y": 16
},
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "connected",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"alias": "溫度",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"hide": false,
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "B",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "home/temp"
}
]
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "客廳溫度歷史",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": null,
"format": "celsius",
"label": "溫度",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "celsius",
"label": "溫度",
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": true,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 6,
"w": 12,
"x": 12,
"y": 16
},
"id": 10,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "connected",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"alias": "溫度",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"hide": false,
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "B",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"temperature"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "sensors/mi/1"
}
]
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "客廳溫度歷史",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": null,
"format": "celsius",
"label": "溫度",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "celsius",
"label": "溫度",
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": true,
"alignLevel": null
}
}
],
"refresh": "5s",
"schemaVersion": 19,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
]
},
"timezone": "",
"title": "家裡溫度",
"uid": "v3CR7GmRz",
"version": 7
}
今天介紹 將生活中的藍芽 Bluetooth 裝置直接拿來應用,配合圖表監看很容易分析幾家裡電器(冷氣使用狀況喔)!