コード例 #1
0
    def test_simple(self):
        mqtt = MockMqtt(self)

        sensor = Sen(mqtt=mqtt)

        with sensor:
            sensor.available_set(True)
            sensor.send_update()

        mqtt.assert_messages(
            'homeassistant/sensor/test_name/config', [{
                'name': 'Test Name',
                'state_topic': 'homeassistant/sensor/test_name/state',
                'unit_of_measurement': '°C',
                'unique_id': 'test_name'
            }, None])

        mqtt.assert_messages('homeassistant/sensor/test_name/state', ["1.24"])
        mqtt.assert_messages('homeassistant/sensor/test_name/available', None)
コード例 #2
0
    def test_shared_topic(self):
        mqtt = MockMqtt(self)

        state = MqttSharedTopic(mqtt, "/my/topic")

        sensor = Swi(mqtt=mqtt, state_topic=state, availability_topic=True)

        with sensor:
            sensor.available_set(True)
            state.publish()

        mqtt.assert_messages('homeassistant/switch/test_name/config',
                             [{'availability_topic': 'homeassistant/switch/test_name/available',
                               'command_topic': 'homeassistant/switch/test_name/cmd',
                               'name': 'Test Name',
                               'payload_available': 'online',
                               'payload_not_available': 'offline',
                               'payload_off': 'off',
                               'payload_on': 'on',
                               'state_off': 'off',
                               'state_on': 'on',
                               'state_topic': '/my/topic',
                               'value_template': '{{ value_json.test_name }}',
                               'unique_id': 'test_name'},
                              None])

        mqtt.assert_messages('/my/topic', [{"test_name": "off"}])
        mqtt.assert_messages('homeassistant/switch/test_name/available', ["online"])
コード例 #3
0
    def test_shared_topic(self):
        mqtt = MockMqtt(self)

        state = MqttSharedTopic(mqtt, "/my/topic")

        sensor = SetSen(mqtt=mqtt, state_topic=state, availability_topic=True)

        with sensor:
            sensor.available_set(True)
            state.publish()
            mqtt.publish('homeassistant/sensor/test_name/cmd', '3.68')
            state.publish()

        mqtt.assert_messages(
            'homeassistant/sensor/test_name/config', [{
                'availability_topic':
                'homeassistant/sensor/test_name/available',
                'name': 'Test Name',
                'payload_available': 'online',
                'payload_not_available': 'offline',
                'state_topic': '/my/topic',
                'unit_of_measurement': '°C',
                'value_template': '{{ value_json.test_name }}',
                'unique_id': 'test_name'
            }, None])

        mqtt.assert_messages('/my/topic', [{
            "test_name": "7.50"
        }, {
            "test_name": "3.68"
        }])
        mqtt.assert_messages('homeassistant/sensor/test_name/available',
                             ["online"])
コード例 #4
0
    def test_simple(self):
        mqtt = MockMqtt(self)

        sensor = Swi(mqtt=mqtt)

        with sensor:
            sensor.available_set(True)
            sensor.send_update()
            sensor(True)

        mqtt.assert_messages('homeassistant/switch/test_name/config',
                             [{'command_topic': 'homeassistant/switch/test_name/cmd',
                               'name': 'Test Name',
                               'payload_off': 'off',
                               'payload_on': 'on',
                               'state_off': 'off',
                               'state_on': 'on',
                               'state_topic': 'homeassistant/switch/test_name/state',
                               'unique_id': 'test_name'},
                              None])

        mqtt.assert_messages('homeassistant/switch/test_name/state', ["off", "on"])
        mqtt.assert_messages('homeassistant/switch/test_name/available', None)
