NEWS
[gelöst] TV + Receiver + NUC (Libreelec) an / aus
-
Hallo,
ich habe folgendes Szenario vor und benötige hilfe, wie ich das realisiere. Ich bin leider wenig bis gar nicht affin in Javascript und mit Blockly tue ich mich auch noch schwer.
Ich hoffe, dass ich es dennoch mit eurer Hilfe schaffen werde.
Hardware:
Samsung TV (über Samsung Adapter ansprechbar)
Yamaha Receiver (über Yamaha Adapter ansprechbar)
Intel Nuc 5i5ryh
Kodi (Libreelec - Linux) (über Kodi Adapter ansprechbar)
Amazon Echo Dot Gen2 (über Cloud Adapter verbunden)
Folgende 2 Szenarien möchte ich abdecken:
1.1 "Alexa… TV an"
1.2 Yamaha Receiver geht an über das Objekt in Yamaha-Adapter | Power - media.power "true" (TV geht schon automatisch mit an, also kein zusätzliches Doing)
1.3 Wake on Lan Befehl um den Intel NUC aus dem Standby zu holen.
1.4 Yamaha Receiver soll nach ca. 15 Sekunden noch einmal das Profil "Kodi" auswählen über das Objekt | InputEnum - State "Kodi" (Grund: Beim Starten des Intel NUCs - Libreelec geht der Receiver nach kurzer Zeit immer auf AV1, wo ich KODI immer erneut auswählen muss, damit er auf dem Profil bleibt.)
2.1 "Alexa... TV aus"
2.2 Yamaha Receiver geht an über das Objekt in Yamaha-Adapter | Power - media.power "false"
2.3 Intel NUC geht über das Objekt in Kodi-Adapter | Suspend - state "Button" in den Standby
2.4 Samsung TV geht über Objekt in Samsung-Adapter | Power.CheckOn - state "true" ---danach---> Power.Off - state "true"
Folgendes habe ich zum Wake On LAN gefunden:
Windows:
createState("javascript.0.PCanschalten", 0); // Generiert beim Starten den Datenpunkt
var wol = require('wake_on_lan'); // Lädt von ioBroker das nötige Paket herunter
var myPC = "XXX"; // XXX durch eure MAC Adresse ersetzten
on({id: "javascript.0.PCanschalten", change: 'any'}, function (obj) {
wol.wake(myPC);
log("Script WOL - PC aufgeweckt", "info");
}
);
Linux:
createState(„javascript.0.PCanschalten“, 0); // Generiert beim Starten den Datenpunkt
var wol = require(‚wake_on_lan‘); // Lädt von ioBroker das nötige Paket herunter
var myPC = „MAC Adresse“; // durch eure MAC Adresse ersetzten
on({id: „javascript.0.PCanschalten“, change: ‚any‘}, function (obj) {
var current_state = getState(„javascript.0.PCanschalten“).val;
if (current_state == „1“) { //entspricht true bzw „an“ über Alexa
wol.wake(myPC);
log(„Script ServerSteuerung – Server aufgeweckt, „+current_state, „info“);
}else {
exec(’ssh Serverip -l root -t „shutdown -h now“‚);
log(„Script ServerSteuerung – Server shutdown „+current_state, „info“);
}
}
);
Libreelec ist ja ein Linux System, demach habe ich mich mit dem Wake On Lan Linux Script versucht, was aber leider funktioniert. Der Intel NUC geht nicht aus dem Standby an.
Über die Yatse App (Fernbedienung Kodi) funktioniert das Wake on LAN auf UDP 5600, also ist der NUC ansich für Wake on LAN konfiguriert.
Könnt ihr mir bei meinem Vorhaben behilflich sein?
Vielen Dank und VG
Modjo
-
Hallo zusammen,
ich habe hier ein wenig getüftelt und habe wenigstens das Wake On Lan Thema gelöst. Hierfür habe ich "etherwake" auf dem Raspberry Pi (IOBroker) installiert, womit ich den Intel NUC (Libreelec) einschalten kann.
Ich habe es auch hinbekommen, dass ich daraus 2 Szenen baue, welche für sich funktionieren. Genau hier liegt das Problem für Alexa. Alexa kann ja nur an und aus, womit ich nicht wie gewünscht beide Scripte hinterlegen kann.
Hier müsste ich derzeit folgendes machen:
Szene 1: TV an
Szene 2: TV aus
"Alexa, schalte TV an an" (Szene 1 wird gestartet)
"Alexa, schalte TV aus an" (Szene 2 wird gestartet)
Das ist sehr unpraktikabel, weshalb ich es wohl in ein Script bauen muss.
Wenn ich logisch nicht ganz falsch liege müsste es doch dann folgendermaßen gebaut werden, oder?:
****__Falls yamaha.0.power = false //Prüfe ob Receiver aus ist
Setze yamaha.0.scene = 1 //Starte Scene 1, womit Receiver angeht und TV über CEC mit angeht
exec('sudo etherwake -i eth0 MACADRESSE'); // Setze Magic Packet für Wake on LAN
Setze nach 15 Sekunden yahama.0.inputEnum = KODI // Warte 15 Sekunden und setze den Input auf "KODI", weil er, wie oben beschrieben durch starten des NUCs auf AV1 wechselt
Falls yamaha.0.power = true //Prüfe ob Receiver an ist
Setze kodi.0.system.Suspend = true //Setze Kodi in den Sleep Modus
Setze samsung.0.Power.checkOn = true // Prüfe ob Samsung TVeingeschaltet ist
Setze samsung.0.Power.off = true // Schalte Samsung TV aus__****
Lieg ich hier richtig oder muss ich den an und aus Status von Alexa auch noch irgendwie mit 1 oder 0 setzen?
Wenn ja, kann man mir damit helfen?
Vielen Dank & Grüße
Modjo
-
Hallo nochmal,
ich habe mich jetzt in JS versucht. Ich vermute, dass das Scipt irgendwie so aussehen muss, aber es funktioniert noch nicht:
createState("scriptEnabled.TV.ein_aus", 0); // Datenpunkt erzeugen var yamaha_scene = "yamaha.0.scene" // Yamaha Receiver AN + Szene setzen var yamaha_power = "yamaha.0.power" // Yamaha Receiver An/Aus var yamaha_input = "yamaha.0.inputEnum" //Yamaha Receiver Profil var kodi_suspend = "kodi.0.system.Suspend" // Kodi (NUC) Standby var samsung_checkon = "samsung.0.Power.checkOn" // Samsung TV AN/Aus prüfen var samsung_poweroff = "samsung.0.Power.off" // Samsung TV AUS on({id: "scriptEnabled.TV.ein_aus",change: 'any'}, function(obj) { var current_state = getState("scriptEnabled.TV.ein_aus").val; if (current_state == "1") { yamaha_scene = "1"; exec('sudo etherwake -i eth0 [b]MACADRESSE[/b]'); setTimeout(function() { yamaha_input = "Kodi"; }, 15000); log("TV: AN", "info"); } else { kodi_suspend = true; yahama_power = false; samsung_checkon = true; samsung_poweroff = true; log("TV: AUS", "info"); } });
Einer ne Idee, wo die Fehler liegen?
Danke & Gruß
-
Hier nochmal eine überarbeitete Form, welche aber leider auch nicht so klappen will:
// Datenpunkt erstellen createState("javascript.0.TV_an_aus", 0); on({ id: "javascript.0.TV_an_aus", change: 'any' }, function(obj) { var current_state = getState("javascript.0.TV_an_aus").val; // "An"-Status für Alexa generieren if (current_state == "1") { // Yamaha-Receiver über Szene 1 einschalten (startet gleichzeitig den TV via HDMI-CEC) setState('yamaha.0.scene', 1); // Starte den NUC mit WOL-Befehl mit 5 Sekunden Versatz setTimeout(function() { exec('sudo etherwake -i eth0 MACADRESSE'); }, 5000); // Schalte am Receiver auf Profil "KODI" mit 30 Sekunden Versatz setTimeout(function() { setState('yamaha.0.inputEnum', "KODI"); }, 30000); log("Geräte sind gestartet mit Status, " + current_state, "info"); } else { //Kodi in den Sleep Modus versetzen setState('kodi.0.system.Suspend', true); //Yamaha-Receiver ausschalten setState('yamaha.0.power', false); // TV prüfen ob an/aus setState('samsung.0.Power.checkOn', true); //TV ausschalten setState('samsung.0.Power.off', true); log("Geräte sind heruntergefahren mit Status, " + current_state, "info"); } });
Vielleicht hat ja noch Jemand ne Idee?
Gruß
-
Habe es nun wie folgt gelöst:
on({ id: "javascript.0.scriptEnabled.TV.ein_aus", change: 'any' }, function(obj) { var current_state = getState("javascript.0.scriptEnabled.TV.ein_aus").val; // "An"-Status für Alexa generieren if (current_state === true) { // Yamaha-Receiver über Szene 1 einschalten (startet gleichzeitig den TV via HDMI-CEC) setState('yamaha.0.scene', 1); // Starte den NUC mit WOL-Befehl mit 5 Sekunden Versatz setTimeout(function() { exec('sudo etherwake -i eth0 MACADRESSE'); }, 7000); // Schalte am Receiver auf Profil "KODI" mit 30 Sekunden Versatz setTimeout(function() { setState('yamaha.0.inputEnum', "KODI"); }, 30000); log("Geräte sind gestartet mit Status, " + current_state, "info"); } else { //Kodi in den Sleep Modus versetzen setState('kodi.0.system.Suspend', true); //Yamaha-Receiver ausschalten setState('yamaha.0.power', false); // TV prüfen ob an/aus setState('samsung.0.Power.checkOn', true); //TV ausschalten setState('samsung.0.Power.off', true); log("Geräte sind heruntergefahren mit Status, " + current_state, "info"); } });
Fehler war, dass ich gar keinen Datenpunkt generieren musste, sondern den des Scriptes selbst der auf "true" und "false" bei an / aus wechselt.
VG