"""Component for the Goalfeed service.""" import json import pysher import requests import voluptuous as vol from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from homeassistant.helpers.typing import ConfigType # Version downgraded due to regression in library # For details: https://github.com/nlsdfnbch/Pysher/issues/38 DOMAIN = "goalfeed" CONFIG_SCHEMA = vol.Schema( { DOMAIN: vol.Schema( { vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, } ) }, extra=vol.ALLOW_EXTRA, ) GOALFEED_HOST = "feed.goalfeed.ca" GOALFEED_AUTH_ENDPOINT = "https://goalfeed.ca/feed/auth" GOALFEED_APP_ID = "bfd4ed98c1ff22c04074" def setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the Goalfeed component.""" conf = config[DOMAIN] username = conf.get(CONF_USERNAME) password = conf.get(CONF_PASSWORD) def goal_handler(data): """Handle goal events.""" goal = json.loads(json.loads(data)) hass.bus.fire("goal", event_data=goal) def connect_handler(data): """Handle connection.""" post_data = { "username": username, "password": password, "connection_info": data, } resp = requests.post(GOALFEED_AUTH_ENDPOINT, post_data, timeout=30).json() channel = pusher.subscribe("private-goals", resp["auth"]) channel.bind("goal", goal_handler) pusher = pysher.Pusher( GOALFEED_APP_ID, secure=False, port=8080, custom_host=GOALFEED_HOST ) pusher.connection.bind("pusher:connection_established", connect_handler) pusher.connect() return True