annotate service/rdf_to_mqtt/rdf_to_mqtt.py @ 789:e7eb3fc8db54

more lights, color temp control
author drewp@bigasterisk.com
date Sat, 28 Nov 2020 01:34:31 -0800
parents acf58b83022f
children 6b80a6c58907
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
597
e1ee6661329a adjust kitchen PWM freqs. add comments and proposed contents of n3 configs
drewp@bigasterisk.com
parents: 586
diff changeset
1 """
e1ee6661329a adjust kitchen PWM freqs. add comments and proposed contents of n3 configs
drewp@bigasterisk.com
parents: 586
diff changeset
2 We get output statements that are like light9's deviceAttrs (:dev1 :color "#ff0000"),
e1ee6661329a adjust kitchen PWM freqs. add comments and proposed contents of n3 configs
drewp@bigasterisk.com
parents: 586
diff changeset
3 convert those to outputAttrs (:dev1 :red 255; :green 0; :blue 0) and post them to mqtt.
e1ee6661329a adjust kitchen PWM freqs. add comments and proposed contents of n3 configs
drewp@bigasterisk.com
parents: 586
diff changeset
4
e1ee6661329a adjust kitchen PWM freqs. add comments and proposed contents of n3 configs
drewp@bigasterisk.com
parents: 586
diff changeset
5 This is like light9/bin/collector.
e1ee6661329a adjust kitchen PWM freqs. add comments and proposed contents of n3 configs
drewp@bigasterisk.com
parents: 586
diff changeset
6 """
581
30022797642e mqtt_graph_bridge to new build rules and to py3
drewp@bigasterisk.com
parents: 460
diff changeset
7 import json
777
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
8
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
9 import cyclone.web
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
10 from cycloneerr import PrettyErrorHandler
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
11 from docopt import docopt
762
5943cacc8b9b stats page
drewp@bigasterisk.com
parents: 761
diff changeset
12 from greplin import scales
5943cacc8b9b stats page
drewp@bigasterisk.com
parents: 761
diff changeset
13 from greplin.scales.cyclonehandler import StatsHandler
777
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
14 from mqtt_client import MqttClient
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
15 from rdflib import Namespace
581
30022797642e mqtt_graph_bridge to new build rules and to py3
drewp@bigasterisk.com
parents: 460
diff changeset
16 from standardservice.logsetup import log, verboseLogging
777
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
17 from twisted.internet import reactor
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
18
694
925bc4137c93 extract rdfStatementsFromRequest for sharing with other tools
drewp@bigasterisk.com
parents: 597
diff changeset
19 import rdf_over_http
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
20
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
21 ROOM = Namespace('http://projects.bigasterisk.com/room/')
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
22
777
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
23 STATS = scales.collection(
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
24 '/root',
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
25 scales.PmfStat('putRequests'),
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
26 scales.PmfStat('statement'),
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
27 scales.PmfStat('mqttPublish'),
762
5943cacc8b9b stats page
drewp@bigasterisk.com
parents: 761
diff changeset
28 )
5943cacc8b9b stats page
drewp@bigasterisk.com
parents: 761
diff changeset
29
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
30 devs = {
460
7051b8b4766a build updates. hack in r/g/b and some fixed multipliers
drewp@bigasterisk.com
parents: 392
diff changeset
31 ROOM['kitchenLight']: {
7051b8b4766a build updates. hack in r/g/b and some fixed multipliers
drewp@bigasterisk.com
parents: 392
diff changeset
32 'root': 'h801_skylight',
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
33 'hasWhite': True,
460
7051b8b4766a build updates. hack in r/g/b and some fixed multipliers
drewp@bigasterisk.com
parents: 392
diff changeset
34 },
7051b8b4766a build updates. hack in r/g/b and some fixed multipliers
drewp@bigasterisk.com
parents: 392
diff changeset
35 ROOM['kitchenCounterLight']: {
7051b8b4766a build updates. hack in r/g/b and some fixed multipliers
drewp@bigasterisk.com
parents: 392
diff changeset
36 'root': 'h801_counter',
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
37 'hasWhite': True,
460
7051b8b4766a build updates. hack in r/g/b and some fixed multipliers
drewp@bigasterisk.com
parents: 392
diff changeset
38 },
696
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
39 ROOM['livingLampShelf']: {
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
40 'root': 'sonoff_0/switch/sonoff_basic_relay/command',
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
41 'values': 'binary',
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
42 },
764
b15bc47b97a0 rename living lamps
drewp@bigasterisk.com
parents: 762
diff changeset
43 ROOM['livingLampMantleEntry']: {
740
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
44 'root': 'sonoff_1/switch/sonoff_basic_relay/command',
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
45 'values': 'binary',
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
46 },
764
b15bc47b97a0 rename living lamps
drewp@bigasterisk.com
parents: 762
diff changeset
47 ROOM['livingLampMantleChair']: {
740
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
48 'root': 'sonoff_2/switch/sonoff_basic_relay/command',
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
49 'values': 'binary',
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
50 },
764
b15bc47b97a0 rename living lamps
drewp@bigasterisk.com
parents: 762
diff changeset
51 ROOM['livingLampToyShelf']: {
740
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
52 'root': 'sonoff_3/switch/sonoff_basic_relay/command',
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
53 'values': 'binary',
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
54 },
764
b15bc47b97a0 rename living lamps
drewp@bigasterisk.com
parents: 762
diff changeset
55 ROOM['livingLampPiano']: {
740
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
56 'root': 'sonoff_4/switch/sonoff_basic_relay/command',
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
57 'values': 'binary',
1f8abec7f687 more devices
drewp@bigasterisk.com
parents: 739
diff changeset
58 },
761
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
59 ROOM['theater']: {
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
60 'root': 'theater_blaster/ir_out',
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
61 'values': 'theaterOutputs',
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
62 },
776
8fa420250799 add headboard
drewp@bigasterisk.com
parents: 765
diff changeset
63 ROOM['bedHeadboard']: {
8fa420250799 add headboard
drewp@bigasterisk.com
parents: 765
diff changeset
64 'root': 'bed/light/headboard/command',
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
65 'hasWhite': True,
776
8fa420250799 add headboard
drewp@bigasterisk.com
parents: 765
diff changeset
66 },
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
67 # https://github.com/Koenkk/zigbee2mqtt.io/blob/new_api/docs/information/mqtt_topics_and_message_structure.md#general
789
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
68 ROOM['frontRoom1']: {
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
69 'root': 'zigbee2mqtt/frontRoom1/set',
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
70 'hasBrightness': True,
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
71 'defaults': {
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
72 'transition': 0,
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
73 }
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
74 },
789
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
75 ROOM['frontRoom2']: {
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
76 'root': 'zigbee2mqtt/frontRoom2/set',
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
77 'hasBrightness': True,
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
78 'defaults': {
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
79 'transition': 0,
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
80 }
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
81 },
789
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
82 ROOM['asherCeiling']: {
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
83 'root': 'zigbee2mqtt/asherCeiling/set',
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
84 'hasBrightness': True,
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
85 'defaults': {
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
86 'transition': 0,
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
87 }
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
88 },
789
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
89 ROOM['stairTop']: {
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
90 'root': 'zigbee2mqtt/stairTop/set',
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
91 'hasBrightness': True,
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
92 'defaults': {
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
93 'transition': 0,
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
94 }
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
95 },
789
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
96 ROOM['noname1']: { 'root': 'zigbee2mqtt/0xf0d1b8000001ffc6/set', 'hasBrightness': True, 'defaults': { 'transition': 0, } },
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
97 ROOM['noname2']: { 'root': 'zigbee2mqtt/0xf0d1b80000023583/set', 'hasBrightness': True, 'defaults': { 'transition': 0, } },
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
98 ROOM['noname3']: { 'root': 'zigbee2mqtt/0xf0d1b80000023708/set', 'hasBrightness': True, 'defaults': { 'transition': 0, } },
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
99 ROOM['noname4']: { 'root': 'zigbee2mqtt/0xf0d1b80000022adc/set', 'hasBrightness': True, 'defaults': { 'transition': 0, } },
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
100 }
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
101
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
102
761
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
103 class OutputPage(PrettyErrorHandler, cyclone.web.RequestHandler):
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
104
762
5943cacc8b9b stats page
drewp@bigasterisk.com
parents: 761
diff changeset
105 @STATS.putRequests.time()
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
106 def put(self):
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
107 for stmt in rdf_over_http.rdfStatementsFromRequest(self.request.arguments, self.request.body, self.request.headers):
694
925bc4137c93 extract rdfStatementsFromRequest for sharing with other tools
drewp@bigasterisk.com
parents: 597
diff changeset
108 self._onStatement(stmt)
925bc4137c93 extract rdfStatementsFromRequest for sharing with other tools
drewp@bigasterisk.com
parents: 597
diff changeset
109
762
5943cacc8b9b stats page
drewp@bigasterisk.com
parents: 761
diff changeset
110 @STATS.statement.time()
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
111 def _onStatement(self, stmt):
694
925bc4137c93 extract rdfStatementsFromRequest for sharing with other tools
drewp@bigasterisk.com
parents: 597
diff changeset
112 log.info(f'incoming statement: {stmt}')
392
79d041273e26 mqtt has two devices now. various older cleanups.
drewp@bigasterisk.com
parents: 378
diff changeset
113 ignored = True
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
114 for dev, attrs in devs.items():
696
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
115 if stmt[0] == ROOM['frontWindow']:
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
116 ignored = ignored and self._publishFrontScreenText(stmt)
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
117 if stmt[0:2] == (dev, ROOM['brightness']):
696
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
118 log.info(f'brightness request: {stmt}')
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
119 brightness = stmt[2].toPython()
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
120
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
121 if attrs.get('values', '') == 'binary':
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
122 self._publishOnOff(attrs, brightness)
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
123 else:
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
124 self._publishRgbw(attrs, brightness)
392
79d041273e26 mqtt has two devices now. various older cleanups.
drewp@bigasterisk.com
parents: 378
diff changeset
125 ignored = False
761
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
126 if stmt[0:2] == (dev, ROOM['inputSelector']):
765
82bea37aeb92 fix theater input selector string assembling
drewp@bigasterisk.com
parents: 764
diff changeset
127 choice = stmt[2].toPython().decode('utf8')
82bea37aeb92 fix theater input selector string assembling
drewp@bigasterisk.com
parents: 764
diff changeset
128 self._publish(topic=attrs['root'], message=f'input_{choice}')
761
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
129 ignored = False
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
130 if stmt[0:2] == (dev, ROOM['volumeChange']):
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
131 delta = int(stmt[2].toPython())
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
132 which = 'up' if delta > 0 else 'down'
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
133 self._publish(topic=f'theater_blaster/ir_out/volume_{which}', message=json.dumps({'timed': abs(delta)}))
761
78f699077ff5 more theater output controls
drewp@bigasterisk.com
parents: 741
diff changeset
134 ignored = False
776
8fa420250799 add headboard
drewp@bigasterisk.com
parents: 765
diff changeset
135 if stmt[0:2] == (dev, ROOM['color']):
8fa420250799 add headboard
drewp@bigasterisk.com
parents: 765
diff changeset
136 h = stmt[2].toPython()
789
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
137 msg = {}
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
138 if h.endswith(b'K'): # accept "0.7*2200K" (brightness 0.7)
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
139 # see https://www.zigbee2mqtt.io/information/mqtt_topics_and_message_structure.html#zigbee2mqttfriendly_nameset
789
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
140 bright, kelvin = map(float, h[:-1].split(b'*'))
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
141 msg['state'] = 'ON'
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
142 msg["color_temp"] = round(1000000 / kelvin, 2)
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
143 msg['brightness'] = int(bright * 255) # 1..20 look about the same
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
144 else:
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
145 r, g, b = int(h[1:3], 16), int(h[3:5], 16), int(h[5:7], 16)
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
146 msg = {
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
147 'state': 'ON' if r or g or b else 'OFF',
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
148 'color': {
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
149 'r': r,
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
150 'g': g,
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
151 'b': b
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
152 },
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
153 }
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
154
789
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
155 if attrs.get('hasWhite', False):
e7eb3fc8db54 more lights, color temp control
drewp@bigasterisk.com
parents: 778
diff changeset
156 msg['white_value'] = max(r, g, b)
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
157 msg.update(attrs.get('defaults', {}))
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
158 self._publish(topic=attrs['root'], message=json.dumps(msg))
777
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
159 ignored = False
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
160
392
79d041273e26 mqtt has two devices now. various older cleanups.
drewp@bigasterisk.com
parents: 378
diff changeset
161 if ignored:
79d041273e26 mqtt has two devices now. various older cleanups.
drewp@bigasterisk.com
parents: 378
diff changeset
162 log.warn("ignoring %s", stmt)
696
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
163
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
164 def _publishOnOff(self, attrs, brightness):
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
165 msg = 'OFF'
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
166 if brightness > 0:
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
167 msg = 'ON'
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
168 self._publish(topic=attrs['root'], message=msg)
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
169
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
170 def _publishRgbw(self, attrs, brightness):
777
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
171 for chan, scale in [('w1', 1), ('r', 1), ('g', .8), ('b', .8)]:
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
172 self._publish(topic=f"{attrs['root']}/light/kit_{chan}/command",
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
173 messageJson={
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
174 'state': 'ON',
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
175 'brightness': int(brightness * 255)
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
176 })
696
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
177
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
178 def _publishFrontScreenText(self, stmt):
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
179 ignored = True
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
180 for line in ['line1', 'line2', 'line3', 'line4']:
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
181 if stmt[1] == ROOM[line]:
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
182 ignored = False
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
183 self.settings.mqtt.publish(b'frontwindow/%s' % line.encode('ascii'), stmt[2].toPython())
696
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
184 return ignored
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
185
762
5943cacc8b9b stats page
drewp@bigasterisk.com
parents: 761
diff changeset
186 @STATS.mqttPublish.time()
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
187 def _publish(self, topic: str, messageJson: object = None, message: str = None):
765
82bea37aeb92 fix theater input selector string assembling
drewp@bigasterisk.com
parents: 764
diff changeset
188 log.debug(f'mqtt.publish {topic} {message} {messageJson}')
696
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
189 if messageJson is not None:
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
190 message = json.dumps(messageJson)
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
191 self.settings.mqtt.publish(topic.encode('ascii'), message.encode('ascii'))
696
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
192
c52b172c0824 add publish to ON/OFF messages. split up the main statement handler
drewp@bigasterisk.com
parents: 694
diff changeset
193
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
194 if __name__ == '__main__':
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
195 arg = docopt("""
739
03bad43bbcb3 more renaming, build updates
drewp@bigasterisk.com
parents: 732
diff changeset
196 Usage: rdf_to_mqtt.py [options]
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
197
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
198 -v Verbose
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
199 """)
581
30022797642e mqtt_graph_bridge to new build rules and to py3
drewp@bigasterisk.com
parents: 460
diff changeset
200 verboseLogging(arg['-v'])
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
201
778
acf58b83022f rdf_to_mqtt sylvania bulbs and code cleanup and k8s updates
drewp@bigasterisk.com
parents: 777
diff changeset
202 mqtt = MqttClient(clientId='rdf_to_mqtt', brokerHost='mosquitto-ext.default.svc.cluster.local', brokerPort=1883)
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
203
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
204 port = 10008
777
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
205 reactor.listenTCP(port,
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
206 cyclone.web.Application([
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
207 (r"/()", cyclone.web.StaticFileHandler, {
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
208 "path": ".",
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
209 "default_filename": "index.html"
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
210 }),
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
211 (r'/output', OutputPage),
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
212 (r'/stats/(.*)', StatsHandler, {
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
213 'serverName': 'rdf_to_mqtt'
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
214 }),
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
215 ],
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
216 mqtt=mqtt,
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
217 debug=arg['-v']),
df7035db28f1 reformat
drewp@bigasterisk.com
parents: 776
diff changeset
218 interface='::')
373
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
219 log.warn('serving on %s', port)
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
220
2158e7ad19b1 receive oneshot updates from reasoning; emit commands on MQTT to control H801 wifi dimmer
drewp@bigasterisk.com
parents:
diff changeset
221 reactor.run()