#!/usr/bin/env python
"""Example of using WyzeSense USB bridge.
**Usage:** ::
sample.py [options]
**Options:**
-d, --debug output debug log messages to stderr
-v, --verbose print and log more information
--device PATH USB device path [default: /dev/hidraw0]
--broker Address IP address or hostname of MQTT Broker
**Examples:** ::
sample.py --device /dev/hidraw0 # Using WyzeSense USB bridge /dev/hidraw0
"""
#from __future__ import print_function
#from builtins import input
#import os
import re
import sys
import logging
import errno
import binascii
import time
import json
import wyzesense
import paho.mqtt.client as mqtt
mqtt_client = None
def on_event(ws, e):
global mqtt_client
if e.Type == 'state':
print("StateEvent: sensor_type=%s, state=%s, battery=%d, signal=%d" % e.Data)
topic = "wyzesense/{}/update".format(e.MAC)
payload = {
"sensor_type" : e.Data[0],
"state" : e.Data[1],
"battery" : e.Data[2],
"signal" : e.Data[3]
}
mqtt_client.publish(topic, json.dumps(payload), 0, False)
def main(args):
global mqtt_client
if args['--debug']:
loglevel = logging.DEBUG - (1 if args['--verbose'] else 0)
logging.getLogger("wyzesense").setLevel(loglevel)
logging.getLogger().setLevel(loglevel)
device = args['--device']
print("Opening wyzesense gateway [{}]".format(device))
try:
ws = wyzesense.Open(device, on_event)
if not ws:
print("Open wyzesense gateway failed")
return 1
print("Gateway info:")
print("\tMAC:%s" % ws.MAC)
print("\tVER:%s" % ws.Version)
print("\tENR:%s" % binascii.hexlify(ws.ENR))
except IOError:
print("No device found on path %r" % device)
return 2
broker_addr = args['--broker']
mqtt_client = mqtt.Client(client_id="wyze-mqtt-{}".format(ws.MAC), clean_session=True, userdata=None, protocol=4, transport="tcp")
try:
mqtt_client.connect(broker_addr, 1883, 60)
except:
print("Unable to connect to mqtt broker @ {}:1883".format(broker_addr))
return 2
try:
while True:
time.sleep(.1)
finally:
ws.Stop()
return 0
if __name__ == '__main__':
logging.basicConfig(format='%(levelname)s %(asctime)s %(message)s')
try:
from docopt import docopt
except ImportError:
sys.exit("the 'docopt' module is needed to execute this program")
# remove restructured text formatting before input to docopt
usage = re.sub(r'(?<=\n)\*\*(\w+:)\*\*.*\n', r'\1', __doc__)
sys.exit(main(docopt(usage)))
pi@raspberrypi:~/WyzeSensePy $ ls -la
total 20
drwxr-xr-x 3 pi pi 4096 Aug 30 21:15 .
drwxr-xr-x 17 pi pi 4096 Aug 30 16:37 ..
-rwxr-xr-x 1 pi pi 3796 Aug 24 20:16 sample.py
-rwxr--r-- 1 pi pi 3338 Aug 30 18:04 wyze-mqtt.py
drwxr-xr-x 3 pi pi 4096 Aug 24 20:27 wyzesense
pi@raspberrypi:~/WyzeSensePy $ ls -l /dev/hidraw*
crw-rw-r-- 1 root pi 245, 0 Aug 30 13:17 /dev/hidraw0
pi@raspberrypi:~/WyzeSensePy $ python3 sample.py
Openning wyzesense gateway ['/dev/hidraw0']
Gateway info:
MAC:7781E59E
VER:0.0.0.30 V1.4 Dongle UD3U
ENR:b'1546866884c76deae03f2fc3bf2c3976'
L to list
P to pair
U to unpair
X to exit
Action:
pi@raspberrypi:~/WyzeSensePy $ python3 sample.py --device /dev/hidraw1
Sensor found: mac=778D7280, type=1, version=16
L to list
P to pair
U to unpair
X to exit
Action:l
3 sensor paired:
Sensor: 778D7038
Sensor: 7781A40B
Sensor: 778D7280
L to list
P to pair
U to unpair
X to exit
python3 wyze-mqtt.py --broker <<IP address of your MQTT Broker>>
pi@raspberrypi:~/WyzeSensePy $ python3 wyze-mqtt.py --broker 192.168.111.20
Opening wyzesense gateway [/dev/hidraw0]
Gateway info:
MAC:7781E59E
VER:0.0.0.30 V1.4 Dongle UD3U
ENR:b'1546866884c76deae03f2fc3bf2c3976'
StateEvent: sensor_type=switch, state=open, battery=96, signal=80
StateEvent: sensor_type=switch, state=close, battery=96, signal=82
Topic = wyze/778D7038/update
Payload = {"sensor_type": "switch", "state": "close", "battery": 96, "signal": 86}
Users browsing this forum: No registered users and 2 guests