|
47 | 47 | IOU3_108M_DATA, |
48 | 48 | JA3_018M, |
49 | 49 | JA3_018M_DATA, |
| 50 | + JA3_014M, |
| 51 | + JA3_014M_DATA, |
50 | 52 | POSITION, |
51 | 53 | RED, |
52 | 54 | REQUIRED_TEMP, |
|
101 | 103 | GSB3_90SX, |
102 | 104 | SA3_04M, |
103 | 105 | SA3_012M, |
| 106 | + SA3_014M, |
104 | 107 | IM3_80B, |
105 | 108 | IM3_140M, |
106 | 109 | WHITE, |
|
146 | 149 | GSB3_90SX_DATA, |
147 | 150 | SA3_04M_DATA, |
148 | 151 | SA3_012M_DATA, |
| 152 | + SA3_014M_DATA, |
149 | 153 | IM3_80B_DATA, |
150 | 154 | IM3_140M_DATA, |
151 | 155 | DEVICE_TYPE_124_DATA, |
@@ -493,6 +497,30 @@ def __find_ha_value(self) -> None: |
493 | 497 | for r in simple_relay: |
494 | 498 | set_val += "07\n" if r.is_on else "06\n" |
495 | 499 | 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 |
496 | 524 | elif self.__inels_type is SA3_022M: |
497 | 525 | re=[] |
498 | 526 | for relay in self.__trim_inels_status_bytes(SA3_022M_DATA, RELAY): |
@@ -1561,6 +1589,77 @@ def __find_ha_value(self) -> None: |
1561 | 1589 |
|
1562 | 1590 | ) |
1563 | 1591 |
|
| 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 | + |
1564 | 1663 | self.__inels_set_value = f"{''.join([SIMPLE_SHUTTER_STATE_SET[x.state] for x in simple_shutters])}" |
1565 | 1664 | elif self.__device_type is CLIMATE: # thermovalve |
1566 | 1665 | if self.__inels_type is RF_WIRELESS_THERMOVALVE: |
@@ -2019,7 +2118,7 @@ def __find_inels_value(self) -> None: |
2019 | 2118 | self.__inels_set_value = DEVICE_TYPE_07_COMM_TEST |
2020 | 2119 | else: |
2021 | 2120 | 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]: |
2023 | 2122 | value = "" |
2024 | 2123 | if hasattr(self.__ha_value, "simple_relay"): |
2025 | 2124 | for re in self.__ha_value.simple_relay: |
@@ -2177,7 +2276,7 @@ def __find_inels_value(self) -> None: |
2177 | 2276 | else: |
2178 | 2277 | shutter_set = RF_SHUTTER_STATE_SET[self.__ha_value.shutters_with_pos[0].state] + "00\n00\n" |
2179 | 2278 | self.__inels_set_value = shutter_set |
2180 | | - elif self.__inels_type is JA3_018M: |
| 2279 | + elif self.__inels_type in [JA3_018M, JA3_014M]: |
2181 | 2280 | self.__inels_set_value = f"{''.join([SIMPLE_SHUTTER_STATE_SET[x.state] for x in self.__ha_value.simple_shutters])}" |
2182 | 2281 | elif self.__device_type is CLIMATE: |
2183 | 2282 | if self.__inels_type is RF_WIRELESS_THERMOVALVE: |
|
0 commit comments