示例#1
0
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)
示例#2
0
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)
示例#5
0
 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.
示例#6
0
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)
示例#7
0
 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.
示例#8
0
 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.
示例#9
0
    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()
示例#10
0
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)
示例#11
0
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)
示例#12
0
 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
示例#13
0
 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
示例#14
0
def subscribe():
    "Subscribe to messages"
    topic = mqtt.get_settings().get(u"control_topic")
    if topic:
        mqtt.subscribe(topic, on_message, 2)
示例#15
0
def subscribe():
    "Subscribe to messages"
    topic = mqtt.get_settings().get('schedule_topic')
    if topic:
        mqtt.subscribe(topic, on_message, 2)
示例#16
0
def subscribe():
    "Subscribe to messages"
    topic = mqtt.get_settings().get('schedule_topic')
    if topic:
        mqtt.subscribe(topic, on_message, 2)
示例#17
0
 def GET(self):
     settings = mqtt.get_settings()
     return template_render.mqtt_slave(settings, "")  # open settings page
示例#18
0
 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
示例#19
0
 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
示例#20
0
 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