Embedded Systems: Introducing NETPIE & Workshop (2024)

alexyemun 1 views 190 slides Oct 13, 2025
Slide 1
Slide 1 of 236
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130
Slide 131
131
Slide 132
132
Slide 133
133
Slide 134
134
Slide 135
135
Slide 136
136
Slide 137
137
Slide 138
138
Slide 139
139
Slide 140
140
Slide 141
141
Slide 142
142
Slide 143
143
Slide 144
144
Slide 145
145
Slide 146
146
Slide 147
147
Slide 148
148
Slide 149
149
Slide 150
150
Slide 151
151
Slide 152
152
Slide 153
153
Slide 154
154
Slide 155
155
Slide 156
156
Slide 157
157
Slide 158
158
Slide 159
159
Slide 160
160
Slide 161
161
Slide 162
162
Slide 163
163
Slide 164
164
Slide 165
165
Slide 166
166
Slide 167
167
Slide 168
168
Slide 169
169
Slide 170
170
Slide 171
171
Slide 172
172
Slide 173
173
Slide 174
174
Slide 175
175
Slide 176
176
Slide 177
177
Slide 178
178
Slide 179
179
Slide 180
180
Slide 181
181
Slide 182
182
Slide 183
183
Slide 184
184
Slide 185
185
Slide 186
186
Slide 187
187
Slide 188
188
Slide 189
189
Slide 190
190
Slide 191
191
Slide 192
192
Slide 193
193
Slide 194
194
Slide 195
195
Slide 196
196
Slide 197
197
Slide 198
198
Slide 199
199
Slide 200
200
Slide 201
201
Slide 202
202
Slide 203
203
Slide 204
204
Slide 205
205
Slide 206
206
Slide 207
207
Slide 208
208
Slide 209
209
Slide 210
210
Slide 211
211
Slide 212
212
Slide 213
213
Slide 214
214
Slide 215
215
Slide 216
216
Slide 217
217
Slide 218
218
Slide 219
219
Slide 220
220
Slide 221
221
Slide 222
222
Slide 223
223
Slide 224
224
Slide 225
225
Slide 226
226
Slide 227
227
Slide 228
228
Slide 229
229
Slide 230
230
Slide 231
231
Slide 232
232
Slide 233
233
Slide 234
234
Slide 235
235
Slide 236
236

About This Presentation

NETPIE and IoT


Slide Content

Introducing NETPIE2020
& Workshop
Mr. Piyawat Jomsathan (Tae)
Cyber-Physical Systems (CPS)
National Electronics and Computer Technology Center (NECTEC), Thailand

29 July 2024Page 2
Note : This powerpointis modified significantly
by VarodomToochinda to keep up with the
latest version of NETPIE 2020.
Some slides may still show user interface from
previous version when changes are deemed
unnecessary.

29 July 2024Page 3
Mr.PiyawatJomsathan
Nickname : Tae
Age : 23
E-mail : [email protected]
Tel. 02-564-6900 ext. 2469
Mr.NataponTansangworn
Nickname : Prig
Age : 28
E-mail : [email protected]
Tel. 02-564-6900 ext. 2463
Cyber Physical Systems (CPS)
NECTEC Building Room 418
Personal Contact
NETPIE2020 Trainer

29 July 2024Page 4
Schedule
NETPIE
Overview
MQTT Protocol
Device Data
Management
NETPIE2020 Portal
Dashboard
12
3 4
56
7
Node-RED
RESTful API
NETPIE2020 Quota

29 July 2024 Page 5

Page 6
Module 1 : IoT & NETPIE
NETPIEisanIoTcloudplatformthatisopentothepublic.The
platformwillhelpdevicesabletocommunicatewitheachother,
receive-transmitdatabetweendevicesinreal-time,allowing
userstoknowtheinformationofthedeviceatthattime,nomatter
wheretheuseris.
What is NETPIE?
Main features of NETPIE
1. Monitoring : to display device or sensor data in real time
2. Controlling : to control the operation of devices via the cloud
platform
3. Data Storage : to collect data from sensors or devices
4. Notification : to alert the user when sensor malfunction occurs

Page 7
Module 1 : IoT & NETPIE
NETPIE 2015
NETPIE 2020
At present, NETPIE is developed in 2 versions
NETPIE 2015 and NETPIE 2020
https://2015.netpie.io/login
https://auth.netpie.io/login

Page 8
Module 1 : IoT & NETPIE
NETPIE 2015NETPIE 2020
Device–CentricPlatform -CentricDesign Philosophy
Need to re-program Hardware migrate to
commercialplatform
Commercial –ReadyCommercial Ability
Project-basedMass production, Project-basedSuitable Usage
Makers, hobbyists, studentsIoT consumer product makers, Hobbyists, StudentsTarget User
MicrogearMQTT, HTTPCommunicationProtocol
Limited to Microgear libraryAny languages with MQTT library supportProgramming Language
Limited to thosewith Microgear supportUnlimited as long as it supports MQTTHardware Support
Use APPID Device identity and group must be
programmed into firmware
No APPID Device identity and group can be adjusted
after product is sold/installed
Device Identity and Group
Everyoneis subject to the same rate limitAllow burstRate Limit
Set trigger action insideIoT devicesCan set trigger action in cloudplatformTrigger
NETPIE 2020 and NETPIE 2015comparison
1
2
3

29 July 2024Page 9
NETPIE Overview
Device
(real-time)
Website,
mobile
Device
(one-way)
Data Storage
NETPIE 2020
MQTT,
Web Socket
HTTP, CoAP
NB-IoT, LoRaWAN
HTTP
NETPIE 2020 Architecture
Device Gateway Device API Client API Web Server
Device
Shadow
Schema
Data Storage
Timeseries
Storage
Data Storage
Device
Registry
Data Storage
Token
Registry
Data Storage
User
Registry
Freeboard
HTTP

29 July 2024 Page 10
MQTT Protocol

29 July 2024Page 11
NETPIE Overview
Device
(real-time)
Website,
mobile
Device
(one-way)
Data Storage
NETPIE 2020
MQTT,
Web Socket
HTTP, CoAP
NB-IoT, LoRaWAN
HTTP
NETPIE 2020 Architecture
Device Gateway Device API Client API Web Server
Device
Shadow
Schema
Data Storage
Timeseries
Storage
Data Storage
Device
Registry
Data Storage
Token
Registry
Data Storage
User
Registry
Freeboard
HTTP

29 July 2024Page 12
MQTT Protocol
If real-time monitoring is required on NETPIE2020, a device gateway is required to
communicate with the MQTT protocol.
Device
(real-time)
Website,
mobile
Device
(one-way)
Data Storage
NETPIE 2020
MQTT,
Web Socket
HTTP, CoAP
NB-IoT, LoRaWAN
HTTP
Device Gateway Device API Client API Web Server
Device
Shadow
Schema
Data Storage
Timeseries
Storage
Data Storage
Device
Registry
Data Storage
Token
Registry
Data Storage
User
Registry
Freeboard
HTTP

Page 13
NETPIE2020 communication
(MQTT)
•MQTT is a protocol designed to connect M2M
or device to device, which is supported by IoT
•Use the principle of data transmission, Publish /
Subscribe, similar to the principles used in the
Web Service that requires a Web Server as an
intermediary between users' computers.
•But MQTT uses an intermediary called Broker
that manages the transmission order between
devices and Publish / Subscribe mechanisms.
What is MQTT ??
MQTT Protocol

