Пример #1
0
def get_switch_test_device():
    mock = MagicMock()
    mock.side_effect = [response("device_list"), "1"]

    fritz = Fritzhome("10.0.0.1", "user", "pass")
    fritz._request = mock
    element = fritz.get_device_element("08761 0000434")
    device = FritzhomeDevice(fritz=fritz, node=element)
    return device
Пример #2
0
def get_switch_test_device():
    mock = MagicMock()
    mock.side_effect = [device_list_xml, '1']

    fritz = Fritzhome('10.0.0.1', 'user', 'pass')
    fritz._request = mock
    element = fritz.get_device_element('08761 0000434')
    device = FritzhomeDevice(fritz=fritz, node=element)
    return device
Пример #3
0
    def test_device_hkr_fw_03_54(self):
        mock = MagicMock()
        mock.side_effect = [
            device_hkr_fw_03_54_xml,
        ]

        fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        fritz._request = mock
        element = fritz.get_device_element('23456')
        device = FritzhomeDevice(node=element)

        eq_(device.ain, '23456')
        assert_true(device.present)
Пример #4
0
    def test_device_init_no_devicelock_element(self):
        mock = MagicMock()
        mock.side_effect = [
            device_no_devicelock_element_xml,
        ]

        fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        fritz._request = mock
        element = fritz.get_device_element('08761 0373130')
        device = FritzhomeDevice(node=element)

        eq_(device.ain, '08761 0373130')
        assert_true(device.present)
Пример #5
0
    def test_device_init_present_false(self):
        mock = MagicMock()
        mock.side_effect = [
            device_not_present_xml,
        ]

        fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        fritz._request = mock
        element = fritz.get_device_element('11960 0089208')
        device = FritzhomeDevice(node=element)

        eq_(device.ain, '11960 0089208')
        assert_false(device.present)
Пример #6
0
    def test_hkr_without_temperature_values(self):
        mock = MagicMock()
        mock.side_effect = [
            device_hkr_no_temp_values_xml,
        ]

        fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        fritz._request = mock
        element = fritz.get_device_element('11960 0071472')
        device = FritzhomeDevice(node=element)

        eq_(device.ain, '11960 0071472')
        eq_(device.offset, None)
        eq_(device.temperature, None)
Пример #7
0
    def test_device_alert_no_alertstate(self):
        mock = MagicMock()
        mock.side_effect = [
            device_alert_no_alertstate_xml,
        ]

        fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        fritz._request = mock
        element = fritz.get_device_element('05333 0077045-3')
        device = FritzhomeDevice(node=element)

        eq_(device.ain, '05333 0077045-3')
        assert_true(device.present)
        eq_(device.alert_state, None)
Пример #8
0
    def test_device_update(self):
        mock = MagicMock()
        mock.side_effect = [
            device_list_battery_ok_xml,
            device_list_battery_low_xml,
        ]

        fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        fritz._request = mock
        element = fritz.get_device_element('11959 0171328')
        device = FritzhomeDevice(fritz=fritz, node=element)

        assert_false(device.battery_low)
        device.update()
        assert_true(device.battery_low)
Пример #9
0
    def test_device_hkr_fw_03_50(self):
        mock = MagicMock()
        mock.side_effect = [
            device_hkr_fw_03_50_xml,
        ]

        fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        fritz._request = mock
        element = fritz.get_device_element('12345')
        device = FritzhomeDevice(node=element)

        eq_(device.ain, '12345')
        assert_true(device.present)
        eq_(device.device_lock, None)
        eq_(device.lock, None)
        eq_(device.error_code, None)
        eq_(device.battery_low, None)
Пример #10
0
    def test_device_init(self):
        mock = MagicMock()
        mock.side_effect = [
            device_list_xml,
        ]

        fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        fritz._request = mock
        element = fritz.get_device_element('08761 0000434')
        device = FritzhomeDevice(node=element)

        eq_(device.ain, '08761 0000434')
        eq_(device.fw_version, '03.33')
        assert_true(device.present)
        assert_true(device.has_switch)
        assert_true(device.has_temperature_sensor)
        assert_true(device.has_powermeter)
