@skokarl
Hier unten findest du den code für das Skript.
Es wird immer aufgerufen, wenn kueche geändert wurde und false ist.
(Habe in deinem Screenshot nur den kueche Logikpunkt gefunden der dafür genutzt werden könnte)
Du musst nur 192.168.xxx.xxxx durch deine gültige IP Adresse ersetzen.
Ich habe ein paar Kommentare drin gelassen, damit das verständlich ist und du das skript ggf. erweitern kannst.
Zusätzlich sind auch noch Beispiele für den Status "Mute" und "Playstate" enthalten und nur auskommentiert, falls du diese später auch nutzen möchtest.
on({id: 'javascript.0.sonos.kueche', change: "ne"}, function (obj) {
//Jedesmal wenn "kueche" geändert wird, wird dieses Script gestartet.
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("javascript.0.sonos.kueche").val == false) //Aber nur wenn "kueche" false ist, wird auf der folgende Code aufgerufen
{
//----------------------- Sonos Tablet --------------------------------------
var tablet;
try {
require("request")('http://192.168.xxx.xxxx:5005/Sonos Tablet/state/', function (error, response, result)
{
//Falls der Status als Text weggeschrieben werden soll muss die folgende Zeile aktiviert werden:
//setState("javascript.0.sonos.tState"/*Studio.State*/,result );
//Console gibt einfach nur einen Text im Log aus. Hilft beim testen, kann auf dauer deaktiviert werden.
console.log("Sonos tablet State:"+result);
//Hier wird das Feedback von Sonos in ein generisches Objekt umgewandelt
tablet = JSON.parse(result);
//Hier wird der wert aus "tablet.volume" in die Variable lt (LT hoffe es soll LT und nicht IT heißen) geschrieben
setState("javascript.0.sonos.lt"/*LT*/, tablet.volume);
//Die folgende Zeile liest noch den Status "Mute" aus und schreibt diesen in mt
//setState('javascript.0.sonos.mt'/*MT*/,tablet.mute);
//Für den "PlayState" habe ich eine Abfrage erstellt um "Playing" in wahr und "Paused" in unwahr umzuwand
//if (tablet.playbackState == "PLAYING")
//{
// setState('javascript.0.sonos.pt'/*PlaybackState*/,true);
// }
// else
// {
// setState('javascript.0.sonos.pt'/*PlaybackState*/,false);
// }
}).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
//----------------------- Küche --------------------------------------
//Ohne weitere Kommentare
var kueche = null;
try {
require("request")('http://192.168.xxx.xxxx:5005/Sonos Küche/state/', function (error, response, result) {
//setState("javascript.0.sonos.kState"/*Studio.State*/,result );
console.log("Sonos Küche State:"+result);
kueche = JSON.parse(result);
setState("javascript.0.sonos.lk"/*Volume*/, kueche.volume);
//setState('javascript.0.sonos.mk'/*Mute*/,kueche.mute);
//if (kueche.playbackState == "PLAYING")
//{
// setState('javascript.0.sonos.pk'/*PlaybackState*/,true);
//}
//else
//{
// setState('javascript.0.sonos.pk'/*PlaybackState*/,false);
//}
}).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
//----------------------- Generell --------------------------------------
//Hier wird "Kueche" wieder auf true gesetzt.
setState("javascript.0.sonos.kueche"/*StateValid*/, true);
}
});
Zur info:
// --> Alles was danach kommt ist ein Kommentar und wird vom Skript selbst ignoriert. Gillt nur für eine Zeile.
/* / --> Alles was zwischen / und */ ist, ist ein Kommentar und wird vom Skript ignoriert. Dies geht auch über mehrere Zeilen oder nur für einzelne Teile einer Zeile