อ่านค่า (topic) จาก netpie ด้วย PHP rest api

จาก

อันดับแรกไป download httpful มาจากนี่ http://phphttpclient.com/downloads/httpful.phar

ถ้ายังไม่มี lib curl สำหรับ php ต้องติดตั้งก่อน (ดูตัวอย่าง https://stackoverflow.com/questions/6382539/call-to-undefined-function-curl-init)

sudo apt-get install php5-curl

ลองส่งข้อมูลขึ้นไปบน netpie (ถ้ายังไม่มี curl ก็ติดตั้งก่อน)

curl -X PUT "https://api.netpie.io/topic/APPID/TOPIC/debug?retain&auth=KEY:SECRET" -d ":-)"

โดยแทนค่า APPID ด้วยชื่อ APP ของเราที่สร้างใน netpie
แทนค่า TOPIC ด้วยชื่อที่ต้องการ เช่น Room
แทนค่า KEY ด้วยค่า key ที่อยู่ใน APP ที่สร้างขึ้นใน netpie
แทนค่า SECRET ด้วยค่า secret ที่อยู่ใน APP ที่สร้างขึ้นใน netpie

ถ้ายังไม่มีก็ไปสมัครใช้งานก่อนที่ netpie.io

debug ก็เป็น topic หรือตัวแปรตัวหนึ่ง ในที่นี้เรากำหนดค่าให้มัน เท่ากับ “:-)” ด้วยคำสัั่ง -d “:-)”

retain คือการให้ netpie รับข้อมูลไปแล้วคงค่าไว้

auth= คือ parameter ที่จะต้องส่งไปให้ netpie ตรวจสอบยืนยันตัวตนด้วยค่า key และ secret

<!--?php 

        include "httpful.phar";
        // กำหนด uri
        $uri = "https://api.netpie.io/topic/APPID/TOPIC/debug?auth=KEY:SECRET";
        
        // สั่งให้เรียก uri โดยใช้คำสั่ง GET เพื่อขออ่านค่าจาก netpie
        $response = \Httpful\Request::get($uri)->send();
        
        // แปลงค่าที่ได้จาก netpie จาก json มาเป็น array
        $result = json_decode($response->body, true);

        // ลองพิมพ์ค่าที่ได้ออกมาดู 
        // netpie จะเก็บค่าของตัวแปรไว้ใน json ที่ชื่อ payload
        echo "debug = " . $result[0]['payload'] . "\n";
        $debug = $result[0]['payload'];
        
        echo $response . "\n" ;
        sleep(1);
?-->

ถ้าต้องการอ่านค่าอื่น ก็ทำซ้ำใหม่ตั้งแต่การกำหนด uri โดยแค่เปลี่ยนจากตัวแปร debug ไปเป็นอื่น ๆ เช่น switch, pump เป็นต้น

$uri = "https://api.netpie.io/topic/APPID/TOPIC/switch?auth=KEY:SECRET";

อย่าลืมลองส่งค่าขึ้นไปก่อน

curl -X PUT "https://api.netpie.io/topic/APPID/TOPIC/switch?retain&auth=KEY:SECRET" -d "ON"

ระหว่างการ อ่านค่าตัวแปรแต่ละครั้งควรมีการตั้งค่าเวลาระหว่างการอ่านอย่างน้อย 1 วินาทีด้วยคำสั่ง sleep(1) (ตามข้อกำหนด) ถ้าไม่จำเป็นต้องอ่านค่าแบบทันทีทันใดก็ตั้งให้นานกว่านั้นได้ เพราะบางครั้งถ้าระบบบริการของ netpie มีปริมาณการส่งข้อมูลมากมาก อาจเกิดการล่าช้าในการปรับปรุงค่าตัวแปรได้ ทำให้การอ่านค่าบางครั้งจะไม่ได้ค่าที่เป็นปัจจุบันเนื่องจากระบบอยู่ระหว่างการประมวลผล

ตัวอย่างผลลัพธ์

pi@register:/var/www/html $ php read.netpie.data.php 
HH = 06
[{"topic":"/ThingsControl/seal/HH","payload":"06","lastUpdated":1496741674,"retain":true}]
MM = 30
[{"topic":"/ThingsControl/seal/MM","payload":"30","lastUpdated":1496741674,"retain":true}]
Enable = true
[{"topic":"/ThingsControl/seal/Enable","payload":"true","lastUpdated":1496740819,"retain":true}]
On Timer = 20
[{"topic":"/ThingsControl/seal/OnTimer","payload":"20","lastUpdated":1496741673,"retain":true}]
Sun = false
[{"topic":"/ThingsControl/seal/Sun","payload":"false","lastUpdated":1496740819,"retain":true}]
Mon = 1
[{"topic":"/ThingsControl/seal/Mon","payload":"1","lastUpdated":1496741676,"retain":true}]
Tue = false
[{"topic":"/ThingsControl/seal/Tue","payload":"false","lastUpdated":1496741676,"retain":true}]
Wed = 3
[{"topic":"/ThingsControl/seal/Wed","payload":"3","lastUpdated":1496741670,"retain":true}]
Thu = false
[{"topic":"/ThingsControl/seal/Thu","payload":"false","lastUpdated":1496740808,"retain":true}]
Fri = 5
[{"topic":"/ThingsControl/seal/Fri","payload":"5","lastUpdated":1496741667,"retain":true}]
Sat = false
[{"topic":"/ThingsControl/seal/Sat","payload":"false","lastUpdated":1496741668,"retain":true}]
pi@register:/var/www/html $

*** ทดสอบการใช้งานบน raspberry pi 3

แถมตัวอย่างเขียนด้วย Python (อย่าลืมแทนค่า KEY และ SECRET ในตัวอย่าง ด้วยค่าที่ได้จาก netpie) พึ่งหัดเขียน python วันแรก เอาแค่นี้ไปก่อน 😛 ไว้ใช้เป็นเมื่อไหร่จะมาเขียนต่อ   ตัวอย่างใน web ก็มีหลายอันอยู่ เช่น http://raspberrypi-thailand.blogspot.com/2016/07/raspiberry-pi-netpie.html

import microgear.client as client
import logging
import time

appid = "ThingsControl"
gearkey = "KEY"
gearsecret = "SECRET"

client.create(gearkey,gearsecret,appid,{'debugmode': True})

def connection():
    #print "Now I am connected with netpie"
    logging.debug("Now I am connected with netpie")

def subscription(topic,message):
    #print topic + " " + message
    logging.debug(topic + " " + message)

def disconnect():
    logging.debug("disconnected")

client.setalias("ThingsControl")
client.on_connect = connection
client.on_message = subscription
client.on_disconnect = disconnect
client.subscribe("/seal/Sun")
time.sleep(1)
client.subscribe("/seal/Sat")
time.sleep(1)

client.subscribe("/seal/HH")
time.sleep(1)

client.subscribe("/seal/MM")

client.connect()

จบ

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s