Page 14
Client C
Client A
Broker
Publish
transmissions on the MQTT have a topic as their primary reference.
•The data to be published to the Broker must always have a topic.
•On the subscribe end, it must refer to a topic to retrieve the desired information.
Topic : Temp
MQTT communication example
•Client C publishes information on a topic
named Temp, while Client A subscribes to
topic Temp.
•The data from Client C is a temperature with
values equal to 22 °C, so Client A receives the
information.
22 °C
22 °C
Topic : Temp
MQTT Protocol

Page 15
MQTT Protocol
Client C
Client A
Client B
Broker
Publish
transmissions on the MQTT have a topic as their primary reference.
•The data to be published to the Broker must always have a topic.
•On the subscribe end, it must refer to a topic to retrieve the desired information.
Topic : Temp
Topic : Temp
•Later, Client B subscribes to topic Tempas
well. The stored temperature is immediately
sent to Client B after subscribing.
22 °C
22 °C
22 °C
Topic : Temp
MQTT communication example
•Client C publishes information on a topic
named Temp, while Client A subscribes to
topic Temp.
•The data from Client C is a temperature with
values equal to 22 °C, so Client A receives the
information.

Page 16
MQTT Protocol
Client C
Client A
Client B
Broker
Topic : Temp
Topic : Temp
Last Message
Last Message
•But when Client C is disconnected, no data will be published to Broker. What Client A and
B display is the last message sent by Client C
Publish
transmissions on the MQTT have a topic as their primary reference.
•The data to be published to the Broker must always have a topic.
•On the subscribe end, it must refer to a topic to retrieve the desired information.
•Later, Client B subscribes to topic Tempas well. The stored
temperature is immediately sent to Client B after subscribing.
Topic : Temp
MQTT communication example
•Client C publishes information on a topic
named Temp, while Client A subscribes to
topic Temp.
•The data from Client C is a temperature with
values equal to 22 °C, so Client A receives the
information.

Page 17
MQTT Protocol
There are two types of messages sent to NETPIE2020
via MQTT.
Message
1
Data
2

Page 18
MQTT Protocol
1Message
2Shadow (Data)
Send a message via MQTT by referring to
a topic. The format is @msg/topic
MQTT on NETPIE2020 has two types of
transmission
Send message via MQTT to Device Shadow, to record
latest message. The topic is @shadow/data/update
with message in JSON format. For example,
{data:{temp:24}}

Page 19
MQTT Protocol
Wildcard Topic
Subscribe to topic @msg/Temp
Device3Device1 If you want Device 3 to receive messages from Device1 and Device2,
you need to subscribe to 2 topics
Device2
Subscribe to topic @msg/Humi

Page 20
MQTT Protocol
Wildcard Topic
Subscribe to topic @msg/#
Device3
Device1The symbol # in part of a topic represents every word and all section of words within / after
that position. If Subscribe topic / # is equivalent to subscribe all.
Device2

Page 21
MQTT Protocol
Wildcard Topic
Subscribe to topic @msg/home/#
Device5
Device1
Device4
Device2
# can be used at the end of
topic only
Device3

Page 22
MQTT Protocol
Wildcard Topic
Subscribe to topic @msg/+/temp
Device4
The + symbol can be used in a
topic that corresponds to one
word.
Device1
Device2
Device3

29 July 2024Page 23
MQTT Protocol
MQTT Ports
PortConnection
1883mqtt/tcp (broker.netpie.io)
8883mqtts/tls (broker.netpie.io)
80ws (mqtt.netpie.io/mqtt)
443wss (mqtt.netpie.io/mqtt)

29 July 2024 Page 24
NETPIE 2020 Portal

Page 25
NETPIE 2020 Portal
Getting started with
NETPIE2020
Create NETPIE2020 user
account at
https://authx.netpie.io/signup

Page 26
NETPIE 2020 Portal
Getting started with
NETPIE2020
After sign up
NETPIE2020, login
With Username (email)
and Password
Or login at this link
https://authx.netpie.io/login

Page 27
NETPIE 2020 Portal
After login, you will see the window as shown
Getting started with
NETPIE2020

Page 28
NETPIE 2020 Portal
Create a Project To create a project, click at [+] Add Project as
shown in the picture

Page 29
NETPIE 2020 Portal
Create a Project
Fill out the information for creating the project.
The Project Name field is required.

Page 30
NETPIE 2020 Portal
Create a Project
After creating a project, you’ll see the first
page .

Page 31
NETPIE 2020 Portal
Create a Project
The section of the Overview page that displays all the
information for the Project are:
1. Project details (name, ID, description)
2. Devices (Device Online/Offline)
3. Groups

Page 32
NETPIE 2020 Portal
Device Creation
To create a device, you will need to enter the Device List page, a
window will appear like in the picture. After that, click [Create] to
create a device.
1
2

Page 33
NETPIE 2020 Portal
Device Creation
Fill out the information for creating the device. The
“Device Name” field is required.

Page 34
NETPIE 2020 Portal
Device Creation
After creating the device, click the Device tab to view the device
information.

Page 35
NETPIE 2020 Portal
Device Creation
After entering the Device, you will find the details of the Device, that is
1. Client ID
2. Token
3. Secret
These 3 parameters are important to connect the device to NETPIE2020
using various protocols.

29 July 2024Page 36
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTT clients
MQTTBox
NETPIE2020
MQTT
Protocol
Note : MQTTBoxis no longer supported by Chrome. MQTTX, an MQTT client alternative,
will be used in class. MQTTBoxslides are kept for reference only.
MQTTX

29 July 2024Page 37
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
NETPIE2020 connection via MQTT, a small and popular protocol for M2M communication, can use
any MQTT Library compatible with the active device.
MQTT connection requires 4 Parameters
1. Host : broker.netpie.io
2. Client ID : Client ID of Devicecreated in NETPIE2020
3. Username : Token of Devicecreated in NETPIE2020
4. Password : Secret of Devicecreated in NETPIE2020 (used for more identity verification)
Client ID
Username
Password

1. Launch MQTTBox
29 July 2024Page 38
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
2. Click on [Create MQTT Client]

29 July 2024Page 39
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
Client ID
Token
Name the
Client
After finish click [Save]
Secret

29 July 2024Page 40
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
When connected successfully, it will display the results as
shown. If the connection is not successful, check to make sure
that the parameters are correct.

29 July 2024Page 41
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
Can also check the device status on
NETPIE Portal

29 July 2024Page 42
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
After connection is established, test by sending message to
NETPIE2020
MQTT message is referenced by Topic : @msg/topic

29 July 2024Page 43
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
Before publishing a message, it will
subscribe to the topic that will be sent
first.
Specify the Topic and click
[Subscribe]

29 July 2024Page 44
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
Type the message and click [Publish]

29 July 2024Page 45
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTBox
Message appears at
receiving end

29 July 2024Page 46
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTX
Client ID
Token
Name the
Client
Secret
Changed to 3.1.1

29 July 2024Page 47
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTX

29 July 2024Page 48
NETPIE Portal
Workshop 1 : connecting NETPIE2020 with MQTTX

29 July 2024Page 49
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
NodeMCU NETPIE2020
MQTT
Protocol

29 July 2024Page 50
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
Create new device for NodeMCU

Page 51
Module 2 : NETPIE 2020 Portal
In order for NodeMCUto connect to NETPIE2020, it needs
to be programmed on the Arduino IDE to connect
NodeMCUto internet and then to NETPIE2020.
Workshop 2 : Connect NETPIE2020 with NodeMCU
NodeMCUArduino IDE
NETPIE2020
Internet
connection
through
WiFi

