Support parsing mqtt messages via jsonpath

This commit is contained in:
Oliver van Porten 2015-11-20 22:03:17 +01:00
parent d25f58e650
commit b4cf0e874a
4 changed files with 35 additions and 5 deletions

View file

@ -37,14 +37,15 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None):
config.get('qos', DEFAULT_QOS),
config.get('payload_on', DEFAULT_PAYLOAD_ON),
config.get('payload_off', DEFAULT_PAYLOAD_OFF),
config.get('optimistic', DEFAULT_OPTIMISTIC))])
config.get('optimistic', DEFAULT_OPTIMISTIC),
config.get('state_format'))])
# pylint: disable=too-many-arguments, too-many-instance-attributes
class MqttSwitch(SwitchDevice):
""" Represents a switch that can be togggled using MQTT. """
def __init__(self, hass, name, state_topic, command_topic, qos,
payload_on, payload_off, optimistic):
payload_on, payload_off, optimistic, state_format):
self._state = False
self._hass = hass
self._name = name
@ -54,9 +55,17 @@ class MqttSwitch(SwitchDevice):
self._payload_on = payload_on
self._payload_off = payload_off
self._optimistic = optimistic
self._state_format = state_format
if self._state_format.startswith('json:'):
self._parser = mqtt.JsonFmtParser(self._state_format[5:])
else:
self._parser = lambda x: x
def message_received(topic, payload, qos):
""" A new MQTT message has been received. """
payload = self._parser(payload)
if payload == self._payload_on:
self._state = True
self.update_ha_state()