class TestFritzhomeDeviceThermostat(object):
    def setup(self):
        self.mock = MagicMock()
        self.fritz = Fritzhome("10.0.0.1", "user", "pass")
        self.fritz._request = self.mock
        self.fritz._devices = {}

    def test_device_hkr_fw_03_50(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fw_03_50"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        assert_true(device.present)
        eq_(device.device_lock, None)
        eq_(device.lock, None)
        eq_(device.error_code, None)
        eq_(device.battery_low, None)

    def test_device_hkr_fw_03_54(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fw_03_54"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("23456")
        assert_true(device.present)

    def test_get_target_temperature(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7"),
            "38",
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")

        eq_(device.get_target_temperature(), 19.0)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"12345",
                "switchcmd": "gethkrtsoll",
                "sid": None
            },
        )

    def test_get_eco_temperature(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7"),
            "40",
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")

        eq_(device.get_eco_temperature(), 20.0)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"12345",
                "switchcmd": "gethkrabsenk",
                "sid": None
            },
        )

    def test_get_comfort_temperature(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7"),
            "41",
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")

        eq_(device.get_comfort_temperature(), 20.5)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"12345",
                "switchcmd": "gethkrkomfort",
                "sid": None
            },
        )

    def test_hkr_without_temperature_values(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_no_temp_values"),
        ]

        element = self.fritz.get_device_element("11960 0071472")
        device = FritzhomeDevice(node=element)

        eq_(device.ain, "11960 0071472")
        eq_(device.offset, None)
        eq_(device.temperature, None)

    def test_hkr_get_state_on(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_state_on"),
            Helper.response("thermostat/device_hkr_state_on"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "on")

    def test_hkr_get_state_off(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_state_off"),
            Helper.response("thermostat/device_hkr_state_off"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "off")

    def test_hkr_get_state_eco(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_state_eco"),
            Helper.response("thermostat/device_hkr_state_eco"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "eco")

    def test_hkr_get_state_comfort(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_state_comfort"),
            Helper.response("thermostat/device_hkr_state_comfort"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "comfort")

    def test_hkr_get_state_manual(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_state_manual"),
            Helper.response("thermostat/device_hkr_state_manual"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "manual")

    def test_hkr_set_state_on(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_state_manual"),
            Helper.response("thermostat/device_hkr_state_manual"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")

        device.set_hkr_state("on")
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"12345",
                "switchcmd": "sethkrtsoll",
                "param": 254,
                "sid": None
            },
        )

    def test_hkr_set_state_off(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_state_manual"),
            Helper.response("thermostat/device_hkr_state_manual"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")

        device.set_hkr_state("off")
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"12345",
                "switchcmd": "sethkrtsoll",
                "param": 253,
                "sid": None
            },
        )

    def test_hkr_battery_level(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7")
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.battery_level, 70)

    def test_hkr_window_open(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7")
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.window_open, False)

    def test_hkr_summer_active(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7")
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.summer_active, True)

    def test_hkr_holiday_active(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7")
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.holiday_active, False)

    def test_hkr_nextchange_endperiod(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7")
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.nextchange_endperiod, 1538341200)

    def test_hkr_nextchange_temperature(self):
        self.mock.side_effect = [
            Helper.response("thermostat/device_hkr_fritzos_7")
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("12345")
        eq_(device.nextchange_temperature, 21.0)
Пример #12
0
class TestDevice(object):
    def setup(self):
        self.mock = MagicMock()
        self.fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        self.fritz._request = self.mock

    def test_device_init(self):
        self.mock.side_effect = [
            device_list_xml,
        ]

        device = self.fritz.get_device_by_ain('08761 0000434')

        eq_(device.ain, '08761 0000434')
        eq_(device.fw_version, '03.33')
        assert_true(device.present)
        assert_true(device.has_switch)
        assert_true(device.has_temperature_sensor)
        assert_true(device.has_powermeter)

    def test_device_init_present_false(self):
        self.mock.side_effect = [
            device_not_present_xml,
        ]

        device = self.fritz.get_device_by_ain('11960 0089208')

        eq_(device.ain, '11960 0089208')
        assert_false(device.present)

    def test_device_init_no_devicelock_element(self):
        self.mock.side_effect = [
            device_no_devicelock_element_xml,
        ]

        device = self.fritz.get_device_by_ain('08761 0373130')

        eq_(device.ain, '08761 0373130')
        assert_true(device.present)

    def test_device_umlaut(self):
        self.mock.side_effect = [
            device_with_umlaut_in_name_xml,
        ]

        device = self.fritz.get_device_by_ain('08761 0373130')

        eq_(device.ain, '08761 0373130')
        eq_(device.name, u'äöü')

    def test_device_hkr_fw_03_50(self):
        self.mock.side_effect = [
            device_hkr_fw_03_50_xml,
        ]

        device = self.fritz.get_device_by_ain('12345')
        assert_true(device.present)
        eq_(device.device_lock, None)
        eq_(device.lock, None)
        eq_(device.error_code, None)
        eq_(device.battery_low, None)

    def test_device_hkr_fw_03_54(self):
        self.mock.side_effect = [
            device_hkr_fw_03_54_xml,
        ]

        device = self.fritz.get_device_by_ain('23456')
        assert_true(device.present)

    def test_device_alert_on(self):
        self.mock.side_effect = [
            device_alert_on_xml,
        ]

        device = self.fritz.get_device_by_ain('05333 0077045-1')
        assert_true(device.present)
        eq_(device.alert_state, True)

    def test_device_alert_off(self):
        self.mock.side_effect = [
            device_alert_off_xml,
        ]

        device = self.fritz.get_device_by_ain('05333 0077045-2')
        assert_true(device.present)
        eq_(device.alert_state, False)

    def test_device_alert_no_alertstate(self):
        self.mock.side_effect = [
            device_alert_no_alertstate_xml,
        ]

        device = self.fritz.get_device_by_ain('05333 0077045-3')
        assert_true(device.present)
        eq_(device.alert_state, None)

    def test_device_update(self):
        self.mock.side_effect = [
            device_list_battery_ok_xml,
            device_list_battery_low_xml,
        ]

        device = self.fritz.get_device_by_ain('11959 0171328')
        assert_false(device.battery_low)
        device.update()
        assert_true(device.battery_low)

    def test_get_device_present(self):
        self.mock.side_effect = ['1', '0']

        device = get_switch_test_device()
        device._fritz._request = self.mock

        assert_true(device.get_present())
        assert_false(device.get_present())
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'getswitchpresent',
                'sid': None
            })

    def test_get_switch_state(self):
        self.mock.side_effect = ['1', '0']

        device = get_switch_test_device()
        device._fritz._request = self.mock

        assert_true(device.get_switch_state())
        assert_false(device.get_switch_state())
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'getswitchstate',
                'sid': None
            })

    def test_set_switch_state(self):
        device = get_switch_test_device()
        device._fritz._request = self.mock

        device.set_switch_state_on()
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'setswitchon',
                'sid': None
            })

        device.set_switch_state_off()
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'setswitchoff',
                'sid': None
            })

        device.set_switch_state_toggle()
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'setswitchtoggle',
                'sid': None
            })

    def test_get_switch_power(self):
        self.mock.side_effect = [
            '18000',
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_switch_power(), 18000)
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'getswitchpower',
                'sid': None
            })

    def test_get_switch_energy(self):
        self.mock.side_effect = [
            '2000',
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_switch_energy(), 2000)
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'getswitchenergy',
                'sid': None
            })

    def test_get_temperature(self):
        self.mock.side_effect = [
            '245',
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_temperature(), 24.5)
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'gettemperature',
                'sid': None
            })

    def test_get_target_temperature(self):
        self.mock.side_effect = [
            '38',
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_target_temperature(), 19.0)
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'gethkrtsoll',
                'sid': None
            })

    def test_get_eco_temperature(self):
        self.mock.side_effect = [
            '40',
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_eco_temperature(), 20.0)
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'gethkrabsenk',
                'sid': None
            })

    def test_get_comfort_temperature(self):
        self.mock.side_effect = [
            '41',
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_comfort_temperature(), 20.5)
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'08761 0000434',
                'switchcmd': 'gethkrkomfort',
                'sid': None
            })

    def test_hkr_without_temperature_values(self):
        self.mock.side_effect = [
            device_hkr_no_temp_values_xml,
        ]

        element = self.fritz.get_device_element('11960 0071472')
        device = FritzhomeDevice(node=element)

        eq_(device.ain, '11960 0071472')
        eq_(device.offset, None)
        eq_(device.temperature, None)

    def test_hkr_get_state_on(self):
        self.mock.side_effect = [
            device_hkr_state_on_xml,
            device_hkr_state_on_xml,
        ]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.get_hkr_state(), 'on')

    def test_hkr_get_state_off(self):
        self.mock.side_effect = [
            device_hkr_state_off_xml,
            device_hkr_state_off_xml,
        ]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.get_hkr_state(), 'off')

    def test_hkr_get_state_eco(self):
        self.mock.side_effect = [
            device_hkr_state_eco_xml,
            device_hkr_state_eco_xml,
        ]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.get_hkr_state(), 'eco')

    def test_hkr_get_state_comfort(self):
        self.mock.side_effect = [
            device_hkr_state_comfort_xml,
            device_hkr_state_comfort_xml,
        ]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.get_hkr_state(), 'comfort')

    def test_hkr_get_state_manual(self):
        self.mock.side_effect = [
            device_hkr_state_manual_xml,
            device_hkr_state_manual_xml,
        ]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.get_hkr_state(), 'manual')

    def test_hkr_set_state_on(self):
        self.mock.side_effect = [
            device_hkr_state_manual_xml,
            device_hkr_state_manual_xml,
        ]

        device = self.fritz.get_device_by_ain('12345')

        device.set_hkr_state('on')
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'12345',
                'switchcmd': 'sethkrtsoll',
                'param': 254,
                'sid': None
            })

    def test_hkr_set_state_off(self):
        self.mock.side_effect = [
            device_hkr_state_manual_xml,
            device_hkr_state_manual_xml,
        ]

        device = self.fritz.get_device_by_ain('12345')

        device.set_hkr_state('off')
        device._fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'ain': u'12345',
                'switchcmd': 'sethkrtsoll',
                'param': 253,
                'sid': None
            })

    def test_hkr_battery_level(self):
        self.mock.side_effect = [device_hkr_fritzos_7_xml]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.battery_level, 70)

    def test_hkr_window_open(self):
        self.mock.side_effect = [device_hkr_fritzos_7_xml]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.window_open, False)

    def test_hkr_summer_active(self):
        self.mock.side_effect = [device_hkr_fritzos_7_xml]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.summer_active, True)

    def test_hkr_holiday_active(self):
        self.mock.side_effect = [device_hkr_fritzos_7_xml]

        device = self.fritz.get_device_by_ain('12345')
        eq_(device.holiday_active, False)

    def test_magenta_smoke_alarm(self):
        self.mock.side_effect = [
            device_magenta_smoke_alarm_xml,
        ]
        device = self.fritz.get_device_by_ain('11324 0244498-1')
        assert_true(device.present)
        eq_(device.alert_state, None)
