Tải bản đầy đủ (.docx) (26 trang)

HỆ THỐNG điều KHIỂN mái CHE GIẾNG TRỜI, đo NHIỆT độ độ ẩm và THÔNG báo TRÊN APP SHEET, có CODE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.24 MB, 26 trang )

HỆ THỐNG ĐIỀU KHIỂN MÁI CHE
GIẾNG TRỜI, ĐO NHIỆT ĐỘ ĐỘ ẨM VÀ
THÔNG BÁO TRÊN APP SHEET


Trang 2 / 27

MỤC LỤC
Chương 1. Tổng quan đề tài..............................................................................................................................4
1.1.

Giới thiệu đề tài................................................................................................................................4

1.2.

Mục đích nghiên cứu........................................................................................................................4

1.3.

Đối tượng nghiên cứu.......................................................................................................................5

1.4.

Phạm vi nghiên cứu...........................................................................................................................5

1.5.

Dự kiến kết quả.................................................................................................................................5

Chương 2. Sơ đồ khối và giải thuật...................................................................................................................7
2.1. Sơ đồ khối...............................................................................................................................................7


2.2. Giới thiệu về cảm biến đo nhiệt độ độ ẩm DHT11................................................................................7
2.3. ESP-32.....................................................................................................................................................9
2.3.1. ESP-32..............................................................................................................................................9
2.3.2. Chức năng ESP-32.........................................................................................................................10
2.4. Phần mềm Node-red............................................................................................................................10
2.5. Giới thiệu Adruino IDE.........................................................................................................................11
2.6. Giới thiệu App Sheet............................................................................................................................12
Chương 3. Giải thuật và điểu khiển................................................................................................................15
3.1.

Nguyên lý làm việc của hệ thống................................................................................................15

3.2.

Lưu đồ giải thuật.........................................................................................................................15

Chương 4. Thực nghiệm..................................................................................................................................16
4.1.

Tiến hành thực nghiệm...................................................................................................................16

4.2.

Kết quả thực nghiệm.......................................................................................................................18

4.3.

Hiển thị thông tin ở App Sheet.......................................................................................................18

4.4.


Ứng dụng IoT...................................................................................................................................18

Chương 5. Kết luận..........................................................................................................................................20
5.1.

Ưu điểm...........................................................................................................................................20

5.2.

Nhược điểm....................................................................................................................................20

TÀI LIỆU THAM KHẢO:.....................................................................................................................................21


Trang 3 / 27

Chương 1. Tổng quan đề tài
1.1. Giới thiệu đề tài
Giới thiệu:
Chúng ta đang sống trong 1 thời đại mà nền công nghiệp 4.0 đang phát triển mạnh
mẽ nhất, chính vì vậy những ứng dụng của nó được xuất hiện ở khắp nơi quanh cuộc
sống chúng ta và 1 trong số chúng là Internet Vạn Vật hay còn được gọi là Internet of
things (IoT). Nó đóng vai trị như 1 mạng tồn cầu mà trong đó vật dụng và con người
được đặt theo cách riêng, có khả năng kết nối, giao tiếp với nhau thông qua mạng Internet
mà không cần trực tiếp tương tác với nhau. Trong tương lai IoT sẽ cịn phát triển rực rỡ
hơn nữa, góp phần phát triển nhiều mặt trong cuộc sống hằng ngày
Ở đề tài này, chúng ta sẽ cùng tìm hiểu và biết được cách điều khiển thiết bị trong
nhà, đo được nhiệt độ và độ ẩm môi trường thông qua lập trình node-red, adruino, xử lí
giá trị và hiển thị trên App Sheet

