pondělí 26. prosince 2016

Python Open ZWave

Python wrapper pro OpenZWave knihovny. Pro ověření správné instalace a funkce ZWave sítě používám následující jednoduchý příklad.

Příklad jednoduchého Python skriptu pro ověření funkčnosti Python Open ZWave:

import sys
import time
import openzwave
from openzwave.node import ZWaveNode
from openzwave.value import ZWaveValue
from openzwave.scene import ZWaveScene
from openzwave.controller import ZWaveController
from openzwave.network import ZWaveNetwork
from openzwave.option import ZWaveOption
#  import time
#  from louie import dispatcher, All
device="/dev/ttyACM0"
options = ZWaveOption(device, config_path="openzwave/config", user_path=".", cmd_line="")
options.set_log_file("OZW_Log.log")
options.set_append_log_file(False)
options.set_console_output(False)
options.set_save_log_level('Debug')
options.set_logging(True)
network = None
options.lock()
network = ZWaveNetwork(options, autostart=False)
network.start()
for i in range(0,90):
    if network.state>=network.STATE_AWAKED:
        print( "***** Network is ready")
        break
    else:
        sys.stdout.write(".")
        sys.stdout.flush()
        time.sleep(1.0)

Definice stavů sítě

  • STATE_STOPPED = 0
  • STATE_FAILED = 1
  • STATE_RESETTED = 3
  • STATE_STARTED = 5
  • STATE_AWAKED = 7
  • STATE_READY = 10

Odkaz zdrojový text netwok.py

https://github.com/OpenZWave/python-openzwave/blob/master/src-api/openzwave/network.py

Odkaz na zdrojový text node.py

https://github.com/OpenZWave/python-openzwave/blob/master/src-api/openzwave/node.py

Odkaz na zdrojový text value.py


https://github.com/OpenZWave/python-openzwave/blob/master/src-api/openzwave/value.py

Seznam node v ZWave síti

for nodeKey in network.nodes:
        print("Node "+str(nodeKey)+": ")
        print(str(network.nodes[nodeKey]))

Notifikace s pyDispatch

Přijímání notifikací ze ZWave sítě je důležitá funkcionalita pro spolupráci se zařízeními. Následující kód ukazuje příklad přijmutí notifikace při změně stavu sítě.

from pydispatch import dispatcher
def handle_network_started_event( sender ):
print("Network started")
dispatcher.connect( handle_network_started_event, signal=ZWaveNetwork.SIGNAL_NETWORK_STARTED, sender=dispatcher.Any )

Alternativou je knihovna louie, která poskytuje to samé, co pydispatch. 


čtvrtek 22. prosince 2016

Vývojové prostředí SmartThings

Smartthings - vývojové prostředí pro IOT napsaný v Groovy. Dokumentace SmartThings je velmi kvalitní, hodně vysvětluje základní koncepty a obsahuje hodně názorných příkladů. Věnuje se širokému poli možností komunikace mezi zařízeními. Narozdíl od jiných stránek vysvětluje i základní použité koncepty a standardy jako je například ZWave.

http://docs.smartthings.com/

středa 14. prosince 2016

AeoTec Z-Stick Gen5 Switch off toggling LED

Aeon Z-Ware Stick Gen5 po zapojení začne blikat modře, žlutě a červeně. Toto "disco" světlo lze vypnout a zapnout následujícími příkazy.

Turn off “Disco lights”:

$ echo -e -n "\x01\x08\x00\xF2\x51\x01\x00\x05\x01\x51" > /dev/serial/by-id/usb-0658_0200-if00

Turn on “Disco lights”:

$ echo -e -n "\x01\x08\x00\xF2\x51\x01\x01\x05\x01\x50" > /dev/serial/by-id/usb-0658_0200-if00

pondělí 12. prosince 2016

Instalace node.js a node-RED na Raspberry Pi 3

Nejprve provést aktualizaci Raspbian

sudo apt-get update
sudo apt-get upgrade

Nahrát a spustit instalační skript:

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)




Spustit node-RED příkazem

node-red-start


Zapnutí security

Po instalaci není node-RED zapbezpečený.Je potřeba v konfiguračním souboru /home/pi/.nodered/settings.js odkomentovat adminAuth:

adminAuth: {
    type: "credentials",
    users: [{
        username: "admin",
        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
        permissions: "*"
    }]
}

Pro vygenerování hesla je potřeba nainstalovat node-red-admin:

sudo npm install -g node-red-admin

a heslo vygenerovat příkazem

 node-red-admin hash-pw





pátek 9. prosince 2016

Bluemix IOT

Kombinace cloudu (IBM Bluemix) a IOT

Senzory postavené na Arduino platformě komunikují naměřená data do Bluemix Node.js aplikace. Hodnoty jsou ukládány do Bluemix MySql databáze.

Tabulka pro záznam údajů:

create table T_MEASURE(C_ID int AUTO_INCREMENT, C_CHANNEL varchar(255), C_DEVICE varchar(255), C_TIME_CREATED timestamp, C_FIELD varchar(255), C_VALUE int, primary key(C_ID))

alter table T_MEASURE add index(C_CHANNEL)

alter table T_MEASURE add index(C_CHANNEL, C_DEVICE)

IOT zařízení posílá naměřené hodnoty prostřednictvím HTTP GET do Bluemix, kde se uloží do databáze:

http://BLUEMIX_LOGIN.eu-gb.mybluemix.net/sendValue?channel=channel1&sensor=water&value=1234

Aplikační kód App.js v Bluemix


// This application uses express as its web server
// for more info, see: http://expressjs.com
var express = require("express");

// cfenv provides access to your Cloud Foundry environment
// for more info, see: https://www.npmjs.com/package/cfenv
var cfenv = require("cfenv");

// create a new express server
var app = express();

// This application requires mysql
var mysql = require('mysql');

// Use the valid user credential and database name
var connection=mysql.createConnection(
{
   host     : 'us-cdbr-iron-east-04.cleardb.net',
   user     : 'USER',
   password : 'PASSWORD',
   database : 'DATABASE'
}
);

// serve the files out of ./public as our main files
app.use(express.static(__dirname + '/public'));


app.get("/sendValue", function(req,res){
   
     var channel = req.query.channel;
     var sensor = req.query.sensor;
     var value = req.query.value;
     var timestamp = Date.now;
   
     var post  = {C_CHANNEL: channel, C_SENSOR: sensor, C_VALUE: value};
 var query = connection.query('INSERT INTO T_MEASURE SET ?', post, function(err, result) {
   console.log(err);
   console.log(result);
 });
    res.send('Inserted');

});

// get the app environment from Cloud Foundry
var appEnv = cfenv.getAppEnv();

// start server on the specified port and binding host
app.listen(appEnv.port, '0.0.0.0', function() {
  // print a message when the server starts listening
  console.log("server starting on " + appEnv.url);
});