Squeezebox in Homebridge

Begonnen von bugster_de, 06 Februar 2017, 08:59:04

Vorheriges Thema - Nächstes Thema

bugster_de

Hallo Leute,

ich habe ja mal irgendwann die erste Version der Squeezebox Anbindung für FHEM gemacht. Nun habe ich vor kurzem bei mir zu Hause auch Homebridge aufgesetzt, so dass man per Siri das Haus stauern kann. WAF ist ins unendliche geschossen. :-)

Was jetzt natürlich fehlt ist die Anbindung der Musikanlange an Siri, sa dass man mit "Siri mach die Musik im Badezimmer an" das auch steuern kann. Hat jemdan hier schon was realisiert? Wenn nein, hat jemand genügend Ahnung von Homebrigde, um mir mal einen Gedankenschub zu geben, was ich denn dem Homebrigde konfigurieren muß?

DeeSPe

Direkt mit Squeezebox kann ich Dir nicht helfen, aber mit HB kenne ich mich recht gut aus.
Da es ja in HB kein Play/Stop gibt, würde ich das auf einen Schalter (on/off) mappen. Wenn Du dann den siriName Musik vergibst und das Device in den HB Raum Badezimmer tust, sollte es mit "Siri schalte Musik im Badezimmer an/ein" funktionieren.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

bugster_de

Hi,

verstehe ich das so richtig: ich nutze die Standardmechanismen von Homebridge. HB kennt ja Schalter mit on/off. Hier definiere ich mir einen dummy mit genericDeviceType= switch. In Fhem mache ich mir dann ein notify, der die Schalterstellung des dummy dann in die entsprechend Aktion auf den SB_Player mappt. So probiere ich das mal.
Mal schauen, ob ich auf Basis dieser Technik dann auch Kommandos für lauter/leiser oder next/prev definieren kann.

Da Du Dich aber mit HB auskennst: ich habe das bisher im groben so verstanden, dass ich in HB ein Mapping zwischen Apple-Home und FHEM erstellen muß (set Befehle, readings etc.). Ich glaube das war im JSON Format, oder? Kann ich da solch ein Mapping für Musikplayer ebenfalls erstellen?
Andere Alternative wäre ja auch ein App auf dem iPhone (z.B. iPENG), mit der man die Player dann steuert. Die FHEM Implementierung ist ja reaktiv gemacht: sprich auch wenn über irgendeine andere App etwas an SB verstellt wird, dann bekommt FHEM das mit. Sprich wenn ich z.B. einen Player auf "play" setze, dann bekommt FHEM das mit und schaltet den entsprechenden Verstärker ein. Meiner Frau ist es im prinzip ja egal, welche App im Hintergrund das Sprachkommando dann umsetzt.

KernSani

Ich habe lauter/leiser über ein blinds device realisiert, das sowas wie 40% versteht. Kann heute abend Details liefern.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

bugster_de

ha, ich wollte gerade meine Antwort ändern und die Idee reinwerfen, das lauter leiser mittels blinds zu machen. Great minds think alike.

Wenn Du dafür schon ein Beispiel hast, dann wäre das cool.

Reinerlein

Hi bugster_de,

und wie wäre es die Squeezebox direkt in der Homebridge als Plugin zu steuern?
Es gibt da ein entsprechendes Modul unter https://www.npmjs.com/package/homebridge-squeezebox, vielleicht funktioniert das für dich ja...

Grüße
Reinerlein

DeeSPe

Zitat von: bugster_de am 06 Februar 2017, 10:17:28
Hi,

verstehe ich das so richtig: ich nutze die Standardmechanismen von Homebridge. HB kennt ja Schalter mit on/off. Hier definiere ich mir einen dummy mit genericDeviceType= switch. In Fhem mache ich mir dann ein notify, der die Schalterstellung des dummy dann in die entsprechend Aktion auf den SB_Player mappt. So probiere ich das mal.
Mal schauen, ob ich auf Basis dieser Technik dann auch Kommandos für lauter/leiser oder next/prev definieren kann.

