If you wanna get a feeling of how you can interact with a Bticino gateway, you should try our code snippets below.
The Linux command netcat makes it very easy to send messages from a Raspberry Pi to a Bticino Gateway.
Sending messages to a Bticino Gateway with netcat
echo "<message>" | netcat <gateway-IP> <gateway-port>
For example: turn off light 94 (9.4) on interface 5:
echo "*1*0*94#4#05##" | netcat 192.168.1.55 20000
If your command gets executed, you should get *#*1## (ACK) as a response. If the command fails for some reason, you will get a *#*0## (NACK).
Python is a very powerful scripting language and available for all major operation systems like Linux, Windows and Apple OSX. In MAC OSX and Linux environments, Python is usually pre-installed. If not already installed on your system, please follow these steps:
|OS||How to install python|
|Raspberry Pi, Debian, Ubuntu||sudo apt-get install python|
|Windows||Download and install Python from python.org|
|Apple MAC OSX||Download and install Python from python.org|
Sending messages to a Bticino Gateway with Python
Below is a very simple Python script to send messages to a Bticino gateway. The script sends each command line argument as a single message to the gateway. Syntax:
./btsend.py <OWN-message> <OWN-message> <OWN-message>
For example, turn off light 15 and turn on light 17:
./btsend.py *1*0*15## *1*1*17##
The Python Script btsend.py
#!/usr/bin/python # -*- coding: utf-8 -*- import socket import sys gateway_host = "192.168.1.35" # set here the IP of your gateway gateway_port = 20000 # set here the port of your gateway gateway_addr_port = gateway_host, gateway_port def send_message(msg): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(gateway_addr_port) sock.send(msg) for arg in sys.argv[1:]: # cut off first argument (btsend.py) send_message(arg) # send all arguments as message print "Sending " + arg
A Python Monitor Session with Bticino Gateway
To understand the OWN messages better, you should start a monitor session and watch the OWN messages flying in from your home automation system. Analyzing these messages gives you an idea how it works. Below is a simple monitor script in Python. Download monitor.py
The Python Script btmonitor.py
#!/usr/bin/python # -*- coding: utf-8 -*- import socket import sys gateway_host = "192.168.1.35" # set here the IP of your gateway gateway_port = 20000 # set here the port of your gateway gateway_addr_port = gateway_host, gateway_port def monitor(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.connect(gateway_addr_port) data = sock.recv(1024) if data != "*#*1##": # expect ACK from gateway raise Exception("Did not receive expected ACK, but: "+data) sock.send("*99*1##") # Switch session to MONITOR mode data = "" while 1: next = sock.recv(1024) # now read data from MyHome BUS if next == "": break # EOF data = data + next eom = data.find("##") if eom < 0: continue; # Not a complete message, need more if data != "*": raise Exception("Message does not start with '*': "+data) msg = data[0:eom+2] # message is from position 0 until end of ## data = data[eom+2:] # next message starts after ## print (msg) except: sock.close() print ("\nSocket connection closed.") sys.exit() monitor() # start the monitor