Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 17 additions & 10 deletions resources/tydomd/tydom/MessageHandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,15 +97,11 @@ async def parse_response(self, incoming):
msg_type = 'msg_info'

if msg_type is None:
logger.error('Unknown message type received', data)
logger.warning('Unknown message type received (%s)', data)
else:
logger.debug('Message received detected as (%s)', msg_type)
try:
if msg_type == 'msg_info':
parsed = json.loads(data)
self.jeedom_com.send_change_immediate({'msg_type': msg_type, 'data': parsed})

elif msg_type == 'msg_config':
if msg_type == 'msg_config':
parsed = json.loads(data)
self.jeedom_com.send_change_immediate({'msg_type': msg_type, 'data': parsed})

Expand All @@ -129,9 +125,14 @@ async def parse_response(self, incoming):
elif msg_type == 'msg_html':
pass

elif msg_type == 'msg_info':
parsed = json.loads(data)
self.jeedom_com.send_change_immediate({'msg_type': msg_type, 'data': parsed})

logger.debug('Incoming data parsed with success')
except Exception as e:
logger.error('Error on parsing tydom response (%s)', e)
logger.error('Incoming data (%s)', data)

async def parse_cmeta_data(self, parsed):
for i in parsed:
Expand All @@ -145,24 +146,28 @@ async def parse_cmeta_data(self, parsed):
for params in elem["parameters"]:
if params["name"] == "dest":
for dest in params["enum_values"]:
url = "/devices/" + str(i["id"]) + "/endpoints/" + str(endpoint["id"]) + "/cdata?name=" + elem["name"] + "&dest=" + dest + "&reset=false"
url = "/devices/" + str(i["id"]) + "/endpoints/" + str(
endpoint["id"]) + "/cdata?name=" + elem["name"] + "&dest=" + dest + "&reset=false"
await self.tydom_client.get_poll_device_data(url)

elif elem["name"] == "energyInstant":
for params in elem["parameters"]:
if params["name"] == "unit":
for unit in params["enum_values"]:
url = "/devices/" + str(i["id"]) + "/endpoints/" + str(endpoint["id"]) + "/cdata?name=" + elem["name"] + "&unit=" + unit + "&reset=false"
url = "/devices/" + str(i["id"]) + "/endpoints/" + str(
endpoint["id"]) + "/cdata?name=" + elem["name"] + "&unit=" + unit + "&reset=false"
await self.tydom_client.get_poll_device_data(url)

elif elem["name"] == "energyDistrib":
for params in elem["parameters"]:
if params["name"] == "src":
for src in params["enum_values"]:
url = "/devices/" + str(i["id"]) + "/endpoints/" + str(endpoint["id"]) + "/cdata?name=" + elem["name"] + "&period=YEAR&periodOffset=0&src=" + src
url = "/devices/" + str(i["id"]) + "/endpoints/" + str(
endpoint["id"]) + "/cdata?name=" + elem["name"] + "&period=YEAR&periodOffset=0&src=" + src
await self.tydom_client.get_poll_device_data(url)

url = "/devices/" + str(i["id"]) + "/endpoints/" + str(endpoint["id"]) + "/cdata?name=" + elem["name"] + "&period=MONTH&periodOffset=0&src=" + src
url = "/devices/" + str(i["id"]) + "/endpoints/" + str(
endpoint["id"]) + "/cdata?name=" + elem["name"] + "&period=MONTH&periodOffset=0&src=" + src
await self.tydom_client.get_poll_device_data(url)

elif elem["name"] == "energyHisto":
Expand All @@ -175,6 +180,8 @@ async def parse_cmeta_data(self, parsed):
url = "/devices/" + str(i["id"]) + "/endpoints/" + str(endpoint["id"]) + "/cdata?name=" + elem["name"] + "&period=YEARS&dest=" + dest
await self.tydom_client.get_poll_device_data(url)

logger.debug('Metadata configuration updated')

# PUT response DIRTY parsing
def parse_put_response(self, bytes_str, start=6):
# TODO : Find a cooler way to parse nicely the PUT HTTP response
Expand Down
5 changes: 3 additions & 2 deletions resources/tydomd/tydom/TydomClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

import base64
import http.client
import json
import logging
import os
import ssl
import json

import websockets
from requests.auth import HTTPDigestAuth
Expand Down Expand Up @@ -196,7 +196,8 @@ async def put_devices_data(self, device_id, endpoint_id, name, value):
body +
"\r\n\r\n")
a_bytes = bytes(str_request, "ascii")
logger.debug("Sending message to tydom (%s %s)", "PUT data", body)
logger.debug("Sending message to tydom (%s %s)",
"PUT devices data", body)
await self.connection.send(a_bytes)
return 0

Expand Down
55 changes: 32 additions & 23 deletions resources/tydomd/tydomd.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,29 +52,38 @@ async def read_socket():
return

async def listen_tydom():
try:
await tydom_client.connect()
await tydom_client.setup()
while 1:
try:
incoming_bytes_str = await tydom_client.connection.recv()
message_handler = MessageHandler(
incoming_bytes=incoming_bytes_str,
tydom_client=tydom_client,
jeedom_com=jeedom_com
)
await message_handler.incoming_triage()
except Exception as e:
logging.warning("Unable to handle message: %s", e)
except socket.gaierror as e:
logging.error("Socket error: %s", e)
sys.exit(1)
except ConnectionRefusedError as e:
logging.error("Connection refused: %s", e)
sys.exit(1)
except Exception as e:
logging.error("Error: %s", e)
sys.exit(1)
while True:
try:
await tydom_client.connect()
await tydom_client.setup()
while True:
try:
incoming_bytes_str = await tydom_client.connection.recv()
message_handler = MessageHandler(
incoming_bytes=incoming_bytes_str,
tydom_client=tydom_client,
jeedom_com=jeedom_com
)
await message_handler.incoming_triage()
except websockets.ConnectionClosed as e:
logging.error("Websocket connection closed: %s", e)
await tydom_client.disconnect()
break
except websockets.ConnectionClosedError as e:
logging.error("Websocket connection closed with an error: %s", e)
await tydom_client.disconnect()
break
except Exception as e:
logging.warning("Unable to handle message: %s", e)
except socket.gaierror as e:
logging.error("Socket error: %s", e)
sys.exit(1)
except ConnectionRefusedError as e:
logging.error("Connection refused: %s", e)
sys.exit(1)
except Exception as e:
logging.error("Error: %s", e)
sys.exit(1)

async def listen_socket():
jeedom_socket.open()
Expand Down