Czy ktoś posiada SLR-22?

  • 72 Odpowiedzi
  • 8700 Wyświetleń
*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #45 dnia: Grudnia 10, 2019, 17:39:22 »
W aplikacji wygląda to tak
- główny suwak reguluje jasność jednocześnie koloru i białego
- suwak białego reguluje tylko biały
- wyłącznik "tylko składowa w" wyłącza kolor

Z tym, że jeśli suwakiem od białego ustawimy 20% mocy to głównym biały można regulować już tylko w tym zakresie 0-20%, gdzie w tym czasie kolor działa normalnie w zakresie 0-100%

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #46 dnia: Grudnia 10, 2019, 18:52:13 »
Dzięki za te info. Dzisiaj już raczej nie zaglądnę do tego, ale może jutro się uda. Tak czy owak mam dane z którymi mogę pracować :)
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #47 dnia: Grudnia 10, 2019, 19:18:14 »
A jakbyś przechwycił i wrzucił tracę z aplikacji gdzie zmieniasz tryby pracy/ programy to byłoby super. Zrobiłbym na raz dwie rzeczy bo dzisiaj zacząłem robić obsługę trybów w HA
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #48 dnia: Grudnia 10, 2019, 20:24:04 »
- floating
- program1
- program6
- program10



{"command":20,"data":{"mode":2,"mode_val":0,"channel":1,"state":1,"id":10,"value":32}}
{"command":20,"data":{"id":10,"channel":1,"state":true,"value":32,"mode":2,"mode_val":0},"status":"notification"}
{"command":20,"status":"success","data":null}
{"command":20,"data":{"mode":2,"mode_val":1,"channel":1,"state":1,"id":10,"value":32}}
{"command":20,"data":{"id":10,"channel":1,"state":true,"value":32,"mode":2,"mode_val":1},"status":"notification"}
{"command":20,"status":"success","data":null}
{"command":20,"data":{"mode":2,"mode_val":6,"channel":1,"state":1,"id":10,"value":32}}
{"command":20,"data":{"id":10,"channel":1,"state":true,"value":32,"mode":2,"mode_val":6},"status":"notification"}
{"command":20,"status":"success","data":null}
{"command":20,"data":{"mode":2,"mode_val":10,"channel":1,"state":1,"id":10,"value":32}}
{"command":20,"data":{"id":10,"channel":1,"state":true,"value":32,"mode":2,"mode_val":10},"status":"notification"}
{"command":20,"status":"success","data":null}

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #49 dnia: Grudnia 10, 2019, 20:31:42 »
- floating
- program1
- program6
- program10