Пример #13
0
class TestFritzhome(object):
    def setup(self):
        self.mock = MagicMock()
        self.fritz = Fritzhome("10.0.0.1", "user", "pass")
        self.fritz._request = self.mock

    @raises(LoginError)
    def test_login_fail(self):
        self.mock.side_effect = [
            response("login_rsp_without_valid_sid"),
            response("login_rsp_without_valid_sid"),
        ]

        self.fritz.login()

    def test_login(self):
        self.mock.side_effect = [
            response("login_rsp_without_valid_sid"),
            response("login_rsp_with_valid_sid"),
        ]

        self.fritz.login()

    def test_logout(self):
        self.fritz.logout()
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/login_sid.lua",
            {"sid": None, "security:command/logout": "1"},
        )

    def test_aha_request(self):
        self.fritz._aha_request(cmd="testcmd")
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {"sid": None, "switchcmd": "testcmd"},
        )

        self.fritz._aha_request(cmd="testcmd", ain="1")
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {"sid": None, "switchcmd": "testcmd", "ain": "1"},
        )

        self.fritz._aha_request(cmd="testcmd", ain="1", param={"a": "1", "b": "2"})
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "switchcmd": "testcmd",
                "ain": "1",
                "param": {"a": "1", "b": "2"},
            },
        )

    @raises(InvalidError)
    def test_aha_request_invalid(self):
        self.mock.side_effect = [
            "inval",
        ]

        self.fritz._aha_request(cmd="estcmd")

    def test_get_device_element(self):
        self.mock.side_effect = [
            response("device_list"),
            response("device_list"),
            response("device_list"),
        ]

        element = self.fritz.get_device_element("08761 0000434")
        eq_(element.attrib["identifier"], "08761 0000434")
        eq_(element.attrib["fwversion"], "03.33")

        element = self.fritz.get_device_element("08761 1048079")
        eq_(element.attrib["identifier"], "08761 1048079")
        eq_(element.attrib["fwversion"], "03.44")

        element = self.fritz.get_device_element("unknown")
        eq_(element, None)

    def test_get_device_by_ain(self):
        self.mock.side_effect = [
            response("device_list"),
            response("device_list"),
        ]

        device = self.fritz.get_device_by_ain("08761 0000434")
        eq_(device.ain, "08761 0000434")

    def test_aha_get_devices(self):
        self.mock.side_effect = [
            response("device_list"),
        ]

        devices = self.fritz.get_devices()
        eq_(devices[0].name, "Steckdose")
        eq_(devices[1].name, "FRITZ!DECT Rep 100 #1")

    def test_get_device_name(self):
        self.mock.side_effect = ["testname"]

        eq_(self.fritz.get_device_name(ain="1234"), "testname")

        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {"sid": None, "ain": "1234", "switchcmd": "getswitchname"},
        )

    def test_set_target_temperature(self):
        self.fritz.set_target_temperature("1", 25.5)
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {"sid": None, "ain": "1", "switchcmd": "sethkrtsoll", "param": 51},
        )

        self.fritz.set_target_temperature("1", 0.0)
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {"sid": None, "ain": "1", "switchcmd": "sethkrtsoll", "param": 253},
        )

        self.fritz.set_target_temperature("1", 32.0)
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {"sid": None, "ain": "1", "switchcmd": "sethkrtsoll", "param": 254},
        )

    def test_get_alert_state(self):
        self.mock.side_effect = [
            response("device_list"),
        ]

        eq_(self.fritz.get_alert_state("05333 0077045-1"), True)
