ตอนที่ 2 การอ่านข้อมูลจาก Electronic meter (SX1-A31E) ผ่าน RS485 ขึ้น NETPIE ด้วย Dell Edge Gateway 5100 โดยใช้ “Node-Red”

Kong Kangwan
Aug 31, 2018 · 4 min read

โดยในบทความนี้จะขออ้างอิงความรู้ , อุปกรณ์ที่ต้องใช้ และ การเตรียมตัวก่อนการทดลองจาก บทความที่ชื่อ “ตอนที่ 1 การอ่านข้อมูลจาก Electronic meter (SX1-A31E) ผ่าน RS485 ขึ้น NETPIE ด้วย Dell Edge Gateway 5100 โดยใช้ “Python-code” ” นะครับ

บทความนี้เขียนขึ้นมาเพื่อที่จะนำเสนอวิธีการอีกวิธีหนึ่งที่สามารถอ่านข้อมูลจากตัว Electronic meter(SX1-A31E) และสามารถดึงค่าขึ้น netpie ได้ โดยวิธีการนี้เป็นวิธีการที่รวดเร็วและง่ายกว่าการไปนั่งเขียน code เองแน่นอนครับ ซึ่งวิธีการที่เราจะนำเสนอต่อไปนี้ คือ การใช้โปรแกรมที่มีชื่อว่า “node-red”

ก่อนที่จะเข้าสู่เนื้อหาวิธีการทดลองนั้นก็จะขอแนะนำเกี่ยวกับอุปกรณ์ที่ใช้ในการทดลองและเนื้อหาคร่าวๆกันก่อนนะครับ

อุปกรณ์ที่ใช้

  1. Electronic meter (SX1-A31E) เป็นมิเตอร์ที่มี protocol แบบ modbus RTU โดยสื่อสารผ่าน RS485
  2. Dell edge gateway 5100 ซึ่งทำหน้าที่เหมือนเป็น CPU ของคอมพิวเตอร์ซึ่งในการทดลองนี้ได้ทำการติดตั้งระบบปฏิบัติการ ubuntu sever 18.04 เอาไว้

เมื่อรู้จักเกี่ยวกับอุปกรณ์ที่ใช้แล้วก็มาทำความรู้จักกับโปรแกรมที่มีชื่อว่า “Node-red” กันสักหน่อย

Node Red และการติดตั้ง

Node-red เป็นโปรแกรม open-source ที่ใช้เชื่อมต่อพวกอุปกรณ์ Hardware เข้ากับ API (Application Programming Interface) ซึ่งเป็นการพัฒนาโปรแกรมแบบ Flow-Based Programming และ เนื่องจากเป็น Flow-Based Programming นั้นทำให้เราแทบจะไม่ต้องเขียน Code ในการพัฒนาโปรแกรมเลย แค่เพียงเลือก Node มาวางก็จะสามารถควบคุมการทำงานต่างๆบนโปรแกรมได้

ต่อมาจะเป็นการติดตั้ง node-red และโปรแกรมที่เกี่ยวข้อง nodejs และ npm โดยวิธีการติดตั้งนั้นเราจะติดตั้งผ่าน command line ดังต่อไปนี้

sudo apt update
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt install nodejs
sudo apt install npm
sudo npm install -g --unsafe-perm node-red

*version ที่ใช้ในการทดลองนี้

node js = v8.11.3

npm = v5.6.0

node-red = v0.18.7

การทดลอง Node red

เมื่อทำการติดตั้งตัว “node-red” เสร็จแล้วต่อมาก็จะว่าด้วยเรื่องของการอ่านค่าต่างๆของตัว Electronic meter (SX1-A31E) โดยใช้โปรแกรม Node-red เมื่อเราทำการติดตั้งตัวโปรแกรมเป็นที่เรียบร้อยแล้ว ก็ให้ทำการเปิดตัว Node-red ขึ้นมา โดยใช้คำสั่ง

node-red

ผลที่ได้

Node-red

จากนั้นให้เราไปที่ web browser แล้วใส่ ip address แล้วตามด้วย port (จากภาพด้านบน port = 1880)