{"command":20,"data":{"mode":2,"mode_val":0,"channel":1,"state":1,"id":10,"value":32}}
{"command":20,"data":{"id":10,"channel":1,"state":true,"value":32,"mode":2,"mode_val":0},"status":"notification"}
{"command":20,"status":"success","data":null}
{"command":20,"data":{"mode":2,"mode_val":1,"channel":1,"state":1,"id":10,"value":32}}
{"command":20,"data":{"id":10,"channel":1,"state":true,"value":32,"mode":2,"mode_val":1},"status":"notification"}
{"command":20,"status":"success","data":null}
{"command":20,"data":{"mode":2,"mode_val":6,"channel":1,"state":1,"id":10,"value":32}}
{"command":20,"data":{"id":10,"channel":1,"state":true,"value":32,"mode":2,"mode_val":6},"status":"notification"}
{"command":20,"status":"success","data":null}
{"command":20,"data":{"mode":2,"mode_val":10,"channel":1,"state":1,"id":10,"value":32}}
{"command":20,"data":{"id":10,"channel":1,"state":true,"value":32,"mode":2,"mode_val":10},"status":"notification"}
{"command":20,"status":"success","data":null}
Wszystko jasne. Na szczęście wygląda to na dość oczywiste sterowanie i niczego nie trzeba się domyślać. mode = 2 a mode_val to numer programu. Powinno być prosto to dodać i w zasadzie mam to prawie gotowe tylko muszę mapping poprawić bo myślałem, że mode_val będzie = 0 a mode będzie równe numerowi programu, a jest nieco inaczej, ale to nie problem.
To chyba uda mi się zrobić szybciej niż fix dla sterowania białym LEDem, ale zobaczymy
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #50 dnia: Grudnia 10, 2019, 20:50:04 »
W HA niestety regulacja białego nie działa :(

W aplikacji, scenariusz:
przy włączonym tylko białym:
-zwiększyłem jasność
-zmniejszyłem jasność
wyłączyłem tylko biały
-wybrałem kolor
-zwiększyłem jasność
-zmniejszyłem jasność
A mógłbyś zrobić taki sam scenariusz w HA? Bo nie rozumiem dlaczego regulacja nie działa. W trace z aplikacji pojawiają się wartości, których bym się także spodziewał po integracji HA. Wygląda to też dość prosto. Niezależnie od wybrania czy tylko skłądowa W czy kolor mode = 1 a mode_val to wartość albo tylko samego białego, ale białego z kolorami. Dokładnie tak jak (sądzę, że) jest w HA.
Może nie przychodzi z HA informacja o wartości składowej białego? Zapodasz screena jak wygląda ekran do regulacji tego w HA?
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #51 dnia: Grudnia 10, 2019, 21:04:27 »
-właczenie
-zmiana białego na minimum
- zmiana białego na max

2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife.light] kwargs: {}
2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife.light] 'mode_val' value: 0000FFFF
2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife.light] turn_on for entity: light.sypialnia_rgbw(10-1). mode_val_int: 65535
2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife.light] RGB value: 65535. W value: 255
2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife] Executing action TURN_ON on channel 10-1, params: {'value': 25, 'mode_val': 65535, 'mode': 1}
2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife.pyextalife] TCP command to execute: b'{"command": 20, "data": {"id": 10, "channel": 1, "state": 1, "value": 25, "mode_val": 65535, "mode": 1}}\x03'
2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife.pyextalife] resp_js: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}]
2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife.pyextalife] resp_js: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}, {'command': 20, 'status': 'success', 'data': None}]
2019-12-10 20:02:14 DEBUG (Thread-2) [custom_components.extalife.pyextalife] resp_js (intermediary): [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}]
2019-12-10 20:02:14 DEBUG (SyncWorker_8) [custom_components.extalife.pyextalife] JSON response for command 20: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}, {'command': 20, 'status': 'success', 'data': None}]
2019-12-10 20:02:14 DEBUG (Thread-2) [custom_components.extalife] Received msg from Notification Listener thread: {'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}
2019-12-10 20:02:14 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:14 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:14 DEBUG (MainThread) [custom_components.extalife] State update notification callback for entity id: light.sypialnia_rgbw, data: {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}
2019-12-10 20:02:14 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:14 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife.light] kwargs: {'white_value': 8}
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife.light] 'mode_val' value: 0000FFFF
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife.light] turn_on for entity: light.sypialnia_rgbw(10-1). mode_val_int: 65535
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife.light] RGB value: 65535. W value: 8
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife] Executing action TURN_ON on channel 10-1, params: {'value': 25, 'mode_val': 65535, 'mode': 1}
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife.pyextalife] TCP command to execute: b'{"command": 20, "data": {"id": 10, "channel": 1, "state": 1, "value": 25, "mode_val": 65535, "mode": 1}}\x03'
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife.pyextalife] resp_js: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}]
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife.pyextalife] resp_js: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}, {'command': 20, 'status': 'success', 'data': None}]
2019-12-10 20:02:18 DEBUG (SyncWorker_17) [custom_components.extalife.pyextalife] JSON response for command 20: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}, {'command': 20, 'status': 'success', 'data': None}]
2019-12-10 20:02:18 DEBUG (Thread-2) [custom_components.extalife.pyextalife] resp_js (intermediary): [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}]
2019-12-10 20:02:18 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:18 DEBUG (Thread-2) [custom_components.extalife] Received msg from Notification Listener thread: {'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}
2019-12-10 20:02:18 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:18 DEBUG (MainThread) [custom_components.extalife] State update notification callback for entity id: light.sypialnia_rgbw, data: {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}
2019-12-10 20:02:18 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:18 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife.light] kwargs: {'white_value': 241}
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife.light] 'mode_val' value: 0000FFFF
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife.light] turn_on for entity: light.sypialnia_rgbw(10-1). mode_val_int: 65535
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife.light] RGB value: 65535. W value: 241
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife] Executing action TURN_ON on channel 10-1, params: {'value': 25, 'mode_val': 65535, 'mode': 1}
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife.pyextalife] TCP command to execute: b'{"command": 20, "data": {"id": 10, "channel": 1, "state": 1, "value": 25, "mode_val": 65535, "mode": 1}}\x03'
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife.pyextalife] resp_js: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}]
2019-12-10 20:02:21 DEBUG (Thread-2) [custom_components.extalife.pyextalife] resp_js (intermediary): [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}]
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife.pyextalife] resp_js: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}, {'command': 20, 'status': 'success', 'data': None}]
2019-12-10 20:02:21 DEBUG (Thread-2) [custom_components.extalife] Received msg from Notification Listener thread: {'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}
2019-12-10 20:02:21 DEBUG (SyncWorker_2) [custom_components.extalife.pyextalife] JSON response for command 20: [{'command': 20, 'data': {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}, 'status': 'notification'}, {'command': 20, 'status': 'success', 'data': None}]
2019-12-10 20:02:21 DEBUG (MainThread) [custom_components.extalife] State update notification callback for entity id: light.sypialnia_rgbw, data: {'id': 10, 'channel': 1, 'state': True, 'value': 25, 'mode': 1, 'mode_val': '0000FFFF'}
2019-12-10 20:02:21 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:21 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:21 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145
2019-12-10 20:02:21 DEBUG (MainThread) [custom_components.extalife.light] Supported flags: 145

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #52 dnia: Grudnia 10, 2019, 21:53:24 »
Łatwo przyszło, zobaczymy czy łatwo pójdzie ;)
Chyba naprawiłem sterowanie składową W oraz chyba dodałem support dla efektów SLR22 O:-) Zobaczymy co wyjdzie w praniu.

