-
Notifications
You must be signed in to change notification settings - Fork 0
/
display_perso.py
128 lines (90 loc) · 3.02 KB
/
display_perso.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#
# MQTT agent to manage a LED 8x8 screen
#
# this is using the Lua middleware from mqttiotstuff repository,
#
# see
#
import paho.mqtt.client as mqtt
import random
import time
import traceback
from configparser import ConfigParser
from configparser import RawConfigParser
import os.path
import unicodedata
import perso_show
# global constants
PERSO_TOPIC="home/agents/screen/perso"
TEST_TOPIC="home/agents/screen/test"
# config passwords and connexions are parametrize in a config in the ~/ directory
config = RawConfigParser()
def get_config_item(section, name, default):
"""
Gets an item from the config file, setting the default value if not found.
"""
try:
value = config.get(section, name)
except:
value = default
return value
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe(PERSO_TOPIC)
client.subscribe(TEST_TOPIC)
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
# print str(msg)
if msg.topic == TEST_TOPIC:
try:
# c = random.randint(0,16*16)
s = ""
for j in range(0,8):
for i in range(0,8):
c = (j * 8 + i) % 10
if (c == 0):
s = s + (chr(0) + chr(0) + chr(0))
else:
s = s + (chr(127) + chr(127) + chr(127))
print(len(s))
client2.publish("home/esp03/actuators/led8", s)
print("done")
time.sleep(0.2)
except:
traceback.print_exc()
if msg.topic == PERSO_TOPIC:
try:
# c = random.randint(0,16*16)
nb = int(msg.payload)
print("display " + str(nb))
client2.publish("home/esp03/actuators/led8", \
perso_show.readPixelsLed(nb % 10, int(nb / 10)))
print("done")
time.sleep(0.2)
except:
traceback.print_exc()
conffile = os.path.expanduser('~/.mqttagents.conf')
if not os.path.exists(conffile):
raise Exception("config file " + conffile + " not found")
# read config and launch
config.read(conffile)
client = mqtt.Client()
client2 = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
username = config.get("agents","username")
password = config.get("agents","password")
mqttbroker = config.get("agents","mqttbroker")
client.username_pw_set(username,password)
client.connect(mqttbroker, 1883, 5)
client2.username_pw_set(username,password)
client2.connect(mqttbroker, 1883, 5)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client2.loop_start()
client.loop_forever()