Skip to main content

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

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

zigate-0.15.1.tar.gz (24.8 kB view details)

Uploaded Source

Built Distribution

zigate-0.15.1-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

Details for the file zigate-0.15.1.tar.gz.

File metadata

  • Download URL: zigate-0.15.1.tar.gz
  • Upload date:
  • Size: 24.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for zigate-0.15.1.tar.gz
Algorithm Hash digest
SHA256 9a124d994d0002ebb69ff5119e5b5a2310679af71ccdf766e69dbb9ebcc7d9ba
MD5 b7a6cf9a42dfc72e6d43e044cbc7ebce
BLAKE2b-256 6c422d3920945f07570578162611c4767b8a902ef1627b4743c703b7d43a9795

See more details on using hashes here.

Provenance

File details

Details for the file zigate-0.15.1-py3-none-any.whl.

File metadata

File hashes

Hashes for zigate-0.15.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6e7fa1f2609625366f64d5e97a82b0632966afca2eaf0e3827ff04f944ec09d6
MD5 1652563d86aa619057b46310de497848
BLAKE2b-256 c671c1a3cc7bb8410e2f73f27e27b7b9524c9dd44bf1dc5c16a650914531d4d8

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page