Chức năng:
Áp dụng công nghệ 4.0 vào thực tế, con người lúc đó có thể làm chủ được thời
gian và khơng gian của mình, điều khiển thiết bị và truyền tải thông tin mà không cần trực
tiếp giao tiếp với nhau. Từ đó tự động hóa được ngơi nhà của mình cũng như thu được các
giá trị nhiệt độ độ ẩm ngồi mơi trường.
Phán đốn và thực hiện đóng tấm che giếng trời khi có dấu hiệu trời sắp mưa, đồng
thời cập nhật liên tục giá trị nhiệt độ độ ẩm ngồi mơi trường lên App Sheet.
1.2. Mục đích nghiên cứu
Dựa trên những kiến thức đã học về lập trình vi điều khiển , lập trình C . Tiến hành
nghiên cứu cách sử dụng và kết nối ESP-32 với cảm biến nhiệt độ độ ẩm DHT11


Trang 4 / 27

Đồng thời tìm hiểu thêm kiến thức về lập trình node-red cũng như cách xuất giá trị
lên App Sheet.
Tìm hiểu chức năng cấu tạo nguyên lý hoạt động của cảm biến đo nhiệt độ độ ẩm.
Nghiêm cứu về chức năng WiFi Bluetooth của ESP-32.
Nghiên cứu về IoT (Internet of Things).
Tìm hiểu về gia thức truyền dữ liệu MQTT trên node red.
Cuối cùng là có thể nhận giá trị đo bất cứ lúc nào mà không cần trực tiếp ở đó,
thuận tiện cho người sử dụng.
1.3. Đối tượng nghiên cứu
Module ESP-32
Cảm biến đo nhiệt độ độ ẩm DHT11
Lập trình node-red
Phần mềm Adruino IDE
Tạo cơ sở dữ liệu trên App Sheet
1.4. Phạm vi nghiên cứu
Ở góc độ là đồ án hệ thống nhúng, hạn chế về mặt thời gian và kinh phí thực hiện

nên phạm vi nghiên cứu và áp dụng thí nghiệm tại nhà.
Cảm biến đo nhiệt độ độ ẩm DHT11 với tầm đo độ ẩm (20%-90% RH với sai số
5%RH) và nhiệt độ( 0-50°C với sai số 2°C)
1.5. Dự kiến kết quả
Đóng mở được tấm che giếng trời


Trang 5 / 27

Đo được nhiệt độ độ ẩm ngoài môi trường
Điều khiển được ở 2 chế độ tự động và thủ công
Hiển thị được các giá trị đo được lên màn hình
Xem được giá trị ở mọi thiết bị có kết nối Internet thơng qua App Sheet


Trang 6 / 27

Chương 2. Sơ đồ khối và giải thuật
2.1. Sơ đồ khối

D H T1 1
E S P -3 2
N o d e -re d
A p p Sh e et
2.2. Giới thiệu về cảm biến đo nhiệt độ độ ẩm DHT11
Cảm biến DHT11 bao gồm một phần tử cảm biến độ ẩm điện dung và một điện trở
nhiệt để cảm nhận nhiệt độ. Tụ điện cảm biến độ ẩm có hai điện cực với chất nền giữ ẩm
làm chất điện môi giữa chúng. Thay đổi giá trị điện dung xảy ra với sự thay đổi của các
mức độ ẩm. IC đo, xử lý các giá trị điện trở đã thay đổi này và chuyển chúng thành dạng
kỹ thuật số.

Để đo nhiệt độ, cảm biến này sử dụng một nhiệt điện trở có hệ số nhiệt độ âm, làm
giảm giá trị điện trở của nó khi nhiệt độ tăng. Để có được giá trị điện trở lớn hơn ngay cả
đối với sự thay đổi nhỏ nhất của nhiệt độ, cảm biến này thường được làm bằng gốm bán
dẫn hoặc polymer
Cảm biến nhiệt độ và độ ẩm DHT11 là cảm biến rất thơng dụng hiện nay vì chi phí
thấp và rất dễ lấy dữ liệu thông qua giao tiếp 1 wire (giao tiếp digital 1 dây truyền dữ liệu


Trang 7 / 27

duy nhất). Bộ tiền xử lý tín hiệu tích hợp trong cảm biến giúp bạn có được dữ liệu chính
xác mà khơng phải qua bất kỳ tính tốn nào