コード例 #5
0
ファイル: test_climate.py プロジェクト: gbbirkisson/ha-mqtt
    def test_shared_topic(self):
        mqtt = MockMqtt(self)

        state = MqttSharedTopic(mqtt, "/my/topic")

        climate = Cli(mqtt=mqtt,
                      thermometer=fake_temp2,
                      state_topic=state,
                      availability_topic=True)

        with climate:
            climate.available_set(True)
            self.assertEqual(climate.is_on(), False)
            state.publish()
            mqtt.publish('homeassistant/climate/test_name/cmdMode', 'heat')
            self.assertEqual(climate.is_on(), True)
            mqtt.publish('homeassistant/climate/test_name/cmdTargetTemp', '80')
            state.publish()

        mqtt.assert_messages(
            'homeassistant/climate/test_name/config',
            [{
                'availability_topic':
                'homeassistant/climate/test_name/available',
                'current_temperature_template':
                '{{ value_json.test_name_curr_temp }}',
                'current_temperature_topic': '/my/topic',
                'max_temp': '100',
                'min_temp': '0',
                'mode_command_topic':
                'homeassistant/climate/test_name/cmdMode',
                'mode_state_template': '{{ value_json.test_name_mode }}',
                'mode_state_topic': '/my/topic',
                'modes': ['off', 'heat'],
                'name': 'Test Name',
                'payload_available': 'online',
                'payload_not_available': 'offline',
                'temp_step': '1',
                'temperature_command_topic':
                'homeassistant/climate/test_name/cmdTargetTemp',
                'temperature_state_template':
                '{{ value_json.test_name_target_temp }}',
                'temperature_state_topic': '/my/topic',
                'unique_id': 'test_name'
            }, None])

        mqtt.assert_messages('homeassistant/climate/test_name/available',
                             ['online'])
        mqtt.assert_messages('homeassistant/climate/test_name/cmdMode',
                             ["heat"])
        mqtt.assert_messages('homeassistant/climate/test_name/cmdTargetTemp',
                             ["80"])
        mqtt.assert_messages('/my/topic', [{
            'test_name_curr_temp': '7.50',
            'test_name_mode': 'off',
            'test_name_target_temp': '6.50'
        }, {
            'test_name_curr_temp': '10.50',
            'test_name_mode': 'heat',
            'test_name_target_temp': '80.00'
        }])
コード例 #6
0
ファイル: test_climate.py プロジェクト: gbbirkisson/ha-mqtt
    def test_simple(self):
        mqtt = MockMqtt(self)

        climate = Cli(mqtt=mqtt, thermometer=fake_temp1)

        with climate:
            climate.available_set(True)
            self.assertEqual(climate.is_on(), False)
            mqtt.publish('homeassistant/climate/test_name/cmdMode', 'heat')
            self.assertEqual(climate.is_on(), True)
            mqtt.publish('homeassistant/climate/test_name/cmdTargetTemp', '80')
            climate.send_update()

        mqtt.assert_messages(
            'homeassistant/climate/test_name/config',
            [{
                'current_temperature_topic':
                'homeassistant/climate/test_name/stateCurrTemp',
                'max_temp': '100',
                'min_temp': '0',
                'mode_command_topic':
                'homeassistant/climate/test_name/cmdMode',
                'mode_state_topic':
                'homeassistant/climate/test_name/stateMode',
                'modes': ['off', 'heat'],
                'name': 'Test Name',
                'temp_step': '1',
                'temperature_command_topic':
                'homeassistant/climate/test_name/cmdTargetTemp',
                'temperature_state_topic':
                'homeassistant/climate/test_name/stateTargetTemp',
                'unique_id': 'test_name'
            }, None])

        mqtt.assert_messages('homeassistant/climate/test_name/stateCurrTemp',
                             ['7.50', '8.50', '9.50'])
        mqtt.assert_messages('homeassistant/climate/test_name/available', None)
        mqtt.assert_messages('homeassistant/climate/test_name/cmdMode',
                             ["heat"])
        mqtt.assert_messages('homeassistant/climate/test_name/stateMode',
                             ["heat"])
        mqtt.assert_messages('homeassistant/climate/test_name/cmdTargetTemp',
                             ["80"])
        mqtt.assert_messages('homeassistant/climate/test_name/stateTargetTemp',
                             ["80.00"])
