Rejeee Temp & Humid Sensor ใช้กับ ChirpStack และ Influxdb
- Specification เบื้องต้น
Rejeee LoRaWAN SL101AS-TH เป็นเซ็นเซอร์อุณหภูมิและความชื้น มากับจอ E-paper 2.9 นิ้ว เป็นอุปกรณ์ที่ผ่าน กสทช. แล้ว กำลังส่งต่ำกว่า 500mW ผู้ใช้สามารถซื้อไปใช้งานได้ ไม่ต้องมีใบอนุญาติใช้/ตั้งสถานี จาก กสทช. อุปกรณ์นี้สามารถใช้ได้กับ The Things Network, Chirpstack หรือ Helium
คุณสมบัติทางเทคนิค
- LoRaWAN 1.0.3 Class A/C
- ใช้ลิเธียมแบต 5400mAh ใช้ได้นานถึง 5 ปี (ส่งข้อมูลทุก 30 นาที) ผู้ผลิตบอกว่าใช้ได้ถึง 10 ปีหากตั้งส่งเว้นช่วงห่างมากขึ้นอีก แบตเป็นแบบไม่สามารถ Charge ได้ ไฟหมดแล้วต้องหาก้อนใหม่ใช้แทน
- มี Port USB Type C สำหรับปรับตั้งค่าหรือใช้ป้อนไฟเลี้ยงจากภายนอก
- สามารถเปลี่ยน Logo และ Weblink
- ใช้ Chip Semtech SX1262 และ Sensirion STH 30
- ช่วงวัดอุณหภูมิ -45℃~+ 85℃ (±0.3℃)
- ช่วงวัดความชื้น 0–100%RH (±3%RH)
- ความถี่ 923–925Mhz
- TX Power 25dBm (316mW)
- ขนาด 102mm*60mm*25mm
2.LoRaWAN Network Server บน DOCKER
ในบทความนี้จะใช้ Chirpstack ที่ทำงานบน Raspberry PI (ที่สั่งซื้อจากเวป คลิก) ซึ่งติดตั้งด้วย DOCKER ให้ตรวจเช็ค Portainer ดูว่าการติดตั้ง Chirpstack และ Influx ทำงานปรกติหรือไม่
เปิดเวป 192.168.1.100:9000 ใช้ Username/Password คือ admin/m2mlorawan123
หากขึ้นสีเขียวหมดแสดงว่า Server ทำงานปรกติ
3.การใช้ Chirpstack
3.1 ตั้งค่า Chirpstack ทั่วไป
เข้าเวป http://192.168.1.100:8080/ เพื่อเรียกใช้ Chirpstack
สร้าง Network-servers ตามรูป ให้เป็นความถี่ AS923
สร้าง Gateway Profile ตามภาพ
สร้าง Service Profile ตามภาพ
3.2 เพิ่ม LoRaWAN Gateway
เปิด Web Admin ของ Dragino LG308-AS923-TH-EC25 ดูว่า Gateway ID เท่าไร และอย่าลืมตั้งให้ Service Provider เป็น Custom/Private LoRaWAN ชี้ไปที่ Server Address ที่ตั้งไว้ ในกรณีนี้คือ IP 192.168.1.100 กำหนด Uplink Port เป็น 1700 Downlink Port เป็น 1700
เพิ่ม Gateway ตามรูป ตัวอย่างจะใช้ Dragino LoRaWAN Gateway LG308-AS923-TH-EC25 โดยนำ Gateway ID ของ Dragino มาป้อน
ถ้า Gateway ทำงานปรกติ Last seen จะขึ้นว่ามีการเชื่อมต่อเข้ามาไม่กี่วินาทีก่อนตามภาพ
3.3 เพิ่ม LoRaWAN Rejeee Sensor Node
เพิ่ม Device Profile โดยกำหนดชื่อ เช่น rejeee
แก้ Device Profile เลือก TAB JOIN OTAA/ABP ติกเลือก Device support OTAA
เลือก TAB CODEC เลือก Payload code เป็น Custom JavaScript codec functions
ให้ Copy code จากด้านล่างไปใส่ หากเป็น ChirpStack V.3
function Decode(fPort, bytes, variables) {
var obj = {};
var warnings = [];
var len = bytes?bytes.length:0;
var offset = 0;
var dtype;
offset++;
obj.battery = (bytes[offset++]&0x1F);
obj.res = (bytes[offset++]);
do {
dtype = bytes[offset++];
if(0x01 == dtype){
offset += 8;
} else if(0x04 == dtype){
obj.temperature = (((bytes[offset] & 0x80 ? bytes[offset] - 0x100 : bytes[offset]) << 8) + bytes[offset+1]) / 10;
offset += 2;
if (obj.temperature < -10) {
warnings.push("it's cold");
}
} else if(0x05 == dtype){
obj.humidity = bytes[offset++];
} else if(0x06 == dtype) {
offset++;
} else if(0x30 == dtype) {
offset += 5;
}
len = len - offset;
} while(len > 0)
return obj;
}
ให้ Copy code จากด้านล่างไปใส่ หากเป็น ChirpStack V.4
function decodeUplink(input) {
var obj = {};
var warnings = [];
obj.battery = (input.bytes[1]&0x1F);
obj.vol = (input.bytes[2]);
obj.temperature = (((input.bytes[4] & 0x80 ? input.bytes[4] - 0x100 : input.bytes[4]) << 8)
+
input.bytes[5]) / 10;
obj.humidity = input.bytes[7];
if (obj.temperature < -10) {
warnings.push("it's cold");
}
return {
data: obj,
warnings: warnings
};
}
สร้าง Application ตามภาพ
คลิกที่ App1 แล้วสร้าง Device ตามภาพ
เพิ่ม INTEGRATIONS ใน Application App1
คลิก ADD ตรงใต้รูป Influxdb
InfluxDB version * เลือก InfuxDB 2.x
API endpoint (write) * http://192.168.1.100:8086/api/v2/write
Organization * Influxdata
Bucket * tablerejeee
Token * ให้ Copy จาก Influx ซึ่งจะพูดถึงในหัวข้อต่อไป เรื่อง “เตรียม Influxdb สำหรับเก็บข้อมูล Sensor” โดยนำค่า Token จาก Influxdb มาป้อนตรงนี้
4.เตรียม Influxdb สำหรับเก็บข้อมูล Sensor
เปิด Influxdb http://192.168.1.100:8086
ครั้งแรกให้กำหนด Password ใหม่ เช่น
user :influx
password :influx123
Organization :Influxdata
Initial Bucket Name : ใส่ว่า system (เก็บระบบ system)
คลิก Data/Bucket เลือก +Create Bucket
ใส่ชื่อ tablerejeee แล้วคลิก Create
ไปที่ Data/API Token เลือก + Generate API Token เลือก ALL Access API Token (เพื่อความง่ายจึงเลือก Option นี้)
ใส่ Description เช่น tablerejeee
จะเห็น API Token ชื่อ tablerejeee ถูกสร้างขึ้น ให้คลิกที่ชื่อ tablerejeee
จะเห็น Token แสดงขึ้นที่หน้าจอ ให้ Copy to Clipboard แล้วนำไป update ใน Chirpstack ตรง Integration ของ Influxdb
ดูชื่อ Organization จาก Influxdb
คลิกรูปคน/Switch Oraganization
ดูชื่อ Bucket จาก Influxdb
Click Data/Buckets
5.เปิดเครื่อง Sensor Rejeee
กดปุ่มด้านบนเครื่องนานประมาณ 10 วินาที เครื่องจากเริ่มพยามเชื่อมต่อกับ Chirpstack หาก Gateway รับข้อมูลได้จะเห็น เราสามารถกดปุ่ม 1 ครั้งเพื่อสั่งให้เครื่องส่งข้อมูลทันทีไม่ต้องรอรอบที่ตั้งไว ้
Join Request และ Join Accept
ที่ Device ก็จะเห็นข้อมูลไหลเข้า LoRa Frames
เปิดแทป Device Data ก็จะเห็นข้อมูล
หากคลิกในแต่ละบรรทัดของ Device Data จะเห็นข้อมูลในรูปแบบ JSON แสดงค่าต่างๆ รวมถึง ค่าจากvอุณหภูมิและความชื้นจาก Sensor
6.เริ่มดูข้อมูลใน Influxdb
เปิด Data/Buckets
ให้ click ที่ tablerejeee จะเห็นหน้าจอถัดไป ให้คลิก From ชื่อ tablerejeee หากการส่งข้อมูลจาก Chirpstack สามารถเขียนลง Influxdb ได้ถูกต้องจะเห็น รายการ Mesurement ขึ้นมา 5 บรรทัดตามภาพ หากไม่มีขึ้นมาแสดงว่าข้อมูลยังมาไม่ถึง Influxdb ให้ตรวจเช็คความถูกต้องอีกครั้ง
ให้ลองเลือกบรรทัด device_frmpaload_data_temp แล้วคลิก Submit
จะเห็นข้อมูลอุณหภูมิแสดงเป็น Graph เส้นตรงตามภาพตัวอย่าง
อาจจะสร้าง Dashboard ตามภาพด้วย Influxdbได้
ผู้ใช้งานสามารถศึกษาการทำ Dashboard ด้วยการใช้โปรแกรม Grafana ได้อีกเช่นกัน เนื่องจาก Grafana จะมีลูกเล่นให้มากกว่า Dashboard ของ Influxdb
7.การดูค่า Config ที่ตั้งไว้ในตัวอุปกรณ์ Sensor
ค่าความถี่ในการส่งข้อมูล ค่า Key ต่างๆ คือ DevEUI, AppEUI, Appkey จะเก็บไว้ในอุปกรณ์ให้ใช้วาน USB Type C เสียบเข้ากับ Sensor และให้ Download Sensor tools ได้จากเวป http://doc.rejeee.com/web/#/29?page_id=200 เช่น ค่า Uplink Period ตั้งมา 600 วินาที หรือ คือ 10 นาที ซึ่ง Sensor นี้จะส่งข้อมูลทุก 10 นาที
เรียกใช้โปรแกรมแล้วเลือก com port ที่ต่อกับ Sensor เลือกเสร็จให้คลิก Open UART ก่อนแล้ว Read Config
จะเห็น DevEUI, AppEUI,Appkey เพื่อนำไปเพิ่ม Device ใน web chirpstack
หากเป็น Sensortool เวอร์ชั่น 1.5.9 หน้าตาจะแตกต่างออกไปเล็กน้อย
Note!
- NS (ใช้ IP:Port ,ระบุ AS923)
- Gateway Profile (ใช้ NS, ตั้งค่า live interval, Channels)
- Organization
- Service Profile (ใช้ NS, ตั้งค่า Gateway Metadata, Geolocation, Max Datarate)
- Device Profile (ใช้ NS, ตั้งค่า MAC Version, เลือก OTAA-ABP, Class, Codec, Max EIRP, uplink interval)
- Gateways (ใช้ NS ,Gateway ID, Service Profile, Gateway Profile ตั้งค่า ต่ำแหน่ง)
- Application (ใช้ Service Profile, ตั้งค่า integration)
—สร้าง device (ใช้ Device Profile, ตั้งค่า Config, Key DevEUI, AppEUI,Appkey )
คำสั่งจัดการ Influxdb
sudo docker exec -it influxdb influx version