NEWS
Skript per Alexa an Pioneer SC 2020 senden
-
Hallo liebe Foren-Mitglieder,
ich bin hier ganz neu und habe am Wochenende meine ersten Erfahrungen mit ioBroker gemacht. Bin ganz Stolz und kann nun meine Homematic (piVCCU3) mit der Alexa per Sprachbefehle ansteuern. piVCCU3 und ioBroker laufen auf einem Raspberry Pi4.
Nun würde ich noch gerne meinen alten Pioneer SC2020 ebenfalls mit der Alexa ansprechen. Dazu würde es reichen, wenn ich zwei Befehle per Skript senden könnte. Einmal den Pioneer anzuschalten auf einen bestimmten Eingang setzen und der zweite Befehl, der ihn einfach wieder ausschaltet.
Von meinem Win11-PC habe ich das schon per Telenet hinbekommen. Dazu sende ich folgendes um ihn einzuschalten und auf den EIngang zu setzen( siehe unten).Kann mir jemand sagen wie ich das Skript in iobRoker kopieren kann und dann mit einem Alexa-Befehl z.B. "Alexa, schalte Pioneer Ein" starte?
Vielen dank euch schon mal und liebe Grüße Bettina
P.S: Für andere Vorschläge bin ich natürlich auch dankbar, aber bitte so dass es gut beschrieben ist.
Set cloner = CreateObject("WScript.Shell")
cloner.run"cmd"
WScript.Sleep 1500cloner.SendKeys"start telnet 192.168.1.26"
cloner.SendKeys("{Enter}")
WScript.Sleep 1500cloner.SendKeys"po"
cloner.SendKeys("{Enter}")
WScript.Sleep 1500cloner.SendKeys"05FN"
cloner.SendKeys("{Enter}")
WScript.Sleep 10000cloner.SendKeys("^({+})")
WScript.Sleep 1500cloner.SendKeys"quit"
cloner.SendKeys("{Enter}")
WScript.Sleep 1500set WshShell = CreateObject("WScript.Shell")
WshShell.AppActivate "c:\windows\system32\cmd.exe"
WScript.Sleep 1500
WshShell.SendKeys "%exit"
WshShell.SendKeys("{Enter}") -
@grumpycat9971
Habe selber kein Pioneer, kann es also nicht testen.Programm -> Ein- / Ausschalten
const net = require('net'); function sendToPioneer(commands) { const client = new net.Socket(); client.connect(23, '192.168.1.26', () => { console.log('Verbunden mit Pioneer'); let fullCommand = commands.join('\r'); client.write(fullCommand + '\r'); }); client.on('data', (data) => { console.log('Antwort:', data.toString()); }); client.on('error', (err) => { console.error('Fehler:', err); }); client.on('close', () => { console.log('Verbindung geschlossen'); }); } // Beispiel: Gerät einschalten und auf Eingang 05 schalten // sendToPioneer(['PO', '05FN']); // Ausschalten // sendToPioneer(['PF']); // "Power Off"
DP erstellen
let pioneerDP = '0_userdata.0.pioneer.on' createState( pioneerDP, false, { name: 'Pioneer einschalten', type: 'boolean', role: 'switch', def: false, read: true, write: true, smartName: { de: 'Pioneer' // So heißt das Gerät für Alexa } }); on({id: pioneerDP, change: 'any'}, (obj) => { if (obj.state.val) { sendToPioneer(['PO', '05FN']); } else { sendToPioneer(['PF']); } });
-
Hallo MCU,
ich bin noch nicht ganz so fit in ioBroker und brauche daher nochmals deine Hilfe. Die beiden Skripte zu kopiern ist ja nicht so schwer, aber wo lege ich das Programm ein/ausschalten an?Habe nun mal den Adapter Javaskript geladen und dann bei Skripte "Pioneer ein" angelegt. Da kan die Frage mit Blocky oder Javaskript. Habe das Javaskript gewählt und da das von dir reinkopiert.
Und DP heißt wahrscheinlich Datenpunkt. Den wollte ich bei Objekte anlegen, aber das Plus ist grau und bin ich da überhaupt richtig?
Kann ich mit diesen beiden Skripten dann ein und ausschalten?
Oder nur ein?
Denn im zweiten Skript wird ja nur eingeschaltet und ein Eingang gewählt.
Muss ich dann ein drittes Skript anlegen für das Ausschalten? -
@grumpycat9971 Beide Skripte müssen in einem javascript sein.
Habe das script nochmal angepasst, da es noch Fehler gab.Bitte das Skript komplett in ein javascript kopieren und dann starten.
-> DP (ja Datenpunkt) wird dann angelegt,Dann mal bei IOT-Adapter schauen, ob er unter Geräte den Pioneer angelegt hat.
Wenn ja, -> Alexa, suche neue Geräte zur "Alexa" sagen.Danach solltest du zur Alexa sagen können ->
Alexa, Pioneer an
undAlexa, Pioneer aus
let pioneerDP = '0_userdata.0.pioneer.on' createState( pioneerDP, false, { name: 'Pioneer einschalten', type: 'boolean', role: 'switch', def: false, read: true, write: true, smartName: { de: 'Pioneer' // So heißt das Gerät für Alexa } }); on({id: pioneerDP, change: 'any'}, (obj) => { if (obj.state.val) { sendToPioneer(['PO', '05FN']); } else { sendToPioneer(['PF']); } }); const net = require('net'); function sendToPioneer(commands) { const client = new net.Socket(); client.connect(23, '192.168.1.26', () => { console.log('Verbunden mit Pioneer'); let fullCommand = commands.join('\r'); client.write(fullCommand + '\r'); }); client.on('data', (data) => { console.log('Antwort:'+ data.toString()); }); client.on('error', (err) => { console.error('Fehler:'+ err); }); client.on('close', () => { console.log('Verbindung geschlossen'); }); } // Beispiel: Gerät einschalten und auf Eingang 05 schalten // sendToPioneer(['PO', '05FN']); // Ausschalten // sendToPioneer(['PF']); // "Power Off"
Den wollte ich bei Objekte anlegen, aber das Plus ist grau und bin ich da überhaupt richtig?
Der DP wird mit der Funktion createState angelegt.
Muss ich dann ein drittes Skript anlegen für das Ausschalten?
Ist der DP "pioneerDP" -> false -> wird ['PF']) gesendet und damit das Gerät ausgeschaltet?
-
Also das Gerät "Pioneer" ist in der Alexa App nun sichtbar, darin gibt es auch den Button "An" und "Aus". Ich kann ihn weder an- noch ausschalten. Weder über die Buttons noch per Sprachbefehl.
Auch muss zwingend in dem Skript nach den Senden des PO eine Zeitverzögerung mit 1,5 sec kommen, denn sonst wird nicht auf Eingang 05 geschaltet. Das Problem hatte ich damals mit dem Telnet-Skript.
-
@grumpycat9971 ok, dann versuchen wir es schrittweise
! Pioneer ist ausgeschaltet
Setze mal den Befehl in das Script, also am Ende hinzufügen und script speichern
sendToPioneer(['PO']);
Wird das Gerät eingeschaltet?
Steht im ioBroker-LOG
Verbunden mit Pioneer
-
Das kommt im Log:
Und leider nein, er lässt sich nicht einschalten. Habe den Befehl wie folgt angehängt:
-
@grumpycat9971
Ich hab mal nach anderen Threads gesucht. Würde dieser passen?
https://forum.iobroker.net/topic/4024/pioneer-avr-skript/45?lang=en-GBHab auch dies gefunden über http?
https://github.com/rwifall/pioneer-receiver-notesGib mal in einem Browser dies ein
http://192.168.1.26/EventHandler.asp?WebToHostItem=PO
Oder in dem vorhandenem Script mal andere Ports verwenden statt 23, Port 80
-
Puh ich habe mir das mal nun durchgeksen und verstehe leider nur Bahnhof. Da gibt es wohl einen selbstgeschriebenen Adpater, ich weiß aber nicht wie man den installierten kann. Die beiden, die ich bis jetzt verwende sind Homematic und Alexa, die gabe es aber über die Suche zu finden und anschließend zu installieren.
Wenn ich das wie du geschrieben hast im Browser eingebe geht er an:
http://192.168.1.26/EventHandler.asp?WebToHostItem=PO -
@grumpycat9971 Dann machen wir es über http.
let pioneerDP = '0_userdata.0.pioneer.on' createState( pioneerDP, false, { name: 'Pioneer einschalten', type: 'boolean', role: 'switch', def: false, read: true, write: true, smartName: { de: 'Pioneer' // So heißt das Gerät für Alexa } }); on({id: pioneerDP, change: 'any'}, (obj) => { if (obj.state.val) { sendToPioneer(['PO', '05FN']); } else { sendToPioneer(['PF']); } }); function sendToPioneer(commands) { for(let i=0; i<commands.length; i++){ setTimeout(function(){ httpGet('http://192.168.1.26/EventHandler.asp?WebToHostItem='+commands[i], function (error, response, body) { if (error) { console.error("❌ Fehler beim Einschalten:"+ error); } else { // console.log("✅ Pioneer eingeschaltet (PO)"); } }); },1500*i) } }
-
Aber ausschalten mit ... konnte ich ihn jetzt nicht
http://192.168.1.26/EventHandler.asp?WebToHostItem=PF
und einschalten ging nur einmal, jetzt ein zweites Mal nicht.
Kann das sein, dass der seine Verbindung verliert, da habe ich was in den Links gelesen, die du mir geschickt hast. -
@grumpycat9971 Hatte jetzt gedacht und gehofft es funktioniert über http.
Kann das sein, dass der seine Verbindung verliert, da habe ich was in den Links gelesen, die du mir geschickt hast.
Hab ich nicht gelesen.
Du hast es mit telnet probiert auf dem PI, oder?
Welche Befehle hast du dort genutzt?
Die Befehle oben sind ja PowerShell-Befehle, oder?Dann kann man es evtl über exec erreichen.
-
So ich dachte schon jetzt geht gar nichts mehr, denn ich konnte den Pioneer gar nicht mehr über das Telnet-Skript von mir ansteuern. Dachte dass es evtl. einen Konflikt zwischen ioBroker und Telnet gibt, daher habe ich mal das Skript bei IoBroker und die Instanz gelöscht. Telnet ging immer noch nicht. Dann habe ich Telnet unter Win11 deaktiviert und wieder aktiviert. Immer noch nicht. Aber was etwas brachte war, den Netzstecker am Pioneer für 15 sec zu ziehen.
Jetzt geht Telnet wieder und ich kann die Http Befehle von dir über den Browser schicken und zwar alle. Kann ihn einschalten (PO), den Eingang (05FN) wählen und wieder ausschalten (PF).
Also wenn du mir mit den http Befehelen vielleicht eine Lösung hast, könnte ich das mal im ioBroker Skript probieren. In den Links von dir, haben die sich richtig ausgetobt. Die steuern damit auch die Lautstärke usw.
Das brauche ich alles nicht, denn das mache ich mit der Sonos. Hier hängt die Sonos Connect am Eingang 05FN angeschlossen ist. Ich sage dann einfach Alexa, lauter oder leiser im Wohnzimmer. Sonos läuft nicht über den ioBRoker, sondern direkt mit der Skill in der Alexa-App. Daher brauche ich nur diese 3 Befehle bei Pioneer und bis jetzt habe ich halt dazu immer die Pioneer App hierzu verwendet.
Ich wäre dir dankbar für weitere Hilfe, mache aber erst wieder morgen die nächsten Versuche. Vielen lieben Dank und Grüße Bettina
-
@grumpycat9971 Das script mit http hatte ich oben weiter schon gesetzt.
https://forum.iobroker.net/post/1267676 -
Moin moin, so ich habe nun das http-Skript versucht und es wird keine Instanz angelegt, also nicht so wie bei dem einen Skript, da hatte ich den Pioneer ja gesehen. daher auch keine Funktion über Alexa Sprache.
Aber Ansteuerung über den Browser geht anch wie vor, liegt also nicht am Pioneer selbt. -
@grumpycat9971
Wenn du das Gerät nicht in IOT gelöscht hast, ist es doch noch vom anderen Script da?
Der DP ist doch geblieben? Oder hattest du den gelöscht?Hier nochmal etwas mehr logging drin.
-> Script kopieren und starten
-> Alexa, suche neue Geräte
-> Alexa, pioneer an
-> ioBroker-LOG -> Pioneer soll eingeschaltet werdenlet pioneerDP = '0_userdata.0.pioneer.on' createState( pioneerDP, false, { name: 'Pioneer einschalten', type: 'boolean', role: 'switch', def: false, read: true, write: true, smartName: { de: 'Pioneer' // So heißt das Gerät für Alexa } }); on({id: pioneerDP, change: 'any'}, (obj) => { if (obj.state.val) { console.log('Pioneer soll eingeschaltet werden'); sendToPioneer(['PO', '05FN']); } else { console.log('Pioneer soll ausgeschaltet werden'); sendToPioneer(['PF']); } }); function sendToPioneer(commands) { for(let i=0; i<commands.length; i++){ setTimeout(function(){ httpGet('http://192.168.1.26/EventHandler.asp?WebToHostItem='+commands[i], function (error, response, body) { if (error) { console.error("❌ Fehler beim Einschalten:"+ error); } else { // console.log("✅ Pioneer eingeschaltet (PO)"); } }); },1500*i) } }
Hast du den alexa2-Adapter installiert?
Dann schau mal unter dem DP:
alexa2.0.History.summary
ob dort auchpioneer an
drin steht -
Ja alles gelöscht, weil ja das Telnet-Skript auch nicht mehr lief und ich dachte, dass es da einen Konflikt gab. Erst nach Ausstecken des Pioneer ging ja mein Skript wieder vom Win11 Rechner
-
Ja Adapter Alexa2 ist installiert, den brauche ich ja für meine Homematic.
Unter der History kommt nichts:
Es kommt auch folgende Fehlermeldung:
Aber in der Alexa App ist der Pioneer noch da:
Hier kann ich ihn aber auch nicht ein bzw. ausschalten:
Ist der immer noch von gestern da? Denn im ioBroker ist er ja nirgends zu sehen.Hier steht der Pioneer, habe das Skript so benannt:
-
@grumpycat9971 Geh mal bitte in die iot-Instanz und schau dort nach, ob es dort ein Pioneer gibt.
Dies besagt nur, dass es ein script mit dem Namen Pioneer gibt und es gestartet wurde
Der DP liegt unter
0_userdata.0.pioneer.on
-
Ne da ist er ja komischerweise nicht dirin, gestern war es aber da mal drin
DB gibt es wohl: