Difference between revisions of "OWN OpenWebNet Language Reference"
Jump to navigation
Jump to search
Line 57: | Line 57: | ||
*#4*#1*#14*0225*3## Set heating zone 1 manually ON to 22.5°C | *#4*#1*#14*0225*3## Set heating zone 1 manually ON to 22.5°C | ||
</pre>''' | </pre>''' | ||
+ | |||
+ | |||
+ | |||
+ | == A Monitor Session with Python == | ||
+ | To understand the OWN commands a bit better, you should start a monitor on your Raspberry pi and watch the OWN messages coming in. Analyzing these messages gives you an idea how it works. Below is the source of a simple monitor script in Python. | ||
+ | |||
+ | <pre>#! /usr/bin/python | ||
+ | # -*- coding: utf-8 -*- | ||
+ | import socket | ||
+ | |||
+ | # IP address and port to connect to the gateway, please attapt to your environment | ||
+ | default_gateway_host = "192.168.60.201" | ||
+ | default_gateway_port = 20000 | ||
+ | |||
+ | gateway_addr_port = default_gateway_host, default_gateway_port | ||
+ | |||
+ | def monitor(): | ||
+ | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||
+ | try: | ||
+ | sock.connect(gateway_addr_port) | ||
+ | data = sock.recv(1024) | ||
+ | # expect ACK from gateway | ||
+ | if data != "*#*1##": | ||
+ | raise Exception("Did not receive expected ACK, but: "+data) | ||
+ | # Switch session to MONITOR mode | ||
+ | sock.send("*99*1##") | ||
+ | data = "" | ||
+ | while 1: | ||
+ | # Read data from MyHome(R) BUS | ||
+ | next = sock.recv(1024) | ||
+ | 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) | ||
+ | print data | ||
+ | msg = data[1:eom] | ||
+ | data = data[eom+2:] | ||
+ | finally: | ||
+ | sock.close() | ||
+ | |||
+ | monitor()</pre> | ||
== The Tables of WHO WHAT WHERE == | == The Tables of WHO WHAT WHERE == |
Revision as of 23:45, 15 November 2014
The OpenWebNet protocol was defined in 2000 by Bticino/Legrand to specify the communication with a Bticino domotic gateway, connected via LAN, RS-232 (serial) or USB.
Contents
Basic Syntax Rules
A Bticino gateway receives and sends OPEN messages:
- A message is a simple string, containing the characters asterisk (*), hash (#) and numbers from 0 to 9.
- each message begins with an asterisk (*) and ends with a double hash (##).
- within the message, fields are separated by an asterisk (*).
Example: *field1*field2*field3*...fieldN##
The following table shows the allowed syntax:
Message Type | Message | Note |
---|---|---|
ACK | *#*1## | Message accepted/understood |
NACK | *#*0## | Message not accepted/understood |
Standard | *WHO*WHAT*WHERE## | Standard message |
Status Request | *#WHO*WHERE## | Request a state (e.g. if a light is ON or OFF) |
Dimension Request | *#WHO*WHERE*DIMENSION## | Request a dimension |
Dimension Write | *#WHO*WHERE*#DIMENSION*VAL1*VAL2*...*VALn## | Write a dimension |
Standard Message
In the table above, we learned a Standard Message consists of *WHO*WHAT*WHERE##
.
- WHO identifies the service, such as scenario, light or automation
- WHAT is the action to be performed, such as light ON/OFF or dimmer, shutter up/down etc.
- WHERE identifies the object, which can be an area, group, an environment, or just a single light or shutter etc. A WHERE field can also come with optional parameters, separated by a hash (#), e.g. *WHERE#PAR1#PAR2#...#PARn
Some Examples
*1*0*25## Turn off light 2.5 on local interface (e.g. F *1*1*47#4#01## Turn on light 4.7 on interface 1 (#4#01) *1*1*0415## Turn on light 4.15 on local interface *1*0*0## Turn off all lights on local interface *0*13*19#4#06## Launch command 13 of Scenariolist 19 (e.g a F420 is addressed by 19) on interface 6 *2*1*91#4#03## open (1) shutter 9.1 in on interface 3 (#4#03) *#4*#1*#14*0225*3## Set heating zone 1 manually ON to 22.5°C
A Monitor Session with Python
To understand the OWN commands a bit better, you should start a monitor on your Raspberry pi and watch the OWN messages coming in. Analyzing these messages gives you an idea how it works. Below is the source of a simple monitor script in Python.
#! /usr/bin/python # -*- coding: utf-8 -*- import socket # IP address and port to connect to the gateway, please attapt to your environment default_gateway_host = "192.168.60.201" default_gateway_port = 20000 gateway_addr_port = default_gateway_host, default_gateway_port def monitor(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.connect(gateway_addr_port) data = sock.recv(1024) # expect ACK from gateway if data != "*#*1##": raise Exception("Did not receive expected ACK, but: "+data) # Switch session to MONITOR mode sock.send("*99*1##") data = "" while 1: # Read data from MyHome(R) BUS next = sock.recv(1024) 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) print data msg = data[1:eom] data = data[eom+2:] finally: sock.close() monitor()
The Tables of WHO WHAT WHERE
WHO | Service |
---|---|
0 | Scenarios |
1 | Lighting |
2 | Automation |
3 | Load Control |
4 | Heating |
5 | Burglar Alarm |
6 | Door Entry System |
7 | Multimedia |
9 | Auxiliary |
13 | Device Communication |
14 | Light+shutters actuators lock |
15 | CEN MH200N |
16 | Sound System |
17 | Scenario Programming |
18 | Energy Management |
24 | Lighting Management |
25 | CEN F454 |
1000 | Diagnostic |
1001 | Automation Diagnostic |
1004 | Heating Diagnostic |
1013 | Device Diagnostic |
WHAT | Adress |
---|---|
The WHAT table depends on the WHO service. Please click on the appropriate service in WHO table. |
WHERE | Location |
---|---|
0 | General |
1..9 | Zone 1 to 9 |
11..99 | Light point 11 to 99 |
#1..#9 | Group 1 to 9 |