feat(netd): setup script with service callback
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
7855e8ecdd
commit
1b0421f87c
4 changed files with 110 additions and 17 deletions
|
@ -0,0 +1,64 @@
|
||||||
|
namespace AppModel;
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public record ExternalUrls
|
||||||
|
{
|
||||||
|
public string? Spotify { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public record Followers
|
||||||
|
{
|
||||||
|
public string? Href { get; init; }
|
||||||
|
public int Total { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public record Image
|
||||||
|
{
|
||||||
|
public string? Url { get; init; }
|
||||||
|
public int Height { get; init; }
|
||||||
|
public int Width { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public record Item
|
||||||
|
{
|
||||||
|
public ExternalUrls? External_urls { get; init; }
|
||||||
|
public Followers? Followers { get; init; }
|
||||||
|
public List<string?>? Genres { get; init; }
|
||||||
|
public string? Href { get; init; }
|
||||||
|
public string? Id { get; init; }
|
||||||
|
public string? Image_url { get; init; }
|
||||||
|
public List<Image>? Images { get; init; }
|
||||||
|
public string? Name { get; init; }
|
||||||
|
public int Popularity { get; init; }
|
||||||
|
public string? Type { get; init; }
|
||||||
|
public string? Uri { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public record Result
|
||||||
|
{
|
||||||
|
public string? Href { get; init; }
|
||||||
|
public int Limit { get; init; }
|
||||||
|
public string? Next { get; init; }
|
||||||
|
public int Offset { get; set; }
|
||||||
|
public object? Previous { get; init; }
|
||||||
|
public int Total { get; init; }
|
||||||
|
public List<Item>? Items { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public record SpotifyplusSearchArtistsResponse
|
||||||
|
{
|
||||||
|
public UserProfile? UserProfile { get; init; }
|
||||||
|
public Result? Result { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public record UserProfile
|
||||||
|
{
|
||||||
|
public string? Country { get; init; }
|
||||||
|
public string? DisplayName { get; init; }
|
||||||
|
public string? Email { get; init; }
|
||||||
|
public string? Id { get; init; }
|
||||||
|
public string? Product { get; init; }
|
||||||
|
public string? Type { get; init; }
|
||||||
|
public string? Uri { get; init; }
|
||||||
|
}
|
|
@ -1,22 +1,54 @@
|
||||||
namespace AppModel;
|
namespace AppModel;
|
||||||
|
|
||||||
record ServiceData(string? action, int value);
|
using HomeAssistantGenerated;
|
||||||
|
using NetDaemon.AppModel;
|
||||||
|
using NetDaemon.HassModel;
|
||||||
|
using NetDaemon.HassModel.Integration;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
record ServiceData(string? criteria);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Showcases how to instance apps with yaml and use automatic configuration population
|
|
||||||
/// </summary>
|
|
||||||
[NetDaemonApp]
|
[NetDaemonApp]
|
||||||
public class TestScript
|
public class TestScript
|
||||||
{
|
{
|
||||||
|
// Snake-case json options
|
||||||
|
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions
|
||||||
|
{
|
||||||
|
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower
|
||||||
|
};
|
||||||
|
|
||||||
public TestScript(IHaContext ha)
|
public TestScript(IHaContext ha)
|
||||||
{
|
{
|
||||||
ha.RegisterServiceCallBack<ServiceData>(
|
ha.RegisterServiceCallBack<ServiceData>(
|
||||||
"callback_demo",
|
"callback_demo",
|
||||||
e => ha.CallService(
|
async (e) =>
|
||||||
|
{
|
||||||
|
var result = (await ha.CallServiceWithResponseAsync(
|
||||||
|
"spotifyplus",
|
||||||
|
"search_artists",
|
||||||
|
data: new SpotifyplusSearchArtistsParameters
|
||||||
|
{
|
||||||
|
Criteria = e?.criteria,
|
||||||
|
Limit = 1,
|
||||||
|
EntityId = "media_player.spotifyplus"
|
||||||
|
}
|
||||||
|
)).Value.Deserialize<SpotifyplusSearchArtistsResponse>(_jsonOptions);
|
||||||
|
|
||||||
|
string? uri = result?.Result?.Items?[0]?.Uri;
|
||||||
|
|
||||||
|
if (uri is not null)
|
||||||
|
{
|
||||||
|
ha.CallService(
|
||||||
"notify",
|
"notify",
|
||||||
"persistent_notification",
|
"persistent_notification",
|
||||||
data: new {message = $"value: {e?.value}", title = $"{e?.action}"}
|
data: new PersistentNotificationCreateParameters
|
||||||
)
|
{
|
||||||
|
Message = $"value: {uri}",
|
||||||
|
Title = "title"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
// Common usings for NetDaemon apps
|
|
||||||
global using System;
|
|
||||||
global using System.Reactive.Linq;
|
|
||||||
global using NetDaemon.AppModel;
|
|
||||||
global using NetDaemon.HassModel;
|
|
||||||
global using NetDaemon.HassModel.Integration;
|
|
|
@ -1,10 +1,13 @@
|
||||||
using System.Reflection;
|
using HomeAssistantGenerated;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
|
using NetDaemon.AppModel;
|
||||||
using NetDaemon.Extensions.Logging;
|
using NetDaemon.Extensions.Logging;
|
||||||
using NetDaemon.Extensions.Scheduler;
|
using NetDaemon.Extensions.Scheduler;
|
||||||
using NetDaemon.Extensions.Tts;
|
using NetDaemon.Extensions.Tts;
|
||||||
using NetDaemon.Runtime;
|
using NetDaemon.Runtime;
|
||||||
using HomeAssistantGenerated;
|
using System;
|
||||||
|
using System.Reactive.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
#pragma warning disable CA1812
|
#pragma warning disable CA1812
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue