https://github.com/yllibed/yllibed.homeassistant
Framework to create app-like programs with strong integration into Home Assistant using powerful WebSocket API. This is a fork from rille111/HomeAssistant.AppStarter project.
https://github.com/yllibed/yllibed.homeassistant
Last synced: 17 days ago
JSON representation
Framework to create app-like programs with strong integration into Home Assistant using powerful WebSocket API. This is a fork from rille111/HomeAssistant.AppStarter project.
- Host: GitHub
- URL: https://github.com/yllibed/yllibed.homeassistant
- Owner: yllibed
- License: apache-2.0
- Created: 2019-06-09T03:30:07.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-07T22:41:11.000Z (over 3 years ago)
- Last Synced: 2025-03-08T12:31:55.281Z (about 1 year ago)
- Language: C#
- Size: 58.6 KB
- Stars: 1
- Watchers: 1
- Forks: 2
- Open Issues: 5
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# Yllibed HomeAssistant Framework
## Fork Status
**This project is a fork from Hass rille111's AppStarter **. Few changes has been done on the original project:
* Updated to use `System.Net.WebSockets`
* Refactoring of the code
* Changed the name and the layout of the sources
* New deployment process
[](https://dev.azure.com/yllibed/HomeAssistantFramework/_build/latest?definitionId=3&branchName=master) [](https://www.nuget.org/packages/Yllibed.HomeAssistantFramework)
> # **WARNING**
> The following documentation hasn't been updated yet for new version. Stay tuned for updated documentation!
## Purpose
Home Assistant 'Hass' is a home automation system running on Unix-systems and AppDaemon is used along with it to further empower developers to write Python-based automations and apps, working with Hass.
I don't excel at either Unix or Python but I still enjoy Home Assistant and want to use .NET to accomplish things I couldn't with Hass-AppDaemon.
Hence the birth of this project, and being inspired by AppDaemon I want to enable myself and others to use their existing .NET knowledge to write app-like implementations based on Hass.
It is easy, just nuget-install Rille.Hass.AppStarter and follow the steps and you'll be going in no time!
## Installation
* By nuget
`Install-Package HomeAssistant.AppStarter`
* https://www.nuget.org/packages/HomeAssistant.AppStarter/
* Or by downloading this library.
## Usage - Create apps
* Create a class that implements IHassApp
* Filling out the various properties (see code for examples)
* Implement ExecuteAsync() with your code
## Usage - Configure & Run
Super easy! Better show with code:
``` CSharp
public async Task RunAppStarter()
{
await Task.Delay(0);
var appRunner = new HassAppsRunner("ws://192.168.0.201:8123/api/websocket");
appRunner.TraceOutput += (sender, args) => _logger.Trace(args.Exception, args.Text);
appRunner.DebugOutput += (sender, args) => _logger.Debug(args.Exception, args.Text);
appRunner.WarnOutput += (sender, args) => _logger.Warn(args.Exception, args.Text);
appRunner.InfoOutput += (sender, args) => _logger.Info(args.Exception, args.Text);
appRunner.ErrorOutput += (sender, args) => _logger.Error(args.Exception, args.Text);
appRunner.Start();
System.Console.WriteLine($"\n-- Connected. Press any key to exit --");
System.Console.ReadKey();
appRunner.Stop();
}
```
And an app to help you wake up! (It will be found by the AppStarter since it scans for everything that implements IHassApp)
``` CSharp
public class WakeUpApp : IHassApp
{
public string TriggeredByEntities { get; set; } = "automation.wakeup_*"; // <-- yes, wildcards are supported!
// Dependencies (IoC or Factories not supported right now)
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
private readonly HassWebApiServiceProxy _hassApiProxy = new HassWebApiServiceProxy("http://192.168.0.201:8123/api");
public async Task ExecuteAsync(EventData e, string rawData)
{
if (e.StateChangeData.OldState != "on" || e.StateChangeData.NewState != "on")
return; // A trigger for an automation has both these states set to "on" by some reason.
_logger.Info($"Executing {nameof(WakeUpApp)} for [{e.EntityId}]");
// Turn on all lamps
await TurnOnLightFor("light.dimmer_vardagsrum_level", 155);
await TurnOnLightFor("light.dimmer_minihall_level", 155);
await TurnOnLightFor("light.dimmer_hall_level", 155);
await TurnOnLightFor("light.led_sovrum_tak_level", 255);
}
public bool IsExecuting { get; set; }
private async Task TurnOnLightFor(string entity_id, int brightness)
{
await _hassApiProxy.CallHassService("light", "turn_on", new {entity_id, brightness});
}
}
```
## Engine
Since Hass exposes a Websocket API, this lib will subscribe to all state_changed events via this Websocket, and connect your written apps with those events.
## TODO
* Since it's in alpha development it will crash! Feel free to contribute. :)