From ecb2a8cffe61d80844480b498b59519357fcd13c Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Thu, 13 Sep 2018 00:42:49 +0200 Subject: [PATCH 01/13] Bumped version --- changelog.txt | 2 ++ setup.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 983a2c085..e6bbbdb0a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,5 @@ +Version 0.1.48 (2018-) + Version 0.1.48 (2018-09-13) - Added Support for HmIP-SWO-PL and HmIP-SWO-B @dickesW - Fix callbacks for channel 0 @klada diff --git a/setup.py b/setup.py index 612667dfb..13d0bf345 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ def readme(): PACKAGE_NAME = 'pyhomematic' HERE = os.path.abspath(os.path.dirname(__file__)) -VERSION = '0.1.48' +VERSION = '0.1.49' PACKAGES = find_packages(exclude=['tests', 'tests.*', 'dist', 'build']) From e78a0488e51d0c33e77dcea0c5d7d5052bb53d5f Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 26 Aug 2018 16:34:55 +0200 Subject: [PATCH 02/13] Revert "Fix callbacks for channel 0" --- pyhomematic/devicetypes/generic.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/pyhomematic/devicetypes/generic.py b/pyhomematic/devicetypes/generic.py index 5490deb37..ea456433c 100644 --- a/pyhomematic/devicetypes/generic.py +++ b/pyhomematic/devicetypes/generic.py @@ -59,9 +59,6 @@ def event(self, interface_id, key, value): % (self._ADDRESS, interface_id, key, value)) if key == PARAM_UNREACH: self._unreach = value - if not self._eventcallbacks: - LOG.debug("HMGeneric.event: No callbacks registered for event %s (%s)", key, str(self)) - for callback in self._eventcallbacks: LOG.debug("HMDevice.event: Using callback %s " % str(callback)) callback(self._ADDRESS, interface_id, key, value) @@ -355,14 +352,9 @@ def setEventCallback(self, callback, bequeath=True, channel=0): Signature for callback-functions: foo(address, interface_id, key, value) """ if hasattr(callback, '__call__'): - LOG.debug( - "Adding callback '%s' for %s:%s (%s)", - str(callback), self._name, channel, str(self) - ) - if channel == 0: self._eventcallbacks.append(callback) - if not bequeath and channel in self._hmchannels: + elif not bequeath and channel > 0 and channel in self._hmchannels: self._hmchannels[channel]._eventcallbacks.append(callback) if bequeath: for channel, device in self._hmchannels.items(): From 0e2fc6402468de2eea9825ba4c10ffb4eff4a6e8 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 26 Aug 2018 16:53:27 +0200 Subject: [PATCH 03/13] Create PULL_REQUEST_TEMPLATE.md --- PULL_REQUEST_TEMPLATE.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 PULL_REQUEST_TEMPLATE.md diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..8430f20ee --- /dev/null +++ b/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +Please point your pull request at the __devel__ branch. Also provide information some information about the changes. + +This pull request: +- fixes issue: \ +- adds support for HomeMatic device: \ + - New class: \ + - Home Assistant [platform](https://github.com/home-assistant/home-assistant/blob/0da3e737651a150c17016f43b5f9144deff7ddd7/homeassistant/components/homematic/__init__.py#L65): \ +- does the following: \ From 4d8b01149b45eff49aff557eea340ecafc032bb7 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 26 Aug 2018 17:03:30 +0200 Subject: [PATCH 04/13] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 43 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 17 +++++++++ 2 files changed, 60 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..bbe18cda1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,43 @@ +--- +name: Bug report +about: Create a report to help us improve + +--- + +Make sure you are running the latest version of pyhomematic (and Home Assistant) before reporting an issue. + +_If you encounter the problem when using Home Assistant, please fill out the following information_ + +**Home Assistant version (if applicable):** +0.n.n + +**Problem-relevant `configuration.yaml` entries and steps to reproduce:** +```yaml + +``` + +Use the following configuration for debug-output of the related components: +```yaml +logs: + homeassistant.components.homematic: debug + pyhomematic: debug +``` + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..066b2d920 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest an idea for this project + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From fbce6d2013492d107e0dbad76a6be13506d369e6 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 26 Aug 2018 17:07:18 +0200 Subject: [PATCH 05/13] Update PULL_REQUEST_TEMPLATE.md --- PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 8430f20ee..8bb1d3a24 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ -Please point your pull request at the __devel__ branch. Also provide information some information about the changes. +Please point your pull request at the __devel__ branch. Also provide some information about the changes. This pull request: - fixes issue: \ From 7597d2029c757c12e07a93ff8399856f2cf18b3c Mon Sep 17 00:00:00 2001 From: Daniel Klaffenbach Date: Sat, 8 Sep 2018 09:47:59 +0200 Subject: [PATCH 06/13] Move RSSI handling to helper class Apparently some devices use RSSI_PEER and some use RSSI_DEVICE, so we need to use the appropriate helper in the actual device class. See danielperna84/pyhomematic#164 --- pyhomematic/devicetypes/generic.py | 10 ++++++++-- pyhomematic/devicetypes/helper.py | 24 ++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/pyhomematic/devicetypes/generic.py b/pyhomematic/devicetypes/generic.py index ea456433c..1157aa500 100644 --- a/pyhomematic/devicetypes/generic.py +++ b/pyhomematic/devicetypes/generic.py @@ -213,7 +213,7 @@ def __init__(self, device_description, proxy, resolveparamsets=False): # - 0...n / getValue from channel (fix) self._SENSORNODE = {} self._BINARYNODE = {} - self._ATTRIBUTENODE = {"RSSI_PEER": [0]} + self._ATTRIBUTENODE = {} self._WRITENODE = {} self._EVENTNODE = {} self._ACTIONNODE = {} @@ -334,7 +334,13 @@ def _setNodeData(self, name, metadata, data, channel=None): return False def get_rssi(self, channel=0): - return self.getAttributeData("RSSI_PEER", channel) + """ + This is a stub method which is implemented by the helpers + HelperRssiPeer/HelperRssiDevice in order to provide a suitable + implementation for the device. + """ + #pylint: disable=unused-argument + return 0 @property def ELEMENT(self): diff --git a/pyhomematic/devicetypes/helper.py b/pyhomematic/devicetypes/helper.py index 3f17f7c6d..10734fdd8 100644 --- a/pyhomematic/devicetypes/helper.py +++ b/pyhomematic/devicetypes/helper.py @@ -238,8 +238,28 @@ def __init__(self, device_description, proxy, resolveparamsets=False): "PRESS_LONG_RELEASE": self.ELEMENT}) class HelperWired(HMDevice): - """Remove the RSSI_PEER attribute""" + """Remove the RSSI-related attributes""" def __init__(self, device_description, proxy, resolveparamsets=False): super().__init__(device_description, proxy, resolveparamsets) - self.ATTRIBUTENODE.pop("RSSI_PEER", None) + self.ATTRIBUTENODE.pop("RSSI_DEVICE", None) + + +class HelperRssiDevice(HMDevice): + """Used for devices which report their RSSI value through RSSI_DEVICE""" + def __init__(self, device_description, proxy, resolveparamsets=False): + super().__init__(device_description, proxy, resolveparamsets) + self.ATTRIBUTENODE["RSSI_DEVICE"] = [0] + + def get_rssi(self, channel=0): + return self.getAttributeData("RSSI_DEVICE", channel) + + +class HelperRssiPeer(HMDevice): + """Used for devices which report their RSSI value through RSSI_PEER""" + def __init__(self, device_description, proxy, resolveparamsets=False): + super().__init__(device_description, proxy, resolveparamsets) + self.ATTRIBUTENODE["RSSI_PEER"] = [0] + + def get_rssi(self, channel=0): + return self.getAttributeData("RSSI_PEER", channel) From a86432c9618f97cf6cb295a424d9ac2457f60883 Mon Sep 17 00:00:00 2001 From: Daniel Klaffenbach Date: Wed, 12 Sep 2018 21:50:01 +0200 Subject: [PATCH 07/13] Use new RSSI helpers for some classes --- pyhomematic/devicetypes/actors.py | 8 ++++---- pyhomematic/devicetypes/misc.py | 4 ++-- pyhomematic/devicetypes/sensors.py | 12 ++++++------ pyhomematic/devicetypes/thermostats.py | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pyhomematic/devicetypes/actors.py b/pyhomematic/devicetypes/actors.py index 4aa350aa3..cea861894 100644 --- a/pyhomematic/devicetypes/actors.py +++ b/pyhomematic/devicetypes/actors.py @@ -4,7 +4,7 @@ from pyhomematic.devicetypes.misc import HMEvent from pyhomematic.devicetypes.helper import ( HelperWorking, HelperActorState, HelperActorLevel, HelperActorBlindTilt, HelperActionOnTime, - HelperActionPress, HelperEventRemote, HelperWired) + HelperActionPress, HelperEventRemote, HelperWired, HelperRssiPeer) LOG = logging.getLogger(__name__) @@ -34,7 +34,7 @@ def stop(self, channel=None): self.actionNodeData("STOP", True, channel) -class Blind(GenericBlind, HelperWorking): +class Blind(GenericBlind, HelperWorking, HelperRssiPeer): """ Blind switch that raises and lowers roller shutters or window blinds. """ @@ -174,7 +174,7 @@ def ELEMENT(self): return [2] -class Switch(GenericSwitch, HelperWorking): +class Switch(GenericSwitch, HelperWorking, HelperRssiPeer): """ Switch turning plugged in device on or off. """ @@ -268,7 +268,7 @@ def ELEMENT(self): return self._doc -class RFSiren(GenericSwitch, HelperWorking): +class RFSiren(GenericSwitch, HelperWorking, HelperRssiPeer): """ HM-Sec-Sir-WM Siren """ diff --git a/pyhomematic/devicetypes/misc.py b/pyhomematic/devicetypes/misc.py index d2c4970ae..c93021a8f 100644 --- a/pyhomematic/devicetypes/misc.py +++ b/pyhomematic/devicetypes/misc.py @@ -1,6 +1,6 @@ import logging from pyhomematic.devicetypes.generic import HMDevice -from pyhomematic.devicetypes.helper import HelperActionPress, HelperEventRemote, HelperEventPress +from pyhomematic.devicetypes.helper import HelperActionPress, HelperEventRemote, HelperEventPress, HelperRssiPeer LOG = logging.getLogger(__name__) @@ -21,7 +21,7 @@ def ELEMENT(self): return [c for c in range(1, 51)] -class Remote(HMEvent, HelperEventRemote, HelperActionPress): +class Remote(HMEvent, HelperEventRemote, HelperActionPress, HelperRssiPeer): """Remote handle buttons.""" @property diff --git a/pyhomematic/devicetypes/sensors.py b/pyhomematic/devicetypes/sensors.py index 81d3c4ea6..2c9bb3a36 100644 --- a/pyhomematic/devicetypes/sensors.py +++ b/pyhomematic/devicetypes/sensors.py @@ -5,7 +5,7 @@ HelperLowBatIP, HelperSabotageIP, HelperBinaryState, HelperSensorState, - HelperWired, HelperEventRemote) + HelperWired, HelperEventRemote, HelperRssiPeer, HelperRssiDevice) LOG = logging.getLogger(__name__) @@ -35,7 +35,7 @@ def ELEMENT(self): return [1] -class ShutterContact(IPShutterContact, HelperSabotage): +class ShutterContact(IPShutterContact, HelperSabotage, HelperRssiPeer): """Door / Window contact that emits its open/closed state.""" pass @@ -60,7 +60,7 @@ def is_not_tilted(self, channel=None): return not self.get_state(channel) -class RotaryHandleSensor(HMSensor, HelperSensorState, HelperLowBat, HelperSabotage): +class RotaryHandleSensor(HMSensor, HelperSensorState, HelperLowBat, HelperSabotage, HelperRssiPeer): """Window handle contact.""" def is_open(self, channel=None): """ Returns True if the handle is set to open. """ @@ -105,7 +105,7 @@ def is_added_strong(self, channel=None): return self.get_state(channel) == 2 -class WaterSensor(HMSensor, HelperSensorState, HelperLowBat): +class WaterSensor(HMSensor, HelperSensorState, HelperLowBat, HelperRssiPeer): """Watter detect sensor.""" def is_dry(self, channel=None): @@ -121,7 +121,7 @@ def is_water(self, channel=None): return self.get_state(channel) == 2 -class PowermeterGas(HMSensor): +class PowermeterGas(HMSensor, HelperRssiPeer): """Powermeter for Gas and energy.""" def __init__(self, device_description, proxy, resolveparamsets=False): @@ -167,7 +167,7 @@ def __init__(self, device_description, proxy, resolveparamsets=False): "ERROR_SMOKE_CHAMBER": self.ELEMENT}) -class IPSmoke(HMSensor): +class IPSmoke(HMSensor, HelperRssiDevice): """HomeMatic IP Smoke sensor""" def __init__(self, device_description, proxy, resolveparamsets=False): diff --git a/pyhomematic/devicetypes/thermostats.py b/pyhomematic/devicetypes/thermostats.py index 434a37047..1a3d811dc 100644 --- a/pyhomematic/devicetypes/thermostats.py +++ b/pyhomematic/devicetypes/thermostats.py @@ -1,7 +1,7 @@ import logging from pyhomematic.devicetypes.generic import HMDevice from pyhomematic.devicetypes.sensors import AreaThermostat -from pyhomematic.devicetypes.helper import HelperValveState, HelperBatteryState, HelperLowBat, HelperLowBatIP +from pyhomematic.devicetypes.helper import HelperValveState, HelperBatteryState, HelperLowBat, HelperLowBatIP, HelperRssiPeer LOG = logging.getLogger(__name__) @@ -123,7 +123,7 @@ def __init__(self, device_description, proxy, resolveparamsets=False): "CONTROL_MODE": [1]}) -class Thermostat(HMThermostat, HelperBatteryState, HelperValveState): +class Thermostat(HMThermostat, HelperBatteryState, HelperValveState, HelperRssiPeer): """ HM-CC-RT-DN, HM-CC-RT-DN-BoM ClimateControl-Radiator Thermostat that measures temperature and allows to set a target temperature or use some automatic mode. @@ -144,7 +144,7 @@ def __init__(self, device_description, proxy, resolveparamsets=False): "CONTROL_MODE": [4]}) -class ThermostatWall(HMThermostat, AreaThermostat, HelperBatteryState): +class ThermostatWall(HMThermostat, AreaThermostat, HelperBatteryState, HelperRssiPeer): """ HM-TC-IT-WM-W-EU ClimateControl-Wall Thermostat that measures temperature and allows to set a target temperature or use some automatic mode. From 7ab2114a18d2869083cf3856c57f4c7ffbf95058 Mon Sep 17 00:00:00 2001 From: Daniel Klaffenbach Date: Wed, 12 Sep 2018 22:08:40 +0200 Subject: [PATCH 08/13] Add test to make sure HelperRssiPeer and HelperRssiDevice are not used together --- tests/test_pyhomematic.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/test_pyhomematic.py b/tests/test_pyhomematic.py index 3419c289c..6b960944c 100644 --- a/tests/test_pyhomematic.py +++ b/tests/test_pyhomematic.py @@ -8,6 +8,7 @@ from pyhomematic import vccu from pyhomematic import HMConnection from pyhomematic import devicetypes +from pyhomematic.devicetypes.helper import HelperRssiDevice, HelperRssiPeer logging.basicConfig(level=logging.INFO) LOG = logging.getLogger(__name__) @@ -145,5 +146,27 @@ def test_0_pyhomematic_classes(self): else: LOG.warning("Device class missing for: %s" % deviceobject.TYPE) + +class Test_3_HelperClassHierarchy(unittest.TestCase): + """ + Some helper classes are mutally exclusive (such as HelperRssiPeer/HelperRssiDevice). + + Since many device implementations inherit from other implementation classes we need + to be extra careful when plugging in such mutally excluse helpers somewhere in the + class hierarchy. This test case may be used for checking the currently available device + classes for such situations. + """ + def setUp(self): + self.device_classes = set(devicetypes.SUPPORTED.values()) + + def test_rssi_helper(self): + for klass in self.device_classes: + both_rssi_helpers_used = issubclass(HelperRssiDevice, klass) and issubclass(HelperRssiPeer, klass) + self.assertFalse( + both_rssi_helpers_used, + "The class %s inherits from both HelperRssiDevice and HelperRssiPeer, which is not supported." % klass + ) + + if __name__ == '__main__': unittest.main() From 743ce190fa0ddc8d3e38f33a727eafdf65e0bd20 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 16 Sep 2018 19:48:34 +0200 Subject: [PATCH 09/13] Add RSSI support for IP Powermeter switches --- pyhomematic/devicetypes/actors.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyhomematic/devicetypes/actors.py b/pyhomematic/devicetypes/actors.py index cea861894..8701dc3bf 100644 --- a/pyhomematic/devicetypes/actors.py +++ b/pyhomematic/devicetypes/actors.py @@ -4,7 +4,7 @@ from pyhomematic.devicetypes.misc import HMEvent from pyhomematic.devicetypes.helper import ( HelperWorking, HelperActorState, HelperActorLevel, HelperActorBlindTilt, HelperActionOnTime, - HelperActionPress, HelperEventRemote, HelperWired, HelperRssiPeer) + HelperActionPress, HelperEventRemote, HelperWired, HelperRssiPeer, HelperRssiDevice) LOG = logging.getLogger(__name__) @@ -377,7 +377,7 @@ def ELEMENT(self): return [1, 2] -class IPSwitchPowermeter(IPSwitch, HMSensor): +class IPSwitchPowermeter(IPSwitch, HMSensor, HelperRssiDevice): """ Switch turning plugged in device on or off and measuring energy consumption. """ From 3abbd967539e81ee2935f8798f6afe4f71e4310c Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 16 Sep 2018 19:56:44 +0200 Subject: [PATCH 10/13] Update changelog.txt --- changelog.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index e6bbbdb0a..63b30a393 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,5 @@ -Version 0.1.48 (2018-) +Version 0.1.48 (2018-09-) +- Rework RSSI handling (Issue #164) @klada Version 0.1.48 (2018-09-13) - Added Support for HmIP-SWO-PL and HmIP-SWO-B @dickesW From 7bf0e763311a9310994ab852e460f290eb92f57e Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 16 Sep 2018 20:00:45 +0200 Subject: [PATCH 11/13] Add RSSI for KeyMatic --- pyhomematic/devicetypes/actors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyhomematic/devicetypes/actors.py b/pyhomematic/devicetypes/actors.py index 8701dc3bf..21f66d108 100644 --- a/pyhomematic/devicetypes/actors.py +++ b/pyhomematic/devicetypes/actors.py @@ -286,7 +286,7 @@ def ELEMENT(self): return [1, 2, 3] -class KeyMatic(HMActor, HelperActorState): +class KeyMatic(HMActor, HelperActorState, HelperRssiPeer): """ Lock, Unlock or Open KeyMatic. """ From 28002c54dfa042a090bdbb570798a0dc9b2e771e Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 16 Sep 2018 20:46:15 +0200 Subject: [PATCH 12/13] Prevent failure of everything when single host is down (fixes #162) --- changelog.txt | 1 + pyhomematic/_hm.py | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/changelog.txt b/changelog.txt index 63b30a393..a6073224b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,6 @@ Version 0.1.48 (2018-09-) - Rework RSSI handling (Issue #164) @klada +- Prevent failure of everything when single host is down (Issue #162) Version 0.1.48 (2018-09-13) - Added Support for HmIP-SWO-PL and HmIP-SWO-B @dickesW diff --git a/pyhomematic/_hm.py b/pyhomematic/_hm.py index 38acbed97..51cf838b5 100644 --- a/pyhomematic/_hm.py +++ b/pyhomematic/_hm.py @@ -462,6 +462,7 @@ def __init__(self, self.systemcallback = systemcallback self.resolveparamsets = resolveparamsets self.proxies = {} + self.failed_inits = [] # Create proxies to interact with CCU / Homegear LOG.debug("__init__: Creating proxies") @@ -551,12 +552,15 @@ def proxyInit(self): except Exception as err: LOG.debug("proxyInit: Exception: %s" % str(err)) LOG.warning("Failed to initialize proxy") - raise Exception + self.failed_inits.append(interface_id) def stop(self): """To stop the server we de-init from the CCU / Homegear, then shut down our XML-RPC server.""" stopped = [] - for _, proxy in self.proxies.items(): + for interface_id, proxy in self.proxies.items(): + if interface_id in self.failed_inits: + LOG.warning("ServerThread.stop: Not performing de-init for %s" % interface_id) + continue if proxy._callbackip and proxy._callbackport: callbackip = proxy._callbackip callbackport = proxy._callbackport @@ -573,7 +577,6 @@ def stop(self): except Exception as err: LOG.debug("proxyInit: Exception: %s" % str(err)) LOG.warning("Failed to de-initialize proxy") - raise Exception self.proxies.clear() LOG.info("Shutting down server") self.server.shutdown() From d0d29aa449ff8c305606ed14a67eb44f20d5d6aa Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 16 Sep 2018 21:46:56 +0200 Subject: [PATCH 13/13] Final changelog --- changelog.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog.txt b/changelog.txt index a6073224b..a11a7dea2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,5 @@ -Version 0.1.48 (2018-09-) -- Rework RSSI handling (Issue #164) @klada +Version 0.1.49 (2018-09-16) +- Rework RSSI handling (Issue #164, Issue #121) @klada - Prevent failure of everything when single host is down (Issue #162) Version 0.1.48 (2018-09-13)