29 July 2024Page 52
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
NodeMCU
In order for NodeMCUto connect to
NETPIE2020, the following libraries are
needed
1. ESP8266WiFi
Used to allow NodeMCUto connect to
the Internet via WiFinetwork.
2. PubSubClient
Used for NodeMCUto connect and
communicate on NETPIE 2020 platform. (MQTT
Protocol)

29 July 2024Page 53
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
Key command and functions in
ESP8266WiFi
WiFi.begin()WiFi.begin()
WiFi.begin: function for setup Wi-Fi Library and
network, with status as results Usage example:
WiFi.begin();
WiFi.begin(ssid);
WiFi.begin(ssid ,pass);ssidis the Wi-Fi network to connected to
pass is the wifipassword WPA encrypted
WiFi.statusWiFi.status
WiFi.statusis a function to check connection with the wifi
network. Usage example :
WiFi.status() != WL_CONNECTED
Results from WiFi.begin()
WL_CONNECTED : successful connection
WL_IDLE_STATUS : ready but not connected
Results from WiFi.status()
WL_CONNECTED : successful connection
WL_NO_SHIELD : Wi-Fi Shield not found
WL_DILE_STATUS : ready but not connected.
This is a temporary status while connection is
attempted.
WL_NO_SSID_AVAIL : no SSID to connect
WL_SCAN_COMPLETED : network scan finished
WL_CONNECT_FAILED : connection not
successful
WL_CONNECTION_LOST : lost the connection
WL_DISCONNECTED : disconnected

29 July 2024Page 54
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
Important commands & functions in
PubSubClient
void callbackvoid callback
callback is a function for receiving payloads or
messages sent by the subscribed Topic.
void reconnectvoid reconnect
reconnect is a function to connect to the MQTT
Server that has been set up. Or when there is a
disconnection event with the MQTT Server, the
reconnect function will be invoked to reconnect.
client.connect()client.connect()
client.connect() : command to connect to MQTT Broker.
Format is
client.connect(client, username, password)
client.setServer()client.setServer()
client.setServer() : command to setup MQTT Server.
Format is
client.setServer(mqtt_server, mqtt_port)
client.publish()client.publish()
client.publish() : to publish with specified topic
client.publish(“topic”, “Message”)
client.subscribe()client.subscribe()
client.subscribeto subscribe specified Topic.
Often placed in reconnect function. Format is
client.subscribe(“topic”)

29 July 2024Page 55
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
Open Workshop2.ino
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
constchar* ssid= "Your_SSID";
constchar* password = "Your_Password";
constchar* mqtt_server= "broker.netpie.io";
constintmqtt_port= 1883;
constchar* mqtt_Client= "Client_ID";
constchar* mqtt_username= "Token";
constchar* mqtt_password= "Secret";
WiFiClientespClient;
PubSubClient client(espClient);
long lastMsg= 0;
intvalue = 0;
Section 1 : Library and variable declaration
Coding in Workshop2.ino consists of 3
sections
1
Call to various libraries.
Variable declaration for
connecting to WiFiand for
NETPIE2020 connection
Create instances for NETPIE2020
connection
Global variables

29 July 2024Page 56
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection…");
if (client.connect(mqtt_Client, mqtt_username, mqtt_password)) {
Serial.println("connected");
}
else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println("try again in 5 seconds");
delay(5000);
}
}
}
Section 2 : functions
2
Enter NETPIE2020 MQTT connection.

If connected successfully, it will display
"connected".

If the connection is not successful, it will
display “failed…” and automatically
reconnect
Functions to connect to
MQTT

29 July 2024Page 57
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
void setup() {
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, mqtt_port);
}
Section 2 : functions
2
In this function, it will connect to WiFiand
NETPIE2020 according to the settings
Performing initialization

29 July 2024Page 58
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now -lastMsg> 2000) {
lastMsg= now;
++value;
client.publish("@msg/test", "Hello NETPIE2020");
Serial.println("Hello NETPIE2020");
}
delay(1);
}
Section 3 : loop() function
3
Commands to send message “Hello NETPIE2020”
to Topic : @msg/test every 2 seconds
Main function that
runs iteratively
Command set that maintains the
connection status and functions of
NETPIE2020.

29 July 2024Page 59
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
Message sent to NETPIE2020

29 July 2024Page 60
NETPIE Portal
Workshop 2 : Connect NETPIE2020 with NodeMCU
Check NodeMCUstatus on NETPIE Portal

29 July 2024Page 61
NETPIE Portal
Displaying message NodeMCUsent to
NETPIE2020
NodeMCU
NETPIE2020
To display message from NodeMCUcan be done by
bringing another Device/App to connect vis MQTT Protocol
And subscribing topic published by NodeMCU
Using same Client-ID, Token and Secret
Authentication
Client-ID : 13456789
Token : abcdefghijk
Secret : lmnopqrsty

29 July 2024Page 62
NETPIE Portal
Displaying message NodeMCUsent to
NETPIE2020
NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
NodeMCU
Authentication
Client-ID : 13456789
Token : abcdefghijk
Secret : lmnopqrsty
Web Browser
Authentication
Client-ID : 13456789
Token : abcdefghijk
Secret : lmnopqrsty
Example

29 July 2024Page 63
NETPIE Portal
Displaying message NodeMCUsent to
NETPIE2020
NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
Hello NETPIE2020
An example to connect Web
Browser
with NETPIE2020
via MQTT Protocol
using same Client-ID, Token,
Secret as NodeMCU
This in effect prevents the
Web Browser from connecting with
NETPIE2020
since the Client-ID, Token, Secret
are already used
NodeMCU
Authentication
Client-ID : 13456789
Token : abcdefghijk
Secret : lmnopqrsty
Web Browser
Authentication
Client-ID : 13456789
Token : abcdefghijk
Secret : lmnopqrsty

29 July 2024Page 64
NETPIE Portal
Device connection with MQTT Protocol
NodeMCU
NETPIE2020
Device2
Authen: Client-ID,
Token, Secret
If you want to use the same device to connect, you must select another
protocol.
Website,
mobile
Device
(one-way)

29 July 2024Page 65
NETPIE Portal
Device connection with MQTT Protocol
NodeMCU
NETPIE2020
MQTT
Protocol
Device2
Authen: Client-ID,
Token, Secret
If you want to see messages that are sent using the
MQTT Protocol, you must create additional devices and
place them in the same group.
NodeMCU
Device1
Authen: Client-ID,
Token, Secret
MQTT
Protocol
Group1

29 July 2024Page 66
NETPIE Portal
Group creation
Device2
NETPIE2020
MQTT
Protocol
Device1
Group1

29 July 2024Page 67
NETPIE Portal
Group creation
Device2
NETPIE2020
MQTT
Protocol
Device1
Group1
Device3

29 July 2024Page 68
NETPIE Portal
Group creation
1
2

29 July 2024Page 69
NETPIE Portal
Group creation

29 July 2024Page 70
NETPIE Portal
Group creation
Group is created with no device
An existing device must be brought into the group

29 July 2024Page 71
NETPIE Portal
Group creation

29 July 2024Page 72
NETPIE Portal
Group creation

29 July 2024Page 73
NETPIE Portal
Group creation

29 July 2024Page 74
NETPIE Portal
Group creation

29 July 2024Page 75
NETPIE Portal
Group creation
Group indication

29 July 2024Page 76
NETPIE Portal
Group creation
More details can be observed in the Device Groups

29 July 2024Page 77
NETPIE Portal
Group creation

29 July 2024Page 78
NETPIE Portal
Messages from NodeMCUto MQTTX

29 July 2024Page 79
NETPIE Portal
Workshop 3 : Communication within a Group and outside
Device2
NETPIE2020
Device1
Group1
Device3
Device 1 and 2 were
created in Workshop 1-2

