Project

General

Profile

การอบรมการใช้งาน aMG 4-20mA to WiFi Data Logger

ปูพื้น

  1. เกี่ยวกับ เอมเมจิน (เกี่ยวกับ Aimagin.pdf)
  2. เกี่ยวกับ aMG 4-20mA to WiFi Data Logger (เกี่ยวกับ aMG 4-20mA to WiFi Data Logger v5 thai.pdf)
    1. 4-20mA คืออะไร
    2. ปัญหาคืออะไร
    3. 4-20mA to WiFi Data Logger ช่วยได้อย่างไร
  3. เป้าหมายของวันนี้
    1. สามารถตั้งค่าใช้งานอุปกรณ์ได้
      1. เข้าใจ Config mode และ Running mode
      2. ดูสถานะ LED เป็น
      3. ตั้งค่าใช้งานได้: WiFi, 4-20mA
      4. สามารถดูค่าทดสอบจาก Dashboard ได้
      5. Download ค่า (Logged data) จากอุปกรณ์ได้
    2. สามารถส่งค่าขึ้น test server (http://testiot.aimagin.com/register) ได้
    3. สามารถใช้งานจริงได้
      1. สามารถ Setup และเก็บค่าเข้า Google sheet ได้
      2. สามารถ Setup และเก็บค่าเข้า Php / MySQL ได้ (ใช้ Cloud server Digital Ocean https://www.digitalocean.com/)
  4. ตอบคำถาม

อุปกรณ์และซอฟต์แวร์ที่ต้องใช้

อุปกรณ์

  1. เครื่อง Notebook 1 เครื่อง
  2. WiFi Dongle 1 อัน
  3. aMG 4-20mA to WiFi Data Logger 1 อัน
  4. เครื่องสร้างสัญญาณ 4-20mA จำลอง 1 อัน

ส่วนประกอบฮาร์ดแวร์

ลำดับ ส่วนประกอบ คำอธิบาย
1 แหล่งจ่ายไฟ VDC พอร์ตเพื่อเชื่อมต่อกับแหล่งจ่ายไฟ VDC (9 - 24 V)
2 แหล่งจ่ายไฟ GND พอร์ตเพื่อเชื่อมต่อกับกราวด์ของแหล่งจ่ายไฟ
3 ขั้วต่อเสาอากาศ ขั้วต่ออินพุตเสาอากาศ
4 ช่องสัญญาณ พอร์ตเพื่อเชื่อมต่อกับเซ็นเซอร์รองรับเซ็นเซอร์ได้สูงสุด 4 ตัว
5 ไฟ LED สีเขียว แสดงสถานะของสภาพการทำงานพร้อมกะพริบในความถี่ที่แตกต่างกัน
6 ไฟ LED สีเหลียง แสดงสถานะแหล่งจ่ายไฟ
7 เสาอากาศ เสาอากาศ WiFi

ตารางสถานะ LED aMG 4-20 mA to WIFI Data Logger

No. โหมดการทำงาน สถานะการทำงาน ลักษณะการกะพริบของไฟ LED ตัวอย่างการกะพริบของไฟ LED
1 Access Point (AP) /Configuration Mode พร้อมใช้งานสำหรับการเชื่อมต่อจากผู้ใช้ไม่มีการเชื่อมต่อหรือพยายามเชื่อมต่อ กะพริบ 1 Hz
2 Access Point (AP) /Configuration Mode ผู้ใช้เชื่อมต่อสำเร็จ ไฟ LED จะติดค้าง
3 Station Mode (STA) /Running Mode พยายามเชื่อมต่อกับ WIFI กะพริบ 5Hz
4 Station Mode (STA) /Running Mode เชื่อมต่อกับ WIFI เรียบร้อยแล้ว 2 ไฟ LED จะค่อยๆสว่างขึ้นและดับลงอย่างรวดเร็ว

การทำงานของอุปกรณ์

aMG 4-20 mA to WIFI Data Logger มีโหมดการทำงาน 2 โหมดคือ Configuration Mode และ Running Mode

Configuration Mode

คือ การตั้งค่า aMG 4-20 mA to WIFI Data Logger สามารถทำได้อย่างง่ายดายใน Configuration Mode ผ่านเว็บแอปพลิเคชันโดยใช้คอมพิวเตอร์เดสก์ท็อปหรือโทรศัพท์มือถือ

ในการเข้าถึง Configuration Mode
ขั้นตอนที่ 1 เชื่อมต่อแหล่งจ่ายไฟกับ aMG 4-20 mA to WIFI Data Logger
ขั้นตอนที่ 2 ตัดการเชื่อมต่อ WIFI บนเดสก์ท็อปของคุณและเชื่อมต่อเดสก์ท็อปหรือโทรศัพท์มือถือของคุณเข้ากับอุปกรณ์ผ่านการเชื่อมต่อ WIFI โดยเลือกชื่ออุปกรณ์ 4-20mA- <UID> ในการตั้งค่า WIFI ดังรูปด้านล่าง รหัสผ่านคือ 12345678

หมายเหตุ: ขั้นตอนนี้จะต้องทำภายใน 60 วินาทีหลังจากเชื่อมต่ออุปกรณ์กับแหล่งจ่ายไฟ หลังจาก 60 วินาทีโดยไม่ต้องเชื่อมต่อมันจะทำงานเป็น running mode โดยอัตโนมัติ ในการพยายามเข้าสู่ configuration mode คุณต้องถอดแหล่งจ่ายไฟและเชื่อมต่อใหม่อีกครั้ง จากนั้นอุปกรณ์จะเปลี่ยนเป็น configuration modeอีกครั้ง

ขั้นตอนที่ 3 เปิดเว็บเบราว์เซอร์จากนั้นไปที่ URL:

192.168.10.10

หน้าล็อกอิน Aimagin Analytics จะปรากฏดังรูปด้านล่าง

ขั้นตอนที่ 4 เข้าสู่ระบบโดยใช้ชื่อผู้ใช้เป็นผู้ดูแลระบบด้วยรหัสผ่าน 1234 หลังจากเข้าสู่ระบบหน้าการกำหนดค่าจะปรากฏขึ้น ขณะนี้อุปกรณ์อยู่ใน configuration mode ผู้ใช้สามารถเห็นแท็บการกำหนดค่าทางด้านซ้ายดังต่อไปนี้:

WiFi Configuration
ก่อนใช้งานผู้ใช้ต้องเลือกจุดเชื่อมต่อ WiFi สำหรับอุปกรณ์โดยกรอกข้อมูลตามที่แสดงด้านล่าง

  1. ระบุ SSID เป็น WiFi หรือชื่อเครือข่ายของคุณ จากนั้นกรอกรหัสผ่านของเครือข่ายของคุณ
  2. คลิกที่ปุ่มอัปเดตเพื่อบันทึกการตั้งค่า WiFi เมื่อการอัปเดตเสร็จสมบูรณ์จะมีข้อความป๊อปอัปด้านล่าง

หมายเหตุ: สำหรับการตั้งค่า IP แนะนำให้ใช้ไดนามิก อย่างไรก็ตามขึ้นอยู่กับนโยบายความปลอดภัยของผู้ใช้

System Configuration

ในเมนูนี้ผู้ใช้สามารถค้นหา UID ของอุปกรณ์และเวอร์ชันเฟิร์มแวร์ได้ที่นี่ นอกจากนี้ผู้ใช้สามารถตั้งค่าเวลาตัวอย่างของช่องทางเซิร์ฟเวอร์เป้าหมายเพื่อส่งข้อมูลไปยังฐานข้อมูลและพารามิเตอร์รูปแบบ JSON เป็นรูปแบบข้อมูลเริ่มต้น

  1. Sample time
    การตั้งค่า Sample time ของแต่ละช่องสัญญาณซึ่งระบุช่วงเวลาของข้อมูลที่ส่งไปยังเซิร์ฟเวอร์เป้าหมาย
    เลือก Sample time จากรายการ drop-down ในการปรับแต่งอัตรา Sample time คุณยังสามารถเลือก custom เพื่อระบุอัตรา Sample time ที่คุณต้องการ
  2. Target server
    กรอก domain หรือ IP address และ Secret key สำหรับข้อมูล Target server
  3. JSON format parameters
    ระบุ organization ID และTable name เป็นข้อมูลพื้นฐานของชุดข้อมูล
  4. Heartbeat sample time
  5. Data Encryption

4-20 mA Configuration

  1. เลือก Channel ที่คุณต้องการกำหนดค่า
  2. ตั้ง Name เพื่อแสดงสัญญาณอินพุต เช่น Pressure
  3. ตั้ง Unit สำหรับสัญญาณเอาท์พุต เช่น MPa
  4. กำหนดพิกัดของ Point 1 (ค่าที่ต่ำสุด) และ Point 2 (ค่าที่สูงสุด) ดูรูปที่ 4-20 mA Conversion หลังจากระบุพิกัดสองจุดแล้วระบบจะคำนวณการแปลงสมการเชิงเส้นตามการตั้งค่าของคุณ

เพื่อทำความเข้าใจแนวคิดของการแปลงสัญญาณ 4-20 mA ดูรูปด้านล่าง:


4-20 mA Conversion

Running Mode

เมื่อเปิด aMG 4-20 mA to WIFI Data Logger มันจะทำงานใน Configuration mode โดยอัตโนมัติ เมื่อสิ้นสุด Configuration mode จะเปลี่ยนเป็น Running Mode ตามลำดับ

ซอฟต์แวร์

  1. Putty
  2. VM VirtualBox
  3. ubuntu-18.04.4-server-amd64.iso

การทดสอบกับ test server (http://testiot.aimagin.com/register)

การ Setup และเก็บค่าของข้อมูลที่ถูกส่งเข้า Google sheet

1. เปิด google sheet
2. ใส่ข้อมูลลงไปใน sheet ที่ column 1A-1I ตามรูปภาพด้านล่าง

3. ผู้ใช้สามารถเปลี่ยนชื่อ Sheet และ ชื่อ Spread sheet ได้และตรวจสอบให้แน่ใจว่าไม่มีช่องว่างในชื่อ Sheet ,Spread sheet

4. คลิก Tools เลือก Script Editor
คัลลอก Code ด้านล่างไปใส่ใน Script Editor และ เปลี่ยน test_table ในบรรทัดที่ 2 ให้เป็นชื่อ Spread sheet ตามที่ได้ตั้งไว้

// IMPORTANT: Change the sheet name accordingly
var user_sheet = "test_table" 

function doGet(e) {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName(user_sheet);

  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var lastRow = sheet.getLastRow();

  var cell = sheet.getRange('a1');
  var col = 0;
  var d = new Date();

  for (i in headers){
    val = e.parameter[headers[i]]; 

    cell.offset(lastRow, col).setValue(val);
    col++;
  }

  return ContentService.createHtmlOutput("Success");
}

function updateSheet(rows) {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName(user_sheet);
  var column = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  for(var i=0;i<rows.length;i++) {
    var d = [];
    for(var j=0;j<column.length;j++) {
      d.push(rows[i][column[j]]);
    }
    sheet.appendRow(d)
  }
}

function doPost(e) {
  let data = JSON.parse(e.postData.contents);
  Logger.log(data); 
  updateSheet(data.rows);
  return ContentService.createHtmlOutput("Success");
}

ดังนี้

5. คลิก Publish เลือก Deploy as web app...
ตั้งค่าตามนี้
5.1 ตั้งชื่อ Project คลิก OK
5.2 Who has access to the app เลือก Anyone even anonymous จากนั้นคลิก Deploy
5.3 คลิก Review Permissions
5.4 กรณีที่มีหน้าคำเตือนขึ้น ให้คลิก Advanced และคลิก Go to (ชื่อ Spread sheet )_Google_Script (unsafe).

5.5 คลิก Allow
ดังนี้

5.6 คัดลอก URL

6. ทดสอบเก็บค่าเข้า Google sheet
6.1 นำข้อมูลด้านล่างมาต่อท้าย URL ที่คัดลอกมา

(URL ที่คัดลอก)?id=test_table&datetime=601235&CH1_raw=0&CH1_conv=0&CH2_raw=1&CH2_conv=1&CH3_raw=2&CH3_conv=2&CH4_raw=3&CH4_conv=3

ตัวอย่าง
https://script.google.com/macros/s/AKfycbx39JLX-wRkFl8Hgpk2GL7fw5yH8HBs0UPqVcLtwIKoJ-a-skY/exec?id=test_table&datetime=601235&CH1_raw=0&CH1_conv=0&CH2_raw=1&CH2_conv=1&CH3_raw=2&CH3_conv=2&CH4_raw=3&CH4_conv=3

6.2 เอา URL ที่ได้ไปใส่ในแถบค้นหาดังนี้

จากนั้นกด Enter
6.3 ตรวจสอบหน้า google sheet ถ้ามีข้อมูลเข้าเหมือนรูปด้านล่างแสดงว่า google sheet พร้อมสำหรับการเก็บข้อมูลจาก aMG 4-20mA to WiFi Data Logger

การ Config ค่า ใน System configuration

  1. Target Server จะนำ URL ที่คัดลอกมาดังนี้
    ตัวอย่าง URL ที่คัดลอก
    https://script.google.com/macros/s/AKfycbx39JLX-wRkFl8Hgpk2GL7fw5yH8HBs0UPqVcLtwIKoJ-a-skY/exec
    
    1. Domain /URL
      ตัวอย่าง Domain /URL
      https://script.google.com/macros/s/
      
    2. Secret key
      ตัวอย่าง Secret key
      AKfycbx39JLX-wRkFl8Hgpk2GL7fw5yH8HBs0UPqVcLtwIKoJ-a-skY/exec
      
  2. JSON format parameters
    1. Table name ให้ใส่ชื่อ Spread sheet ที่ได้ตั้งไว้
      ตัวอย่าง จาก sheet demo_database ชื่อ Spread sheet คือ demo

Table name : demo

การ Setup Server ด้วยโปรแกรม VM VirtualBox

1. เปิดโปรแกรม VM VirtualBox คลิก NEW

ใส่ข้อมูลดังนี้

Name: ตั้งชื่อ ตัวอย่างเช่น test

Machine Folder : เลือก Folder ที่จัดเก็บของมูลของ server 

Type : Linux

Version: Ubuntu (64-bit)

ตัวอย่าง


จากนั้นกด Next

2. กำหนด ขนาด Ram ที่จะใช้

3. เลือก Create a virtual hard disk now กด Create

4. เลือก VDI (VirtualBox Disk Image) กด Next

5. เลือก Dynamically allocated กด Next

6. กำหนดขนาด storage ที่จะใช้ กด Create

7. ตั้งค่า Network ดังนี้

กด OK

หมายเหตุ Name ของแต่ละเครื่องจะไม่เหมือนกันขึ้นอยู่กับชนิดของการรับสัญญาณอินเตอร์เน็ต เช่น WiFI หรือ LAN

ขั้นตอนการติดตั้ง Ubuntu

1. คลิก [Optical Drive] Empty

2. คลิก Add เลือก ไฟล์ ubuntu-18.04.4-server-amd64.iso คลิก Open

จากนั้นคลิก Choose

คลิก Start

หลังจากเข้าโปรแกรม Oracle VM VirtualBox เลือกภาษา Install Ubuntu Server

เลือกภาษา

หน้า Select your location เลือก other

Select your location เลือก Asia

Select your location เลือก Thailand

Select your location เลือก United States

หน้า Configure the keyboard เลือก Yes

หน้าถัดมา เลือก No จนกว่าจะเจอ ตัวอักษรภาษาไทย(ตัว ภ)

จากนั้นกด Yes

หน้าถัดมาเลือก Alt+Shift

หน้า Configure the network ตั้งต่า Hostname: ใส่ชื่อ แล้วกด Continue

หน้า Set up users and passwords ใส่ชื่อ แล้วกด Continue

ตั้ง Username for your account แล้วกด Continue

ตั้ง Password

ยืนยัน Password

หน้า Configure the clock ถ้าบรรทัดแรก เป็น Asia/Bangkok กด Yes

หน้า Partition disks เลือก Guided - use entire disk and set up LVM

หน้าถัดมา เลือก Harddisk ที่ ตั้งไว้ จากนั้นกด Yes

กด Continue

กด Yes

หน้า Configure the package manager ไม่ต้องใส่อะไร แล้วกด Continue

หน้า Configuring tasksel เลือก Install sercurity updates automatically

หน้า Software selection ให้เลื่อนลงมากด Spacebar ที่ OpenSSH server แล้วค่อย Continue

หน้า Install the GRUB boot loader on a hard disk เลือก Yes

หน้า Finish the Installation กด * Continue*

จากนั้น Log in โดยใช้ Username กับ Password ที่ตั้งไว้
รันคำสั่ง sudo apt-get update
รันคำสั่ง sudo apt-get upgrade เมื่อ ขึ้นว่า Do you want to continue? กด y แล้ว Enter
รันคำสั่ง sudo apt-get dist-upgrade เมื่อ ขึ้นว่า Do you want to continue? กด y แล้ว Enter
รันคำสั่ง sudo reboot
ติดตั้ง Ubuntu เสร็จสิ้น

การเข้าผ่าน PuTTY

  1. ตรวจสอบ IP Address โดยคำสั่งด้านล่าง
    ifconfig
    

    ตัวอย่าง
  2. เปิดโปรแกรม PuTTY ที่ติดตั้งขึ้นมา
    1. Host Name (or IP Address) ให้ใส่ IP Address จากการเช็คด้านบนลงไป และ port 22
    2. กด Open
    3. login ครั้งแรก PuTTY Security Alert ให้เลือกเป็น Yes
    4. กรอก user และ password ที่ตั้งไว้
      ดังนี้

การ Fix IP

รันคำสั่งตามนี้
1.ตรวจสอบไฟล์ 01-netcfg.yaml

ls -l /etc/netplan

2. สำรองไฟล์ 01-netcfg.yaml

sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml_original

3.แก้ไขไฟล์ 01-netcfg.yaml

sudo nano /etc/netplan/01-netcfg.yaml

แก้ไขไฟล์ดังนี้
คัดลอกไฟล์
network:
    ethernets:
        enp0s3:
          addresses: [192.168.1.91/24]
          gateway4: 192.168.1.1
          dhcp4: no
          nameservers:
            addresses: [8.8.8.8, 8.8.4.4]
          optional: true
    version: 2

คลิกขวาเพื่อวางข้อมูล จากนั้น ctrl+x กด y แล้ว enter

4.ยืนยัน IP

sudo netplan apply

ตัวอย่าง

การ Setup และเก็บค่าของข้อมูลที่ถูกส่งเข้า Php / MySQL

1. รันคำสั่งดังนี้เพื่อลง apache2

sudo apt update
sudo apt install apache2 กด y แล้ว enter
sudo a2enmod rewrite
sudo systemctl restart apache2

2. ปรับ Firewall
sudo ufw app list
sudo ufw allow 'Apache'
sudo ufw enable กด y แล้ว enter
sudo ufw status 
ทดลองเข้า http://ipของserver

3. ตั้งค่า Host
sudo mkdir /var/www/test
sudo chown -R $USER:$USER /var/www/test
sudo chmod -R 755 /var/www/test

3.1 รันคำสั่ง sudo nano /etc/apache2/sites-available/test.conf แก้ไขไฟล์ดังนี้
คัfลอกข้อมูลด้านล่าง
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_ip
    ServerAlias www.test
    DocumentRoot /var/www/test
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    #Include /etc/phpmyadmin/apache.conf

    <Directory "/var/www/test">
        AllowOverride All
    </Directory>
</VirtualHost>

3.2 คลิกขวาเพื่อวางข้อมูล จากนั้น ctrl+x กด y แล้ว enter
ตัวอย่าง

รันคำสั่ง

sudo a2ensite test.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl restart apache2

4. ลง MySQL และ phpMyAdmin
รันคำสั่งทีละบรรทัด
sudo apt install mysql-server mysql-client กด y แล้ว enter
sudo mysql -u root -p ใส่รหัสผ่าน
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';
exit
sudo apt install phpmyadmin php-mbstring php-gettext กด y แล้ว enter
spacebar เลือก apache2 กด enter
เลือก no กด enter
sudo phpenmod mbstring
sudo systemctl restart apache2

ลองเข้า http://your_domain_or_IP/phpmyadmin
5. สร้าง table ตั้งชื่อ table 4_20
CREATE TABLE `insert_data` (
  `id` int(11) NOT NULL,
  `organization_id` text NOT NULL,
  `mac_address` text NOT NULL,
  `CH1_raw` text NOT NULL,
  `CH1_conv` text NOT NULL,
  `CH2_raw` text NOT NULL,
  `CH2_conv` text NOT NULL,
  `CH3_raw` text NOT NULL,
  `CH3_conv` text NOT NULL,
  `CH4_raw` text NOT NULL,
  `CH4_conv` text NOT NULL,
  `datetime` text NOT NULL,
  `datetimedt` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `insert_data`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `insert_data`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ตัวอย่าง.

6. ติดตั้ง PHP Dependencies สำหรับติดตั้ง Mcrypt
6.1 รันคำสั่ง

sudo apt install php-dev libmcrypt-dev php-pear กด y แล้ว enter
sudo pecl channel-update pecl.php.net
sudo pecl install mcrypt-1.0.1 กด enter

6.2 รันคำสั่ง sudo vim /etc/php/7.2/apache2/php.ini
6.3 กด esc แล้วพิมพ์ดังนี้ * /extension=sh*
6.4 กด enter
6.5 กด i
6.6 ใส่ extension=mcrypt.so
6.7 กด esc แล้วพิมพ์ดังนี้ :wq
ตัวอย่าง

7. รันคำสั่ง sudo nano /etc/apache2/sites-available/test.conf แก้ไขเอา # ออก จากนั้น ctrl+x กด y แล้ว enter
ตัวอย่างไฟล์ที่แก้ไขแล้ว

8. สร้างไฟล์ฟังก์ชันสำหรับรับค่าจากกล่อง รันคำสั่งดังนี้

sudo mkdir /var/www/test/demo
sudo nano /var/www/test/demo/.htaccess

คัดลอกข้อมูลด้านล่างมาใส่
RewriteEngine On
RewriteBase /demo
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?id=$1 [L,QSA]

เมื่อแก้ไขไฟล์เสร็จแล้วให้ ctrl+x กด y แล้ว enter
ตัวอย่าง

9. สร้างไฟล์ index.php ใช้คำสั่งตามนี้
sudo nano /var/www/test/demo/index.php
คัดลอกข้อมูลด้านล่างมาใส่

<?php
# databaseconnect
$servername = "localhost:3306";
$username = "root";
$password = "1234";
$dbname = "4_20";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
// echo 'Connected successfully';

header("Access-Control-Allow-Origin: *");

header("Content-Type: application/json; charset=UTF-8");

header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE");

header("Access-Control-Max-Age: 3600");

header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

date_default_timezone_set("UTC");

$requestMethod = $_SERVER["REQUEST_METHOD"];

$data = file_get_contents("php://input");

$result_post = json_decode($data, true);

if ($requestMethod == "POST") {
    if ($_GET["id"] == "Du81QXQGE6uswzRxXUnagKarauJL80w6") {
        if (count($result_post) == 3) {
            $key = $result_post["datetime"] . "0123456789012345678901";
            $iv = implode(array_map("chr", array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)));
            $plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, hex2bin($result_post["encrypt_data"]), MCRYPT_MODE_CBC, $iv);
        //     // echo strlen($plaintext);
            $origin_size = strlen($plaintext) - 1;
            $last_str = strripos($plaintext, "}");
            $padding = $origin_size - $last_str;
            // echo $padding;
            $json_string = substr($plaintext, 0, -$padding);
            var_dump($json_string);
            $result_arr = json_decode($json_string, true);
        } else {
            $result_arr = $result_post;
        }

        // var_dump($result_arr);

        array_push($result_arr['column'], "organization_id");
        array_push($result_arr['column'], "mac_address");
        array_push($result_arr['column'], "datetimedt");

        $sql = "";
        $values = [];
        $organization_id = $result_arr['id'];
        $mac_address = $result_arr['mac'];
        $time = date("Y-m-d H:i:s");

        if (count((array)$result_arr['rows'][0]) > 0) {

            $column = implode(", ", $result_arr['column']);

            for ($i = 0; $i < count($result_arr['rows']); $i++) {
                $time = $result_arr['rows'][$i]['datetime'];
                $result_arr['rows'][$i]['organization_id'] = $organization_id;
                $result_arr['rows'][$i]['mac_address'] = $mac_address;
                $result_arr['rows'][$i]['datetimedt'] = date("Y-m-d H:i:s", $time);
            }
            // $time = $result_arr['rows'][$i]['datetime'];
            // $result_arr['rows'][0]['organization_id'] = $organization_id;
            // $result_arr['rows'][0]['mac_address'] = $mac_address;
            // $result_arr['rows'][0]['datetimedt'] = date("Y-m-d H:i:s", $time);

            foreach ($result_arr['rows'] as $row) {
                $r = "";
                foreach ($result_arr['column'] as $i => $col) {
                    if ($i + 1 === count($result_arr['column'])) {
                        $r .= '"' .  $row[$col] . '")';
                        array_push($values, $r);
                    } else if ($i === 0) {
                        $r .= '("' . $row[$col] . '",';
                    } else {
                        $r .= '"' . $row[$col] . '",';
                    }
                }
            }

            $values_string = implode(", ", $values);

            # query sql
            $sql = 'INSERT INTO ' . $result_arr['table'] . ' (' . $column . ') VALUES ' . $values_string;
            // echo $sql;

            $result = $conn->query($sql);

            if ($result) {
               echo json_encode(['status' => 'ok', 'message' => 'Insert Device Data Complete']);
           } else {
                echo json_encode(['status' => 'error', 'message' => $conn->error]);
            }
        }
    }
}
$conn->close();

เมื่อแก้ไขไฟล์เสร็จแล้วให้ ctrl+x กด y แล้ว enter
ตัวอย่าง

การ Config ค่า System configuration

Domain /URL
http://_IP_/demo/

Secret key
Du81QXQGE6uswzRxXUnagKarauJL80w6

Data encryption
0123456789012345678901

Table name
insert_data

การ Setup และการสร้าง Dashboard จาก Node-RED

การ Setup Node-RED

รันคำสั่งดังนี้ใน server

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs :ติดตั้ง nodejs และ npm 

sudo nodejs -v  : ตรวจสอบเวอร์ชั่น nodejs 

sudo npm -v : ตรวจสอบเวอร์ชั่น npm 

sudo npm install -g --unsafe-perm node-red node-red-admin :ติดตั้ง node-red

sudo ufw allow 1880

sudo ufw enable

เมื่อรันคำสั่งครบทั้งหมดแล้ว
ให้รันคำสั่ง node-red เปิดการใช้งาน node-red
จากนั้นทดสอบโดยการ

IP:1880

ตัวอย่าง
192.168.1.91:1880

การสร้าง Dashboard

1. คลิกมุมบนด้านขวา เลือก Manage palette
2. คลิก Install และค้นหา node-red-dashboard กับ node-red-node-mysql จากนั้นคลิก Install

3. ตรวจสอบแถบด้านซ้ายจะต้องมี dashboard กับ mysql

4. นำกล่องต่างๆมาต่อกันดังนี้ inject -> trigger -> function1 -> mysql -> function2 -> text

ตั้งค่าตามนี้

inject

trigger

function1 ใส่ code ดังนี้

msg.topic = "SELECT * FROM `insert_data`ORDER By id DESC LIMIT 1";
return msg;

mysql

function2 ใส่ code ดังนี้

var data = [];
msg.payload.forEach(function(value) {
    data.push(value['CH1_raw']);
});

msg.payload = data;
return msg;

text

วิธีการ preview dashboard

  1. คลิก
  2. หารูป ชื่อ Dashboard
  3. คลิกที่

ดังนี้

Code function1

ใช้สำหรับ chart

msg.topic = "SELECT * FROM `insert_data`";
return msg;

ใช้สำหรับ gauge,text,table

msg.topic = "SELECT * FROM `insert_data`ORDER By id DESC LIMIT 1";
return msg;

Code function2

ใช้สำหรับ chart

var CH1_raw = [];
var CH1_conv = [];
var CH2_raw = [];
var CH2_conv = [];
var CH3_raw = [];
var CH3_conv = [];
var CH4_raw = [];
var CH4_conv = [];
var month = [];
msg.payload.forEach(function(value) {
    CH1_raw.push(value['CH1_raw']);
    CH1_conv.push(value['CH1_conv']);
    CH2_raw.push(value['CH2_raw']);
    CH2_conv.push(value['CH2_conv']);
    CH3_raw.push(value['CH3_raw']);
    CH3_conv.push(value['CH3_conv']);
    CH4_raw.push(value['CH4_raw']);
    CH4_conv.push(value['CH4_conv']);
    month.push(value['datetime']);
});

msg.payload = [{
    series: "CH1_raw",
    data: [CH1_raw,CH1_conv,CH2_raw,CH2_conv,CH3_raw,CH3_conv,CH4_raw,CH4_conv],
    labels: month
}];
return msg;

ใช้สำหรับ gauge,text

var CH1_raw = [];
var CH1_conv = [];
var CH2_raw = [];
var CH2_conv = [];
var CH3_raw = [];
var CH3_conv = [];
var CH4_raw = [];
var CH4_conv = [];
var month = [];
msg.payload.forEach(function(value) {
    CH1_raw.push(value['CH1_raw']);
    CH1_conv.push(value['CH1_conv']);
    CH2_raw.push(value['CH2_raw']);
    CH2_conv.push(value['CH2_conv']);
    CH3_raw.push(value['CH3_raw']);
    CH3_conv.push(value['CH3_conv']);
    CH4_raw.push(value['CH4_raw']);
    CH4_conv.push(value['CH4_conv']);
    month.push(value['datetime']);
});

msg.payload = CH1_conv;
return msg;

ใช้สำหรับ table

var CH1_raw = [];
var CH1_conv = [];
var CH2_raw = [];
var CH2_conv = [];
var CH3_raw = [];
var CH3_conv = [];
var CH4_raw = [];
var CH4_conv = [];
var month = [];
msg.payload.forEach(function(value) {
    CH1_raw.push(value['CH1_raw']);
    CH1_conv.push(value['CH1_conv']);
    CH2_raw.push(value['CH2_raw']);
    CH2_conv.push(value['CH2_conv']);
    CH3_raw.push(value['CH3_raw']);
    CH3_conv.push(value['CH3_conv']);
    CH4_raw.push(value['CH4_raw']);
    CH4_conv.push(value['CH4_conv']);
    month.push(value['datetime']);
});

msg.payload = [{
    CH1: "CH1_raw",
    data: CH1_raw,
    labels: month
},{
    CH1: "CH1_conv",
    data: CH1_conv,
    labels: month
}];
return msg;

ตัวอย่างการแสดงผล dashboard

gauge และ text

table

chart