Пример #14
0
class TestDevice(object):
    def setup(self):
        self.mock = MagicMock()
        self.fritz = Fritzhome("10.0.0.1", "user", "pass")
        self.fritz._request = self.mock

    def test_device_init(self):
        self.mock.side_effect = [response("device_list")]

        device = self.fritz.get_device_by_ain("08761 0000434")

        eq_(device.ain, "08761 0000434")
        eq_(device.fw_version, "03.33")
        assert_true(device.present)
        assert_true(device.has_switch)
        assert_true(device.has_temperature_sensor)
        assert_true(device.has_powermeter)

    def test_device_init_present_false(self):
        self.mock.side_effect = [
            response("device_not_present"),
        ]

        device = self.fritz.get_device_by_ain("11960 0089208")

        eq_(device.ain, "11960 0089208")
        assert_false(device.present)

    def test_device_init_no_devicelock_element(self):
        self.mock.side_effect = [
            response("device_no_devicelock_element"),
        ]

        device = self.fritz.get_device_by_ain("08761 0373130")

        eq_(device.ain, "08761 0373130")
        assert_true(device.present)

    def test_device_umlaut(self):
        self.mock.side_effect = [
            response("device_with_umlaut_in_name"),
        ]

        device = self.fritz.get_device_by_ain("08761 0373130")

        eq_(device.ain, "08761 0373130")
        eq_(device.name, u"äöü")

    def test_device_hkr_fw_03_50(self):
        self.mock.side_effect = [
            response("device_hkr_fw_03_50"),
        ]

        device = self.fritz.get_device_by_ain("12345")
        assert_true(device.present)
        eq_(device.device_lock, None)
        eq_(device.lock, None)
        eq_(device.error_code, None)
        eq_(device.battery_low, None)

    def test_device_hkr_fw_03_54(self):
        self.mock.side_effect = [
            response("device_hkr_fw_03_54"),
        ]

        device = self.fritz.get_device_by_ain("23456")
        assert_true(device.present)

    def test_device_alert_on(self):
        self.mock.side_effect = [
            response("device_alert_on"),
        ]

        device = self.fritz.get_device_by_ain("05333 0077045-1")
        assert_true(device.present)
        eq_(device.alert_state, True)

    def test_device_alert_off(self):
        self.mock.side_effect = [
            response("device_alert_off"),
        ]

        device = self.fritz.get_device_by_ain("05333 0077045-2")
        assert_true(device.present)
        eq_(device.alert_state, False)

    def test_device_alert_no_alertstate(self):
        self.mock.side_effect = [
            response("device_alert_no_alertstate"),
        ]

        device = self.fritz.get_device_by_ain("05333 0077045-3")
        assert_true(device.present)
        eq_(device.alert_state, None)

    def test_device_update(self):
        self.mock.side_effect = [
            response("device_list_battery_ok"),
            response("device_list_battery_low"),
        ]

        device = self.fritz.get_device_by_ain("11959 0171328")
        assert_false(device.battery_low)
        device.update()
        assert_true(device.battery_low)

    def test_get_device_present(self):
        self.mock.side_effect = ["1", "0"]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        assert_true(device.get_present())
        assert_false(device.get_present())
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "getswitchpresent",
                "sid": None
            },
        )

    def test_get_switch_state(self):
        self.mock.side_effect = ["1", "0"]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        assert_true(device.get_switch_state())
        assert_false(device.get_switch_state())
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "getswitchstate",
                "sid": None
            },
        )

    def test_set_switch_state(self):
        device = get_switch_test_device()
        device._fritz._request = self.mock

        device.set_switch_state_on()
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "setswitchon",
                "sid": None
            },
        )

        device.set_switch_state_off()
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "setswitchoff",
                "sid": None
            },
        )

        device.set_switch_state_toggle()
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "setswitchtoggle",
                "sid": None
            },
        )

    def test_get_switch_power(self):
        self.mock.side_effect = [
            "18000",
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_switch_power(), 18000)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "getswitchpower",
                "sid": None
            },
        )

    def test_get_switch_energy(self):
        self.mock.side_effect = [
            "2000",
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_switch_energy(), 2000)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "getswitchenergy",
                "sid": None
            },
        )

    def test_get_temperature(self):
        self.mock.side_effect = [
            "245",
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_temperature(), 24.5)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "gettemperature",
                "sid": None
            },
        )

    def test_get_target_temperature(self):
        self.mock.side_effect = [
            "38",
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_target_temperature(), 19.0)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "gethkrtsoll",
                "sid": None
            },
        )

    def test_get_eco_temperature(self):
        self.mock.side_effect = [
            "40",
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_eco_temperature(), 20.0)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "gethkrabsenk",
                "sid": None
            },
        )

    def test_get_comfort_temperature(self):
        self.mock.side_effect = [
            "41",
        ]

        device = get_switch_test_device()
        device._fritz._request = self.mock

        eq_(device.get_comfort_temperature(), 20.5)
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"08761 0000434",
                "switchcmd": "gethkrkomfort",
                "sid": None
            },
        )

    def test_hkr_without_temperature_values(self):
        self.mock.side_effect = [
            response("device_hkr_no_temp_values"),
        ]

        element = self.fritz.get_device_element("11960 0071472")
        device = FritzhomeDevice(node=element)

        eq_(device.ain, "11960 0071472")
        eq_(device.offset, None)
        eq_(device.temperature, None)

    def test_hkr_get_state_on(self):
        self.mock.side_effect = [
            response("device_hkr_state_on"),
            response("device_hkr_state_on"),
        ]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "on")

    def test_hkr_get_state_off(self):
        self.mock.side_effect = [
            response("device_hkr_state_off"),
            response("device_hkr_state_off"),
        ]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "off")

    def test_hkr_get_state_eco(self):
        self.mock.side_effect = [
            response("device_hkr_state_eco"),
            response("device_hkr_state_eco"),
        ]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "eco")

    def test_hkr_get_state_comfort(self):
        self.mock.side_effect = [
            response("device_hkr_state_comfort"),
            response("device_hkr_state_comfort"),
        ]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "comfort")

    def test_hkr_get_state_manual(self):
        self.mock.side_effect = [
            response("device_hkr_state_manual"),
            response("device_hkr_state_manual"),
        ]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.get_hkr_state(), "manual")

    def test_hkr_set_state_on(self):
        self.mock.side_effect = [
            response("device_hkr_state_manual"),
            response("device_hkr_state_manual"),
        ]

        device = self.fritz.get_device_by_ain("12345")

        device.set_hkr_state("on")
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"12345",
                "switchcmd": "sethkrtsoll",
                "param": 254,
                "sid": None
            },
        )

    def test_hkr_set_state_off(self):
        self.mock.side_effect = [
            response("device_hkr_state_manual"),
            response("device_hkr_state_manual"),
        ]

        device = self.fritz.get_device_by_ain("12345")

        device.set_hkr_state("off")
        device._fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "ain": u"12345",
                "switchcmd": "sethkrtsoll",
                "param": 253,
                "sid": None
            },
        )

    def test_hkr_battery_level(self):
        self.mock.side_effect = [response("device_hkr_fritzos_7")]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.battery_level, 70)

    def test_hkr_window_open(self):
        self.mock.side_effect = [response("device_hkr_fritzos_7")]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.window_open, False)

    def test_hkr_summer_active(self):
        self.mock.side_effect = [response("device_hkr_fritzos_7")]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.summer_active, True)

    def test_hkr_holiday_active(self):
        self.mock.side_effect = [response("device_hkr_fritzos_7")]

        device = self.fritz.get_device_by_ain("12345")
        eq_(device.holiday_active, False)

    def test_magenta_smoke_alarm(self):
        self.mock.side_effect = [
            response("device_magenta_smoke_alarm"),
        ]
        device = self.fritz.get_device_by_ain("11324 0244498-1")
        assert_true(device.present)
        eq_(device.alert_state, None)