29 July 2024Page 80
NETPIE Portal
Workshop 3 : Communication within a Group and outside
Create new Device3

29 July 2024Page 81
NETPIE Portal
Workshop 3 : Communication within a Group and outside
Open new MQTTX window to
connect with Device3
Changed to 3.1.1

29 July 2024Page 82
NETPIE Portal
Workshop 3 : Communication within a Group and outside
Check Device3 connection status

29 July 2024Page 83
NETPIE Portal
Workshop 3 : Communication within a Group and outside
Device1
At Device1, it receives a message that
NodeMCUsent, “Hello NETPIE2020”.
Device3
Device3 cannot receive message
since it is outside the group.

29 July 2024Page 84
NETPIE Portal
Device2
NETPIE2020
Device1
Group1
Device3
Workshop 3 : Communication within a Group and outside

29 July 2024 Page 85
Device Data Management

Page 86
Device Data Management
There are two types of messages sent to NETPIE2020
via MQTT.
Message
1
Data
2

29 July 2024Page 87
Device Data Management
NETPIE2020
NETPIE2020 manages device information in 4 main
sections.
Device Shadow : Latest device database 1
Device Schema : Device data structure 2
Device Trigger : Conditional device data 3
Event Hooks : Device transmission formats 4

29 July 2024Page 88
Device Data Management
Device Shadow
Device Shadow is the virtual database of the device that is allocated for every
device for two types of data storage
1.Device Shadow Data : sensor data, for example
2.Device Shadow State เช่น : device online/offline status, for example
Note: previous
Version appearance

29 July 2024Page 89
Device Data Management
Device Shadow
The MQTT topic that is involved with managing Device Shadow
Shadow Topic Shadow Topic
Used to manage own device shadow for publishing to edit Shadow information, and subscribing to
receive Shadow information.
Subscribe TopicDescriptionPublishTopic
@shadow/data/updated
To update Shadow Data value by sending a
payload in JSON format
@shadow/data/update

29 July 2024Page 90
Device Data Management
NodeMCU NETPIE2020
@shadow/data/update
Publish : { “data”: { “Temp” : 24, “Humi” : 58 }}
Device Shadow
“Temp” : 24
“Humi” : 58
Device Shadow
Example of sending data in JSON
format
Example of sending data in JSON
format
But in order to store data in Device Shadow, you need to create
a Device Schema first.

29 July 2024Page 91
Device Data Management
Device Schema is a data structure defined to manage Device Shadow. For devices that need
data management, a Device Schema should be created. This Device Schema allows the server
to

Check data types before storing

Converting data before storage, such as changing data units.

Data collection in Timeseries Database (Feed)
Device Schema

Page 92
Device Data Management
{
"additionalProperties": false,
"properties": {
"light": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "number"
},
"temperature": {
"operation": {
"store": {
"ttl": "7d"
},
"transform": {
"expression": (($.temperature)*1.8) + 32"
}
},
"type": "number"
}
}
}
Device Schema
Declaring the Device Schema in JSON
format.
Declaring the Device Schema in JSON
format.
additionalProperties
Device Schema consists of 2 main parts Device Schema consists of 2 main parts
Properties

Page 93
Device Data Management
{
"additionalProperties": false,
"properties": {
"light": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "number"
},
"temperature": {
"operation": {
"store": {
"ttl": "7d"
},
"transform": {
"expression": (($.temperature)*1.8) + 32"
}
},
"type": "number"
}
}
}
Device Schema
Declaring the Device Schema in JSON
format.
Declaring the Device Schema in JSON
format.
additionalProperties
This is the permission to save data to Shadow or Timeseries Database in
case the data is not declared in the properties section.
additionalPropertieshas 2 status values
true : authorize data write to Shadow or TimeseriesDatabase
false : prohibit data write for data not defined in Properties
In the example, two items in properties are humidity and temperature
If the data received are temp, humid, light
addtionalProperties= true : will record temperature, humidity and light
addtionalProperties= false : will record only temperature, light

Page 94
Device Data Management
{
"additionalProperties": false,
"properties": {
"light": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "number"
},
"temperature": {
"operation": {
"store": {
"ttl": "7d"
},
"transform": {
"expression": (($.temperature)*1.8) + 32"
}
},
"type": "number"
}
}
}
Device Schema
Declaring the Device Schema in JSON format Declaring the Device Schema in JSON format
Properties
Typedata type in a field, such as number, string, array, object
First, define a field name (for example, "light" and "Temperature") and define properties
for each field, which are divided into two parts:
Operation For setting up data handling in that field, including
store for keeping data inTimeseriesDatabase
ttlduration of data inTimeseriesDatabase. Data that exceeds expiration date will be
automatically
deleted. To store system data, this value needs to be set in units of
ms(milliseconds), s (seconds), m (minutes), h (hours), d (days), y (years)
Transform data transformation before keeping
expression formula for transformation
For example, a formula to convert Celsius to Fahrenheit= ($.temperature*1.8) + 32

29 July 2024Page 95
Device Data Management
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.
DHT11
NETPIE2020
@shadow/data/update
Publish : { “data”: { “Temp” : 24, “Humi” : 58, “place” : “NECTEC” }}
NodeMCU
Device Shadow
“Temp” : 75
“Humi” : 58
“place” : “NECTEC”
Note : if IGR board is used, light intensity is also
written to shadow.

29 July 2024Page 96
Device Data Management
Provide a Device Schema before sending data from
NodeMCU
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.

29 July 2024Page 97
Device Data Management
Provide a Device Schema before sending data from
NodeMCU
Change from Tree to Code
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.

29 July 2024Page 98
Device Data Management
Device Schema in JSON format Device Schema in JSON format
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.
{
"additionalProperties": false,
"properties": {
"humidity": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "number"
},









"temperature": {
"operation": {
"store": {
"ttl": "7d"
},
"transform": {
"expression": "(($.temperature)*1.8) + 32"
}
},
"type": "number"
},
"place": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "string"
}
}
}
Copy to Device
Schema

29 July 2024Page 99
Device Data Management
Click [Save] to save
Device Schema
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.

29 July 2024Page 100
Device Data Management
{
"additionalProperties": false,
"properties": {
"humidity": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "number"
},









"temperature": {
"operation": {
"store": {
"ttl": "7d"
},
"transform": {
"expression": "(($.temperature)*1.8) + 32"
}
},
"type": "number"
},
"place": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "string"
}
}
}
Device Schema in JSON
format
Device Schema in JSON
format
Set additionalProperties= false
In order not to save values

other
than listed in properties to Shadow.
The first variable is light
with properties
-Store for 7 days
-Data type is number
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.

29 July 2024Page 101
Device Data Management
{
"additionalProperties": false,
"properties": {
"humidity": {
"operation": {
"store": {
"ttl": "7d
}
},
"type": "number"
},









"temperature": {
"operation": {
"store": {
"ttl": "7d"
},
"transform": {
"expression": "(($.temperature)*1.8) + 32"
}
},
"type": "number"
},
"place": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "string"
}
}
}
Device Schema in JSON
format
Device Schema in JSON
format
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.
Variable to store is temperature with properties
-Store for 7 days
-Convert from Celsius to Fahrenheit
-Variable type is number
Variable to store is place with properties
-Store for 7 days
-Variable type is string

29 July 2024Page 102
Device Data Management
DHT11
Data -> D4
Vcc-> 3v3
GND -> GND
NodeMCU
Connect DHT11 to NodeMCU Connect DHT11 to NodeMCU
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.

