Skip to content

Commit b20c355

Browse files
committed
Added SA3_014M, JA3_014M
1 parent 4c43bf1 commit b20c355

File tree

3 files changed

+126
-4
lines changed

3 files changed

+126
-4
lines changed

inelsmqtt/const.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
GSB3_90SX = "GSB3-90SX"
5151
SA3_04M = "SA3-04M"
5252
SA3_012M = "SA3-012M"
53+
SA3_014M = "SA3-014M"
5354
IM3_80B = "IM3-80B"
5455
IM3_140M = "IM3-140M"
5556
WSB3_20H = "WSB3-20H"
@@ -84,6 +85,7 @@
8485
WSB3_40H = "WSB3-40H"
8586
RC3_610DALI = "RC3-610DALI"
8687
JA3_018M = "JA3-018M"
88+
JA3_014M = "JA3-014M"
8789
DALI_DMX_UNIT = "DALI-DMX-Unit"
8890
DALI_DMX_UNIT_2 = "DALI-DMX-Unit-2"
8991

@@ -128,6 +130,7 @@
128130
"106": SA3_04M,
129131
"107": SA3_06M,
130132
"108": SA3_012M,
133+
"169": SA3_014M,
131134
"109": SA3_022M,
132135

133136
"111": FA3_612M,
@@ -172,6 +175,8 @@
172175
"166": VIRT_CONTR,
173176
"167": VIRT_HEAT_REG,
174177
"168": VIRT_COOL_REG,
178+
179+
"170": JA3_014M,
175180
}
176181

177182
#TODO retire this system
@@ -205,7 +210,8 @@
205210
"105": SWITCH, # SA3_02M
206211
"106": SWITCH, # SA3_04M
207212
"107": SWITCH, # SA3_06M,
208-
"108": SWITCH, # SA3_012M
213+
"108": SWITCH, # SA3_012M,
214+
"169": SWITCH, # SA3_014M,
209215
"109": SWITCH, # SA3_022M,
210216

211217
"111": SWITCH, # FA3_612M,
@@ -249,6 +255,8 @@
249255
"166": CLIMATE, # VIRT_CONTR
250256
"167": CLIMATE, # VIRT_HEAT_REG
251257
"168": CLIMATE, # VIRT_COOL_REG
258+
259+
"170": COVER, # JA3_014M
252260
}
253261

254262

@@ -482,6 +490,11 @@ class Climate_presets(IntEnum):
482490
SA3_012M: [12, 13], #switch inputs
483491
}
484492

493+
SA3_014M_DATA = {
494+
RELAY: list(range(14)), #relays
495+
SA3_014M: [17, 18], #switch inputs
496+
}
497+
485498
IM3_80B_DATA = {
486499
IN: [0, 1],
487500
TEMP_IN: [2, 3],
@@ -694,6 +707,13 @@ class Climate_presets(IntEnum):
694707
RELAY_OVERFLOW: [21],
695708
}
696709

710+
JA3_014M_DATA = {
711+
SHUTTER: list(range(14)),
712+
SW: [17, 18],
713+
ALERT: [16],
714+
RELAY_OVERFLOW: [14, 15],
715+
}
716+
697717
DALI_DMX_UNIT_DATA = {
698718
OUT: list(range(4, 8)),
699719
}
@@ -734,6 +754,7 @@ class Climate_presets(IntEnum):
734754

735755
SA3_04M: SA3_04M_DATA,
736756
SA3_012M: SA3_012M_DATA,
757+
SA3_014M: SA3_014M_DATA,
737758
IM3_80B: IM3_80B_DATA,
738759
IM3_140M: IM3_140M_DATA,
739760
WSB3_20H: DEVICE_TYPE_124_DATA,
@@ -771,6 +792,7 @@ class Climate_presets(IntEnum):
771792
SA3_04M: 4,
772793
SA3_06M: 6,
773794
SA3_012M: 12,
795+
SA3_014M: 14,
774796
SA3_022M: 16,
775797
}
776798