Da Du Dich aber mit HB auskennst: ich habe das bisher im groben so verstanden, dass ich in HB ein Mapping zwischen Apple-Home und FHEM erstellen muß (set Befehle, readings etc.). Ich glaube das war im JSON Format, oder? Kann ich da solch ein Mapping für Musikplayer ebenfalls erstellen?
Andere Alternative wäre ja auch ein App auf dem iPhone (z.B. iPENG), mit der man die Player dann steuert. Die FHEM Implementierung ist ja reaktiv gemacht: sprich auch wenn über irgendeine andere App etwas an SB verstellt wird, dann bekommt FHEM das mit. Sprich wenn ich z.B. einen Player auf "play" setze, dann bekommt FHEM das mit und schaltet den entsprechenden Verstärker ein. Meiner Frau ist es im prinzip ja egal, welche App im Hintergrund das Sprachkommando dann umsetzt.

Ein dummy wird nicht benötigt, das lässt sich alles direkt mappen.
Schau Dir am Besten die Doku zu homebridge-fhem an.
Wenn Du nicht weiter kommst, dann helfe ich gern.

Gruß
Dan

P.S. Volume kennt z.B. die Eve App auch! Das lässt sich aber leider nicht per Siri steuern da Volume keine Standard Characteristic ist. Deshalb gibt es diese Workarounds das auf andere offizielle Characteristics zu mappen wie z.B. blind.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

bugster_de

Hi,

ich habe mir die Doku gerade mal durchgelesen, muß aber sagen, dass ich eher im Bereich "Bahnhof?Hä?Was?" verstanden habe.

Verstehe ich das so richtig: in FHEM muß ich mir an den SB_PLAYERN das Attribut homebridgeMapping setzen. Dabei definiere ich:
- welches Device Reading auf welches homebridge / Apple reading gemappt wird
- welches Device kommando auf welches homebridge / Apple Kommando gemapped wird.

ZitatWenn Du nicht weiter kommst, dann helfe ich gern.
Da ich eher jemand bin, der initial einen learning-by-doing jump-start braucht, komme ich da gleich mal darauf zurück. Können wir das an einem anderen Thema / Beispiel mal vorexerzieren?
Unsere Rolläden kennen im Prinzip drei Stufen: Auf, Zu, und Sonnenschutz (25%). homebridge hat auf und zu von selbst drauf. Das klappt. Nun würde ich der Siri aber gerne sagen können "Mach den Rolladen im Wohnzimmer in Sonnenschutz" und der Befehl an FHEM lautet dann set ROLL_WZ 25. Kannst Du mir an Hand dem Beispiel sagen, wie man das homebridgemapping Attribut befüllen muß? Ich glaube dann kapiere ich den Rest ab da von selbst.

Danke !




DeeSPe

Zitat von: bugster_de am 06 Februar 2017, 17:14:36
Hi,

ich habe mir die Doku gerade mal durchgelesen, muß aber sagen, dass ich eher im Bereich "Bahnhof?Hä?Was?" verstanden habe.

Verstehe ich das so richtig: in FHEM muß ich mir an den SB_PLAYERN das Attribut homebridgeMapping setzen. Dabei definiere ich:
- welches Device Reading auf welches homebridge / Apple reading gemappt wird
- welches Device kommando auf welches homebridge / Apple Kommando gemapped wird.
Da ich eher jemand bin, der initial einen learning-by-doing jump-start braucht, komme ich da gleich mal darauf zurück. Können wir das an einem anderen Thema / Beispiel mal vorexerzieren?
Unsere Rolläden kennen im Prinzip drei Stufen: Auf, Zu, und Sonnenschutz (25%). homebridge hat auf und zu von selbst drauf. Das klappt. Nun würde ich der Siri aber gerne sagen können "Mach den Rolladen im Wohnzimmer in Sonnenschutz" und der Befehl an FHEM lautet dann set ROLL_WZ 25. Kannst Du mir an Hand dem Beispiel sagen, wie man das homebridgemapping Attribut befüllen muß? Ich glaube dann kapiere ich den Rest ab da von selbst.

Danke !

