shairport-sync mit FHEM koppeln

Begonnen von martin2day, 19 Februar 2017, 10:34:51

Vorheriges Thema - Nächstes Thema

martin2day

Einen schönen Sonntag zusammen,

ich habe da eine für mich nicht lösbare Aufgabe, ich denke aber das ist für den ein oder anderen sicher eine einfache Sache. :-)

Ich habe auf einem Raspberry shairport-sync laufen. Hier kann ich mich mit verschiedenen Geräten verbinden. Das funktioniert super. Nun muss ich aber zusätzlich noch die Endstufe einschalten und auf den Eingang umschalten. Auf dem selben Raspberry habe ich zusätzlich über MPD/MPC noch ein WLAN Radio installiert, dass ich bereits mit FHEM steuern kann.

Im Prinzip möchte ich nun mit der Verbindung von einem Gerät auch zusätzlich die Endstufe ein und entsprechend umschalten, automatisch.

Dazu habe ich in shairport-sync denke ich etwas gefunden was man hier nutzen kann.
run_this_before_play_begins = "/full/path/to/application and args"; // make sure the application has executable permission. It it's a script, include the #!... stuff on the first line
run_this_after_play_ends = "/full/path/to/application and args"; // make sure the application has executable permission. It it's a script, include the #!... stuff on the first line

Ich kann also auf dem Pi wo shairport-sync läuft ein script ausführen wenn eine Verbindung auf bzw. aufgebaut wird.
Nun bin ich lieder niemand der Scripts schreiben kann. :-)
Wie baue ich ein Script auf dem Raspberry PI auf im am Ende die Information in einem Dummy auf dem FHEM-PI zu erhalten? :-)

Ich bitte mal wieder um Hilfe.

Vielen Dank
Gruß Martin

dev0

Wie man shell scripts schreibt werde ich hier sicher nicht erklären, das findest Du in jedem 2. Linix Buch/HowTo/...

Werte kannst Du, aus einem shell script heraus, zB. mit netcat an FHEM übergeben:

echo "setreading <device> <reading> <value>" | nc localhost 7072


martin2day

Abgedrehte sch.....  8) 8) 8)

Ich weiß zwar nicht wie und warum, aber es geht.
Ich habe einfach ein Dummy angelegt:
Internals:
   CFGFN
   NAME       Airport_Wohnen
   NR         8680
   STATE      on
   TYPE       dummy
   Readings:
     2017-02-19 13:59:45   state           on
Attributes:


Auf dem Raspberry mit dem Airport habe ich zwei ausführbare Scripte erstellt:
#!/bin/bash
echo "setreading Airport_Wohnen state on" | nc "192.168.10.125" 7072


Damit funktioniert es wunderbar.
Ich habe auch versuche gemacht in mit nur einem Script auszukommen und eine Variable mit zu übergeben, aber das habe ich nicht hin bekommen.
run_this_before_play_begins = "/usr/local/etc/airport.sh on";
run_this_after_play_ends = "/usr/local/etc/airport.sh off";


#!/bin/bash
if [ ${1} == "on" ]
then
#airport ist ein
echo "setreading Airport_Wohnen state on" | nc "192.168.10.125" 7072
elif [ ${1} == "off" ]
then
#airport ist aus
echo "setreading Airport_Wohnen state off" | nc "192.168.10.125" 7072
fi


Ich bin total begeistert... würde dennoch gern verstehen warum FHEM das auf anhieb kann.:-)

dev0

Zitatwürde dennoch gern verstehen warum FHEM das auf anhieb kann.
FHEM kann auch über telnet gesteuert werden. Dein Telnet Device verlangt kein Passwort, wenn die Verbindung vom lokalen Host aufgebaut wird. Das ist, in Ansätzen, in den ersten paar Zeilen der FHEM Dokumentation beschrieben: http://fhem.de/commandref.html#intro
Details zum telnet Device findest Du hier: http://fhem.de/commandref.html#telnet

Abercrombie1892

Zitat von: martin2day am 19 Februar 2017, 14:07:58
Abgedrehte sch.....  8) 8) 8)

Ich weiß zwar nicht wie und warum, aber es geht.
Ich habe einfach ein Dummy angelegt:
Internals:
   CFGFN
   NAME       Airport_Wohnen
   NR         8680
   STATE      on
   TYPE       dummy
   Readings:
     2017-02-19 13:59:45   state           on
Attributes:


Auf dem Raspberry mit dem Airport habe ich zwei ausführbare Scripte erstellt:
#!/bin/bash
echo "setreading Airport_Wohnen state on" | nc "192.168.10.125" 7072


Damit funktioniert es wunderbar.
Ich habe auch versuche gemacht in mit nur einem Script auszukommen und eine Variable mit zu übergeben, aber das habe ich nicht hin bekommen.
run_this_before_play_begins = "/usr/local/etc/airport.sh on";
run_this_after_play_ends = "/usr/local/etc/airport.sh off";


#!/bin/bash
if [ ${1} == "on" ]
then
#airport ist ein
echo "setreading Airport_Wohnen state on" | nc "192.168.10.125" 7072
elif [ ${1} == "off" ]
then
#airport ist aus
echo "setreading Airport_Wohnen state off" | nc "192.168.10.125" 7072
fi


Ich bin total begeistert... würde dennoch gern verstehen warum FHEM das auf anhieb kann.:-)

Ich habe auch Shairport Sync installiert und es läuft einwandfrei. Nun habe ich das gleiche versucht, damit ich in fhem den Play und stop Status erhalte. Es funktioniert bei mir aber einfach nicht. Wenn ich die Scripte von Hand starte über die Konsole läuft es und ich kann das setreading auf on und off schalten.

Nutzt evtl noch jemand Shairport Sync mit den scripten?

dev0

Ich kenne Shairport Sync zwar nicht, aber hat der User, unter dem Shairport Sync läuft, die Rechte die Skripte auszuführen? Stimmt der Pfad und der Dateiname? Was sagt das Shairport Sync Log, wenn es das gibt?

Abercrombie1892

#6
hallo,

shairport-sync läuft unter dem user pi unter /home/pi. ich habe mir 2 scripte erstellt

shairportstart.sh

#!/bin/bash
echo "setreading airport_wohnung state on" | nc "192.168.178.21" 7072


shairportend.sh

#!/bin/bash
echo "setreading airport_wohnung state off" | nc "192.168.178.21" 7072


beide scripte liegen unter /home/pi

ich habe beide scripte auf 777 gestellt.

//      run_this_before_play_begins = "/home/pi/shairportstart.sh"; // make sure the application has executable permission. If it's a script, include the shebang (#!/bin/...) on the first line

ich habe auch unter /etc/sudoers.d einen shairport-sync ordner erstellt mit folgenem inhalt
shairport-sync ALL=(ALL) NOPASSWD: ALL


bin absolut kein profi, ich versuche mir auch vieles selbst zu erstellen und zu verstehen, nur hier hab ich keinen plan mehr.

mfg.

dev0

Zitat von: Abercrombie1892 am 08 September 2018, 09:07:12
//      run_this_before_play_begins = "/home/pi/shairportstart.sh"; // make sure the application has executable permission. If it's a script, include the shebang (#!/bin/...) on the first line
Mit // am Zeilenanfang ist der Befehl nicht auskommentiert?