Hình 2.4: Module cảm biến DHT11
Sơ đồ chân DHT11:
VCC
Data
GND
Thơng số kỹ thuật:
Điện áp hoạt động
Dòng điện tiêu thụ
Phạm vi cảm biến độ ẩm
Phạm vi cảm biến nhiệt độ
Tần số lấy mẫu tối đa
Kích thước

Nguồn 3,5V đến 5,5V
Đầu ra cả nhiệt độ và độ ẩm
thông qua dữ liệu nối tiếp
Nối đất


3V - 5V DC
2.5mA
20% - 90% RH, sai số ±5%RH
0°C ~ 50°C, sai số ±2°C
1Hz (1 giây 1 lần)
23 12 * 5 mm

2.3. ESP-32
Module điều khiển ESP-32 là module MCU có khả năng đa dụng, mạnh mẽ và
được sử dụng rộng rãi trong thiết kế mạch điện tử và nó được úng dụng khá rộng rãi trong
những ứng dụng về IoT hiện nay. Phạm vi ứng dụng từ mạng lưới các thiết bị tiết kiệm
năng lượng đến những ứng dụng có tác vụ phức tạp như mã hóa âm thanh, hình ảnh,…


Trang 8 / 27

Hình 2.1: Module ESP-32 Devkitc-32d
Thơng số kỹ thuật:
Chip điều khiển
Wifi
Bluetooth
Điện áp đầu vào
Số chân I/O

ESP-32
2.4 GHz hỗ trợ chuẩn 802.11 b/g/n/e/i
BR/EDR phiên bản v4.2 và BLE
5V (thông qua cổng USB)
11 (tất cả đều có Interrupt/PWM/I2C/Onewire, trừ chân


D0)
Số chân Analog Input
1 (điện áp vào tối đa 3.3V)
Bộ nhớ Flash
4MB
Hỗ trợ bảo mật
WFA, WPA/WPA2 và WAPI
Tích hợp giao thức
TCP/IP
Lập trình trên các ngơn ngữ C/C++, Micropython, NodeMCU-Lua
Nhiệt độ hoat động ổn định: -40C đến 85
Điện áp hoạt động
2.2-3.6V

Chip ESP-32 được thiết kế cho khả năng mở rộng và tùy biến cao. Có đến 2 lõi
CPU độc lập có thể điều khiển, tần số clock của CPU. ESP32 tích hợp bộ ngoại vi khá
phong phú từ cảm biến điện dung, cảm biến Hall, SD card, Ethernet, SPI tốc độ cao,
UART, I2S hay I2C.


Trang 9 / 27

Hình 2.2: Sơ đồ chân ESP-32
2.4. Giới thiệu Adruino IDE
Arduino IDE là một phần mềm mã nguồn mở chủ yếu được sử dụng để viết và biên dịch
mã vào module Arduino hay module ESP-32 được sử dụng trong bài.
Đây là một phần mềm Arduino chính thức, giúp cho việc biên dịch mã trở nên dễ dàng mà
ngay cả một người bình thường khơng có kiến thức kỹ thuật cũng có thể làm được.
Mơi trường IDE chủ yếu chứa hai phần cơ bản: Trình chỉnh sửa và Trình biên dịch, phần

đầu sử dụng để viết mã được yêu cầu và phần sau được sử dụng để biên dịch và tải mã lên
module Arduino. Môi trường này hỗ trợ cả ngơn ngữ C và C ++

Hình 2.5: Shortcut của Arduino


Trang 10 / 27

Giao diện làm việc trên Adruino IDE:

Hình 2.6: Giao diện làm việc của Adruino IDE

2.5. Phần mềm Node-red
Node-red là một cơng cụ lập trình kéo-thả để kết nối các thiết bị phần cứng, API
và online services với nhau. Nó cung cấp một trình soạn thảo dựa trên trình duyệt giúp dễ
dàng kết nối các luồng với nhau bằng cách sử dụng một loạt các Node trong bảng màu
(palette) có thể được triển khai chỉ bằng một cú nhấp chuột.