29 July 2024Page 103
Device Data Management
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
#define DHTPIN D4
#define DHTTYPE DHT11
constchar* ssid= "Your_SSID";
constchar* password = "Your_Password";
constchar* mqtt_server= "broker.netpie.io";
constintmqtt_port= 1883;
constchar* mqtt_Client= "Client_ID";
constchar* mqtt_username= "Token";
constchar* mqtt_password= "Secret";
WiFiClientespClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
char msg[100];
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.
Open Workshop4.ino
Part 1 Library and variable declaration
Code in Workshop4.ino consists of 3 parts
1
Include required libraries
Declare pins for DHT11
Variable declaration and assignment
to connect to WiFiand MQTT
Variable declarations
MQTT commands

29 July 2024Page 104
Device Data Management
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection…");
if (client.connect(mqtt_Client, mqtt_username, mqtt_password)) {
Serial.println("connected");
}
else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println("try again in 5 seconds");
delay(5000);
}
}
}
Part 2 : various functions
2
MQTT connection
-“connected” is shown when succeed
-if not, “failed …” is shown and reconnect is
attempedautomatically
MQTT connection function
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.

29 July 2024Page 105
Device Data Management
void setup() {
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, mqtt_port);
dht.begin();
}
Part 2 : various functions
2
Setup function
Connect WiFiand MQTT with specified
settings
Start the DHT object instance
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.

void loop() {
inthumidity = dht.readHumidity();
inttemperature = dht.readTemperature();
String place = "NECTEC Thailand";
if (!client.connected()) {
reconnect();
}
client.loop();
String data = "{\"data\": {\"humidity\":" + String(humidity) + ", \"temperature\":" +
String(temperature) + ", \"place\":" +String(place) + "}}";
Serial.println(data);
data.toCharArray(msg, (data.length() + 1));
client.publish("@shadow/data/update", msg);
delay(2000);
}
29 July 2024Page 106
Device Data Management
Part 3 : loop() function
3
Read humidity and temperature data from
sensor, declare the place before sending to
NETPIE2020
To maintain the connection state of
MQTT
command to send message toTopic: @shadow/data/update every 2
seconds
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.

String data = "{\"data\": {\"humidity\":" + String(humidity) + ",
\"temperature\":" + String(temperature) + ",
\"place\":" +String(place) + "}}";
29 July 2024Page 107
Device Data Management
But the compiler on Arduino IDE sees " as String declaration. To fix this, put \in
front of " so that the program interprets " as part of the message
Sending message in JSON format on
Arduino IDE
Sending message in JSON format on
Arduino IDE
Message to be sent is
{ "data": { "humidity" : 52, "temperature" : 25, "place" : "NECTEC Thailand" }}
Workshop 4: Send Temperature and Light values

from NodeMCUto NETPIE2020 and save them
in Timeseries DB.
Note : Light intensity is added for IGR board

29 July 2024Page 108
Device Data Management
Message sent to NETPIE2020
Workshop 4: Send Humidity and Temperature values

from NodeMCUto NETPIE2020 and save
them in Timeseries DB.

29 July 2024Page 109
Device Data Management
Message sent to NETPIE2020
Workshop 4: Send Humidity and Temperature and Light values

from NodeMCUto NETPIE2020
and save them in Timeseries DB (IGR board)

29 July 2024Page 110
Device Data Management
Data recorded on Device ShadowWorkshop 4: Send sendorvalues

from NodeMCUto NETPIE2020 and save them in Timeseries DB.
Before adding schema properties for light

29 July 2024Page 111
Device Data Management
Data recorded on Device Shadow
Workshop 4: Send sendorvalues

from NodeMCUto NETPIE2020 and save them in Timeseries DB.
After adding schema properties for light

29 July 2024Page 112
Device Data Management
Workshop 4: Wokwisimulation
https://wokwi.com/projects/404716661370399745

29 July 2024Page 113
Note for slides
Device Trigger and Event Hook
Since this topic is not covered in my course. The original slides
are left intact.

29 July 2024Page 114
Device Data Management
Device Trigger and Event Hook
It is a system that binds to changing Device Shadow information to external actions (Event
Hook), such as setting alerts according to different status. According to the condition of the device
set by the Trigger will be declared in JSON format:
{
"enabled": true,
"trigger": [
{
"action": "EVENT_HOOK_NAME",
"event": "SHADOW.UPDATED or DEVICE.STATUSCHANGED",
"condition": "Operation List ==, !=, >, >=, <, <=, in",
"msg": "text",
"option": {}
}
]
}

29 July 2024Page 115
Device Data Management
Device Trigger and Event Hook
{
"enabled": true,
"trigger": [
{
"action": "EVENT_HOOK_NAME",
"event": "SHADOW.UPDATED or DEVICE.STATUSCHANGED",
"condition": "Operation List ==, !=, >, >=, <, <=, in",
"msg": "text",
"option": {}
}
]
}
1. enable is used to turn the Trigger on/off
Trigger Format consists of 2 parts

29 July 2024Page 116
Device Data Management
Device Trigger and Event Hook
{
"enabled": true,
"trigger": [
{
"action": "EVENT_HOOK_NAME",
"event": "SHADOW.UPDATED or DEVICE.STATUSCHANGED",
"condition": "Operation List ==, !=, >, >=, <, <=, in",
"msg": "text",
"option": {}
}
]
}
-action : what Trigger has to do when an event
occurs. Specify Event Hook name.
-event : corresponds to two types of change in
Device Shadow
SHADOW.UPDATED : happens when Device
Shadow Data changes according to certain
condition (in this case we have to specify some
condition, otherwise the Trigger would not fire)
DEVICE.STATUSCHANGED : happens when
the Device changes its platform connection
status from Online to Offline, or vice versa.
2. trigger is for Trigger settings
Trigger Format consist of 2 parts

29 July 2024Page 117
Device Data Management
Device Trigger and Event Hook
{
"enabled": true,
"trigger": [
{
"action": "EVENT_HOOK_NAME",
"event": "SHADOW.UPDATED or DEVICE.STATUSCHANGED",
"condition": "Operation List ==, !=, >, >=, <, <=, in",
"msg": "text",
"option": {}
}
]
}
Condition : conditional change in Device Shadow
Data . Use in casof SHADOW.UPDATED
msg : a message to notify the user when Trigger
fires
Trigger Format consist of 2 parts
option : use for specify some other parameters
For reference, variables in Trigger can be found
in
https://docs.nexpie.io/device-config.html#device-trigger-and-event-
hook

29 July 2024Page 118
Device Data Management
Device Trigger and Event Hook Event Hooks
LINE NOTIFY
Device2 Shadow
Trigger : DEVICE.STATUSCHANGE
“Temp” : 75
“Humi” : 58
Status : Online
NETPIE2020
Publish : @shadow/data/update
Device2
Trigger and Event Hook example Trigger and Event Hook example

29 July 2024Page 119
Device Data Management
Device Trigger and Event Hook Event Hooks
LINE NOTIFY
Device2 Shadow
Trigger : DEVICE.STATUSCHANGE
“Temp” : 75
“Humi” : 58
Status : Offline
NETPIE2020
Publish : @shadow/data/update
Device2
Trigger and Event Hook example Trigger and Event Hook example

29 July 2024Page 120
Device Data Management
Create Event Hook

29 July 2024Page 121
Device Data Management
Create Event Hook

29 July 2024Page 122
Device Data Management
Create Event Hook

29 July 2024Page 123
Device Data Management
Create Event Hook
Change from Tree to
Code

