TISControlProtocol 1.1.2__tar.gz → 1.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/PKG-INFO +1 -1
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/pyproject.toml +1 -1
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/ProtocolHandler.py +9 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/api.py +3 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/device_scan.py +26 -18
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/.gitignore +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/.vscode/c_cpp_properties.json +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/.vscode/launch.json +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/.vscode/settings.json +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/.vscode/tasks.json +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/LICENSE +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/MANIFEST.in +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/README.md +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/dev/pump_version.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/BytesHelper.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/__init__.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/AckCoordinator.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketDispatcher.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketExtractor.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/AnalogFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/AutoBinaryFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/BinaryFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/ClimateBinaryFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/ClimateControlFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/ControlResponseHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/DiscoveryFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/EnergyFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/FloorBinaryFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/HealthFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/LunaTempFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/RealTimeFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/SearchResponseHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/SecurityFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/UpdateResponseHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/UpdateSecurityHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/WeatherFeedbackHandler.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketHandlers/__init__.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketProtocol.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketReceiver.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/PacketSender.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/UpdateCoordinator.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/udp/__init__.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/__init__.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/__init__.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/bill_config_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/change_password_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/get_bill_config_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/get_key_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/password_dashboard.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/password_form_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/passwords_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/restart_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/scan_devices_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/shared.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/submit_password.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/tis_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/toggle_connection_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/update_endpoint.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/crc.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/display.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/logo.png +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/package-lock.json +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/package.json +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/postcss.config.mjs +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/public/__init__.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/public/dashboard.css +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/public/password_dashboard_loader.js +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/__init__.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/base.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/cms.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/manager.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/shared.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/views/__init__.py +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/views/password_dashboard/index.html +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/views/password_dashboard/styles.css +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/views/password_form/index.html +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/views/password_form/styles.css +0 -0
- {tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/tests/test.py +0 -0
|
@@ -540,3 +540,12 @@ class TISProtocolHandler:
|
|
|
540
540
|
destination_ip=entity.gateway,
|
|
541
541
|
additional_bytes=[entity.channel_number, entity.universal_type],
|
|
542
542
|
)
|
|
543
|
+
|
|
544
|
+
def generate_heartbeat_packet(self, device) -> TISPacket:
|
|
545
|
+
return TISPacket(
|
|
546
|
+
device_id=device.device_id,
|
|
547
|
+
operation_code=TISProtocolHandler.OPERATION_DISCOVERY,
|
|
548
|
+
source_ip=device.api.host,
|
|
549
|
+
destination_ip=device.gateway,
|
|
550
|
+
additional_bytes=[],
|
|
551
|
+
)
|
|
@@ -166,6 +166,9 @@ class TISApi:
|
|
|
166
166
|
for appliance, details in data["appliances"].items()
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
+
self.raw_devices = data["devices"]
|
|
170
|
+
logging.info(f"raw devices: {self.raw_devices}")
|
|
171
|
+
|
|
169
172
|
grouped = defaultdict(list)
|
|
170
173
|
for appliance, details in converted.items():
|
|
171
174
|
grouped[details["appliance_type"]].append({appliance: details})
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/device_scan.py
RENAMED
|
@@ -16,6 +16,19 @@ from .cms import CMSDataSender
|
|
|
16
16
|
protocol_handler = TISProtocolHandler()
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
class TISDevice:
|
|
20
|
+
def __init__(self, tis_api, device) -> None:
|
|
21
|
+
self.api = tis_api
|
|
22
|
+
addr = device["device_address"]
|
|
23
|
+
if isinstance(addr, str):
|
|
24
|
+
self.device_id = [int(x.strip()) for x in addr.split(",") if x.strip()]
|
|
25
|
+
else:
|
|
26
|
+
self.device_id = [int(x) for x in addr]
|
|
27
|
+
self.device_type_code = device["device_type_code"]
|
|
28
|
+
self.device_type_name = device["device_name"]
|
|
29
|
+
self.gateway = str(device["gateway"])
|
|
30
|
+
|
|
31
|
+
|
|
19
32
|
class DeviceScanService(BaseService):
|
|
20
33
|
"""Service to periodically scan TIS network devices and report to CMS."""
|
|
21
34
|
|
|
@@ -30,7 +43,6 @@ class DeviceScanService(BaseService):
|
|
|
30
43
|
self.api = tis_api
|
|
31
44
|
self.cms_url = cms_url
|
|
32
45
|
self._scan_task_unsub = None
|
|
33
|
-
self.discovery_packet = protocol_handler.generate_discovery_packet()
|
|
34
46
|
self.sender = CMSDataSender(
|
|
35
47
|
external_url=f"{self.cms_url}/api/scan-devices",
|
|
36
48
|
hass=self.hass,
|
|
@@ -98,17 +110,15 @@ class DeviceScanService(BaseService):
|
|
|
98
110
|
async def scan_and_send(self) -> bool:
|
|
99
111
|
"""Perform network device scan and send payload to CMS."""
|
|
100
112
|
logging.info("Starting periodic device scan for CMS")
|
|
101
|
-
|
|
113
|
+
connected_devices = await self.discover_network_devices()
|
|
102
114
|
devices = [
|
|
103
115
|
{
|
|
104
|
-
"device_id": device
|
|
105
|
-
"device_type_code": device
|
|
106
|
-
"device_type_name":
|
|
107
|
-
|
|
108
|
-
),
|
|
109
|
-
"gateway": device["source_ip"],
|
|
116
|
+
"device_id": device.device_id,
|
|
117
|
+
"device_type_code": device.device_type_code,
|
|
118
|
+
"device_type_name": device.device_type_name,
|
|
119
|
+
"gateway": device.gateway,
|
|
110
120
|
}
|
|
111
|
-
for device in
|
|
121
|
+
for device in connected_devices
|
|
112
122
|
]
|
|
113
123
|
|
|
114
124
|
mac_address = await get_real_mac("end0")
|
|
@@ -119,16 +129,14 @@ class DeviceScanService(BaseService):
|
|
|
119
129
|
|
|
120
130
|
return await self.sender.send_data(payload)
|
|
121
131
|
|
|
122
|
-
async def discover_network_devices(self,
|
|
132
|
+
async def discover_network_devices(self, attempts=5) -> list:
|
|
123
133
|
"""Discover network devices by broadcasting discovery packets."""
|
|
124
134
|
self.api.hass.data[self.api.domain]["discovered_devices"] = []
|
|
125
|
-
for _ in range(broadcast_attempts):
|
|
126
|
-
if (
|
|
127
|
-
self.api.protocol
|
|
128
|
-
and hasattr(self.api.protocol, "sender")
|
|
129
|
-
and self.api.protocol.sender
|
|
130
|
-
):
|
|
131
|
-
await self.api.protocol.sender.broadcast_packet(self.discovery_packet)
|
|
132
|
-
await asyncio.sleep(1)
|
|
133
135
|
|
|
136
|
+
for device_dict in self.api.raw_devices:
|
|
137
|
+
device = TISDevice(self.api, device_dict)
|
|
138
|
+
packet = protocol_handler.generate_heartbeat_packet(device)
|
|
139
|
+
await self.api.protocol.sender.send_packet_with_ack(
|
|
140
|
+
packet, attempts=attempts
|
|
141
|
+
)
|
|
134
142
|
return self.api.hass.data[self.api.domain]["discovered_devices"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/Protocols/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/submit_password.py
RENAMED
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/tis_endpoint.py
RENAMED
|
File without changes
|
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/apis/update_endpoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/package-lock.json
RENAMED
|
File without changes
|
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/postcss.config.mjs
RENAMED
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/public/__init__.py
RENAMED
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/public/dashboard.css
RENAMED
|
File without changes
|
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/__init__.py
RENAMED
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/base.py
RENAMED
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/cms.py
RENAMED
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/services/manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{tiscontrolprotocol-1.1.2 → tiscontrolprotocol-1.1.4}/src/TISControlProtocol/views/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|