@@ -906,6 +928,7 @@ class Climate_presets(IntEnum):
906928
SA3_01B: 1,
907929
SA3_04M: 4,
908930
SA3_012M: 12,
931+
SA3_014M: 14,
909932
}
910933

911934
# TWO CHANNEL DIMMER (101)

inelsmqtt/util.py

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
IOU3_108M_DATA,
4848
JA3_018M,
4949
JA3_018M_DATA,
50+
JA3_014M,
51+
JA3_014M_DATA,
5052
POSITION,
5153
RED,
5254
REQUIRED_TEMP,
@@ -101,6 +103,7 @@
101103
GSB3_90SX,
102104
SA3_04M,
103105
SA3_012M,
106+
SA3_014M,
104107
IM3_80B,
105108
IM3_140M,
106109
WHITE,
@@ -146,6 +149,7 @@
146149
GSB3_90SX_DATA,
147150
SA3_04M_DATA,
148151
SA3_012M_DATA,
152+
SA3_014M_DATA,
149153
IM3_80B_DATA,
150154
IM3_140M_DATA,
151155
DEVICE_TYPE_124_DATA,
@@ -493,6 +497,30 @@ def __find_ha_value(self) -> None:
493497
for r in simple_relay:
494498
set_val += "07\n" if r.is_on else "06\n"
495499
self.__inels_set_value=set_val
500+
elif self.__inels_type is SA3_014M:
501+
simple_relay: list[SimpleRelay] = []
502+
for relay in self.__trim_inels_status_bytes(SA3_014M_DATA, RELAY):
503+
simple_relay.append(SimpleRelay(is_on=((int(relay, 16) & 1) != 0)))
504+
505+
digital_inputs = self.__trim_inels_status_values(
506+
SA3_014M_DATA, SA3_014M, "")
507+
digital_inputs = f"0x{digital_inputs}"
508+
digital_inputs = f"{int(digital_inputs, 16):0>16b}"
509+
510+
sw = []
511+
for i in range(8):
512+
sw.append(digital_inputs[7 - i] == "1")
513+
for i in range(6):
514+
sw.append(digital_inputs[13 - i] == "1")
515+
516+
self.__ha_value = new_object(
517+
simple_relay=simple_relay,
518+
sw=sw,
519+
)
520+
set_val = ""
521+
for r in simple_relay:
522+
set_val += "07\n" if r.is_on else "06\n"
523+
self.__inels_set_value = set_val
496524
elif self.__inels_type is SA3_022M:
497525
re=[]
498526
for relay in self.__trim_inels_status_bytes(SA3_022M_DATA, RELAY):
@@ -1561,6 +1589,77 @@ def __find_ha_value(self) -> None:
15611589

15621590
)
15631591