Da hast Du die Doku genau richtig verstanden!
Ich gebe zu dass ich mich am Anfang auch etwas schwer mit dem Mapping getan habe.
Sobald man aber mal 2-3 Mappings selbst erstellt hat, ist das ganz einfach.

Dein Sonnenschutz ist jetzt ein blödes Beispiel.
Erstens habe ich sowas nicht im Einsatz und bräuchte von Dir viel mehr Informationen zum Device.
Und Zweitens würde ich mal mit was nicht ganz so komplexem anfangen.
Wie wäre es mit einen Schalter für den Anfang?
Nutzt Du evtl. RESIDENTS/ROOMMATE/GUEST? Daran könnte ich ein security Mapping zeigen und erklären.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

bugster_de

Hi,

ich habe gerade zum Überbrücken der Zeit mal mit RESIDENTS und ROOMMATEs rumgemacht und mir diese definiert. Daran können wir üben !

Nebenthema: ich frage mich gerade, wieso ich diese RESIDENTS Dinger bisher übersehen hatte. Ist ja coole Implementierung.

DeeSPe

Zitat von: bugster_de am 06 Februar 2017, 18:53:29
Hi,

ich habe gerade zum Überbrücken der Zeit mal mit RESIDENTS und ROOMMATEs rumgemacht und mir diese definiert. Daran können wir üben !

Nebenthema: ich frage mich gerade, wieso ich diese RESIDENTS Dinger bisher übersehen hatte. Ist ja coole Implementierung.

Tja, in den FHEM-Tiefen schlummert so mancher Schatz! 8)

Zu den ROOMMATE/GUEST Devices empfehle ich Dir folgendes Mapping:
SecuritySystemCurrentState=state,values=/home|awoken/:0;absent:1;/asleep|gotosleep/:2;/gone|none/:3
SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;1:state+absent;2:state+gotosleep;3:state+absent,delay=1


Dazu noch den genericDeviceType auf security stellen und das erste Mapping sollte funktionieren.

Erklärung:
Für ....CurrentState wird das Reading state benutzt  welches die darauffolgenden values annehmen kann.
Die Nummern zu den values können auch durch ihre entsprechenden Text-Pendents ersetzt werden.
Im ....TargetState werden im ersten Schritt die selben values von ....CurrentState übertragen!
Bis hierher ist es nur um den Status von FHEM in HomeKit anzuzeigen!
Dann müssen jetzt nur noch die entsprechenden cmds (die eigentlichen Kommandos) gemappt werden damit Du auch aus HomeKit Kommandos senden kannst!
Also musst Du nur noch das angeben was dann gesetzt (set) werden soll. Leerzeichen mit + ersetzen.
Ja, absent absichtlich 2x gemappt, weil man none/gone nicht manuell einstellt, sondern dieses automatisch nach voreingestellter Zeit passiert.
"2:state+gotosleep" könntest Du (je nach belieben) auch mit "2:state+asleep" mappen. Den Wechsel von gotosleep auf asleep macht bei mir aber eben auch ein Automatismus (aus meinem HOMEMODE Modul).

Ich hoffe ich konnte das einigermaßen verständlich rüber bringen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

KernSani

Zum Rolladen: Devices vom Typ "blind" verstehen eigentlich von selbst Angaben wie "Stelle auf 25%"
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

bugster_de

ZitatIch hoffe ich konnte das einigermaßen verständlich rüber bringen.
Ja hast Du. Danke ! Jetzt kann ich mal rumspielen und sehen, was damit so rauskommt

ZitatTja, in den FHEM-Tiefen schlummert so mancher Schatz!
das stelle ich auch gerade fest. Meine FHEM Installation ist quasi ohne Veränderung jetzt seit 1,5 Jahren einfach nur durchgelaufen. Mal updates und dann enstprechende Probleme fixen aber mehr nicht. Uptime Rekord waren 7 Monate :-)
Und nun hatte ich gerade etwas Zeit und mal geschaut, was es so Neues gibt. Dunnerlattich.
- mein FHEM verschickt jetzt einmal am Tag die Plots zur Heizung via TelegramBot (den kannte ich noch nicht) und der TelegramBot anwortet auf Anfragen
- Residents und Roommates: ich frage mich ernsthaft, warum ich bisher an meiner eigenen Home-Status Funktion so rumgemacht hat
- mit Siri hat jetzt die Killer App Einzug gehalten
- und tausend andere Kleinigkeiten ...

