Skip to content

Commit

Permalink
add support for homeassistant
Browse files Browse the repository at this point in the history
  • Loading branch information
gytisgreitai committed Jan 1, 2021
1 parent 76ec17e commit 55d19d7
Show file tree
Hide file tree
Showing 4 changed files with 201 additions and 29 deletions.
53 changes: 53 additions & 0 deletions hass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import mapping
import logging
import json

logger = logging.getLogger('comfoair-hass')

def get_friendly_name(name):
parts = name.split('_')
for i in range(len(parts)):
parts[i] = parts[i].capitalize()
return ' '.join(parts)

def publish_hass_mqtt_discovery(mqtt_client):
logger.info("hass mqtt")
try:
for key in mapping.data:
val = mapping.data[key]
id = val.get('name')
icon = val.get('icon')
unit = val.get('unit')
friendly_name = get_friendly_name(id)

if not val.get('ok'):
continue
if 'timer' in id:
continue

payload = {
"name": f"comfoair_{friendly_name}",
"state_topic": f"comfoair/status/{id}",
"availability_topic": "comfoair/status",
"platform": "mqtt",
"unique_id": f"comfoair_{id}",
"device": {
"manufacturer": "Zehnder",
"model": "ComfoAir Q350",
"name": "Q350",
"identifiers": "Q350"
}
}

if icon is not None:
payload['icon'] = icon

if unit is not None:
payload['unit_of_measurement'] = unit

topic_name = f"homeassistant/sensor/comfoair/{id}/config"
raw_payload = json.dumps(payload)
logger.info("publishing discovery %s %s", topic_name, raw_payload)
mqtt_client.publish(topic_name, raw_payload, 0, True)
except e:
logger.error(e)
12 changes: 9 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@
import sys

from USBCAN import CANInterface
from hass import publish_hass_mqtt_discovery
import mapping
from time import sleep

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

def on_mqtt_connect(client, userdata, flags, rc):
logger.info('subscribing to comfoair/action')
client.subscribe('comfoair/action')
client.publish('comfoair/status', 'online', 0, True)
publish_hass_mqtt_discovery(client)

def on_mqtt_message(client, userdata, msg):
action =str(msg.payload.decode('utf-8'))
Expand All @@ -29,16 +34,17 @@ def process_can_message(pdid, data):
if pdid in mapping.data:
pdid_config = mapping.data[pdid]
value = pdid_config.get('transformation')(data)
if pdid_config.get('ok'):
if pdid_config.get('ok') and value is not None:
#logger.info('got message for pid %s raw: %s transformed: %s', pdid, data, value)
name = pdid_config.get('name')
mqtt_client.publish('comfoair/status/' + name, value)
mqtt_client.publish('comfoair/status/' + name, value, 0, True)
else:
logger.info('not ok, not pushing %s %s', pdid, value)
elif pdid != 0:
logger.info('pid not found %s %s', pdid, data)

logger = logging.getLogger('comfoair-main')
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)


logger.info('starting up')
mqtt_client = mqtt.Client()
Expand Down
Loading

0 comments on commit 55d19d7

Please sign in to comment.