ip address สามารถดูได้จากคำสั่ง

ifconfig

ผลที่ได้

ifconfig แสดง ip address

เนื่องจากในการทดลองนี้เราได้ทำการเชื่อม internet โดยใช้ wireless ดังนั้น จึงต้องใช้ ip address ที่ช่องของ wlp3s0 แล้วนำ ip address กับ port ไปใส่ที่ web browser

node-red บน web browser

เมื่อเข้ามาในหน้าของ node-red ได้แล้วขั้นตอนต่อไป ก่อนเราจะสามารถอ่านค่าจากตัว meter ได้นั้นเราต้องทำการติดตั้งตัว node ที่สามารถติดต่อสื่อสารกับอุปกรณ์ที่มี protocol modbus ก่อนโดยในการทดลองนี้เราได้ทำการติดตั้ง node ที่มีชื่อว่า

“ node-red-contrib-modbus”

โดยการที่เราจะติดตั้ง node ตัวนี้นั้นมี 2 วิธี

  1. ติดตั้งผ่าน node-red

โดยไปที่เมนู Manage palette

จากนั้นคลิกเข้าไปแล้วไปที่ Install แล้วค้นหา “ node-red-contrib-modbus” แล้วกด Install

2. ติดตั้งผ่านตัว command line

โดยให้ไปที่ directory ของ node-red แล้วใช้คำสั่ง

npm install node-red-contrib-modbus

เมื่อติดตั้งเสร็จจะมี node modbus แสดงขึ้นมาทางด้านซ้ายมือ

โดย node ที่เราจะใช้ในการอ่านค่าจากตัว meter นั้นจะใช้ node ที่ชื่อ “Modbus Read” ให้เราทำการเลือกมาวางในพื้นที่ว่างแล้วคลิกเข้าไปเพื่อตั้งค่า

จากการทดลองนี้เราอยากทราบค่าของ Voltage ที่ตัว Meter อ่านได้ ก็ไปเปิด datasheet ดูว่า address ของ voltage มีค่าเท่าไหร่

Address ของข้อมูลภายใน meter
ค่าต่างๆที่ใส่ในการทดลอง

เมื่อตั้งค่าตัว node “Modbus Read” เสร็จแล้วก็ให้ทำการ Deploy ดู เพื่อดูค่า โดยการดูค่าที่อ่านได้อาจจะใช้ตัว node ชื่อ “Debug” หรือ “Modbus Response” ก็ได้ในการทดลองนี้จะขอใช้ตัว “Debug”

ถ้าหากไม่สามารถอ่านค่าได้

ให้ลองไปเช็คที่ port ดูว่าสามารถ read/write ค่าได้หรือไม่ ซึ่งในการทดลองนี้ Port ที่ใช้เชื่อมต่อคือ “ttyS5” โดยจะเช็คโดยใช้คำสั่ง

cd /dev/
ls -l ttyS5

ผลที่ได้

จะเห็นว่า port ของเรายังไม่ได้ถูกเปิด ให้เราใช้คำสั่ง

sudo chmod 777 ttyS5

แล้วเช็คอีกรอบ

ls -l ttyS5

จะเห็นว่า port ของเราถูกเปิดแล้ว

จากนั้นให้ลองไปดูที่ node-red แล้วกด Deploy อีกรอบ

ตอนนี้เราก็จะสามารถอ่านค่าได้แล้ว ซึ่งค่าที่ออกมานั้นไม่ได้มาแค่ตัวเลข คือ มาทั้ง เครื่องหมาย “[ ]” แล้วก้พื้นที่ว่าง แล้วก็ตัวเลข และที่สำคัญคือค่าของ Voltage ที่ออกมาหน่วยเป็น 0.01 V ซึ่งเราจะต้องทำการแปลงให้เป็นหน่วย V และต้องการเอาแค่ตัวเลขที่เป็นทศนิยม(float) ไม่เอาเครื่องหมายกับพื้นที่ว่าง