コード例 #7
0
ファイル: test_ha.py プロジェクト: gbbirkisson/ha-mqtt
    def test_manager(self):
        mqtt = MockMqtt(self)
        registry = ComponentRegistry()

        state = MqttSharedTopic(mqtt, "/my/topic")
        sensor1 = ErrorSensor('Error 1', mqtt=mqtt)
        sensor2 = ErrorSensor('Error 2', mqtt=mqtt, availability_topic=True)
        sensor3 = ErrorSensor('Error 3', mqtt=mqtt, state_topic=state)
        sensor4 = ErrorSensor('Error 4',
                              mqtt=mqtt,
                              state_topic=state,
                              availability_topic=True)

        registry.add_shared_topic(state)
        registry.add_component(sensor1)
        registry.add_component(sensor2)
        registry.add_component(sensor3)
        registry.add_component(sensor4)

        with registry:
            registry.send_updates()

        mqtt.assert_messages(
            'homeassistant/sensor/error_1/config', [{
                'icon': 'mdi:alarm-light',
                'name': 'Error 1',
                'state_topic': 'homeassistant/sensor/error_1/state',
                'unit_of_measurement': 'errors',
                'unique_id': 'error_1'
            }, None])
        mqtt.assert_messages(
            'homeassistant/sensor/error_2/config', [{
                'availability_topic': 'homeassistant/sensor/error_2/available',
                'icon': 'mdi:alarm-light',
                'name': 'Error 2',
                'payload_available': 'online',
                'payload_not_available': 'offline',
                'state_topic': 'homeassistant/sensor/error_2/state',
                'unit_of_measurement': 'errors',
                'unique_id': 'error_2'
            }, None])
        mqtt.assert_messages('homeassistant/sensor/error_3/config',
                             [{
                                 'icon': 'mdi:alarm-light',
                                 'name': 'Error 3',
                                 'state_topic': '/my/topic',
                                 'unit_of_measurement': 'errors',
                                 'value_template': '{{ value_json.error_3 }}',
                                 'unique_id': 'error_3'
                             }, None])
        mqtt.assert_messages(
            'homeassistant/sensor/error_4/config', [{
                'availability_topic': 'homeassistant/sensor/error_4/available',
                'icon': 'mdi:alarm-light',
                'name': 'Error 4',
                'payload_available': 'online',
                'payload_not_available': 'offline',
                'state_topic': '/my/topic',
                'unit_of_measurement': 'errors',
                'value_template': '{{ value_json.error_4 }}',
                'unique_id': 'error_4'
            }, None])

        mqtt.assert_messages('homeassistant/sensor/error_1/available', None)
        mqtt.assert_messages('homeassistant/sensor/error_2/available',
                             ['online'])
        mqtt.assert_messages('homeassistant/sensor/error_3/available', None)
        mqtt.assert_messages('homeassistant/sensor/error_4/available',
                             ['online'])

        mqtt.assert_messages('homeassistant/sensor/error_1/state', ['0'])
        mqtt.assert_messages('homeassistant/sensor/error_2/state', ['0'])
        mqtt.assert_messages('/my/topic', [{'error_3': '0', 'error_4': '0'}])