Trang 11 / 27

Hình 2.3: Giao diện node-red
2.6. Giới thiệu App Sheet
AppSheet là công cụ/nền tảng tạo ứng dụng mà khơng cần biết mã lệnh
(code). Thay vì học mã (như Flutter – một nền tảng phát triển ứng dụng di động, ứng
dụng web chun nghiệp) hoặc tìm ai đó để tạo ứng dụng bạn cần, bạn có thể sử dụng
AppSheet để tự tạo ứng dụng bằng cách kéo thả. Với AppSheet bạn có thể tập trung vào
việc sử dụng nó thay vì phát triển hoặc sửa chữa nó.



Trang 12 / 27

Hình 2.7: Shortcut của App Sheet
Lợi ích khi dùng App Sheet:
+ Ứng dụng AppSheet chính là cách No-code giúp IT thúc đẩy sự đổi mới tại nơi làm
việc. Lọai bỏ gánh nặng cho việc tạo các ứng dụng tại nơi làm việc dựa trên CNTT mà
không phải lo lắng tính bảo mật và cách quản trị được phát triển ứng dụng trên nền tảng
No-code từ AppSheet.
+ Cho phép các nhà phát triển trong tổ chức của bạn tạo ra các giải pháp sáng tạo tại
nơi làm việc mà họ cần để hồn thành cơng việc tốt hơn, nhanh hơn và khả năng hiển thị
cao hơn.
+ Bạn có thể tự tạo ứng dụng quản lý doanh nghiệp cho riêng mình chỉ với vài click
chuột!
+ Ứng dụng AppSheet là các ứng dụng di động và máy tính để bàn với các tính năng
mạnh mẽ


Trang 13 / 27

Hình 2.8: Giới thiệu App Sheet


Trang 14 / 27

Chương 3. Giải thuật và điểu khiển
3.1. Nguyên lý làm việc của hệ thống
Cảm biến đo nhiệt độ độ ẩm DHT11 sẽ thu thập dữ liệu và cung cấp cho ESP-32
ESP-32 sẽ xử lí dữ dữ liệu, tính tốn giá trị và gửi lên Node-red thơng qua giao
thức MQTT
Node-red nhận được thông báo và xử lý dữ liệu nhận được để xuất lên màn hình

điều khiển, đồng thời gửi giá trị và cập nhật liên tục giá trị qua App Sheet
3.2. Lưu đồ giải thuật
Tín hiệu nhiệt độ độ ẩm

Cảm biến nhiệt độ độ ẩm DHT11

ESP-32

Node-red

App Sheet

In kết quả lên màn hình


Trang 15 / 27

Chương 4. Thực nghiệm
4.1. Tiến hành thực nghiệm
Bước 1: Đấu nối cảm biến nhiệt độ độ ẩm DHT11 với ESP-32 và cấp nguồn cho

Data-D13

VCC-3V3

GND-GND

Hình 4.1: Sơ đồ đấu nối dây ESP-32 và DHT11
Bước 2: Mở phần mềm Adruino, viết và nạp chương trình cho ESP-32


Hình 4.2: Chương trình trong phần mềm Adruino IDE


Trang 16 / 27

Bước 3: Mở Node-red và bắt đầu khởi chạy

Hình 4.3: Tạo khối trên Node-red
Bước 4: Xuất giá trị đo trên Dashboard và App Sheet quan sát và ghi lại số liệu

Hình 4.4: Giao diện điều khiển và kết quả trên Dashboard Node-red


Trang 17 / 27