29 July 2024Page 124
Device Data Management
Create Event Hook
{
"body": "message={{msg}}",
"header": {
"Authorization": "Bearer {{option.linetoken}}",
"Content-Type": "application/x-www-form-urlencoded"
},
"method": "POST",
"uri": "https://notify-api.line.me/api/notify"
}
Event Hook Example of a Line Notify that specifies 4 Attributes
Copy and paste to Event Hook on
NETPIE2020

Page 125
Device Data Management
Create Event Hook
Slide to Enable

29 July 2024Page 126
Device Data Management
Create Event Hook
{
"body": "message={{msg}}",
"header": {
"Authorization": "Bearer {{option.linetoken}}",
"Content-Type": "application/x-www-form-urlencoded"
},
"method": "POST",
"uri": "https://notify-api.line.me/api/notify"
}
Event Hook Example of a Line Notify that specifies 4 Attributes
body : the message sent to destination
header : additional information such as
Authorization, Content-Type
method : assign the method wanted by the
receiving end GET, POST or PUT
uri: specify the Endpoint
*** In Event Hook, variables sent from Trigger can be referenced by using {{…}} symbols around them. For
example, if we want to reference msg from Trigger, use {{msg}} Or in the option of linetoken, use
{{option.linetoken}}

29 July 2024Page 127
Device Data Management
Create Event Hook

29 July 2024Page 128
Device Data Management
Workshop 5 : Temperature and device status change notification
Event Hooks
LINE NOTIFY
Device1 Shadow
Trigger : SHADOW UPDATE & DEVICE.STATUSCHANGE
NETPIE2020
Publish : @shadow/data/update
Device1

29 July 2024Page 129
Device Data Management
Select Device1 to create Trigger
Workshop 5 : Temperature and device status change notification

29 July 2024Page 130
Device Data Management
Change from Tree to
Code
Workshop 5 : Temperature and device status change notification

29 July 2024Page 131
Device Data Management
{
"enabled": true,
"trigger": [
{
"action": "LINE_NOTIFY",
"event": "SHADOW.UPDATED",
"condition": "$.temperature!= $$.temperature",
"msg": "My temperature 2 was change from {{$$.temperature}} to {{$.temperature}}",
"option": {
"linetoken": "Your_Token_LINE"
}
},
{
"action": "LINE_NOTIFY",
"event": "DEVICE.STATUSCHANGED",
"msg": "My Device {{$.statustext}}, statuscode: {{$.status}}",
"option": {
"linetoken": "Your_Token_LINE"
}
}
]
}
Workshop 5 : Temperature and device status change notification
Turn on Trigger
Copy this trigger code and paste to Device
Trigger
Trigger Status Change : The condition is to take
action whenever device status changes, with
action: “LINE_NOTIFY” and the message is “My
device xx statuccode: xx”
Trigger Shadow Update : the condition is to take
action whenever the temperature changes, with
action : “LINE_NOTIFY” and the message is “My
temperature 2 was changed from xx to xx.”

29 July 2024Page 132
Device Data Management
Token Line can be created at this link
https://notify-bot.line.me/en/

Workshop 5 : Temperature and device status change notification

29 July 2024Page 133
Device Data Management
Workshop 5 : Temperature and device status change notification
Login to your LINE account using
E-mail and Password

29 July 2024Page 134
Device Data Management
Workshop 5 : Temperature and device status change notification
After login, select >> My
page
as shown in the figure

29 July 2024Page 135
Device Data Management
Workshop 5 : Temperature and device status change notification
Scroll down and click on
[Generate Token]

29 July 2024Page 136
Device Data Management
Workshop 5 : Temperature and device status change notification
Fill in token name, and select 1-on-1 chat with
LINE notify.
Click [Generate Token]

29 July 2024Page 137
Device Data Management
Workshop 5 : Temperature and device status change notification
The generated token is displayed. Copy
and paste to
linetokenin Device Trigger

29 July 2024Page 138
Device Data Management
Workshop 5 : Temperature and device status change notification

29 July 2024Page 139
Device Data Management
Workshop 5 : Temperature and device status change notification
Name the Topic @shadow/data/update
Set the payload message to {
"data" : {"temperature" : 30}}
1
2
3

29 July 2024Page 140
Device Data Management
Workshop 5 : Temperature and device status change notification
Temperature change notification from
LINE

29 July 2024Page 141
Device Data Management
Workshop 5 : Temperature and device status change notification
Device status change test
Device status change notification LINE

29 July 2024 Page 142
NETPIE Dashboard

29 July 2024Page 143
Dashboard
What is Dashboard?
NETPIE2020Dashboardisasoftwarepanelforcontroland
displaydatafromadevice.Adevelopercreatesandcustomizes
WidgetPluginstosuituserrequirements,suchasgauges,sliders,
controlbuttons,andputJavascriptcommandsforvariousactions.

29 July 2024Page 144
Dashboard
Create a Dashboard

29 July 2024Page 145
Dashboard
Create a Dashboard

29 July 2024Page 146
Dashboard
Create a Dashboard

29 July 2024Page 147
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020
DHT11
NETPIE2020
@shadow/data/update
Publish : { “data”: { “Temp” : 24, “Humi” : 58 }}
NodeMCU
Device Shadow
“Temp” : 75
“Humi” : 58
Dashboard
Use the Arduino
Program from
Workshop 4

29 July 2024Page 148
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 149
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 150
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 151
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 152
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 153
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 154
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020
Data recorded in Device Shadow

29 July 2024Page 155
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 156
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 157
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 158
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 159
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 160
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020
Select from pulldown menu

29 July 2024Page 161
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 162
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020
The rest of dashboard can be constructed the same way…

29 July 2024Page 163
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 164
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 165
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 166
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 167
Dashboard
Workshop 6 : Construct a Dashboard on NETPIE2020

29 July 2024Page 168
Dashboard
Workshop 7 : Control LED on NodeMCUvia Dashboard
DHT11
NETPIE2020
NodeMCU
Dashboard

29 July 2024Page 169
Dashboard
LED on NodeMCUcan be controlled via Dashboard by 2 methods
1. Command via Shadow
Device Shadow
“led” : on
Workshop 7 : Control LEDs on NodeMCUvia Dashboard

29 July 2024Page 170
Dashboard
LED on NodeMCUcan be controlled via Dashboard by 2 methods
1. Command via Shadow
On ,Off
b'{"deviceid":"085676f3-6c9d-44c3-a96f-
c94f90412728","data":{"led":"on"},"rev":3,
"modified":1579864929867}'
Device Shadow
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Message sent via shadow has the following format

29 July 2024Page 171
Dashboard
LED on NodeMCUcan be controlled via Freeboard by 2 methods
Device Shadow
“led” : “on”
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
2. Command by Message

29 July 2024Page 172
Dashboard
My preferred method
Device Shadow
“led” : “on”
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Formulate command structure
Command = parameter

29 July 2024Page 173
Dashboard
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
https://wokwi.com/projects/404734188988206081

29 July 2024Page 174
Device Data Management
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
#include <Wire.h>
#include <BH1750FVI.h>
#define LAMP D5
#define VALVE D6
#define FERTILIZER D7
#define DHTPIN D4
#define DHTTYPE DHT11
const char* ssid = "dew2G";
const char* password = "dewninja666";
const char* mqtt_server = "broker.netpie.io";
const int mqtt_port = 1883;
const char* mqtt_Client = "adb59c76-3be2-4d83-93b4-f75da4abba99";
const char* mqtt_username = "A5pGYWRFXjkkqorVLM95Qn4BUbqWbLvf";
const char* mqtt_password = "5Uz6sUqUPiHFPH7gWPP1uFWS6bDyKZiv";
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
uint8_t ADDRESSPIN = 15; // D8, not used
BH1750FVI::eDeviceAddress_t DEVICEADDRESS = BH1750FVI::k_DevAddress_L;
BH1750FVI::eDeviceMode_t DEVICEMODE = BH1750FVI::k_DevModeContHighRes;
1
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Open ws7_cmdparm.ino
Part 1 Library and variable declaration
Coding in ws7_cmdparm.ino
consists of 3 parts
Variable and LED output pin
declaration

