/// <summary>
        /// Creates an instance of a Home Assistant hub which will use MQTT state stream
        /// (cf. <seealso cref="https://www.home-assistant.io/components/mqtt_statestream/"/>) to read states of devices,
        /// and the REST API (cf. <seealso cref="https://developers.home-assistant.io/docs/en/external_api_rest.html"/>)
        /// to write state / execute services on the hub.
        /// </summary>
        /// <param name="scheduler">The scheduler used to run scripts, automations and manage devices of this Home Assistant</param>
        /// <param name="apiHostName">The host name (and port) of the Home Assistant API (&lt;host&gt;[:port])</param>
        /// <param name="apiPassword">The API password defined in Home Assistant configuration</param>
        /// <param name="mqtt">A client to the MQTT broker used by Home Assistant</param>
        /// <param name="homeTopic">Defines the base topic that will be used for to publish scenes and automations</param>
        /// <param name="hassTopic">Defines the base topic used by home assistant state stream</param>
        public HomeAssistantHub(
            IScheduler scheduler,
            string apiHostName,
            string apiPassword,
            MqttClient mqtt,
            string homeTopic = DefaultHomeTopic,
            string hassTopic = DefaultTopic)
        {
            homeTopic = homeTopic.Trim('/', '#', '*');
            hassTopic = hassTopic.Trim('/', '#', '*');

            var api             = new HomeAssistantApi(apiHostName, apiPassword);
            var mqttStateStream = new HomeAssistantDeviceHost(mqtt, hassTopic, api, scheduler);

            Devices     = new HomeDevicesManager(mqttStateStream);
            Scenes      = new MqttSceneHost(mqtt, homeTopic, scheduler);
            Automations = new MqttAutomationHost(mqtt, homeTopic, scheduler);
            Api         = api;
        }
Example #2
0
        public HomeAssistantHub(
            IScheduler scheduler,
            string apiHostName,
            string apiToken,
            MqttClient mqtt,
            string homeTopic = DefaultHomeTopic,
            string hassTopic = DefaultTopic)
        {
            homeTopic = homeTopic.Trim('/', '#', '*');
            hassTopic = hassTopic.Trim('/', '#', '*');

            var api = new HomeAssistantHttpApi(apiHostName, apiToken);

            _mqttStateStream = new HomeAssistantDeviceHost(mqtt, hassTopic, api, scheduler);

            Devices     = new HomeDevicesManager(_mqttStateStream);
            Scenes      = new MqttSceneHost(mqtt, homeTopic, scheduler);
            Automations = new MqttAutomationHost(mqtt, homeTopic, scheduler);
            Api         = api;

            _ws = new HomeAssistantWebSocketApi(new Uri($"ws://{apiHostName}"), apiToken);
        }