コード例 #1
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"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)
コード例 #2
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)
コード例 #3
0
    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)
コード例 #4
0
ファイル: mqtt_zones.py プロジェクト: soxslayer/sip_plugins
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)
コード例 #5
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)
コード例 #6
0
    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