/// <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); }
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")); }
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); }
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)); }
public static async Task DeleteInputBooleanHelperAsync( this IHomeAssistantConnection connection, string inputBooleanId, CancellationToken cancelToken) { await connection.SendCommandAndReturnResponseAsync <DeleteInputBooleanHelperCommand, object?>( new DeleteInputBooleanHelperCommand { InputBooleanId = inputBooleanId }, cancelToken).ConfigureAwait(false); }
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); }
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>()); }