Musisz podmienić 2 pliki tym razem:
https://github.com/dgtal1/extalife_custom_component/blob/dev/extalife/light.py
https://github.com/dgtal1/extalife_custom_component/blob/dev/extalife/pyextalife.py

Trzymam kciuki  :-X
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #53 dnia: Grudnia 10, 2019, 21:58:24 »
jeszcze nie  ;)

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 150, in _async_setup_platform
    await asyncio.wait_for(asyncio.shield(task), SLOW_SETUP_MAX_WAIT)
  File "/usr/local/lib/python3.7/asyncio/tasks.py", line 442, in wait_for
    return fut.result()
  File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/config/custom_components/extalife/light.py", line 108, in setup_platform
    add_entities([ExtaLifeLight(device) for device in discovery_info])
  File "/config/custom_components/extalife/light.py", line 108, in <listcomp>
    add_entities([ExtaLifeLight(device) for device in discovery_info])
  File "/config/custom_components/extalife/light.py", line 118, in __init__
    self.effect_list = None
AttributeError: can't set attribute

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #54 dnia: Grudnia 10, 2019, 22:05:35 »
Nie mam pewności, ale to chyba coś pythonowego. Zrobiłem małą zmianę: https://github.com/dgtal1/extalife_custom_component/blob/dev/extalife/light.py

Zobacz teraz.
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #55 dnia: Grudnia 10, 2019, 22:09:03 »
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 408, in _async_add_entity
    await entity.async_update_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 275, in async_update_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 316, in _async_write_ha_state
    attr.update(self.state_attributes or {})
  File "/usr/src/homeassistant/homeassistant/components/light/__init__.py", line 493, in state_attributes
    data[ATTR_EFFECT] = self.effect
  File "/config/custom_components/extalife/light.py", line 217, in effect
    return MAP_MODE_VAL_EFFECT[mode_val]
NameError: name 'MAP_MODE_VAL_EFFECT' is not defined

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #56 dnia: Grudnia 10, 2019, 22:12:31 »
Ostatnia szansa. A teraz?
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #57 dnia: Grudnia 10, 2019, 22:14:36 »
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 408, in _async_add_entity
    await entity.async_update_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 275, in async_update_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 316, in _async_write_ha_state
    attr.update(self.state_attributes or {})
  File "/usr/src/homeassistant/homeassistant/components/light/__init__.py", line 493, in state_attributes
    data[ATTR_EFFECT] = self.effect
  File "/config/custom_components/extalife/light.py", line 217, in effect
    return MAP_MODE_VAL_EFFECT[mode_val]
KeyError: '3FFF00FF'

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #58 dnia: Grudnia 10, 2019, 22:22:05 »
No taaak...a teraz? O:-)
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Czy ktoś posiada SLR-22?
« Odpowiedź #59 dnia: Grudnia 10, 2019, 22:26:09 »
jeszcze nie ;)

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 127, in component_platform_discovered
    await self.async_setup_platform(platform, {}, info)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 226, in async_setup_platform
    self.hass, self.config, self.domain, platform_type
  File "/usr/src/homeassistant/homeassistant/setup.py", line 245, in async_prepare_setup_platform
    platform = integration.get_platform(domain)
  File "/usr/src/homeassistant/homeassistant/loader.py", line 232, in get_platform
    f"{self.pkg_path}.{platform_name}"
  File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 724, in exec_module
  File "<frozen importlib._bootstrap_external>", line 860, in get_code
  File "<frozen importlib._bootstrap_external>", line 791, in source_to_code
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/config/custom_components/extalife/light.py", line 215
    if not mode or mode != 2
                           ^
SyntaxError: invalid syntax