-
Notifications
You must be signed in to change notification settings - Fork 11
/
cli.py
91 lines (75 loc) · 3.01 KB
/
cli.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/env python3
#Command line interface
PrintDebug = True #Enable debugging
import sys, os, pathlib, sqlite3
import pethubpacket as p
import paho.mqtt.client as mqtt
from configparser import ConfigParser
from box import Box
#Load PetHubLocal database
def dict_factory(cursor, row): #Return results as a Box/dict key value pair
d = {}
for idx, col in enumerate(cursor.description):
d[col[0]] = row[idx]
return Box(d)
conn=sqlite3.connect("pethublocal.db")
conn.row_factory = dict_factory
curs=conn.cursor()
if len(sys.argv) > 1:
if "hub" in sys.argv[1]:
#print("len ",len(sys.argv))
curs.execute('select mac_address from devices where product_id = "1"')
device = curs.fetchone()
#operations = p.generatemessage(device.mac_address, 'operations','')
if device and len(sys.argv) <= 2:
print("Hub Supported operations:")
for key in operations:
print ('Hub: {:<15s}{:>3s}'.format(key, operations[key].desc))
else:
print('Send a Hub message')
setvalue = p.generatemessage(device.mac_address, sys.argv[2],sys.argv[3])
elif "petdoor" in sys.argv[1]:
setvalue = p.generatemessage("52E26AFEFF121F80", sys.argv[2],sys.argv[3])
elif "feeder" in sys.argv[1]:
setvalue = p.generatemessage("xfeedermacaddyxx", sys.argv[2],sys.argv[3])
else:
curs.execute('select product_id from devices where mac_address = "' + sys.argv[1] + '"')
device = curs.fetchone()
if device:
print("arg length",len(sys.argv))
if len(sys.argv) > 3:
status = sys.argv[3]
else:
status = ""
setvalue = p.generatemessage(sys.argv[1], sys.argv[2],status)
if setvalue:
print("Command to send: ",setvalue)
parser = ConfigParser()
if pathlib.Path("../config.ini").exists():
with open("../config.ini") as stream:
parser.read_string("[top]\n" + stream.read())
if os.environ.get('HAMQTTIP') is not None:
print("HAMQTTIP from environment")
hamqttip = os.environ.get('HAMQTTIP')
elif 'top' in parser and 'HAMQTTIP' in parser['top']:
print("HAMQTTIP from config.ini")
hamqttip = parser['top']['HAMQTTIP']
else:
print("HAMQTTIP not set in config.ini, exiting")
exit(1)
print("Connecting to "+hamqttip)
if ':' in hamqttip:
hamqttipsplit = hamqttip.split(':')
mqtthost = hamqttipsplit[0]
mqttport = int(hamqttipsplit[1])
else:
mqtthost = hamqttip
mqttport = 1883
if PrintDebug:
print("HAMQTT Host: "+mqtthost)
print("HAMQTT Port: "+str(mqttport))
mc = mqtt.Client()
mc.connect(mqtthost, mqttport, 30)
# ret=mc.publish('pethublocal/testing/messages',setvalue.msg,qos=1)
ret=mc.publish(setvalue.topic,setvalue.msg,qos=1)
print('mqtt response',ret)