コード例 #8
0
    def test_average(self):
        mqtt = MockMqtt(self)
        registry = ComponentRegistry()
        state = MqttSharedTopic(mqtt, "/my/topic")

        sensor1 = Sen(name='S 1',
                      mqtt=mqtt,
                      state_topic=state,
                      state_func=lambda: 1)
        sensor2 = Sen(name='S 2',
                      mqtt=mqtt,
                      state_topic=state,
                      state_func=lambda: 4)
        sensor3 = Sen(name='S 3',
                      mqtt=mqtt,
                      state_topic=state,
                      state_func=lambda: 7)

        sensors = [sensor1, sensor2, sensor3]

        s1 = create_average_sensor('Test 1',
                                   '°C',
                                   sensors,
                                   mqtt=mqtt,
                                   state_topic=state)
        s2, weights = create_weighted_average_sensor('Test 2',
                                                     '°C',
                                                     0,
                                                     100,
                                                     1,
                                                     50,
                                                     sensors,
                                                     mqtt=mqtt,
                                                     state_topic=state)
        registry.add_component(sensor1)
        registry.add_component(sensor2)
        registry.add_component(sensor3)
        registry.add_component(s1)
        registry.add_component(s2)
        registry.add_shared_topic(state)
        for w in weights:
            registry.add_component(w)

        with registry:
            registry.send_updates()
            mqtt.publish('homeassistant/sensor/s_1_weight/cmd', '20')
            mqtt.publish('homeassistant/sensor/s_2_weight/cmd', '40')
            mqtt.publish('homeassistant/sensor/s_3_weight/cmd', '80')
            registry.send_updates()

        mqtt.assert_messages('homeassistant/sensor/s_1/config',
                             [{
                                 'name': 'S 1',
                                 'state_topic': '/my/topic',
                                 'unit_of_measurement': '°C',
                                 'value_template': '{{ value_json.s_1 }}',
                                 'unique_id': 's_1'
                             }, None])
        mqtt.assert_messages('homeassistant/sensor/s_2/config',
                             [{
                                 'name': 'S 2',
                                 'state_topic': '/my/topic',
                                 'unit_of_measurement': '°C',
                                 'value_template': '{{ value_json.s_2 }}',
                                 'unique_id': 's_2'
                             }, None])
        mqtt.assert_messages('homeassistant/sensor/s_3/config',
                             [{
                                 'name': 'S 3',
                                 'state_topic': '/my/topic',
                                 'unit_of_measurement': '°C',
                                 'value_template': '{{ value_json.s_3 }}',
                                 'unique_id': 's_3'
                             }, None])
        mqtt.assert_messages('homeassistant/sensor/test_1/config',
                             [{
                                 'name': 'Test 1',
                                 'state_topic': '/my/topic',
                                 'unit_of_measurement': '°C',
                                 'value_template': '{{ value_json.test_1 }}',
                                 'unique_id': 'test_1'
                             }, None])
        mqtt.assert_messages('homeassistant/sensor/test_2/config',
                             [{
                                 'name': 'Test 2',
                                 'state_topic': '/my/topic',
                                 'unit_of_measurement': '°C',
                                 'value_template': '{{ value_json.test_2 }}',
                                 'unique_id': 'test_2'
                             }, None])
        mqtt.assert_messages(
            'homeassistant/sensor/s_1_weight/config',
            [{
                'icon': 'mdi:weight',
                'name': 'S 1 weight',
                'state_topic': 'homeassistant/sensor/s_1_weight/state',
                'unit_of_measurement': '',
                'unique_id': 's_1_weight'
            }, None])
        mqtt.assert_messages(
            'homeassistant/sensor/s_2_weight/config',
            [{
                'icon': 'mdi:weight',
                'name': 'S 2 weight',
                'state_topic': 'homeassistant/sensor/s_2_weight/state',
                'unit_of_measurement': '',
                'unique_id': 's_2_weight'
            }, None])
        mqtt.assert_messages(
            'homeassistant/sensor/s_3_weight/config',
            [{
                'icon': 'mdi:weight',
                'name': 'S 3 weight',
                'state_topic': 'homeassistant/sensor/s_3_weight/state',
                'unit_of_measurement': '',
                'unique_id': 's_3_weight'
            }, None])
        mqtt.assert_messages('/my/topic', [{
            's_1': '1.00',
            's_2': '4.00',
            's_3': '7.00',
            'test_1': '4.00',
            'test_2': '4.00'
        }, {
            's_1': '1.00',
            's_2': '4.00',
            's_3': '7.00',
            'test_1': '4.00',
            'test_2': '5.29'
        }])
        mqtt.assert_messages('homeassistant/sensor/s_1_weight/state',
                             ['50.00', '20.00', '20.00'])
        mqtt.assert_messages('homeassistant/sensor/s_2_weight/state',
                             ['50.00', '40.00', '40.00'])
        mqtt.assert_messages('homeassistant/sensor/s_3_weight/state',
                             ['50.00', '80.00', '80.00'])