@surfer09 said in symfonisk (IKEA Sonos) mit Sonos Adapter steuern:
Ich stehe gerade vor der gleihen Fragestellung, wie ich mit Hilfe des Sonos Adapters auf dem Lautsprecher einen Radiosender abspielen kann. Ich habe in der App den Radiosender als Favoriten gesetzt, kann ich den nicht über die Objekte jetzt irgendwie anstoßen? Ich habe jetzt schone einige Beiträge durchforstet, aber so richtig schlau werde ich aus keinem irgendwie.
Ich verwende nicht den Adapter sondern die node-sonos-http-api.
Die läuft bei mir in einem Docker-Container (chrisns/docker-node-sonos-http-api:latest).
Kommunikation von ioBroker über http-request.
Für die wichtigsten Aufrufe habe ich mir ein Global-Script erstellt
/*
Kommunikation mit Sonos HTTP API
*/
// IP-Adresse und Port Sonos HTTP-API
var SonosAPI = 'http://192.168.1.111:5005';
// Sonos Favoriten
var SonosFavoriten = ['SWR3','SWR1 Baden-Württemberg','BAYERN 3','BAYERN 1 - Schwaben','ANTENNE BAYERN'];
// Sonos Pause-Befehl
async function SonosSetPause (Room) {
let URL = SonosAPI + '/' + Room + '/pause';
try {
require("request")(URL).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
log("request: " + URL,'info');
}
// Sonos Volume-Befehl
async function SonosSetVolume (Room, Volume) {
let URL = SonosAPI + '/' + Room + '/volume/' + Volume;
try {
require("request")(URL).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
log("request: " + URL,'info');
}
// Sonos Isolate
async function SonosIsolate (Room) {
let URL = SonosAPI + '/' + Room + '/isolate';
try {
require("request")(URL).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
log("request: " + URL,'info');
}
// Sonos Favorite anwählen
async function SonosPlayFavorite (Room, Favorite) {
await SonosIsolate(Room);
let URL = SonosAPI + '/' + Room + '/favorite/' + String(Favorite);
try {
require("request")(URL).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
log("request: " + URL,'info');
}
// Sonos Sprachdurchsage
async function SonosSayAll (Message, Volume) {
let URL = SonosAPI + '/sayall/' + String(Message) + '/de-de/'+ String(Volume);
try {
require("request")(URL).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
log("request: " + URL,'info');
}
// Sonos Sprachdurchsage Preset
async function SonosSayPreset (Preset, Message) {
let URL = SonosAPI + '/saypreset/' + Preset + '/' + String(Message) + '/de-de/';
try {
require("request")(URL).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
log("request: " + URL,'info');
}
// Sonos ClipPreset
async function SonosClipPreset(Preset, ClipName) {
let URL = SonosAPI + '/clippreset/' + Preset + '/' + ClipName;
try {
require("request")(URL).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
log("request: " + URL,'info');
}
Im Array SonosFavoriten trägst du die Favoriten genauso ein wie sie in der App heißen, bzw. wie sie von der API angezeigt werden.
Die Anwahl eines Favoriten funktioniert dan so:
await SonosSetVolume(SonosName,'20');
await SonosPlayFavorite(SonosName,SonosFavoriten[0]);
Vielleicht kannst du was damit anfangen 🙂