Code Snippets
Contents
Linux console
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
Syntax:
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
Python is a very powerful scripting language and available for all major operation systems like Linux, Windows and Apple OSX. In MAc and Linux enviroments, Python is usaully pre-installed. If not already installed on your system, please follow these steps:
OS | How to install python |
---|---|
RaspberryPi, 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
The Python Script btsend.py
Copy the content of this script to 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.
For Raspberry Pi
Start editor an editor (in our example nano) and create monitor.py
sudo nano monitor.py
Copy and paste the script below into that file and save it. After you saved the file, you have to make the file executable:
sudo chmod 755 monitor.py
Now start the monitor and watch the messages fly by. Exit with CTRL-C.
sudo ./monitor.py
For Windows
Download and install Python for Windows and create the file monitor.py and edit with an text editor. Copy and paste the source code below in that file and save it. Then just double click monitor.py.
The Python Script monitor.py
Copy the content of this script to monitor.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
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[0] != "*":
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
finally:
sock.close()
monitor() # start the monitor