auch auf die Gefahr für die Rule vor dem Hintergund von Siri/Alexa und Co und einem Tablet in jedem Raum ausgelacht zu werden, habe ich heute mal die Steuerung der Sonos-Player mittels Tastsenor (Jung RCD 3096) realisiert.
Hintergrund war eine möglichst einfache Steuerung ohne Handy für meinen kleinen Sohn und ein wenig Spieltrieb. Herausforderung dabei war, nur eine Schalterwippe zu verwenden.
Das Ergebnis möchte ich gern mit Euch teilen, auch wenn an vielen Stellen noch Spagetti-Code (insbeosondere Einbindung der Playlisten) ist.
Ich würde mich freuen wenn hier von Euch Anregungen kommen (Playlist via Datenbank oder aus Sonos auslesen). So denn...
Code: Alles auswählen
var String playlist= "Hotzenplotz" //intitial
var int playlist_entry = 1
var int playlist_select = 0
rule "Sonos Kinderzimmer Skip/Volume"
when
Item OG_KZ_Sonos_Skip_Vol received command //Tastsensor als Dimmer (wiederholend sendend, Ein/Heller, Aus/Dunkler
then
switch receivedCommand {
case OFF : {
if (Sonos_KZ_State.state == "STOPPED") {
playlist_entry = playlist_entry + 1 //Auswahl Playlist: bei Status STOP nächster Listeneintrag
if (playlist_entry == 1) playlist = "Hotzenplotz"
if (playlist_entry == 2) playlist = "Petronella"
if (playlist_entry == 3) playlist = "Radiosender"
if (playlist_entry == 3) playlist_entry = 0
//Auslesen der SONOS Playlisten mit dem binding nicht möglich. Am besten auslesen einer Datenbank oder die Spotify Playlisten auslesen...
OG_KZ_Display_Seite2_Zeile2.sendCommand(playlist) //Anzeige Playlist refresh
}
else {
Sonos_KZ_Controller.sendCommand("PAUSE")
OG_KZ_Display_Seite.sendCommand(1) //Wechsel auf erste Seite (Standardansicht)
OG_KZ_Info_Modus.sendCommand(1) //Infomenüs einschalten
Sonos_KZ_Clearquene.sendCommand(ON) //Playlist löschen
playlist_select = 0
}
}
case ON : {
switch Sonos_KZ_State.state {
case "PLAYING" : { //Pause wenn Play
OG_KZ_Display_Seite.sendCommand(1)
OG_KZ_Info_Modus.sendCommand(1)
Sonos_KZ_Controller.sendCommand("PAUSE")
// Sonos_KZ_Controller.sendCommand("NEXT")
}
case "PAUSED_PLAYBACK" : { //Play wenn Pause
OG_KZ_Display_Seite.sendCommand(3)
OG_KZ_Info_Modus.sendCommand(0)
Sonos_KZ_Controller.sendCommand("PLAY")
}
case "STOPPED" : { //Playlist Manü wenn Player gestoppt
OG_KZ_Display_Seite.sendCommand(2)
OG_KZ_Info_Modus.sendCommand(0)
OG_KZ_Display_Seite2_Zeile1.sendCommand("Listenauswahl:")
OG_KZ_Display_Seite2_Zeile2.sendCommand(playlist) //Anzeige Playlist
OG_KZ_Display_Seite2_Zeile3.sendCommand("^=OK v=Weiter")
if (playlist_select == 1) sendCommand(Sonos_KZ_Playlist, playlist) //Playlist erst nach 2. "ON" laden
playlist_select = playlist_select + 1
}
}
}
case INCREASE : {
Sonos_KZ_Volume.sendCommand((Sonos_KZ_Volume.state as Number) + 3)
}
case DECREASE : {
Sonos_KZ_Volume.sendCommand((Sonos_KZ_Volume.state as Number) - 3)
}
}
end
rule "Sonos Kinderzimmer Titelanzeige"
when
Item Sonos_KZ_CurrentTrack changed
then
OG_KZ_Display_Seite.sendCommand(3)
OG_KZ_Display_Seite3_Zeile1.sendCommand("Es läuft...")
// OG_KZ_Display_Seite3_Zeile2.sendCommand(Sonos_KZ_CurrentArtist.state.toString.substring(0,14))
OG_KZ_Display_Seite3_Zeile2.sendCommand(Sonos_KZ_CurrentTrack.state.toString.substring(0,14))
OG_KZ_Display_Seite3_Zeile3.sendCommand(Sonos_KZ_CurrentTitle.state.toString.substring(0,14))
end
- Lange drücken der Tasten nach oben/unten regelt die Lautstärke.
- Wenn der Player gestoppt ist, startet ein kurzer Tastendruck nach oben (On) die Abbfrage welche Plalist abgespielt werden soll. Erneuter kurzer Druck startet die ausgewählte Playlist. Taste nach unten (Off) zeigt die nächste Playlist bis die erste wieder kommt.
- Wenn der Player läuft bewirkt ein kurzer Tastendruck nach oben (On) Pause und Rückkehr auf die normale Menüebene des Testsensors. Erneuter Tastsruck nach oben setzt die Playliste an gleicher Stelle wieder fort.
- Wenn Player läuft (und wenn Pause) kurzer Tastendruck nach unten (Off) und Player wird gestoppt. Die Playlist wird gelöscht und Rückkehr auf die normale Menüebene des Tastsensors.
- Im Display des Tastsenors wird selbstverständlich der Titel und der Artist angezeigt. Naürlich nur 14 Zeichen (DPT 16.001)
Thats it. Anregungen gerne!