Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix #153 and fix #154 #156

Merged
merged 9 commits into from
Mar 30, 2024
21 changes: 18 additions & 3 deletions custom_components/jablotron80/jablotron.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from custom_components.jablotron80.const import DEVICE_CONTROL_PANEL
LOGGER = logging.getLogger(__package__)
expected_warning_level = logging.warn
expected_warning_level = logging.WARN
verbose_connection_logging = False
_loop = None # global variable to store event loop

Expand Down Expand Up @@ -661,6 +661,7 @@ def __init__(self, device: str) -> None:
self._stop = threading.Event()
self._connection = None
self._messages = asyncio.Event() # are there messages to process
self.update_devices = False

def get_record(self) -> List[bytearray]:

Expand Down Expand Up @@ -796,6 +797,8 @@ def read_send_packet_loop(self) -> None:

send_cmd.confirm(True)
confirmed = True
if send_cmd.name == 'Details':
self.update_devices = True
self._cmd_q.task_done()

retries -=1
Expand Down Expand Up @@ -1694,13 +1697,13 @@ def _get_zone_via_object(self,object: JablotronCommon) -> JablotronZone:
return object.zone

def _clear_triggers(self) -> None:
for device in self._active_devices.values():
for device in self._devices.values():
#if self.system_mode == JA80CentralUnit.SYSTEM_MODE_UNSPLIT:
# device.deactivate()
#else:
device.active = False
self._active_devices.clear()
for code in self._active_codes.values():
for code in self._codes.values():
#if self.system_mode == JA80CentralUnit.SYSTEM_MODE_UNSPLIT:
# device.deactivate()
#else:
Expand Down Expand Up @@ -1748,6 +1751,14 @@ def _activate_code_object(self, source):
if not zone is None:
zone.code_activated(source)

def _update_device(self):
for device in self._devices.values():
if device.device_id in self._active_devices:
device.active = True
else:
device.active = False
self._active_devices.clear()

def _activate_device(self, source):
if isinstance(source,JablotronDevice):
source.active = True
Expand Down Expand Up @@ -2198,6 +2209,10 @@ def _process_state(self, data: bytearray, packet_data: str) -> None:
else:
LOGGER.debug('message: ' + message)

if self._connection.update_devices:
self._update_device()
self._connection.update_devices = False

#LOGGER.info(f'Status: {hex(status)}, {format(status, "008b")}')
#LOGGER.info(f'{self}')

Expand Down