def on_message(client, msg): "Callback when MQTT message is received." if not gv.sd['en']: # check operation status return num_brds = gv.sd['nbrd'] num_sta = num_brds * 8 try: cmd = json.loads(msg.payload) except ValueError as e: print("MQTT Slave could not decode command: ", msg.payload, e) return zones = cmd['zone_list'] # list of all zones sent from master first = int(mqtt.get_settings().get('first_station')) - 1 count = int(mqtt.get_settings().get('station_count')) local_zones = zones[first : first + count] for i in range(len(local_zones)): if (local_zones[i] # if this element has a value and is not on and not gv.srvals[i] ): gv.rs[i][0] = gv.now gv.rs[i][1] = float('inf') gv.rs[i][3] = 99 gv.ps[i][0] = 99 elif (gv.srvals[i] and not local_zones[i] ): gv.rs[i][1] = gv.now if any(gv.rs): gv.sd['bsy'] = 1 sleep(1)
def on_message(client, msg): "Callback when MQTT message is received." if not gv.sd[u"en"]: # check operation status return num_brds = gv.sd[u"nbrd"] num_sta = num_brds * 8 try: cmd = json.loads(msg.payload) except ValueError as e: print(u"MQTT Slave could not decode command: ", msg.payload, e) return zones = cmd["zone_list"] # list of all zones sent from master first = int(mqtt.get_settings().get(u"first_station")) - 1 count = int(mqtt.get_settings().get(u"station_count")) local_zones = zones[first:first + count] for i in range(len(local_zones)): if (local_zones[i] # if this element has a value and is not on and not gv.srvals[i]): gv.rs[i][0] = gv.now gv.rs[i][1] = float("inf") gv.rs[i][3] = 99 gv.ps[i][0] = 99 elif gv.srvals[i] and not local_zones[i]: gv.rs[i][1] = gv.now if any(gv.rs): gv.sd[u"bsy"] = 1 sleep(1)
def subscribe(): """ Subscribe to messages """ topic = mqtt.get_settings().get(u"set_values_topic") if topic: mqtt.subscribe(topic, on_message, 2)
def notify_value_change(name, **kw): payload = { u"devt": gv.now, u"nbrd": gv.sd[u"nbrd"], u"en": gv.sd[u"en"], u"rd": gv.sd[u"rd"], u"rs": gv.sd[u"rs"], u"mm": gv.sd[u"mm"], u"rdst": gv.sd[u"rdst"], u"loc": gv.sd[u"loc"], u"wl": gv.sd[u"wl"], # u"wl_weather": gv.sd[u"wl_weather"], u"sbits": gv.sbits, u"ps": gv.ps, u"lrun": gv.lrun, u"ct": get_cpu_temp(), u"tu": gv.sd[u"tu"] } get_values_topic = mqtt.get_settings().get(u"get_values_topic") if get_values_topic: client = mqtt.get_client() if client: client.publish(get_values_topic, json.dumps(payload), qos=1, retain=True)
def GET(self): qdict = web.input() # Dictionary of values returned as query string from settings page. settings = mqtt.get_settings() settings.update(qdict) with open(mqtt.DATA_FILE, 'w') as f: json.dump(settings, f) # save to file raise web.seeother('/') # Return user to home page.
def notify_value_change(name, **kw): payload = { u"devt": gv.now, u"nbrd": gv.sd[u"nbrd"], u"en": gv.sd[u"en"], u"rd": gv.sd[u"rd"], u"rs": gv.sd[u"rs"], u"mm": gv.sd[u"mm"], u"rdst": gv.sd[u"rdst"], u"loc": gv.sd[u"loc"], u"wl": gv.sd[u"wl"], u"sbits": gv.sbits, u"ps": gv.ps, u"lrun": gv.lrun, u"ct": get_cpu_temp(), u"tu": gv.sd[u"tu"] } # for plugin compatibility read all water level adjustment settings (wl_*) for entry in gv.sd: if entry.startswith(u"wl_"): payload[entry] = gv.sd[entry] get_values_topic = mqtt.get_settings().get(u"get_values_topic") if get_values_topic: client = mqtt.get_client() if client: client.publish(get_values_topic, json.dumps(payload), qos=1, retain=True)
def GET(self): qdict = web.input() # Dictionary of values returned as query string from settings page. settings = mqtt.get_settings() settings.update(qdict) with open(DATA_FILE, 'w') as f: json.dump(settings, f, indent=4, sort_keys=True) # save to file subscribe() raise web.seeother('/') # Return user to home page.
def GET(self): qdict = web.input( ) # Dictionary of values returned as query string from settings page. settings = mqtt.get_settings() settings.update(qdict) with open(DATA_FILE, 'w') as f: json.dump(settings, f, indent=4, sort_keys=True) # save to file subscribe() raise web.seeother('/') # Return user to home page.
def apply_base_mqtt_settings(self, init=False): """Initialize MQTT HASS plugin options from saved setting in mqtt_hass.json""" global _settings_base_mqtt _settings_base_mqtt = mqtt.get_settings() base_topic = _settings_base_mqtt.get(BASE_MQTT_STATE_TOPIC, u"") if base_topic != _settings_base_mqtt[BASE_MQTT_STATE_TOPIC]: _settings_base_mqtt[BASE_MQTT_STATE_TOPIC] = base_topic if not init: self.system_discovery_publish() self.zone_discovery_publish()
def notify_zone_change(name, **kw): names = gv.snames mas = gv.sd['mas'] vals = gv.srvals payload = { 'zone_list': vals, 'zone_dict': {name: status for name, status in zip(names, vals)}, 'master_on': 0 if mas == 0 else vals[mas-1] } zone_topic = mqtt.get_settings().get('zone_topic') if zone_topic: client = mqtt.get_client() if client: client.publish(zone_topic, json.dumps(payload), qos=1, retain=True)
def notify_zone_change(name, **kw): names = gv.snames mas = gv.sd[u"mas"] vals = gv.srvals payload = { u"zone_list": vals, u"zone_dict": {name: status for name, status in zip(names, vals)}, u"master_on": 0 if mas == 0 else vals[mas - 1], } zone_topic = mqtt.get_settings().get(u"zone_topic") if zone_topic: client = mqtt.get_client() if client: client.publish(zone_topic, json.dumps(payload), qos=1, retain=True)
def GET(self): settings = mqtt.get_settings() zone_topic = settings.get('zone_topic', gv.sd[u'name'] + '/zones') return template_render.mqtt_zones(zone_topic, "") # open settings page
def GET(self): settings = mqtt.get_settings() zone_topic = settings.get(u"schedule_topic", gv.sd[u"name"] + u"/schedule") return template_render.mqtt_schedule(zone_topic, "") # open settings page
def subscribe(): "Subscribe to messages" topic = mqtt.get_settings().get(u"control_topic") if topic: mqtt.subscribe(topic, on_message, 2)
def subscribe(): "Subscribe to messages" topic = mqtt.get_settings().get('schedule_topic') if topic: mqtt.subscribe(topic, on_message, 2)
def GET(self): settings = mqtt.get_settings() return template_render.mqtt_slave(settings, "") # open settings page
def GET(self): settings = mqtt.get_settings() set_values_topic = settings.get(u"set_values_topic", gv.sd[u"name"] + u"/set_values") return template_render.mqtt_set_values(set_values_topic, "") # open settings page
def GET(self): settings = mqtt.get_settings() settings['control_topic'] = '' settings['first_station'] = '' settings['station_count'] = '' return template_render.mqtt_slave(settings, "") # open settings page