29 July 2024Page 175
Device Data Management
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection…");
if (client.connect(mqtt_Client, mqtt_username,
mqtt_password)) {
Serial.println("connected");
// subscribe to command topics
client.subscribe("@msg/#");
}
else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println("try again in 5 seconds");
delay(5000);
}
}
}
2
Subscribe Topic sent via Dashboard
MQTT connection function
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Part 2 various functions

29 July 2024Page 176
Device Data Management
void setup() {
pinMode(LAMP, OUTPUT); // Grow lamp intensity 0 - 100%
pinMode(VALVE, OUTPUT); // water valve open 0 - 100%
pinMode(FERTILIZER, OUTPUT); // turn off/on fertilizer
unit
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
2
Assign callback function to MQTT
Setup function
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Part 2 various functions
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
dht.begin();
LightSensor.begin();
}

29 July 2024Page 177
Device Data Management
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String message;
for (int i = 0; i < length; i++) {
message = message + (char)payload[i];
}
Serial.println(message);
if(String(topic) == "@msg/cmd") {
rcvdstring=message;
cmdInt(); // call command interpreter
}
}
2
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Commands to display MQTT topic and message
MQTT message receive function
Part 2 callback functions
If topic is @msg/cmd,
call command intepreter

29 July 2024Page 178
Device Data Management
3
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Part 3 command intepreter
void cmdInt(void)
{
rcvdstring.trim(); // remove leading&trailing whitespace, if any
// find index of separator ('=')
sepIndex = rcvdstring.indexOf('=');
if (sepIndex==-1) { // no parameter in command
cmdstring = rcvdstring;
noparm = 1;
}
else {
// extract command and parameter
cmdstring = rcvdstring.substring(0, sepIndex);
cmdstring.trim();
parmstring = rcvdstring.substring(sepIndex+1);
parmstring.trim();
noparm = 0;
}

29 July 2024Page 179
Device Data Management
3
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Part 3 command intepreter
if (cmdstring.equalsIgnoreCase("lamp")) {
if (noparm==1) {
Serial.println("Lamp intensity = "+(String)map(lampvalue,0,1023,0,100) + " %");
}
else {
parmvalint = parmstring.toInt();
if (parmvalint > 100) parmvalint = 100; // limit to 100%
else if (parmvalint<0) parmvalint = 0;
lamp = parmvalint;
lampvalue = map(lamp,0,100,0,1023);
analogWrite(LAMP,lampvalue);
datastr = "{\"data\": {\"lamp\":" + String(lamp)+"}}";
datastr.toCharArray(msg, (datastr.length() + 1));
client.publish("@shadow/data/update", msg);
Serial.print("Lamp set to ");
Serial.print(lamp);
Serial.println(" %");
Serial.println(datastr);
}
}

29 July 2024Page 180
Device Data Management
3
Part 3 command intepreter
else if (cmdstring.equalsIgnoreCase("valve")) {
if (noparm==1) {
Serial.println("Valve opening = "+(String)map(valvevalue,0,1023,0,100) + " %");
}
else {
parmvalint = parmstring.toInt();
if (parmvalint > 100) parmvalint = 100; // limit to 100%
else if (parmvalint<0) parmvalint = 0;
valve = parmvalint;
valvevalue = map(valve,0,100,0,1023);
analogWrite(VALVE,valvevalue);
datastr = "{\"data\": {\"valve\":" + String(valve)+"}}";
datastr.toCharArray(msg, (datastr.length() + 1));
client.publish("@shadow/data/update", msg);
Serial.print("Valve set to ");
Serial.print(valve);
Serial.println(" %");
Serial.println(datastr);
}
}
Workshop 7 : Control LEDs on NodeMCUvia Dashboard

29 July 2024Page 181
Device Data Management
3
Workshop 7 : Control LEDs on NodeMCUvia Dashboard
Part 3 command intepreter
else if (cmdstring.equalsIgnoreCase("fertilizer")) { // fertilizer feed
if (noparm==1) {
Serial.print("Current fertilizer state = ");
Serial.println(fertilizer_state);
}
else {
if (parmstring.equalsIgnoreCase("on")){
digitalWrite(FERTILIZER,1);
client.publish("@shadow/data/update", "{\"data\" : {\"fertilizer\" : \"on\"}}");
Serial.println("FERTILIZER ON");
fertilizer_state = parmstring;
}
else if (parmstring.equalsIgnoreCase("off")) {
digitalWrite(FERTILIZER,0);
client.publish("@shadow/data/update", "{\"data\" : {\"fertilizer\" : \"off\"}}");
Serial.println("FERTILIZER OFF");
fertilizer_state = parmstring;
}
else Serial.println("Invalid fertilizer state");
}
}

void loop() {
newDHTRead = millis();
if (newDHTRead<lastDHTRead) lastDHTRead = newDHTRead; // prevent overflow
if(newDHTRead - lastDHTRead > 2000){
lastDHTRead = newDHTRead;
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
uint16_t light = LightSensor.GetLightIntensity();
String place = "Farm 1";
if (!client.connected()) {
reconnect();
}
client.loop();
String data = "{\"data\": {\"humidity\":" + String(humidity) + ", \"temperature\":" + String(temperature)
+ ", \"light\":" + String(light)+ ", \"place\": \"" + String(place) + "\"}}";
Serial.println(data);
data.toCharArray(msg, (data.length() + 1));
client.publish("@shadow/data/update", msg);
}
29 July 2024Page 182
Device Data Management
Part 3 loop function
3
Workshop 7 : Control LED on NodeMCUvia Freeboard
Use millis() for timing instead of delay() to avoid blocking the
execution while waiting Freeboard message

29 July 2024Page 183
Dashboard
Workshop 7 : Control LED on NodeMCUvia Dashboard
{
"additionalProperties": false,
"properties": {
"humidity": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "number"
},
"temperature": {
"operation": {
"store": {
"ttl": "7d"
},
"transform": {
"expression": "(($.temperature)*1.8) + 32"
}
},
"type": "number"
},
"place": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "string"
},
“lamp": {
"operation": {
"store": {
"ttl": "7d"
}
},
"type": "string"
}
}
}
Device Schema in JSON format Device Schema in JSON format
Add code on Schema for lamp,
valve and fertilizer
Record lamp data with property
-Store for 7 days
-Variable type is number
Maybe easier to set
additionalProperties
to true

29 July 2024Page 184
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard
Issue serial port commands to write lamp,
Valve, fertilizer on shadow. Ex. lamp=20

29 July 2024Page 185
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard

29 July 2024Page 186
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard

29 July 2024Page 187
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard
Create a slider widget to control lamp

29 July 2024Page 188
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard
Create a slider widget to control lamp

29 July 2024Page 189
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard
Create a slider widget to control lamp

29 July 2024Page 190
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard
Create a toggle widget to control fertilizer

29 July 2024Page 191
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard
It is left as an exercise to create another slider for valve
(represented by a small green LED).

29 July 2024Page 192
Dashboard
Workshop 7 : Control LEDs on NodeMCUDashboard

