class TestFritzhomeDeviceTemperature(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_get_temperature(self): self.mock.side_effect = [ Helper.response("thermostat/device_hkr_fritzos_7"), "245", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("12345") eq_(device.get_temperature(), 24.5) device._fritz._request.assert_called_with( "http://10.0.0.1/webservices/homeautoswitch.lua", { "ain": u"12345", "switchcmd": "gettemperature", "sid": None }, )
class TestFritzhomeDeviceButton(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_button_fritzdect440(self): self.mock.side_effect = [ Helper.response("button/device_button_fritzdect440"), ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("12345 0000001") assert_true(device.present) eq_(device.alert_state, None) assert_true(device.has_temperature_sensor) assert_true(device.has_button) assert_false(device.battery_low) eq_(device.battery_level, 100) assert_false(device.tx_busy) button = device.get_button_by_ain("12345 0000001-1") eq_(button.name, "Taster Wohnzimmer: Oben rechts") eq_(button.last_pressed, 1608557681) button = device.get_button_by_ain("12345 0000001-2") eq_(button.name, "Taster Wohnzimmer: Unten rechts") eq_(button.last_pressed, 1608557682)
class TestFritzhomeDevicePowermeter(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_get_switch_power(self): self.mock.side_effect = [ Helper.response("powermeter/device_list"), "18000", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0000434") 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 = [ Helper.response("powermeter/device_list"), "2000", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0000434") 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 }, )
class TestFritzhomeDeviceAlarm(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_alert_on(self): self.mock.side_effect = [ Helper.response("alarm/device_alert_on"), ] self.fritz.update_devices() 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 = [ Helper.response("alarm/device_alert_off"), ] self.fritz.update_devices() 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 = [ Helper.response("alarm/device_alert_no_alertstate"), ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("05333 0077045-3") assert_true(device.present) eq_(device.alert_state, None) def test_magenta_smoke_alarm(self): self.mock.side_effect = [ Helper.response("alarm/device_magenta_smoke_alarm"), ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("11324 0244498-1") assert_true(device.present) eq_(device.alert_state, None)
class TestFritzhomeDeviceSwitch(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_get_switch_state(self): self.mock.side_effect = [ Helper.response("switch/device_list"), "1", "0", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0000434") 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_toggle(self): self.mock.side_effect = [ Helper.response("switch/device_list"), "1", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0000434") 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_set_switch_state_on(self): self.mock.side_effect = [ Helper.response("switch/device_list"), "1", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0000434") 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}, ) def test_set_switch_state_off(self): self.mock.side_effect = [ Helper.response("switch/device_list"), "1", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0000434") 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}, )
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)
class TestFritzhomeDeviceBase(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_init(self): self.mock.side_effect = [Helper.response("base/device_list")] self.fritz.update_devices() 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 = [ Helper.response("base/device_not_present"), ] self.fritz.update_devices() 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 = [ Helper.response("base/device_no_devicelock_element"), ] self.fritz.update_devices() 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 = [ Helper.response("base/device_with_umlaut_in_name"), ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0373130") eq_(device.ain, "08761 0373130") eq_(device.name, u"äöü") def test_device_update(self): self.mock.side_effect = [ Helper.response("thermostat/device_list_battery_ok"), Helper.response("thermostat/device_list_battery_low"), ] self.fritz.update_devices() 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 = [ Helper.response("base/device_list"), "1", "0", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0000434") 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 }, )
class TestFritzhomeDeviceLightBulb(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_init(self): self.mock.side_effect = [ Helper.response("lightbulb/device_FritzDECT500_34_12_16") ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("12345") eq_(device.ain, "12345") eq_(device.fw_version, "34.10.16.16.009") assert_true(device.present) # Lightbulb has power and is connected # Get sub-device device = self.fritz.get_device_by_ain("12345-1") assert_true(device.has_lightbulb) assert_true(device.state) # Lightbulb is switched on eq_(device.color_mode, "1") eq_(device.supported_color_mode, "5") eq_(device.hue, 358) eq_(device.saturation, 180) eq_(device.color_temp, None) eq_(device.name, u"FRITZ!DECT 500 Büro") def test_device_init_color_temp_mode(self): self.mock.side_effect = [ Helper.response("lightbulb/device_FritzDECT500_34_12_16_color_temp_mode") ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("12345") eq_(device.ain, "12345") eq_(device.fw_version, "34.10.16.16.009") assert_true(device.present) # Lightbulb has power and is connected # Get sub-device device = self.fritz.get_device_by_ain("12345-1") assert_true(device.has_lightbulb) assert_true(device.state) # Lightbulb is switched on eq_(device.color_mode, "4") eq_(device.supported_color_mode, "5") eq_(device.hue, None) eq_(device.saturation, None) eq_(device.color_temp, 2800) eq_(device.name, u"FRITZ!DECT 500 Büro") def test_get_colors(self): self.mock.side_effect = [ Helper.response("lightbulb/device_FritzDECT500_34_12_16") ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("12345-1") self.mock.side_effect = [ Helper.response("lightbulb/getcolors_FritzDECT500_34_12_16") ] colors = device.get_colors() expected_colors = { 'Rot': [ ('358', '180', '230'), ('358', '112', '237'), ('358', '54', '245') ], 'Orange': [ ('35', '214', '255'), ('35', '140', '255'), ('35', '72', '255') ], 'Gelb': [ ('52', '153', '252'), ('52', '102', '252'), ('52', '51', '255') ], 'Grasgrün': [ ('92', '123', '248'), ('92', '79', '250'), ('92', '38', '252') ], 'Grün': [ ('120', '160', '220'), ('120', '82', '232'), ('120', '38', '242') ], 'Türkis': [ ('160', '145', '235'), ('160', '84', '242'), ('160', '41', '248') ], 'Cyan': [ ('195', '179', '255'), ('195', '118', '255'), ('195', '59', '255') ], 'Himmelblau': [ ('212', '169', '252'), ('212', '110', '252'), ('212', '56', '255') ], 'Blau': [ ('225', '204', '255'), ('225', '135', '255'), ('225', '67', '255') ], 'Violett': [ ('266', '169', '250'), ('266', '110', '250'), ('266', '54', '252') ], 'Magenta': [ ('296', '140', '250'), ('296', '92', '252'), ('296', '46', '255') ], 'Pink': [ ('335', '180', '255'), ('335', '107', '248'), ('335', '51', '250') ] } eq_(colors, expected_colors) def test_get_color_temps(self): self.mock.side_effect = [ Helper.response("lightbulb/device_FritzDECT500_34_12_16") ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("12345-1") self.mock.side_effect = [ Helper.response("lightbulb/getcolors_FritzDECT500_34_12_16") ] temps = device.get_color_temps() expected_temps = [ '2700', '3000', '3400', '3800', '4200', '4700', '5300', '5900', '6500' ] eq_(temps, expected_temps) def test_set_color(self): self.mock.side_effect = [ Helper.response("lightbulb/device_FritzDECT500_34_12_16"), "1", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("12345-1") device.set_color(["180", "200"], 0) device._fritz._request.assert_called_with( "http://10.0.0.1/webservices/homeautoswitch.lua", {"switchcmd": "setcolor", "sid": None, "hue": 180, "saturation": 200, "duration": 0, "ain": "12345-1"}, ) def test_set_unmapped_color(self): self.mock.side_effect = [ Helper.response("lightbulb/device_FritzDECT500_34_12_16"), "1", ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("12345-1") device.set_unmapped_color(["180", "200"], 0) device._fritz._request.assert_called_with( "http://10.0.0.1/webservices/homeautoswitch.lua", {"switchcmd": "setunmappedcolor", "sid": None, "hue": 180, "saturation": 200, "duration": 0, "ain": "12345-1"}, )
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 = [ Helper.response("login_rsp_without_valid_sid"), Helper.response("login_rsp_without_valid_sid"), ] self.fritz.login() def test_login(self): self.mock.side_effect = [ Helper.response("login_rsp_without_valid_sid"), Helper.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 = [ Helper.response("base/device_list"), Helper.response("base/device_list"), Helper.response("base/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 = [ Helper.response("base/device_list"), Helper.response("base/device_list"), ] self.fritz.update_devices() device = self.fritz.get_device_by_ain("08761 0000434") eq_(device.ain, "08761 0000434") def test_aha_get_devices(self): self.mock.side_effect = [ Helper.response("base/device_list"), ] self.fritz.update_devices() 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 }, )