Was mir jetzt noch fehlt ist die Anbindung an meinen neuen SamsungTV (ist ja in Arbeit). Dann kann ich mittels Siri den Fernseher und den zugehörigen Kodi einschalten, die Lichtszene entsprechend machen und Rolläden in Sonnenschutz. Fehlt nur noch dass Siri oder "Ok Google" Chips und Bier bringt :-)

ZitatZum Rolladen: Devices vom Typ "blind" verstehen eigentlich von selbst Angaben wie "Stelle auf 25%"
ich weiß, das geht auch einwandfrei. Ich hätte aber gerne, dass Siri das Kommando "Stelle die Rolladen auf Sonnenschutz" versteht. So ist bei mir das ganze FHEM Frontend für die Rolläden gemacht: die haben nur 4 Stellungen: Auf, Zu, Nacht (ca 5%), Sonnenschutz (ca. 25%)

DeeSPe

#13
Zitat von: bugster_de am 06 Februar 2017, 20:10:08
ich weiß, das geht auch einwandfrei. Ich hätte aber gerne, dass Siri das Kommando "Stelle die Rolladen auf Sonnenschutz" versteht. So ist bei mir das ganze FHEM Frontend für die Rolläden gemacht: die haben nur 4 Stellungen: Auf, Zu, Nacht (ca 5%), Sonnenschutz (ca. 25%)

Das ist aber kein Problem sowas zu machen!
Du könntest z.B. für jeden dieser Rollläden 4 Schalter definieren die dann eben genau diese Position anfahren!
Dann könntest Du z.B. über eine Szene "Hey Siri, aktiviere Sonnenschutz" alle Rollläden auf Sonnenschutz fahren.
Oder Du machst 4 Zentrale Schalter die alle Rollläden gleich bedienen.
Es wäre auch blind möglich mit nur 4 Schaltstellungen die das Gewünschte machen!
Alles nur eine Frage des Mappings. 8)
Ich denke es gibt auch noch andere mögliche Lösungen!

Gruß
Dan

EDIT: Mache Dich am Besten erst einmal mit dem Mapping vertraut und den möglichen Device Types und dann fallen Dir schon mögliche Lösungen ein.... ;)
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

bugster_de

#14
Mapping beim Squeezebox:
erster Versuch:
On=power,subtype=Power,valueOn=/on|On|Ein|ein/,valueOff=/off|Off|Aus|aus/,cmdOn=on,cmdOff=off
On=playStatus,subtype=Playing,valueOn=playing,ValueOff=/paused|stopped/,cmdOn=play,cmdOff=stop


Das ist natürlich irgendwie sinnfrei, da nun zwei Schalter (Ein/aus und Play/Stop angelegt werden), also zweiter Versuch:

On=playStatus,subtype=Playing,valueOn=/playing|paused/,ValueOff=stopped,cmdOn=play,cmdOff=off
Schon besser. Jetzt kann man mittels "schalte die Musik im Esszimmer ein" die Musik einschalten

clear
On=playStatus,subtype=Playing,valueOn=/playing|paused/,valueOff=stopped,cmdOn=play,cmdOff=off
Mute=volume,subtype=mute,valueOn=muted,valueOff=/[0-9]{1,3}/,cmdOn=mute,cmdOff=mute
Volume=volume::volume,subtype=lautstaerke,minValue=0,maxValue=100,minStep=1

und schon klemmt es: das war der Versuch einen Mute/unmute Knopf einzubauen sowie einen ersten Schuß Volume rein zu kriegen. Er zeigt mir aber nur den Schlalter mit Namen Mute an, der dann aber On/Off macht? Sprich der letzte cmdOn/cmdOff pro Attribut gewinnt dann wohl.

Die Characteristics Mute und Volume sind in der /usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/gen/HomeKitTypes.js definiert
ich dachte ich kann sie nun auch verwenden?