python library for the zigate gateway (zigbee) http://zigate.fr
Project description
python library for zigate http://zigate.fr/ This library manage communication between python and zigate key, both USB and WiFi key are supported (wifi is almost untested) ZiGate is an universal gateway compatible with a lot of ZigBee device (like Xiaomi, Philipps Hue, Ikea, etc)
Getting Started
Installation
To install simply do:
pip3 install zigate
Usage
# if you want logging
import logging
logging.basicConfig()
logging.root.setLevel(logging.DEBUG)
import zigate
z = zigate.ZiGate(port=None) # Leave None to auto-discover the port
print(z.get_version())
OrderedDict([('major', 1), ('installer', '30c'), ('rssi', 0), ('version', '3.0c')])
print(z.get_version_text())
3.0c
# refresh devices list
z.get_devices_list()
# start inclusion mode
>>> z.permit_join()
>>> z.is_permitting_join()
True
# list devices
>>> z.devices
[Device 677c , Device b8ce , Device 92a7 , Device 59ef ]
>>> z.devices[0].addr
'677c'
# get all discovered endpoints
>>> z.devices[0].endpoints
{1: {
'clusters': {0: Cluster 0 General: Basic,
1026: Cluster 1026 Measurement: Temperature,
1027: Cluster 1027 Measurement: Atmospheric Pressure,
1029: Cluster 1029 Measurement: Humidity},
}}
# get well known attributes
>>> for attribute in z.devices[0].properties:
print(attribute)
{'data': 'lumi.weather', 'name': 'type', 'attribute': 5, 'value': 'lumi.weather'}
{'data': '0121c70b0421a8010521090006240100000000642932096521851c662bd87c01000a210000', 'name': 'battery', 'value': 3.015, 'unit': 'V', 'attribute': 65281}
{'data': -1983, 'name': 'temperature', 'value': -19.83, 'unit': '°C', 'attribute': 0}
{'data': 9779, 'name': 'pressure2', 'value': 977.9, 'unit': 'mb', 'attribute': 16}
{'data': 977, 'name': 'pressure', 'value': 977, 'unit': 'mb', 'attribute': 0}
{'data': 4484, 'name': 'humidity', 'value': 44.84, 'unit': '%', 'attribute': 0}
# get specific property
>>> z.devices[0].get_property('temperature')
{'data': -1983,
'name': 'temperature',
'value': -19.83,
'unit': '°C',
'attribute': 0}
# call action on devices
z.action_onoff('b8ce', 1, zigate.ON)
or from devices
z.devices[1].action_onoff(zigate.ON)
Callback
We use pydispatcher for callback
from pydispatch import dispatcher
def my_callback(sender, signal, **kwargs):
print(sender) # zigate instance
print(signal) # one of EVENT
print(kwargs) # contains device and/or attribute changes, etc
dispatcher.connect(my_callback, zigate.ZIGATE_ATTRIBUTE_UPDATED)
z = zigate.ZiGate()
# to catch any events
dispatcher.connect(my_callback, dispatcher.Any)
event can be :
zigate.ZIGATE_DEVICE_ADDED
zigate.ZIGATE_DEVICE_UPDATED
zigate.ZIGATE_DEVICE_REMOVED
zigate.ZIGATE_ATTRIBUTE_ADDED
zigate.ZIGATE_ATTRIBUTE_UPDATED
kwargs depends of the event type for zigate.ZIGATE_DEVICE_ADDED: kwargs contains device
for zigate.ZIGATE_DEVICE_UPDATED kwargs contains device
for zigate.ZIGATE_DEVICE_REMOVED kwargs contains addr (the device short address)
for zigate.ZIGATE_ATTRIBUTE_ADDED: kwargs contains device and discovered attribute
for zigate.ZIGATE_ATTRIBUTE_UPDATED kwargs contains device and updated attribute
Wifi ZiGate
WiFi ZiGate is also supported :
import zigate
z = zigate.ZiGateWiFi(host='192.168.0.10', port=9999)
MQTT Broker
python3 -m zigate.mqtt_broker –device auto –mqtt_host localhost:1883
Add –mqtt_username and –mqtt_password as arguments and allow them to be used to establish connection to the MQTT broker.
the broker publish the following topics: zigate/device_changed/[addr] Payload example :
'zigate/device_changed/522a'
{"addr": "522a", "endpoints": [{"device": 0, "clusters": [{"cluster": 1026, "attributes": [{"value": 22.27, "data": 2227, "unit": "\u00b0C", "name": "temperature", "attribute": 0}]}, {"cluster": 1027, "attributes": [{"value": 977, "data": 977, "unit": "mb", "name": "pressure", "attribute": 0}, {"value": 977.7, "data": 9777, "unit": "mb", "name": "pressure2", "attribute": 16}, {"data": -1, "attribute": 20}]}, {"cluster": 1029, "attributes": [{"value": 35.03, "data": 3503, "unit": "%", "name": "humidity", "attribute": 0}]}], "profile": 0, "out_clusters": [], "in_clusters": [], "endpoint": 1}], "info": {"power_source": 0, "ieee": "158d0002271c25", "addr": "522a", "id": 2, "rssi": 255, "last_seen": "2018-02-21 09:41:27"}}
zigate/device_removed Payload example :
{"addr": "522a"}
zigate/attribute_changed/[addr]/[endpoint]/[cluster]/[attribute] payload is changed attribute Payload example :
'zigate/attribute_changed/522a/01/0403/0010'
{"cluster": 1027, "value": 978.5, "data": 9785, "attribute": 16, "unit": "mb", "endpoint": 1, "addr": "522a", "name": "pressure2"}
you can send command to zigate using the topic zigate/command payload should be :
{"function": "function_name", "args": ["optional","args","list"]}
# example to start permit join
payload = '{"function": "permit_join"}'
client.publish('zigate/command', payload)
The broker will publish the result using the topic “zigate/command/result” Payload example :
{"function": "permit_join", "result": 0}
All the zigate functions can be call
# turn on endpoint 1
payload = '{"function": "action_onoff", "args": ["522a", 1, 1]}'
client.publish('zigate/command', payload)
# turn off endpoint 1
payload = '{"function": "action_onoff", "args": ["522a", 1, 0]}'
client.publish('zigate/command', payload)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file zigate-0.16.5.tar.gz
.
File metadata
- Download URL: zigate-0.16.5.tar.gz
- Upload date:
- Size: 25.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2296ea86f1f0b3517c9b779975f240a5c11fab800b8d16dd6be74b6bb62e20e8 |
|
MD5 | 5ce598e115bfc9eb200ba99c0d9e619e |
|
BLAKE2b-256 | a42e0ee631e1037684dbc32b4648f44c92ebd61824727596e256f1cdb8c2c916 |
Provenance
File details
Details for the file zigate-0.16.5-py3-none-any.whl
.
File metadata
- Download URL: zigate-0.16.5-py3-none-any.whl
- Upload date:
- Size: 30.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6aaf7c83c86737010af775d485bbcbb294f7c36a34927825f179f9cd69837031 |
|
MD5 | 2739a024e14840f7bc1c42f32cdfdd5d |
|
BLAKE2b-256 | 4c429643b7039b71b1c513bfbecfc42818d17d5df392d0c94493937b1aca2396 |