29 July 2024Page 193
Note for the rest of this Powerpointfile
Since the rest of this presentation is not covered in my course.
The original slides are left intact.

29 July 2024 Page 194
RESTful API

29 July 2024Page 195
RESTful API
What is RESTful API?
It is a channel for the device to call the Platform service via the RESTful
API which uses HTTP protocol, suitable for integrating various systems, either
existing or new development, without limitation by programming language or
hardware. There are two groups of APIs:
1. Device API
2. Data Store API

Page 196
Module 5 : Restful API
Device API
It is an API related to device management or calling.
The EndPointis https://api.netpie.io/v2/device
curl -X PUT "https://api.netpie.io/v2/device/message?topic=%40msg%2Ftest" -H
"Authorization: Basic ClientID:Token" -H "Content-Type: text/plain" -d "message"
Publish message to a topic Publish message to a topic
curl -X GET "https://api.netpie.io/v2/device/shadow/data" -H "Authorization:
Basic ClientID:Token"
Read Shadow Data of Device Read Shadow Data of Device
curl -X PUT "https://api.netpie.io/v2/device/shadow/data" -d "{data:{humid:63.7,
temp:25.2}}" –H "Authorization: Device ClientID:Token"
Write Shadow Data using Merge method Write Shadow Data using Merge method

Page 197
Module 5 : Restful API
Device API
curl -X POST "https://api.netpie.io/v2/shadow/data" -d "{data:{temp:31.7}}"-H
"Authorization: Device ClientID:Token"
Write Shadow Data using Overwrite method Write Shadow Data using Overwrite method
curl -X PUT " https://api.netpie.io/v2/shadow/data" -d "{data:{humid:61.9,
temp:28.6,timestamp:1566863843262}}" -H "Authorization: Device ClientID:Token"
Write to Shadow with specified time in the past Write to Shadow with specified time in the past

Page 198
Module 5 : Restful API
Data Store API
It is an API that deals with retrieving data stored in Time series Database, where
the Domain name of API is
https//api.netpie.io/v2/feed. The databseis stored in KairosDBformat, so querying the
parameters can be done using the same format as KairosDB
curl -X POST "https://api.netpie.io/v2/feed/api/v1/datapoints/query" –H "Content-Type:
application/json" -H "Authorization: BeareruserToken" -d ' {
{\"start_relative\":{\"value\":1,\"unit\":\"days\"},\"metrics\":[{\"name\":\"ClientID\",\"tags\
":{\"attr\":[\"temperature\"]},\"limit\":50,\"group_by\":[{\"name\":\"tag\",\"tags\":[\"attr\"
]}],\"aggregators\":[{\"name\":\"avg\",\"sampling\":{\"value\":1,\"unit\":\"minutes\"}}]}]}"
Read data from Timeseries Database of Device Read data from Timeseries Database of Device
Webpage to Generate Code for API calls
https://trial-api.netpie.io/

29 July 2024 Page 199
NETPIE2020 Quota

29 July 2024Page 200
NETPIE2020 Quota
NETPIE2020 Quota
10 DevicesConnecting limit
3 ProjectsProject
9,000,000 Messages/MonthReal time message
1,000,000 Points-MonthData Storage
500,000 Operations/MonthShadow read/write
800,000 Operations/MonthAPI Call
5,000 Operations/MonthTrigger and Action
3 Freeboards/ProjectDashboard
3 ConcurrentViewsFreeboard Connection

29 July 2024 Page 201
Node-RED

29 July 2024Page 202
Node-RED
What is Node-RED ?
Node-RED is a tool for programmers to connect their hardware devices to APIs
(Application Programming Interface) and online services in new ways. They're available for
free as well as for paid portions. Node-RED can design APIs. To receive, calculate, convert,
store, or connect to other services

29 July 2024Page 203
Node-RED
Component
1
Working area
Used to place various functional nodes.
To create a working flow of the
diagram in this window

29 July 2024Page 204
Node-RED
Component
2
Operation box
Various functional tool boxes
(Hereinafter referred to as nodes) is
used to drag and drop onto your flow
instead of writing code.

29 July 2024Page 205
Node-RED
Component
3
Information window
The window shows the details of the flow,
such as name, id, status (enable or disable),
or display node information such as name,
type, id, description, help, output example.

29 July 2024Page 206
Node-RED
Component
4
Debug windows
Display information from the nodes fo
debugging purposes. Check the correctness of
the program, etc.

29 July 2024Page 207
Node-RED
5
Deploy
Once the flow has been created, the
program will not run immediately, you
have to press the Deploy button to
start working.
Component

29 July 2024Page 208
Node-RED
6
Tab to switch working area
Component

29 July 2024Page 209
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
NETPIE2020
@shadow/data/update
Publish : { “data”: { “Temp” : 24, “Humi” : 58 }}
Device4 Shadow
“Temp” : 24
“Humi” : 58
Device4

29 July 2024Page 210
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Create a new Device for Node-RED
Click into that device

29 July 2024Page 211
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Go to Node-RED window. Drag [mqttout] node to working
area
Double Click on the node

29 July 2024Page 212
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED

29 July 2024Page 213
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Client ID on NETPIE2020
Specify node name
Token on NETPIE2020
Secret on NETPIE2020

29 July 2024Page 214
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Test NETPIE2020 on Node-RED by updating data to Device Shadow.
Specify topic : @shadow/data/update

29 July 2024Page 215
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED

29 July 2024Page 216
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
connected indicator means successful connection to
NETPIE2020

29 July 2024Page 217
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Check connection status on NETPIE2020
portal

29 July 2024Page 218
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Drag [inject] node into the flow
Double Click on the inject node

29 July 2024Page 219
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Click timestamp and choose JSON

29 July 2024Page 220
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Copy JSON code example
above to the editor
Then click [Done]
JSON code example
{ "data" : { "humidity" : 52, "temperature" : 28,
"place" : "NECTEC Thailand" }}

29 July 2024Page 221
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
the message to be sent

29 July 2024Page 222
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Connect a wire between 2 Node

29 July 2024Page 223
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Drag [debug] node to the flow and
connect wire from [inject] output
port to its input
Click [Deploy]

29 July 2024Page 224
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED

29 July 2024Page 225
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Output from [Inject] node

29 July 2024Page 226
Node-RED
Workshop 9 : Connect NETPIE2020 with Node-RED
Data on [Shadow] is
updated

29 July 2024 Page 227
Can follow
Tutorials and Example Projects from
https://netpie.io/tutorials
https://netpie.io/exampleprojects

29 July 2024Page 228
Coming Soon…
Example of NETPIE 2020 connection with various
hardware platforms
Hardware : NodeMCU(ESP8266)

29 July 2024Page 229
Coming Soon…
Example of NETPIE 2020 connection with various
hardware platforms
Hardware : M5Stack(ESP32)

29 July 2024Page 230
Coming Soon…
Example of NETPIE 2020 connection with various
hardware platforms
Hardware : Raspberry PI

29 July 2024Page 231
Coming Soon…
Example of NETPIE 2020 connection with various
hardware platformsMonitor sensor values on Web
Browser
Control devices via Web Browser

29 July 2024Page 232
Coming Soon…
Example of NETPIE 2020 connection with
various hardware platforms
Smart Home

29 July 2024Page 233
Coming Soon…
Project examples that use NETPIE2020
Smart Farm
Plant pot
Connect to

29 July 2024Page 234
Coming Soon…

29 July 2024 Page 235

29 July 2024 Page 236
Translation to English by Dr.VarodomToochinda
Dept. of Mechanical Engineering,
KasetsartUniversity
Tags