1592+
self.__inels_set_value = f"{''.join([SIMPLE_SHUTTER_STATE_SET[x.state] for x in simple_shutters])}"
1593+
elif self.__inels_type is JA3_014M:
1594+
shutter_relays = []
1595+
for r in self.__trim_inels_status_bytes(JA3_014M_DATA, SHUTTER):
1596+
shutter_relays.append((int(r, 16) & 1) != 0)
1597+
1598+
simple_shutters = []
1599+
shutters = list(zip(shutter_relays[::2], shutter_relays[1::2]))
1600+
1601+
for s in shutters:
1602+
if s[0]:
1603+
state = Shutter_state.Open
1604+
elif s[1]:
1605+
state = Shutter_state.Closed
1606+
else:
1607+
state = Shutter_state.Stop_down
1608+
simple_shutters.append(
1609+
Shutter(
1610+
state=state,
1611+
is_closed=None
1612+
)
1613+
)
1614+
1615+
interface = []
1616+
digital_inputs = self.__trim_inels_status_values(
1617+
JA3_014M_DATA, SW, "")
1618+
digital_inputs = f"0x{digital_inputs}"
1619+
digital_inputs = f"{int(digital_inputs, 16):0>16b}"
1620+
1621+
for i in range(8):
1622+
interface.append(digital_inputs[7 - i] == "1")
1623+
for i in range(6):
1624+
interface.append(digital_inputs[13 - i] == "1")
1625+
1626+
alerts = self.__trim_inels_status_values(
1627+
JA3_014M_DATA, ALERT, "")
1628+
alerts = f"0x{alerts}"
1629+
alerts = f"{int(alerts, 16):0>8b}"
1630+
1631+
for i in range(7):
1632+
interface.append(alerts[6 - i] == "1")
1633+
1634+
# alert_power = alerts[4] == "1"
1635+
# alert_comm = [
1636+
# alerts[3] == "1",
1637+
# alerts[2] == "1",
1638+
# alerts[1] == "1"
1639+
# ]
1640+
1641+
overflows = self.__trim_inels_status_values(
1642+
JA3_014M_DATA, RELAY_OVERFLOW, "")
1643+
overflows = f"0x{overflows}"
1644+
overflows = f"{int(overflows, 16):0>16b}"
1645+
1646+
# TODO add overflows and alerts to the shutters
1647+
relay_overflow = []
1648+
for i in range(8):
1649+
interface.append(overflows[7 - i] == "1")
1650+
for i in range(6):
1651+
interface.append(overflows[13 - i] == "1")
1652+
1653+
# relay_overflow.append(alerts[0] == "1")
1654+
1655+
# I'll register them as an interface and replace the names to SW 1 up/down, etc...
1656+
1657+
self.__ha_value = new_object(
1658+
simple_shutters=simple_shutters,
1659+
interface=interface,
1660+
1661+
)
1662+
15641663
self.__inels_set_value = f"{''.join([SIMPLE_SHUTTER_STATE_SET[x.state] for x in simple_shutters])}"
15651664
elif self.__device_type is CLIMATE: # thermovalve
15661665
if self.__inels_type is RF_WIRELESS_THERMOVALVE:
@@ -2019,7 +2118,7 @@ def __find_inels_value(self) -> None:
20192118
self.__inels_set_value = DEVICE_TYPE_07_COMM_TEST
20202119
else:
20212120
self.__inels_set_value = SWITCH_WITH_TEMP_SET[self.__ha_value.simple_relay[0].is_on]
2022-
elif self.__inels_type in [SA3_01B, SA3_02B, SA3_02M, SA3_04M, SA3_06M, SA3_012M, IOU3_108M]:
2121+
elif self.__inels_type in [SA3_01B, SA3_02B, SA3_02M, SA3_04M, SA3_06M, SA3_012M, SA3_014M, IOU3_108M]:
20232122
value = ""
20242123
if hasattr(self.__ha_value, "simple_relay"):
20252124
for re in self.__ha_value.simple_relay:
@@ -2177,7 +2276,7 @@ def __find_inels_value(self) -> None:
21772276
else:
21782277
shutter_set = RF_SHUTTER_STATE_SET[self.__ha_value.shutters_with_pos[0].state] + "00\n00\n"
21792278
self.__inels_set_value = shutter_set
2180-
elif self.__inels_type is JA3_018M:
2279+
elif self.__inels_type in [JA3_018M, JA3_014M]:
21812280
self.__inels_set_value = f"{''.join([SIMPLE_SHUTTER_STATE_SET[x.state] for x in self.__ha_value.simple_shutters])}"
21822281
elif self.__device_type is CLIMATE:
21832282
if self.__inels_type is RF_WIRELESS_THERMOVALVE:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
setup(
55
name="elkoep-mqtt",
6-
version="0.2.25",
6+
version="0.2.26",
77
url="https://github.com/epdevlab/elkoep-mqtt",
88
license="MIT",
99
author="Elko EP s.r.o.",

0 commit comments

Comments
 (0)