ดังนั้น เราจะใช้ node ที่มีชื่อ “function” โดยให้เราลากมาวางแล้วคลิกเข้าไปเพื่อเขียน code ในการคัดข้อความที่เราต้องการ

โดย code ที่เราใช้จะเป็น javascript

var m = /(\d+(\.\d+)?)$/.exec(msg.payload/100) 
if(m){
msg.payload= m[1];
}else{
return null;
}
return msg;

โดยจะขออธิบายเกี่ยวกับ code : /(\d+(\.\d+)?)$/

/…… / เป็นเหมือนกรอบว่าจะคัดคำที่มีเงื่อนไขในช่วงนี้

\d คือ digit (ตัวเลข 0–9) ถ้าเป็น \d+ จะหมายถึง digit อย่างน้อย 1 ตัว

ต่อมาคือ (\.\d+) คือ จุด(.)แล้วตามด้วย ตัวเลขอย่างน้อย 1 ตัว เช่น .123

ส่วน ? เป็นเหมือนตัวที่บอกว่า ถ้าทำเงื่อนไขนี้เสร็จแล้วให้หยุด

$ เป็นตัวปิดท้ายเฉยๆ

ดังนั้น code : /(\d+(\.\d+)?)$/ จะทำหน้าที่คัดตัวเลขที่เป็นเลขทศนิยม(float)

เมื่อเราทำการเขียน code เสร็จแล้วให้ทำการเชื่อม node ให้เรียบร้อยแล้วลองทำการ Deploy แล้วลองดูค่าที่ได้

จะเห็นว่าค่า Voltage ของเราที่ได้นั้นเป็นถูกเปลี่ยนเป็นหน่วยตามที่เราต้องการแล้วเครื่องหมาย “[ ]” ก็หายไปแล้ว

เมื่อเราได้ค่าที่เราต้องการแล้ว เราก็จะทำการดึงค่านี้ขึ้น netpie โดยผ่าน node ที่ชื่อ “microgear” ซึ่งสามารถติดตั้งได้ผ่าน Manage palette

เมื่อติดตั้งเสร็จจะมี node ชื่อ “netpie” ขึ้นมา

จากนั้นให้ทำการลาก node ที่มีชื่อว่า microgear แล้วทำการคลิกเข้าไปเพื่อตั้งค่า

จากนั้นก็ใส่ค่าต่างๆลงไป ซึ่งพวก App ID , Key , Secret สามารถดูได้ที่ netpie ที่เราได้สร้างเอาไว้ เมื่อเราใส่ค่าต่างๆเสร็จแล้ว ก็ลองต่อ node แล้วกด Deploy ดู

ซึ่งเมื่อ Deploy แล้วจะเห็นได้ว่า netpie ของเรายังไม่สามารถรับค่าได้ เนื่องจาก topic ที่เราใส่เอาไว้ที่ node “microgear” นั้นไม่ตรงกับ topic ของ message ที่ส่งมา ดังนั้น ก่อนที่จะเข้า node “microgear” เราจึงต้องทำการเปลี่ยน topic ซะก่อน

โดยการเปลี่ยน topic นั้นเราจะใช้ node ที่ชื่อ “change” โดยสามารถตั้งค่าได้ดังรูป

โดยในส่วนของ msg.payload จะเปลี่ยนเป็น msg.topic แล้วในส่วนของ topic จะเปลี่ยนเป็นชื่อของ topic ที่เราต้องการ (เช่น /volatge , /xxx/yyy เป็นต้น) โดย topic นั้นจะต้องเป็น topic เดียวกันกับที่ microgear

เมื่อเราตั้งค่าเสร็จแล้วให้เราทำการเชื่อม node ทั้งหมดเข้าด้วยกันให้เรียบร้อยแล้วกด Deploy

การตั้งค่าของ netpie ทำเหมือนกับในบทความที่ชื่อ “ตอนที่ 1 การอ่านข้อมูลจาก Electronic meter (SX1-A31E) ผ่าน RS485 ขึ้น NETPIE ด้วย Dell Edge Gateway 5100 โดยใช้ “Python-code” ” นะครับ

    Kong Kangwan

    Written by

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade