/// <summary>
 ///     Get all services from Home Assistant
 /// </summary>
 /// <param name="connection">connected Home Assistant instance</param>
 /// <param name="cancelToken">cancellation token</param>
 public static async Task <JsonElement?> GetServicesAsync(this IHomeAssistantConnection connection,
                                                          CancellationToken cancelToken)
 {
     return(await connection
            .SendCommandAndReturnResponseRawAsync
                (new SimpleCommand("get_services"), cancelToken).ConfigureAwait(false));
 }
 /// <summary>
 ///     Get all entities from Home Assistant
 /// </summary>
 /// <param name="connection">connected Home Assistant instance</param>
 /// <param name="cancelToken">cancellation token</param>
 public static async Task <IReadOnlyCollection <HassEntity>?> GetEntitiesAsync(
     this IHomeAssistantConnection connection, CancellationToken cancelToken)
 {
     return(await connection
            .SendCommandAndReturnResponseAsync <SimpleCommand, IReadOnlyCollection <HassEntity> >
                (new SimpleCommand("config/entity_registry/list"), cancelToken).ConfigureAwait(false));
 }
 /// <summary>
 ///     Get all states from all entities from Home Assistant
 /// </summary>
 /// <param name="connection">connected Home Assistant instance</param>
 /// <param name="cancelToken">cancellation token</param>
 public static async Task <IReadOnlyCollection <HassState>?> GetStatesAsync(this IHomeAssistantConnection connection,
                                                                            CancellationToken cancelToken)
 {
     return(await connection
            .SendCommandAndReturnResponseAsync <SimpleCommand, IReadOnlyCollection <HassState> >
                (new SimpleCommand("get_states"), cancelToken).ConfigureAwait(false));
 }
    /// <summary>
    ///     Pings the connected Home Assistant instance and expect a pong
    /// </summary>
    /// <param name="connection">connected Home Assistant instance</param>
    /// <param name="timeout">Timeout to wait for pong back</param>
    /// <param name="cancelToken">cancellation token</param>
    public static async Task <bool> PingAsync(this IHomeAssistantConnection connection, TimeSpan timeout,
                                              CancellationToken cancelToken)
    {
        var allHassMessages = connection as IHomeAssistantHassMessages
                              ?? throw new InvalidCastException("Unexpected failure to cast");

        try
        {
            var resultEvent = allHassMessages.OnHassMessage
                              .Where(n => n.Type == "pong")
                              .Timeout(timeout, Observable.Return(default(HassMessage?)))
                              .FirstAsync()
                              .ToTask(cancelToken);

            await connection
            .SendCommandAsync
                (new SimpleCommand("ping"), cancelToken).ConfigureAwait(false);

            await resultEvent.ConfigureAwait(false);
        }
        catch (TaskCanceledException)
        {
            return(false);
        }

        return(true);
    }
Esempio n. 5
0
    private async Task OnHomeAssistantClientConnected(
        IHomeAssistantConnection haConnection,
        CancellationToken cancelToken
        )
    {
        try
        {
            InternalConnection = haConnection;

            _logger.LogInformation("Successfully connected to Home Assistant");
            if (!string.IsNullOrEmpty(_locationSettings.Value.ApplicationConfigurationFolder))
            {
                _logger.LogDebug("Loading applications from folder {Path}",
                                 Path.GetFullPath(_locationSettings.Value.ApplicationConfigurationFolder));
            }
            else
            {
                _logger.LogDebug("Loading applications with no configuration folder");
            }

            await _cacheManager.InitializeAsync(cancelToken).ConfigureAwait(false);

            _applicationModelContext =
                await _appModel.InitializeAsync(CancellationToken.None).ConfigureAwait(false);

            // Handle state change for apps if registered
            var appStateHandler = _serviceProvider.GetRequiredService <IHandleHomeAssistantAppStateUpdates>();
            await appStateHandler.InitializeAsync(haConnection, _applicationModelContext);
        }
        catch (Exception e)
        {
            _logger.LogError(e, "   Failed to initialize apps");
            throw;
        }
    }
 /// <summary>
 ///     Get all configuration from Home Assistant
 /// </summary>
 /// <param name="connection">connected Home Assistant instance</param>
 /// <param name="cancelToken">cancellation token</param>
 public static async Task <HassConfig> GetConfigAsync(this IHomeAssistantConnection connection,
                                                      CancellationToken cancelToken)
 {
     return(await connection
            .SendCommandAndReturnResponseAsync <SimpleCommand, HassConfig>
                (new SimpleCommand("get_config"), cancelToken).ConfigureAwait(false) ??
            throw new NullReferenceException("Unexpected null return from command"));
 }