Hình 4.5: Kết quả hiển thị ở App Sheet
4.2. Kết quả thực nghiệm
Đóng mở cửa theo 2 chế độ là tự động ( khi cửa đang mở mà có dấu hiệu trời sắp
mưa sẽ tự động đóng lại) và thủ cơng ( có thể đóng mở theo ý người sử dụng).
Đo được nhiệt độ độ ẩm ngoài môi trường và cập nhật liên tục giúp người dùng dễ
dàng biết được thông tin trên mọi thiết bị miễn là có kết nối internet.
Do qui mơ là đồ án hệ thống nhúng cho nên hệ thống đo chỉ phù hợp để đo những
hệ thống nhỏ.
4.3. Hiển thị thông tin ở App Sheet
Qua App Sheet ta có thể biết được tình hình thời tiết quanh nhà mình như nhiệt độ,
độ ẩm, trời đang nắng hay đang mưa.
4.4. Ứng dụng IoT
Ứng dụng vào thực tiễn sau khi hoàn thành chúng ta có thể xem kết quả ở mọi thiết
bị di động có kết nối internet.



Trang 18 / 27

Xem được cả giá trị lẫn trạng thái điều khiển trên dashboard bằng IP. Qua lệnh
ipconfig.

Hình 4.6: Kết quả sau khi chạy lệnh ipconfig


Trang 19 / 27

Chương 5. Kết luận
5.1. Ưu điểm
Giá thành rẻ
Dễ dàng sử dụng
Thuận tiện cho người sử dụng
Giúp tối ưu hóa khơng gian sống
5.2. Nhược điểm
Qui mơ nhỏ chỉ sữ dụng cho mơ hình vừa và nhỏ.
Tùy thuộc vào linh kiện và cách lập trình mà cho ra kết quả tin cậy.


Trang 20 / 27

TÀI LIỆU THAM KHẢO:
Tiếng Việt:
/> />o/esp8266-esp32-doc-cam-bien-dht11-server-nodejs/
/>Cùng với một số đường dẫn hình ảnh khác:
Tiếng Anh:
/> />

CODE ADRUINO:
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define DHTPIN 13
#define DHTTYPE DHT11
const char* ssid ="Phim My" ;
const char* password = "24032000";
const char* mqtt_server = "192.168.1.249";
const uint16_t mqtt_port = 1883;


