การอบรมการใชช้งาน aMG 4-20mA to WiFi Data Logger
- Table of contents
- ปูพื้น
- อุปกรณ์และซอฟต์แวร์ที่ต้องใช้
- การทดสอบกับ test server (http://testiot.aimagin.com/register)
- การ Setup และเก็บค่าของข้อมูลที่ถูกส่งเข้า Google sheet
- การ Setup และเก็บค่าเข้า Php / MySQL
ปูพื้น¶
- เกี่ยวกับ เอมเมจิน (เกี่ยวกับ Aimagin.pdf)
- เกี่ยวกับ aMG 4-20mA to WiFi Data Logger (เกี่ยวกับ aMG 4-20mA to WiFi Data Logger v5 thai.pdf)
- 4-20mA คืออะไร
- ปัญหาคืออะไร
- 4-20mA to WiFi Data Logger ช่วยได้อย่างไร
- เป้าหมายของวันนี้
- สามารถตั้งค่าใช้งานอุปกรณ์ได้
- เข้าใจ Config mode และ Running mode
- ดูสถานะ LED เป็น
- ตั้งค่าใช้งานได้: WiFi, 4-20mA
- สามารถดูค่าทดสอบจาก Dashboard ได้
- Download ค่า (Logged data) จากอุปกรณ์ได้
- สามารถส่งค่าขึ้น test server (http://testiot.aimagin.com/register) ได้
- สามารถใช้งานจริงได้
- สามารถ Setup และเก็บค่าเข้า Google sheet ได้
- สามารถ Setup และเก็บค่าเข้า Php / MySQL ได้ (ใช้ Cloud server Digital Ocean https://www.digitalocean.com/)
- สามารถตั้งค่าใช้งานอุปกรณ์ได้
- ตอบคำถาม
อุปกรณ์และซอฟต์แวร์ที่ต้องใช้¶
อุปกรณ์¶
- เครื่อง Notebook 1 เครื่อง
- WiFi Dongle 1 อัน
- aMG 4-20mA to WiFi Data Logger 1 อัน
- เครื่องสร้างสัญญาณ 4-20mA จำลอง 1 อัน
ส่วนประกอบฮาร์ดแวร์¶
ลำดับ | ส่วนประกอบ | คำอธิบาย |
1 | แหล่งจ่ายไฟ VDC | พอร์ตเพื่อเชื่อมต่อกับแหล่งจ่ายไฟ VDC (9 - 24 V) |
2 | แหล่งจ่ายไฟ GND | พอร์ตเพื่อเชื่อมต่อกับกราวด์ของแหล่งจ่ายไฟ |
3 | ขั้วต่อเสาอากาศ | ขั้วต่ออินพุตเสาอากาศ |
4 | ช่องสัญญาณ | พอร์ตเพื่อเชื่อมต่อกับเซ็นเซอร์รองรับเซ็นเซอร์ได้สูงสุด 4 ตัว |
5 | ไฟ LED สีเขียว | แสดงสถานะของสภาพการทำงานพร้อมกะพริบในความถี่ที่แตกต่างกัน |
6 | ไฟ LED สีเหลียง | แสดงสถานะแหล่งจ่ายไฟ |
7 | เสาอากาศ | เสาอากาศ WiFi |
Table 4-2 : aMG 4-20 mA to WIFI Data Logger LED Status
No. | โหมดการทำงาน | เงื่อนไข | ลักษณการกระพริบของไฟ LED | ตัวอย่างการกระพริบของไฟ LED |
1 | Access Point (AP) /Configuration Mode | available for connection from a user, no connection or trying to connect | blink 1 Hz | |
2 | Access Point (AP) /Configuration Mode | user connected successfully | solid | |
3 | Station Mode (STA) /Running Mode | trying to connect to a WIFI access point | blink 5Hz | |
4 | Station Mode (STA) /Running Mode | successfully connected to a WIFI access point | 2 fast blink and 1 sec OFF |
ซอฟต์แวร์¶
การทดสอบกับ test server (http://testiot.aimagin.com/register)¶
การ Setup และเก็บค่าของข้อมูลที่ถูกส่งเข้า Google sheet¶
- เปิด google sheet
- ใส่ข้อมูลลงไปใน sheet ที่ column 1A-1I ตามรูปภาพด้านล่าง
- ผู้ใช้สามารถเปลี่ยนชื่อ Sheet และ ชื่อ Spread sheet ได้และตรวจสอบให้แน่ใจว่าไม่มีช่องว่างในชื่อ Sheet ,Spread sheet
- คลิก 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"); }
ดังนี้ - คลิก Publish เลือก Deploy as web app...
ตั้งค่าตามนี้- ตั้งชื่อ Project คลิก OK
- Who has access to the app เลือก Anyone even anonymous จากนั้นคลิก Deploy
- คลิก Review Permissions
- กรณีที่มีหน้าคำเตือนขึ้นให้ คลิก Advanced และคลิก Go to (ชื่อ Spread sheet )_Google_Script (unsafe).
- กรณีที่มีหน้าคำเตือนขึ้นให้ คลิก Advanced และคลิก Go to (ชื่อ Spread sheet )_Google_Script (unsafe).
- คลิก Allow
ดังนี้ - คัลลอก URL
- ทดสอบเก็บค่าเข้า Google sheet
- นำข้อมูลด้านล่างมาต่อท้าย 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
- เอา URL ที่ได้ไปใส่ในแทบค้นหาดังนี้
จากนั้นกด Enter - ตรวจสอบหน้า google sheet ถ้ามีข้อมูลเข้าเหมือนรูปด้านล่างแสดงว่า google sheet พร้อมสำหรับการเก็บข้อมูลจาก aMG 4-20mA to WiFi Data Logger
- นำข้อมูลด้านล่างมาต่อท้าย URL ที่คัลลอกมา
การ Config ค่า ใน System configuration¶
- Target Server จะนำ URL ที่คัลลอกมาดังนี้
ตัวอย่าง URL ที่คัลลอกhttps://script.google.com/macros/s/AKfycbx39JLX-wRkFl8Hgpk2GL7fw5yH8HBs0UPqVcLtwIKoJ-a-skY/exec
- Domain /URL
ตัวอย่าง Domain /URLhttps://script.google.com/macros/s/
- Secret key
ตัวอย่าง Secret keyAKfycbx39JLX-wRkFl8Hgpk2GL7fw5yH8HBs0UPqVcLtwIKoJ-a-skY/exec
- Domain /URL
- JSON format parameters
- Table name ให้ใส่ชื่อ Spread sheet ที่ได้ตั้งไว้
ตัวอย่าง จาก sheet demo_database ชื่อ Spread sheet คือ demoTable name : demo
- Table name ให้ใส่ชื่อ Spread sheet ที่ได้ตั้งไว้
การ Setup และเก็บค่าเข้า Php / MySQL¶
- รันคำสั่งดังนี้เพื่อลง apache2
sudo apt update sudo apt install apache2 กด y แล้ว enter sudo a2enmod rewrite sudo systemctl restart apache2
- ปรับ Friewall
sudo ufw app list sudo ufw allow 'Apache' sudo ufw enable กด y แล้ว enter sudo ufw status ทดลองเข้า http://ipของserver
- ตั้งค่าโฮส
sudo mkdir /var/www/test sudo chown -R $USER:$USER /var/www/test sudo chmod -R 755 /var/www/test
รันคำสั่ง sudo nano /etc/apache2/sites-available/test.conf แก้ไขไฟล์ดังนี้- คัลลอกข้อมูลด้านล่าง
<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>
- คลิกขวาเพื่อวางข้อมูล จากนั้น ctrl+x กด y แล้ว enter
ตัวอย่าง
รันคำสั่งsudo a2ensite test.conf sudo a2dissite 000-default.conf sudo apache2ctl configtest sudo systemctl restart apache2
- คัลลอกข้อมูลด้านล่าง
- ลง 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 - สร้าง 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;
ตัวอย่าง. - ติดตั้ง PHP Dependencies สำหรับติดตั้ง Mcrypt
- รันคำสั่ง
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
- รันคำสั่ง sudo vim /etc/php/7.2/apache2/php.ini
- กด esc แล้วพิมพ์ดังนี้ * /extension=sh*
- กด enter
- กด i
- ใส่ extension=mcrypt.so
- กด esc แล้วพิมพ์ดังนี้ :wq
ตัวอย่าง
- รันคำสั่ง
- รันคำสั่ง sudo nano /etc/apache2/sites-available/test.conf แก้ไขเอา # ออก จากนั้น ctrl+x กด y แล้ว enter
ตัวอย่างไฟล์ที่แก้ไขแล้ว - สร้าง ไฟล์ฟังก์ชันสำหรับรับ ค่าจากกล่อง
รันคำสั่ง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
ตัวอย่าง - สร้างไฟล์ 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