User Tools

Site Tools


allthingstalk

Transmisia datelor în Cloud

Datele colectate de la senzorii wireless pot fi agregate la nivel de gateway și trimise spre vizualizare și procesare pe o platformă din Cloud. Există o serie de asftel de servicii disponibile, cum ar fi DeviceHub, ThingSpeak, SmartLiving, NimBits, Xively, etc.

Pentru această lucrare de laborator vom folosi AllThingsTalk pentru a agrega datele de la mai multe noduri Sparrow, apoi vom folosi API-ul AllThingsTalk pentru a controla nodurile senzoriale.

AllThingsTalk

Pentru a avea acces la resurse, trebuie să vă creați mai întâi un cont pe platformă. După înregistrare și crearea contului, selectați Devices→Connect a device și alegeți Your own din listă. Dați-i numele Sparrow. Din butonul Settings→Authentication rețineți Device ID și Device Token care îl vor identifica unic pe platformă.

Pentru început, atașați un senzor nou dispozitivului vostru cu New Asset. Denumiți-l Temperature, tipul senzorului ar trebui să fie Number. În continuare, creați un nou Pinboard care să conțină senzorul vostru.

AllThingsTalk pune la dispoziție un API prin care diverse platforme IoT se pot conecta direct la server-ul din cloud. Din cauză că nodurile Sparrow nu au posibilitatea de a se conecta la WiFi sau Ethernet, vom folosi un PC pe post de client AllThingsTalk. Nodul Sparrow va trimite datele prin interfața serială către PC, iar acesta va rula un mic program scris în Python pentru a parsa datele primite și a le trimite AllThingsTalk.

Pentru aceasta, trebuie să vă instalați Python 3.x pe mașina voastră și biblioteca allthingstalk, care se poate face rapid din linia de comandă folosind utilitarul pip3:

 > sudo pip3 install allthingstalk

Trimiterea de date

Vom scrie un mic program Python pentru a trimite date în contul nostru de AllThingsTalk. Folosiți drept referință exemplul de mai jos, în care treubie să completați datele contului vostru:

import random
import time
 
from allthingstalk import Client, Device, NumberAsset
 
# Parameters used to authorize and identify your device
# Get them on maker.allthingstalk.com
DEVICE_TOKEN = '<YOUR_TOKEN>'
DEVICE_ID = '<YOUR_ID>'
 
class RandomDevice(Device):
    temperature = NumberAsset(unit='°C')
 
client = Client(DEVICE_TOKEN)
device = RandomDevice(client=client, id=DEVICE_ID)
 
while True:
    device.temperature = random.randint(1, 100)
    time.sleep(1)
Task 0: Rulați exemplul de mai sus și verificați trimiterea de date aleatorii în AllThingsTalk.

Pentru a trimite date reale, trebuie să programăm nodurile senzoriale să trimită valoarea temperaturii pe interfața serială, pentru a fi citită mai apoi de către programul Python.

Task 1: Folosind exemplele din laboratoarele anterioare, programați nodul Sparrow pentru a trimite valoarea temperaturii, urmată de un new line o dată la 5 secunde. Exemplu: 25.2 25.8 26.3 26.1

În Python, folosiți următorul exemplu pentru a deschide o conexiune serială cu placa Sparrow și a citi datele. Va trebui să instalați în prealabil biblioteca pyserial.

 > sudo pip3 install pyserial
from time import sleep
import serial
 
# Make sure you have the correct port and baud rate selected
# For Windows, use COMx instead of ttyUSB
ser=serial.Serial('/dev/ttyUSB0', 9600) 
 
while True:
        line = ser.readline()
        print(line)
        sleep(1.0)
Task 2: Modificați primul exemplu Python de mai sus pentru a trimite temperatura în AllThingsTalk.
Task 3: Folosind codul de la laboratoarele anterioare, programați nodurile Sparrow să trimită datele de la toți senzorii în format CSV pe interfața serială. De exemplu, un nod poate trimite la fiecare 5 secunde date în formatul: <adresă_nod>,<temperatură>,<umiditate>,<luminozitate>,<presiune> Adăugați noi senzori analogici în interfața web AllThingsTalk pentru noii senzori și modificați exemplul de la task-ul anterior pentru a parsa valorile CSV și pentru a trimite valorile de la toți senzorii în AllThingsTalk

Trimiterea de comenzi

Putem să trimitem și comenzi din interfața AllThingsTalk. De exemplu, cea mai simplă comandă pe care o putem trimite este un boolean care poate să comande starea unui LED.

Rulați următorul exemplu Python pentru a citi starea actuatorului vostru din AllThingsTalk. Nu vă faceți griji în legătură cu actuatorul, el va fi creat automat de către platformă la rularea codului Python.

import time
from allthingstalk import Device, BooleanAsset, Client, Asset
 
# Parameters used to authorize and identify your device
# Get them on maker.allthingstalk.com
DEVICE_TOKEN = '<YOUR_TOKEN>'
DEVICE_ID = '<YOUR_ID>'
 
 
class LedActuator(Device):
    led = BooleanAsset(kind=Asset.ACTUATOR)
 
 
# Authorize and connect your device with the Cloud
client = Client(DEVICE_TOKEN)
device = LedActuator(client=client, id=DEVICE_ID)
 
 
@LedActuator.command.led
def on_led(device, value, at):
    print('Led state updated to %s.' % value)
 
 
while True:
    print('Waiting for actuation...')
    time.sleep(5)
Task 4: Scrieți un mic program pentru nodul Sparrow în care led-ul verde (digital pin 11) poate fi aprins/stins prin comenzi din interfața serială (de ex. de fiecare dată când este recepționat caracterul ”0”, LED-ul este stins, iar de fiecare dată când e recepționat caracterul ”1”, led-ul este aprins). Modificați exemplul python de mai sus pentru a trimite comenzi nodului Sparrow prin care să aprindă/stingă LED-ul verde.

În mod similar, puteți să adăugați un actuator cu input analogic. Folosiți următorul exemplu de cod pentru a-l testa:

import time
from allthingstalk import Device, IntegerAsset, Client, Asset
 
# Parameters used to authorize and identify your device
# Get them on maker.allthingstalk.com
DEVICE_TOKEN = '<YOUR_TOKEN>'
DEVICE_ID = '<YOUR_ID>'
 
 
class LedActuator(Device):
    picker = IntegerAsset(kind=Asset.ACTUATOR)
 
 
# Authorize and connect your device with the Cloud
client = Client(DEVICE_TOKEN)
device = LedActuator(client=client, id=DEVICE_ID)
 
 
@LedActuator.command.picker
def on_picker(device, value, at):
    print('Led brightness updated to %s.' % value)
 
 
while True:
    print('Waiting for actuation...')
    time.sleep(5)
Task 5: Scrieți un mic program pentru nodul Sparrow în care led-ului roșu (analog pin 8) îi poate fi modificată luminozitatea din interfața serială (valori de la 0 - complet stins la 100 - complet aprins). Modificați exemplul python de mai sus pentru a trimite comenzi nodului Sparrow prin care să variați direct din interfața web AllThingsTalk intensitatea LED-ului roșu.
allthingstalk.txt · Last modified: 2018/11/16 10:07 by dan.tudose