Trang 21 / 27
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)messageTemp[i]);
messageTemp += (char)messageTemp[i];
}
Serial.println();
}
void setup_wifi(){
delay(10);
Serial.println();

Serial.print("connecting to ");
Serial.print(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");


Trang 22 / 27
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void setup(){
Serial.begin(9600);
dht.begin();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void reconect(){
while (!client.connected()){
Serial.print("Attemting MQTT connecting....");
if (client.connect("ESP32Client")) {
Serial.println("connected");
}
else{
Serial.print("fail, rc=");

Serial.print(client.state());
Serial.println("try again in 5 seconds");


Trang 23 / 27
delay(5000);
}
}
}
void loop(){
if (!client.connected()){
reconect();
}
client.loop();
float Humidity = dht.readHumidity();
char charHumidity[50];
float Temp = dht.readTemperature();
char charTemp[50];
dtostrf(Humidity, 1, 2, charHumidity);
Serial.print("Humidity: ");
Serial.print(charHumidity);
Serial.println(" t");
client.publish("Humidity", charHumidity);
Serial.print("\n");
dtostrf(Temp, 1, 2, charTemp);
Serial.print("Tamp: ");
Serial.print(charTemp);
Serial.println(" t");



Trang 24 / 27
client.publish("Tamp", charTemp);
Serial.print("\n");
}

LUỒNG NODE-RED
[ { "id": "d79195fad1305c83", "type": "tab", "label": "Flow 2", "disabled": false, "info": "" }, { "id":
"a01a6782a24b5c4f", "type": "change", "z": "d79195fad1305c83", "name": "Reset", "rules": [ { "t": "set", "p": "set",
"pt": "flow", "to": "0", "tot": "num" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1190, "y":
480, "wires": [ [] ] }, { "id": "7f8252604708da0d", "type": "ui_gauge", "z": "d79195fad1305c83", "name": "",
"group": "a97b5507d43daef4", "order": 1, "width": 0, "height": 0, "gtype": "gage", "title": "Nhiệt độ", "label": " ⁰C",
"format": "{{value}}", "min": 0, "max": "100", "colors": [ "#00b500", "#e6e600", "#ca3838" ], "seg1": "", "seg2":
"", "className": "", "x": 1020, "y": 100, "wires": [] }, { "id": "d815e9b509e5e1cb", "type": "function", "z":
"d79195fad1305c83", "name": "", "func": "msg.Humidity = flow.get(\"Humidity\");\nmsg.Tamp =
flow.get(\"Tamp\")\n\nmsg.HumiditySetup = flow.get(\"HumiditySetup\");\nmsg.TampSetup =
flow.get(\"TampSetup\");\n\nif(msg.Humidity >= msg.HumiditySetup || msg.Tamp <= msg.TampSetup)\n{\n
msg.payload = \"Trời mưa\";// sáng đỏ\n}\nelse\n{\n msg.payload = \"Trời nắng\";\n}\nreturn msg;", "outputs": 1,
"noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 820, "y": 280, "wires": [ [ "c15f9930b249f64e",
"6aaa2383152fdab2", "63d58b208af453ef", "c9abdaf10ef25a55" ] ] }, { "id": "98b7c80ec38e7b60", "type": "ui_led",
"z": "d79195fad1305c83", "order": 1, "group": "e4ac03dbcfa21d6a", "width": 0, "height": 0, "label": "Động cơ",
"labelPlacement": "left", "labelAlignment": "left", "colorForValue": [ { "color": "#ff0000", "value": "Trời mưa",
"valueType": "str" }, { "color": "#008000", "value": "Trời nắng", "valueType": "str" }, { "color": "#808080", "value":
"xam", "valueType": "str" } ], "allowColorForValueInMessage": false, "shape": "circle", "showGlow": false, "name":
"", "x": 1490, "y": 280, "wires": [] }, { "id": "b1e73c54e1fdf2c0", "type": "mqtt in", "z": "d79195fad1305c83",
"name": "", "topic": "Tamp", "qos": "2", "datatype": "auto", "broker": "f61c527046f224d6", "nl": false, "rap": true,
"rh": 0, "x": 130, "y": 280, "wires": [ [ "d49534dc5d6ace41" ] ] }, { "id": "7b28485959848ed1", "type": "mqtt in",
"z": "d79195fad1305c83", "name": "", "topic": "Humidity", "qos": "2", "datatype": "auto", "broker":
"f61c527046f224d6", "nl": false, "rap": true, "rh": 0, "x": 140, "y": 320, "wires": [ [ "cef9554b6cade1e1" ] ] }, { "id":
"c01f3dac971dd02c", "type": "ui_button", "z": "d79195fad1305c83", "name": "", "group": "e4ac03dbcfa21d6a",
"order": 3, "width": 0, "height": 0, "passthru": false, "label": "Khởi động", "tooltip": "", "color": "", "bgcolor": "",

"className": "", "icon": "", "payload": "Trời nắng", "payloadType": "str", "topic": "topic", "topicType": "msg", "x":
990, "y": 420, "wires": [ [ "8dc8d33e95e61ec2", "98b7c80ec38e7b60", "318b7f42b17627fd",
"277fa4ee991ca996" ] ] }, { "id": "8dc8d33e95e61ec2", "type": "change", "z": "d79195fad1305c83", "name": "set",
"rules": [ { "t": "set", "p": "set", "pt": "flow", "to": "1", "tot": "num" } ], "action": "", "property": "", "from": "", "to":
"", "reg": false, "x": 1250, "y": 440, "wires": [ [] ] }, { "id": "03350c1cd2181b3e", "type": "ui_gauge", "z":
"d79195fad1305c83", "name": "", "group": "bb02d3f2ca4ee40c", "order": 1, "width": 0, "height": 0, "gtype": "gage",
"title": "Độ ẩm", "label": "%", "format": "{{value}}", "min": 0, "max": "100", "colors": [ "#00b500", "#e6e600",
"#ca3838" ], "seg1": "", "seg2": "", "className": "", "x": 1010, "y": 140, "wires": [] }, { "id": "d8b33b95a020e6e4",
"type": "GSheet", "z": "d79195fad1305c83", "creds": "2d3b51cb244d23b4", "method": "update", "action": "",
"sheet": "1XAMuTEZzOl9n8bD7YJu72eAUnJyStTylyxYtMl9p-Ic", "cells": "A2", "flatten": false, "name": "Nhiệt
độ", "x": 1360, "y": 180, "wires": [ [] ] }, { "id": "d49534dc5d6ace41", "type": "change", "z": "d79195fad1305c83",
"name": "Tamp", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "$number(msg.payload)\t", "tot":
"jsonata" }, { "t": "set", "p": "Tamp", "pt": "msg", "to": "payload", "tot": "msg" }, { "t": "set", "p": "Tamp", "pt":
"flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 330, "y":
280, "wires": [ [ "b92ef0e3e38c6dca" ] ] }, { "id": "cef9554b6cade1e1", "type": "change", "z": "d79195fad1305c83",
"name": "Humidity", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "$number(msg.payload)\t", "tot":
"jsonata" }, { "t": "set", "p": "Humidity", "pt": "msg", "to": "payload", "tot": "msg" }, { "t": "set", "p": "Humidity",
"pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 320,
"y": 320, "wires": [ [ "b92ef0e3e38c6dca" ] ] }, { "id": "51e62f6f0c6f8c54", "type": "ui_button", "z":


Trang 25 / 27
"d79195fad1305c83", "name": "", "group": "e4ac03dbcfa21d6a", "order": 4, "width": 0, "height": 0, "passthru":
false, "label": "Đóng", "tooltip": "", "color": "", "bgcolor": "", "className": "", "icon": "", "payload": "Trời mưa",
"payloadType": "str", "topic": "topic", "topicType": "msg", "x": 1030, "y": 480, "wires": [ [ "98b7c80ec38e7b60",
"a01a6782a24b5c4f", "318b7f42b17627fd", "277fa4ee991ca996" ] ] }, { "id": "eb57d5be97e80a71", "type":
"switch", "z": "d79195fad1305c83", "name": "set", "property": "set", "propertyType": "flow", "rules": [ { "t": "eq",
"v": "1", "vt": "num" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 610, "y": 280, "wires":
[ [ "ab808131fc39763e", "222b9885aae61ddd", "d815e9b509e5e1cb" ] ] }, { "id": "ab808131fc39763e", "type":
"change", "z": "d79195fad1305c83", "name": "Tamp", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to":

"Tamp", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 810, "y": 180, "wires":
[ [ "aabfe0069cb36d05", "7f8252604708da0d" ] ] }, { "id": "222b9885aae61ddd", "type": "change", "z":
"d79195fad1305c83", "name": "Humidity", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "Humidity",
"tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 820, "y": 220, "wires":
[ [ "03350c1cd2181b3e", "1ac084ac08b05ab5" ] ] }, { "id": "3c3deb493eac395c", "type": "delay", "z":
"d79195fad1305c83", "name": "", "pauseType": "delay", "timeout": "5", "timeoutUnits": "seconds", "rate": "1",
"nbRateUnits": "5", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds",
"drop": false, "allowrate": false, "x": 1300, "y": 340, "wires": [ [ "98b7c80ec38e7b60" ] ] }, { "id":
"318b7f42b17627fd", "type": "function", "z": "d79195fad1305c83", "name": "Data", "func": "\nmsg.payload
= \"xam\"\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 1170, "y": 340,
"wires": [ [ "3c3deb493eac395c" ] ] }, { "id": "c15f9930b249f64e", "type": "switch", "z": "d79195fad1305c83",
"name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "Trời mưa", "vt": "str" } ],
"checkall": "true", "repair": false, "outputs": 1, "x": 1010, "y": 280, "wires": [ [ "318b7f42b17627fd",
"98b7c80ec38e7b60", "277fa4ee991ca996", "a01a6782a24b5c4f" ] ] }, { "id": "f5eb88d2888c8409", "type":
"GSheet", "z": "d79195fad1305c83", "creds": "2d3b51cb244d23b4", "method": "update", "action": "", "sheet":
"1XAMuTEZzOl9n8bD7YJu72eAUnJyStTylyxYtMl9p-Ic", "cells": "B2", "flatten": false, "name": "Độ ẩm", "x":
1350, "y": 220, "wires": [ [] ] }, { "id": "2a58d137862d0f3a", "type": "GSheet", "z": "d79195fad1305c83", "creds":
"2d3b51cb244d23b4", "method": "update", "action": "", "sheet":
"1XAMuTEZzOl9n8bD7YJu72eAUnJyStTylyxYtMl9p-Ic", "cells": "C2", "flatten": false, "name": "Thời tiết", "x":
1200, "y": 580, "wires": [ [] ] }, { "id": "aabfe0069cb36d05", "type": "delay", "z": "d79195fad1305c83", "name": "",
"pauseType": "rate", "timeout": "5", "timeoutUnits": "seconds", "rate": "1", "nbRateUnits": "5", "rateUnits":
"second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "allowrate": false, "x":
1040, "y": 180, "wires": [ [ "5cfa9279fe8f4fda" ] ] }, { "id": "1ac084ac08b05ab5", "type": "delay", "z":
"d79195fad1305c83", "name": "", "pauseType": "rate", "timeout": "5", "timeoutUnits": "seconds", "rate": "1",
"nbRateUnits": "5", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds",
"drop": false, "allowrate": false, "x": 1040, "y": 220, "wires": [ [ "3a8d6b6c21812937" ] ] }, { "id":
"6aaa2383152fdab2", "type": "delay", "z": "d79195fad1305c83", "name": "", "pauseType": "rate", "timeout": "5",
"timeoutUnits": "seconds", "rate": "1", "nbRateUnits": "5", "rateUnits": "second", "randomFirst": "1", "randomLast":
"5", "randomUnits": "seconds", "drop": false, "allowrate": false, "x": 1040, "y": 580, "wires":
[ [ "2a58d137862d0f3a" ] ] }, { "id": "b92ef0e3e38c6dca", "type": "join", "z": "d79195fad1305c83", "name": "",

"mode": "custom", "build": "array", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n",
"joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "",
"reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 490, "y": 280, "wires": [ [ "eb57d5be97e80a71" ] ] }, {
"id": "5cfa9279fe8f4fda", "type": "function", "z": "d79195fad1305c83", "name": "", "func": "msg.payload =
msg.payload + \" \"+\"°C\";\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 1200,
"y": 180, "wires": [ [ "d8b33b95a020e6e4" ] ] }, { "id": "3a8d6b6c21812937", "type": "function", "z":
"d79195fad1305c83", "name": "", "func": "msg.payload = msg.payload + \" \"+\"g/m³\";\nreturn msg;", "outputs": 1,
"noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 1200, "y": 220, "wires": [ [ "f5eb88d2888c8409" ] ] }, { "id":
"63d58b208af453ef", "type": "ui_text", "z": "d79195fad1305c83", "group": "e4ac03dbcfa21d6a", "order": 2,
"width": 0, "height": 0, "name": "", "label": "text", "format": "{{msg.payload}}", "layout": "row-spread",
"className": "", "x": 770, "y": 380, "wires": [] }, { "id": "277fa4ee991ca996", "type": "debug", "z":
"d79195fad1305c83", "name": "", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete":
"true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 1430, "y": 420, "wires": [] }, { "id":
"14e727ef9dee8f99", "type": "change", "z": "d79195fad1305c83", "name": "", "rules": [ { "t": "set", "p":
"TampSetup", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg":


×