initial commit

pull/1/head
nathan wagner 3 years ago
commit 3a74be0991

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="XBee MicroPython" type="python">
<CLASSES>
<root url="file://$APPLICATION_PLUGINS_DIR$/xbee-micropython/typehints/digi_micropython" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (pythonProject)" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/pythonProject.iml" filepath="$PROJECT_DIR$/.idea/pythonProject.iml" />
</modules>
</component>
</project>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="FacetManager">
<facet type="MicroPython" name="XBee MicroPython">
<configuration />
</facet>
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="XBee MicroPython" level="project" />
</component>
</module>

Binary file not shown.

@ -0,0 +1,179 @@
# xbee python docs: http://cms.digi.com/resources/documentation/digidocs/90002219/#concepts/c_90002219_start.htm?TocPath=Digi%2520MicroPython%2520Programming%2520Guide%257C_____0
# using pycharm w/ xbee: https://www.digi.com/resources/documentation/digidocs/90002445/default.htm
# xbee hardware pdf: https://www.digi.com/resources/documentation/digidocs/pdfs/90001543.pdf
import time
import xbee
import ubinascii
from machine import I2C
from machine import Pin
import struct
# print(" +-------------------------------------+")
# print(" +-------------------------------------+\n")
# print("Waiting for data...\n")
# default to everything off and 0 at power on.
# in the future, we can try to reclaim previous state.
# Hopefully this lamp won't turn off very often
# arduino_addr = 0x48
# senddata = 0
x = xbee.XBee()
#xbee.atcmd('NT', 0xFF)
#tp = xbee.atcmd('TP')1A
print(xbee.atcmd('MY'))
print("transmitting")
srcaddr = int(xbee.atcmd('MY'))
print(xbee.atcmd('AI'))
xbee.atcmd('CN')
print(srcaddr)
srcarry = srcaddr.to_bytes(2,"big")
print(srcarry)
initial_payload=bytes([171, srcarry[1], srcarry[0], 141, 194, 209, 65, 0, 162, 19, 0, 142])
leave_load=bytes([171, 141, 194, 209, 65, 0, 162, 19, 0, 2])
print(initial_payload)
#xbee.transmit(xbee.ADDR_COORDINATOR, b'\xAB\xF7\x6A\x8D\xC2\xD1\x41\x00\xA2\x13\x00\x8E', source_ep=0, dest_ep=0, cluster=19, profile=0, tx_options=0)
#xbee.transmit(xbee.ADDR_COORDINATOR, b'\xAB\xF7\x6A\x8D\xC2\xD1\x41\x00\xA2\x13\x00\x8E', source_ep=0, dest_ep=0, cluster=19, profile=0, tx_options=0)
send=0
lame = 0
while lame < 3:
xbee.receive()
lame += 1
while send==0:
try:
if xbee.transmit(xbee.ADDR_COORDINATOR, leave_load, source_ep=0, dest_ep=0, cluster=52, profile=0, tx_options=0) is None:
send = 1
print("leaving")
except OSError as e:
print("leaving transmit error")
send=1
send=0
time.sleep(1)
while send==0:
try:
if xbee.transmit(xbee.ADDR_COORDINATOR, initial_payload, source_ep=0, dest_ep=0, cluster=19, profile=0, tx_options=0) is None:
send = 1
print("joining")
except OSError as e:
print("joining transmit error")
print("receiving")
while 1 != 0:
blorp = xbee.receive()
if blorp is not None:
if blorp['cluster']==5:
print(bytes(blorp['payload']))
b = bytearray(blorp['payload'])
print(b[0])
payload=bytes([b[0], 00, b[1], b[2], 1, 8])
xbee.transmit(xbee.ADDR_COORDINATOR,payload,source_ep=0,dest_ep=0,cluster=32773, profile=0, tx_options=0)
if blorp['cluster']==4:
print(bytes(blorp['payload']))
b = bytearray(blorp['payload'])
print(b[0])
payload = bytes([b[0], 00, b[1], b[2], 14, 8, 4, 1, 2, 0, 6, 3, 0, 0, 3, 0, 6, 0, 0])
xbee.transmit(xbee.ADDR_COORDINATOR, payload, source_ep=0,dest_ep=0,cluster=32772, profile=0, tx_options=0)
if blorp['cluster'] == 0:
print(bytes(blorp['payload']))
b = bytearray(blorp['payload'])
for x in b:
print(x)
print(blorp)
#print(xbee.receive())
#print("temperature")
#print(tp)
#if tp > 0x7FFF:
# tp = tp - 0x10000
# print("The XBee is %.1F degrees" % (tp * 9.0 / 5.0 + 32.0))
#for i in list(xbee.discover()):
# print(i)
#while True:
# Check if the XBee has any message in the queue.
# received_msg = xbee.receive()
# ad0 = Pin("D0", Pin.IN, Pin.PULL_UP)
# ad1 = Pin("D1", Pin.IN, Pin.PULL_UP)
# ad2 = Pin("D2", Pin.IN, Pin.PULL_UP)
# if ad0.value() == 0:
# print("input pin 0")
# if ad1.value() == 0:
# print("input pin 1")
# if ad2.value() == 0:
# print("input pin 2")
# #print("just a print, lots and lots")
# # if received_msg:
# Get the sender's 64-bit address and payload from the received message.
# sender = received_msg['sender_eui64']
# payload = received_msg['payload']
# Check to make sure data is coming from zigbee controller
# if sender == b'\x00!.\xff\xff\x06\rW':
# is an on/off command
# if len(payload) == 3:
# if payload[2] == 0:
# turn lamp off
# lamp_ha_state['on_off'] = 0
# lamp_ha_bytes[1] = 0
# lamp_ha_bytes[0] = 1
# senddata = 1
# elif payload[2] == 1:
# # turn lamp on
# lamp_ha_state['on_off'] = 1
# lamp_ha_bytes[1] = 1
# lamp_ha_bytes[0] = 1
# senddata = 1
# else:
# did not receive 1 or 0
# print("did not receive 1 or 0")
# pass
# brightness, color, or color temp command
# if len(payload) > 3:
# is brightness command
# if payload[2] == 4:
# Home Assistant automatically turns the switch 'on' if brightness
# is edited. Therefore, also set on_off to 1 to make sure to match
# Home Assistant
# print("brightness command")
# lamp_ha_state['on_off'] = 1
# lamp_ha_state['brightness'] = payload[3]
# lamp_ha_bytes[1] = 1
# lamp_ha_bytes[2] = payload[3]
# lamp_ha_bytes[0] = 2
# senddata = 1
# is color command
# elif payload[2] == 7:
# print("color command")
# lamp_ha_state['color_x_raw'] = (payload[4] << 8) | payload[3]
# lamp_ha_bytes[4] = payload[4]
# lamp_ha_bytes[5] = payload[3]
# lamp_ha_state['color_y_raw'] = (payload[6] << 8) | payload[5]
# lamp_ha_bytes[6] = payload[6]
# lamp_ha_bytes[7] = payload[5]
# lamp_ha_bytes[0] = 2
# turn lamp on
# lamp_ha_state['on_off'] = 1
# lamp_ha_bytes[1] = 1
# lamp_ha_bytes[0] = 1 # not necessary
# senddata = 1
# is color temp command
# elif payload[2] == 10:
# print("color temp command")
# pass
# is unknown data
# else:
# print("unknown data received %s" % ubinascii.hexlify(payload))
# pass
# print("good sender found")
# print(lamp_ha_state)
# print(lamp_ha_bytes)
# print(lamp_ha_state['color_x_raw']/65535)
# print(lamp_ha_state['color_y_raw'] / 65535)
# print("===================")
# if senddata == 1:
# i2c.writeto(arduino_addr, bytearray(lamp_ha_bytes), True)
# lamp_ha_bytes[0] = 0
# senddata = 0
# print(len(payload))
# print(ubinascii.hexlify(payload))
# print("Data received from %s >> %s" % (''.join('{:02x}'.format(x).upper() for x in sender),
# payload.decode()))
Loading…
Cancel
Save