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 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 _publish(self, topic, payload=u""): """ MQTT publish helper function. Publish dictionary as JSON """ client = mqtt.get_client() if client: if isinstance(payload, dict): payload = json.dumps(payload, sort_keys=True) client.publish(topic, payload, qos=1, retain=True)
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 run(self): old_statuslist = ' ' log.clear(NAME) log.info(NAME, _('MQTT Zones Plugin started.')) once = True while not self._stop.is_set(): if plugin_options['use_mqtt']: once = True try: statuslist = [] for station in stations.get(): if station.enabled or station.is_master or station.is_master_two: status = { 'station': station.index, 'status': 'on' if station.active else 'off', 'name': station.name, 'reason': 'master' if station.is_master or station.is_master_two else ''} if not station.is_master or not station.is_master_two: if station.active: active = log.active_runs() for interval in active: if not interval['blocked'] and interval['station'] == station.index: status['reason'] = 'program' elif not options.scheduler_enabled: status['reason'] = 'system_off' elif not station.ignore_rain and inputs.rain_sensed(): status['reason'] = 'rain_sensed' elif not station.ignore_rain and rain_blocks.seconds_left(): status['reason'] = 'rain_delay' statuslist.append(status) zone_topic = plugin_options['zone_topic'] if zone_topic: try: from plugins import mqtt except ImportError: log.error(NAME, _('MQTT Zones Plugin requires MQTT plugin.')) if statuslist != old_statuslist: old_statuslist = statuslist client = mqtt.get_client() if client: client.publish(zone_topic, json.dumps(statuslist), qos=1, retain=True) log.clear(NAME) log.info(NAME, _('MQTT Zones Plugin public') + ':\n' + str(statuslist)) else: log.clear(NAME) log.error(NAME, _('Not setup Zone Topic')) self._sleep(10) self._sleep(1) except Exception: log.error(NAME, _('MQTT Zones plug-in') + ':\n' + traceback.format_exc()) self._sleep(60) else: if once: log.info(NAME, _('MQTT Zones Plugin is disabled.')) once = False