Пример #15
0
class TestFritzhome(object):
    def setup(self):
        self.mock = MagicMock()
        self.fritz = Fritzhome('10.0.0.1', 'user', 'pass')
        self.fritz._request = self.mock

    @raises(LoginError)
    def test_login_fail(self):
        self.mock.side_effect = [
            login_rsp_without_valid_sid,
            login_rsp_without_valid_sid,
        ]

        self.fritz.login()

    def test_login(self):
        self.mock.side_effect = [
            login_rsp_without_valid_sid,
            login_rsp_with_valid_sid,
        ]

        self.fritz.login()

    def test_logout(self):
        self.fritz.logout()
        self.fritz._request.assert_called_with(
            'http://10.0.0.1/login_sid.lua', {
                'sid': None,
                'security:command/logout': '1'
            })

    def test_aha_request(self):
        self.fritz._aha_request(cmd='testcmd')
        self.fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'sid': None,
                'switchcmd': 'testcmd'
            })

        self.fritz._aha_request(cmd='testcmd', ain='1')
        self.fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'sid': None,
                'switchcmd': 'testcmd',
                'ain': '1'
            })

        self.fritz._aha_request(cmd='testcmd',
                                ain='1',
                                param={
                                    'a': '1',
                                    'b': '2'
                                })
        self.fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'sid': None,
                'switchcmd': 'testcmd',
                'ain': '1',
                'param': {
                    'a': '1',
                    'b': '2'
                }
            })

    @raises(InvalidError)
    def test_aha_request_invalid(self):
        self.mock.side_effect = [
            'inval',
        ]

        self.fritz._aha_request(cmd='estcmd')

    def test_get_device_element(self):
        self.mock.side_effect = [
            device_list_xml,
            device_list_xml,
            device_list_xml,
        ]

        element = self.fritz.get_device_element('08761 0000434')
        eq_(element.getAttribute('identifier'), '08761 0000434')
        eq_(element.getAttribute('fwversion'), '03.33')

        element = self.fritz.get_device_element('08761 1048079')
        eq_(element.getAttribute('identifier'), '08761 1048079')
        eq_(element.getAttribute('fwversion'), '03.44')

        element = self.fritz.get_device_element('unknown')
        eq_(element, None)

    def test_get_device_by_ain(self):
        self.mock.side_effect = [
            device_list_xml,
            device_list_xml,
        ]

        device = self.fritz.get_device_by_ain('08761 0000434')
        eq_(device.ain, '08761 0000434')

    def test_aha_get_devices(self):
        self.mock.side_effect = [
            device_list_xml,
        ]

        devices = self.fritz.get_devices()
        eq_(devices[0].name, 'Steckdose')
        eq_(devices[1].name, 'FRITZ!DECT Rep 100 #1')

    def test_get_device_name(self):
        self.mock.side_effect = ['testname']

        eq_(self.fritz.get_device_name(ain='1234'), 'testname')

        self.fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'sid': None,
                'ain': '1234',
                'switchcmd': 'getswitchname'
            })

    def test_set_target_temperature(self):
        self.fritz.set_target_temperature('1', 25.5)
        self.fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'sid': None,
                'ain': '1',
                'switchcmd': 'sethkrtsoll',
                'param': 51
            })

        self.fritz.set_target_temperature('1', 0.0)
        self.fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'sid': None,
                'ain': '1',
                'switchcmd': 'sethkrtsoll',
                'param': 253
            })

        self.fritz.set_target_temperature('1', 32.0)
        self.fritz._request.assert_called_with(
            'http://10.0.0.1/webservices/homeautoswitch.lua', {
                'sid': None,
                'ain': '1',
                'switchcmd': 'sethkrtsoll',
                'param': 254
            })

    def test_get_alert_state(self):
        self.mock.side_effect = [
            device_list_xml,
        ]

        eq_(self.fritz.get_alert_state('05333 0077045-1'), True)