예제 #1
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"])
예제 #2
0
    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"])
예제 #3
0
    def test_simple(self):
        mqtt = MockMqtt(self)

        sensor = SetSen(mqtt=mqtt)

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

        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',
                             ["7.50", "3.68"])
        mqtt.assert_messages('homeassistant/sensor/test_name/available', None)
예제 #4
0
    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'
        }])
예제 #5
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'])