NEWS
How to: PS4 einschalten/steuern mit Harmony Aktivität oder HomeKit
-
Hallo zusammen
Seit längerem verfolge ich das Ziel mein Heimkino zu automatisieren. Nun ist mir dies gelungen und möchte hier grob Dokumentieren wie ich dies auf die Beine gestellt habe. Schritte um die Adapter zu konfigurieren sind bereits vorhanden deshalb werde ich auf dies grösstenteils verzichten.
Anregungen oder Verbesserungen vom Code sind sehr willkommen, da ich kein Programmierer bin.
Mein Ziel:
Mit der Harmony Companion Fernbedienung sowie HomeKit mein TV und Samsung Soundsystem sowie die Playstation einzuschalten und zu bedienen.
Aktivitäten auf dem Harmony Hub
Heimkino
Diese Aktivität soll mein Sony TV, Samsung Soundsystem sowie die Playstation 4 einschalten und sich einloggen mit dem zuletzt verwendetem User.
Netflix
Diese Aktivität soll mein Sony TV, Samsung Soundsystem sowie die Playstation 4 einschalten und sich einloggen mit dem zuletzt verwendetem User dazu noch Netflix starten.
Spotify
Diese Aktivität soll mein Sony TV, Samsung Soundsystem sowie die Playstation 4 einschalten und sich einloggen mit dem zuletzt verwendetem User dazu noch Spotify starten und den aktuellen Titel wiedergeben.
Die Aktivitäten sollen über die Aktionstasten auf der Fernbedienung als auch über HomeKit ein und aus geschaltet werden können.
Benötigte Adapter:
• Logitech Harmony Adapter
• JavaScript Adapter + NPM Modul ps4-waker
• Yahka
• Spotify-premium Adapter
PS4 mit Harmony Aktivität starten/über HomeKit starten
Da das Harmony Hub die PlayStation 4 nicht einschalten kann sondern nur per Bluetooth steuern, kommt hier das NPM Modul „ps4-waker“ zum Einsatz. Dieses NPM Modul muss auf dem Raspberry installiert. Danach in den JavaScript Adapter eingetragen.
Somit kann mit dem Befehl über die Konsole ps4-waker konfigurieren (mit der PlayStation verbinden).
Und danach in einem Script mit
exec("ps4-waker");
ausgeführt werden.
Danach habe ich ein State erstellt welcher PS4.Schalter heisst und folgendes Script.
Script: PS4
/*Wenn PS4.Schalter ein*/ on({id:"PS4.Schalter"/*Schalter*/, val:true},function(obj){ //Log eintrag log("einschalten"); //Befehl PS4 Starten über ps4-waker exec("ps4-waker"); }); /*Wenn PS4.Schalter aus*/ on({id:"PS4.Schalter"/*Schalter*/, val:false},function(obj){ //Log eintrag log("ausschalten"); //Befehl PS4 Standby über ps4-waker exec("ps4-waker standby"); })
Es hört auf den Schalter und wenn dieser ein oder aus geschaltet wird sendet es den Befehl um die PS4 ein zuschalten resp. in Standby Modus zu versetzen.
Nun erstellen wir den Schalter im Yahka:
Name: PS4
Kategorie: Switch
Fügen einen Service hinzu.
Service-Type: Switch
ON
1: InOutFunktion ioBroker.State
2: Umwandlungsfunktion passthrough
1: InOutParams PS4.Schalter
2: Umwandlungsparameter PS4.Schalter
Jetzt können wir bereits die PS4 mit HomeKit ein/ausschalten.
Um die PS4 über eine Harmony Aktivität zu starten habe ich ein weiteres Script geschrieben.
Script: Heimkino_v0.1
on({id:"harmony.0.Harmony_Hub.activities.Heimkino"/*activity:Heimkino*/,val:1},function(obj){ //Log eintrag log("starten"); //Triggert PS Script um PS4 einzuschalten setState("PS4.Schalter"/*Schalter*/,true); /*Befehl wird erneut ausgeführt, da das Login triggert sonst bleibt es hängen bei der User Auswahl*/ setTimeout(function(obj){ exec("ps4-waker"); },40000); } on({id:"harmony.0.Harmony_Hub.activities.Heimkino"/*activity:Heimkino*/,val:3},function(obj){ //Log eintrag log("aus"); //Triggert PS Script um PS4 auszuschalten setState("PS4.Schalter"/*Schalter*/,false); });
Um Nun die Aktivität über HomeKit ein und aus zu schalten, müssen wir erneut einen State anlegen welcher Homekit Steuern kann, da HomeKit nicht die korrekten Befehle an Hamrony senden kann.
Ich habe ihn „Homekit_Heimkino.Schalter“ genannt. Und hier dazu das Script
Script: Heimkino_Homekit_v0.1
on({id:"Homekit_Heimkino.Schalter"/*Schalter*/,val:true},function(obj){ //Aktueller Status von der Harmony Aktivität var cstatus = getState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/).val; //Wenn keine Aktivität gestartet ist if (cstatus === 0){ //Dann Starte die Aktivität Heimkino setState("harmony.0.Harmony_Hub.activities.Heimkino"/*activity:Heimkino*/,1); log("starten"); } else{ //wenn sie gestartet ist muss sie nicht nochmals gestartet werden sonst gibt es eine schlaufe. } }); on({id:"Homekit_Heimkino.Schalter"/*Schalter*/,val:false},function(obj){ //Aktueller Status von der Harmony Aktivität var cstatus = getState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/).val; //Wenn eine Aktivität gestartet ist if (cstatus === 2){. //Dann Schalte Sie aus setState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/,3); log("aus"); } else{ //wenn sie gestartet ist muss sie nicht nochmals gestartet werden sonst gibt es eine schlaufe. } });
Damit der HomeKit State auch aktuell bleibt müssen wir das vorherige Script ergänzen mit:
Dieser
setState("Homekit_Heimkino.Schalter"/*Schalter*/,true);
direkt nach
setState("PS4.Schalter"/*Schalter*/,true);
Und dieser
setState("Homekit_Heimkino.Schalter"/*Schalter*/,false);
direkt nach
setState("PS4.Schalter"/*Schalter*/,false);
Nun haben wir das grundlegende mal durch.
Ich habe die Script noch weiter angepasst, damit ich Netflix oder Youtube öffnen kann mit der Fernbedienung über die Aktionstasten von der Harmony Fernbedienung. Und beim Drucken der Heimkino taste kann ich das aktuelle Spiel oder die Anwendung schliessen.
Wenn ich Spotify Öffne habe ich noch ein weitere Script erstellt welches dann direkt den aktuellen Song von Spotify abspielt.
Hier alle meine Scripts aktuellen Scripts. Evtl sind noch anpassungen nötig. z.B. ID's anpassen oder setTimeout länger oder kürzer setzen und natürlich muss man auch noch weitere States anlegen wenn man mehr als ein Script resp Aktivität hat sowie auch im Yahka die Devices anlegen damit sie über HomeKit steuerbar sind.
Script: Heimkino_v1.0
on({id:"harmony.0.Harmony_Hub.activities.Heimkino"/*activity:Heimkino*/,val:1},function(obj){ //schreibt den Status des Schalters in die Varibale var psstatus = getState("PS4.Schalter"/*PS4.Schalter*/).val; //Wenn PS4 an if (psstatus === true){ //Dann PS4 Anwendung schliessen log("zurücksetzen"); exec("ps4-waker remote ps:1000 up up up up up up up up enter down down enter"); } else { //Sonst PS4 einschalten und Schalter aktualisieren log("starten"); setState("PS4.Schalter"/*Schalter*/,true); setState("Homekit_Heimkino.Schalter"/*Schalter*/,true); //PS4 Login setTimeout(function(obj){ exec("ps4-waker"); },40000); } }); on({id:"harmony.0.Harmony_Hub.activities.Heimkino"/*activity:Heimkino*/,val:3},function(obj){ log("aus"); //Schaltet PS4 und State Heimkino aus setState("PS4.Schalter"/*Schalter*/,false); setState("Homekit_Heimkino.Schalter"/*Schalter*/,false); });
Script: Homekit_Heimkino_v1.0
on({id:"Homekit_Heimkino.Schalter"/*Schalter*/,val:true},function(obj){ //Aktueller Status von der Harmony Aktivität var cstatus = getState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/).val; //Wenn keine Aktivität gestartet ist if (cstatus === 0){ //Dann Starte die Aktivität Heimkino setState("harmony.0.Harmony_Hub.activities.Heimkino"/*activity:Heimkino*/,1); log("starten"); } else{ //Sonst nichts machen } }); on({id:"Homekit_Heimkino.Schalter"/*Schalter*/,val:false},function(obj){ //Aktueller Status von der Harmony Aktivität var cstatus = getState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/).val; //Wenn eine Aktivität gestartet ist if (cstatus === 2){ //Dann Schalte die aktuelle Aktivität aus setState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/,3); log("aus"); } else{ //Sonst nichts machen } });
Script: Musik hören_v1.0
on({id:"harmony.0.Harmony_Hub.activities.Musik"/*activity:Musik*/,val:1},function(obj){ //schreibt den Status des Schalters in die Varibale var psstatus = getState("PS4.Schalter"/*PS4.Schalter*/).val; //Wenn PS4 an if (psstatus === true){ //Dann Starte nur Spotify log("only Spotify"); exec("ps4-waker start CUSA01780"); } else { //Sonst PS4 einschalten und Schalter aktualisieren log("an"); setState("PS4.Schalter"/*Schalter*/,true); setState("Homekit_Musik-hören.Schalter"/*Homekit_Musik-hören.Schalter*/,true); //Nachdem die PS4 eingeschaltet ist Spotify starten setTimeout(function(obj){ exec("ps4-waker start CUSA01780"); },40000); } }); on({id:"harmony.0.Harmony_Hub.activities.Musik"/*activity:Musik*/,val:3},function(obj){ log("aus"); //Schaltet PS4 und State Musik hören aus setState("PS4.Schalter"/*Schalter*/,false); setState("Homekit_Musik-hören.Schalter"/*Homekit_Musik-hören.Schalter*/,false); });
Script: Musik hören_Homekit_v1.0
on({id:"Homekit_Musik-hören.Schalter"/*Homekit_Musik-hören.Schalter*/,val:true},function(obj){ var cstatus = getState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/).val if (cstatus === 0){ setState("harmony.0.Harmony_Hub.activities.Musik"/*activity:Heimkino*/,1) log("starten"); } else{ } }); on({id:"Homekit_Musik-hören.Schalter"/*Homekit_Musik-hören.Schalter*/,val:false},function(obj){ var cstatus = getState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/).val if (cstatus === 2){ setState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/,3) log("aus"); } else{ } });
Script: Netflix_v1.0
on({id:"harmony.0.Harmony_Hub.activities.Netflix"/*activity:Netflix*/,val:1},function(obj){ var psstatus = getState("PS4.Schalter"/*PS4.Schalter*/).val if (psstatus === true){ log("only Netflix"); exec("ps4-waker start CUSA00127"); } else { log("an"); setState("PS4.Schalter"/*Schalter*/,true); setState("Homekit_Netflix.Schalter"/*Homekit_Netflix.Schalter*/,true); setTimeout(function(obj){ exec("ps4-waker start CUSA00127"); },40000); } }); on({id:"harmony.0.Harmony_Hub.activities.Netflix"/*activity:Netflix*/,val:3},function(obj){ log("aus"); setState("PS4.Schalter"/*Schalter*/,false); setState("Homekit_Netflix.Schalter"/*Homekit_Netflix.Schalter*/,false); });
Script: Netlfix_Homekit_v1.0
on({id:"Homekit_Netflix.Schalter"/*Schalter*/,val:true},function(obj){ var cstatus = getState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/).val if (cstatus === 0){ setState("harmony.0.Harmony_Hub.activities.Netflix"/*activity:Netflix*/,1) log("starten"); } else{ } }); on({id:"Homekit_Netflix.Schalter"/*Schalter*/,val:false},function(obj){ var cstatus = getState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/).val if (cstatus === 2){ setState("harmony.0.Harmony_Hub.activities.currentStatus"/*activity:currentStatus*/,3) log("aus"); } else{ } });
Script: Play Spotify
on({id:"harmony.0.Harmony_Hub.activities.Musik"/*activity:Musik*/,val:1},function(obj){ var psstatus = getState("PS4.Schalter"/*PS4.Schalter*/).val; if (psstatus === true){ log("sofort"); setTimeout(function(obj){ setState("spotify-premium.0.getDevices"/*refresh device list*/,true); log("Geräteliste aktualisieren"); setTimeout(function(obj){ setState("spotify-premium.0.devices.[b][i][u]DeviceID_Einfügen[/u][/i][/b].useForPlayback"/*press to use device for playback*/,true); log("PS4 auswählen"); },5000); setTimeout(function(obj){ setState("spotify-premium.0.player.play"/*play*/,true); log("Play"); },7000); },15000); } else { log("verspätet"); setTimeout(function(obj){ setState("spotify-premium.0.getDevices"/*refresh device list*/,true); log("Geräteliste aktualisieren"); setTimeout(function(obj){ setState("spotify-premium.0.devices.[b][i][u]DeviceID_Einfügen[/u][/i][/b].useForPlayback"/*press to use device for playback*/,true); log("PS4 auswählen"); },5000); setTimeout(function(obj){ setState("spotify-premium.0.player.play"/*play*/,true); log("Play"); },7000); },55000); } });
Wenn ihr fragen habt fragt einfach. Ich versuch so gut wie möglich zu helfen.
-
Hast Du es irgendwie geschaftt über den https://www.harmony-remote-forum.de/viewtopic.php?f=49&t=14600&sid=742c7155bf898a1e0258cf114efa9a82&p=115861#p109673 wenn eine Passwort Abfrage besteht? Ansonsten ist das ja schlecht zu automatisieren wenn man nach dem Einschalten dann doch wieder den PS4 Controller braucht. Bei mir wird zwar die PS4 eingeschaltet, ich muss dann aber danach auf den PS4 Controler wechseln um den Passcode zu bestätigen. In sofern ist es bei mir nicht möglich eine APP wie Netflix automatisch zu starten mit der Harmony Remote, da ich so oder so am Anmeldebildschirm hänge und dann den PS4 Controller nutzten muss.
-
Ich habe kein Passwort auf meinem Konto. Hatte nie eines und hat deshalb immer funktioniert. Aber kann es mal testen.
Einfach die nummern senden kann ps4-waker nicht. Du könntest höchstens mit den befehlen den die richtigen Tasten auf der Tastatur drücken lassen.
-
Ich habe kein Passwort auf meinem Konto. Hatte nie eines und hat deshalb immer funktioniert. Aber kann es mal testen. `
Das wäre nett falls Du die Zeit findest. Dass es ohne Passwort Schutz funtioniert weis ich, das ist aber bei mir keine Option, da mehrere Profile auf der PS4 laufen und auch Kinder im Haus die PS4 nutzten. Daher kann ich nur die PS4 aufwecken und muss dann mit dem Controller das Passwort eingeben.Einfach die nummern senden kann ps4-waker nicht. Du könntest höchstens mit den befehlen den die richtigen Tasten auf der Tastatur drücken lassen. `
Ich selber nutzte zwar kein ps4-waker aber das mit Befehlen senden habe ich schon probiert eine Reaktion habe ich aber erst hinbekommen nachdem die Passwort Eingabe über den Controller abgeschlossen ist. Macht auf der einen Seite wohl auch Sinn, dass man die Sicherheit nicht über das Netzwerk aushebeln kann, ist aber etwas einschränkend, weil man eben nicht direkt durchstarten kann und eine App starten ohne zwischendurch mit einem Controller das Passwort zu übergeben. So richtig funktioniert das also mit dem Starten von Apps aus dem Standby bei mir zur Zeit nur wenn man die PS4 alleine nutzt ohne Passwort Abfrage. -
Kein porblem.
was nutzt du denn?
Ich wusste hab mal was gelesen mit pin oder passwort das es evtl geht.
Hier schau:
–pin <pin-code>Manual pin-code registration
--pass <passcode>Provide passcode for login, if needed
Dass steht auf der NPM sowie der Github seite von ps4-waker.
Wie schaltest du denn deine PS4 ein?</passcode></pin-code>
-
Hallo,
ich möchte meine Ps4 auch mit Harmony/Amazon einschalten.
Weiß aber nicht genau wie ich vorgehen soll, da ich da eher ein Anfänger bin.
Im ioBroker habe ich harmony.0 , javascript.0 und yahka.0 installiert.
Wo und wie kann ich jetzt das NPM Modul ps4-waker installieren?
Danke für die Hilfe.
-
ich würde auch gern ps4 waker nutzen da ich aber auch nicht der profi bin wäre eine genauere Anleitung echt nett, ich verstehe das mit den npm modul schon nicht.
mfg
-
Könntest du Netterweise den Teil mit dem NPM Adapter (PS4-Waker) genauer ausführen? Ich kriege den zum verrecken nicht ans laufen. In der Rootebene meines Debian funktioniert es ohne Probleme, aber im Iobroker kriege ich ihn nicht ans laufen. Übersehe ich irgendwo etwas? Was meinst du mit im Javascript Adapter eintragen?
Ich hoffe Du kannst/willst helfen.
Danke
-
Guten Morgen @kimbel55 und @denjo
@denjo Leider habe ich deine Beitrag nicht gesehen.
Wo versuchst du den PS4-Waker zum laufen zu kriegen?
Ich hab den Javascript Adapter installiert und im Tab "Instanzen" diesen geöffnet nun sollter dort eine Titel mit Feld stehen "Zusätzliche NPM-Module" dort einfach "ps4-waker" eintragen und der Adapter kann per Javascript angesprochen werden unter dem Tab "Script" kannst du neue Scripte anlegen und laufen lassen. Meine Scripts habe ich oben gepostet, diese müsst ihr allerdings noch auf eure Szenen im Harmony anpassen(Button: "ID Einfügen" wenn ein Skript geöffnet ist. Die Scripte laufen, sind aber nicht perfekt allerdings mit meinem Wissenstand damals für mich Zufriedenstellen.
Mittlerweile denke ich würde einiges anderst machen wenn ich sie nochmals schreiben müsst aber da ich Home Assistant am testen bin, werde ich diese wahrscheinlich nicht umschreiben ausser Home Assistant kann dies nicht oder ist nicht so zuverlässig wie ioBroker. Aber bisher schaut es sehr gut aus und da ich auch noch meinen eigenen Voice Assistant (Mycroft.ai) bauen möchte, muss ich fast zu Home Assistant wechseln.
Gruss
Noah
-
also ich habe den PS4-Waker unter root mit
npm install ps4-waker -g
installiert.
Dort funktioniert es auch die PS4 zu verbinden und zu Wecken. Dann habe ich genauso wie Du schreibst den PS4-Waker im Javascript Adapter eingetragen.Wenn ich dann im Terminaladapter versuche ps4-waker zu starten kommt folgende Meldung:
/opt/iobroker$ ps4-waker No credentials; Use the PS4 Second Screen App and try to connect to "PS4-Waker" Root permissions required to start PS4 Dummy Attempting to request root permissions now (we will relinquish them as soon as possible): sudo /usr/bin/node /usr/bin/ps4-waker --user-id 1001 -c /home/iobroker/.ps4-wake.credentials.json We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. sudo: no tty present and no askpass program specified /opt/iobroker$
Wenn ich wie angegeben den Code ausführe:
sudo /usr/bin/node /usr/bin/ps4-waker --user-id 1001 -c /home/iobroker/.ps4-wake.credentials.json
kriege ich als Antwort:
/opt/iobroker$ sudo /usr/bin/node /usr/bin/ps4-waker --user-id 1001 -c /home/iobroker/.ps4-wake.credentials.json We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. sudo: no tty present and no askpass program specified /opt/iobroker$
Ich weiß nicht mehr weiter..
-
Also ich hab nie den Terminaladapter verwendet.
Soweit ich mich erinnern kann habe ich ps4-waker installiert und ausgeführt wie es auf der NPM resp. Github Seite beschrieben ist. Danach immer direkt auf dem Raspi die Konsole geöffnet und dort getestet und die erste Konfiguration gemacht. Dann habe ich die Scripts begonnen zu schreiben. Hatte leider zum Glück nie grosse Probleme. Musste nur einmal die Konfig von ps4-waker löschen da ich die PS4 neu installiert hab.Ich denke wenn du Probleme mit dem ps4-waker hast, bist du ein wenig am falschen Ort. Schau doch mal auf Github.
Leider kann ich dir nicht helfen.
Gruss
Noah
-
@noaboa Ich habe es für mich nun lösen können.. nach etlichen Rollbacks und diversen Versuchen.
Also ich hatte verschiedene Herangehensweisen versucht, die alle zu Fehlern führten. Wenn ich in meinem LXC Container in der Konsolenpm install ps4-waker -g
ausgeführt habe, konnte ich anschließend auch über die Konsole mit dem Befehl
ps4-waker
die Bindung einleiten.
Aber es klappte nicht im IoBroker, weder via Javascript noch per Konsole. Auch der Versuch das Modul über den Javascript Adapter unter Instanzen zu laden funktionierte nicht.
Nun läuft es jedoch, ich habe folgendes gemacht, zuerst den IoBroker gestoppt, dann im LXC Container in der Konsole folgenden Befehl ausgeführtsetcap cap_net_raw,cap_net_admin=eip /usr/bin/node
(dieser scheint die Berechtigungsprobleme aufzuheben), anschließend den IoBroker wieder gestartet und dort über den Terminaladapter folgenden Befehl ausgefüht
npm install ps4-waker -g
diesmal habe ich auch keine Fehlermeldungen wegen Rootrechten erhalten. Anschließend aus dem Terminaladapter
ps4-waker
ausgeführt und den Bindungsprozess gestartet.
Nun lässt sich die Konsole mit ps4-waker aus dem Ruhezustand wecken und mit
ps4-waker standby wieder in den Ruhezustand versetzen lassen.
Auch die Exec Befehle im Javascript funktionieren nun.