Esempio n. 7
0
    private Task OnHomeAssistantClientConnected(IHomeAssistantConnection connection)
    {
        _logger.LogInformation("HassClient connected and processing events");
        connection.OnHomeAssistantEvent.Subscribe(HandleEvent);

        // Add your code to test here
        return(Task.CompletedTask);
    }
Esempio n. 8
0
 public static async Task <InputBooleanHelper?> CreateInputBooleanHelperAsync(
     this IHomeAssistantConnection connection,
     string name, CancellationToken cancelToken)
 {
     return(await connection.SendCommandAndReturnResponseAsync <CreateInputBooleanHelperCommand, InputBooleanHelper?>(
                new CreateInputBooleanHelperCommand
     {
         Name = name
     }, cancelToken).ConfigureAwait(false));
 }
Esempio n. 9
0
 public static async Task DeleteInputBooleanHelperAsync(
     this IHomeAssistantConnection connection,
     string inputBooleanId, CancellationToken cancelToken)
 {
     await connection.SendCommandAndReturnResponseAsync <DeleteInputBooleanHelperCommand, object?>(
         new DeleteInputBooleanHelperCommand
     {
         InputBooleanId = inputBooleanId
     }, cancelToken).ConfigureAwait(false);
 }
Esempio n. 10
0
    private static async Task <bool> CheckIfRunning(IHomeAssistantConnection connection, CancellationToken cancelToken)
    {
        var connectTimeoutTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancelToken);

        connectTimeoutTokenSource.CancelAfter(5000);
        // Now send the auth message to Home Assistant
        var config = await connection
                     .SendCommandAndReturnResponseAsync <SimpleCommand, HassConfig>
                         (new SimpleCommand("get_config"), cancelToken).ConfigureAwait(false) ??
                     throw new NullReferenceException("Unexpected null return from command");

        return(config.State == "RUNNING");
    }
 /// <summary>
 ///     Get all configuration from Home Assistant
 /// </summary>
 /// <param name="connection">connected Home Assistant instance</param>
 /// <param name="domain"></param>
 /// <param name="service"></param>
 /// <param name="serviceData"></param>
 /// <param name="target">The target of service call</param>
 /// <param name="cancelToken">cancellation token</param>
 public static async Task CallServiceAsync(
     this IHomeAssistantConnection connection,
     string domain,
     string service,
     object?serviceData            = null,
     HassTarget?target             = null,
     CancellationToken?cancelToken = null
     )
 {
     await connection
     .SendCommandAsync
     (
         new CallServiceCommand
     {
         Domain      = domain,
         Service     = service,
         ServiceData = serviceData,
         Target      = target
     },
         cancelToken ?? CancellationToken.None).ConfigureAwait(false);
 }
Esempio n. 12
0
 public static async Task <IReadOnlyCollection <InputBooleanHelper> > ListInputBooleanHelpersAsync(
     this IHomeAssistantConnection connection, CancellationToken cancelToken)
 {
     return(await connection.SendCommandAndReturnResponseAsync <ListInputBooleanHelperCommand, IReadOnlyCollection <InputBooleanHelper> >(
                new ListInputBooleanHelperCommand(), cancelToken) ?? Array.Empty <InputBooleanHelper>());
 }