NEWS
Apple TV steuern - exec Befehl ohne Funktion
-
Hej liebes Forum,
nachdem ich mich mit Blockly etwas mit ioBroker vertraut gemacht habe, versuche ich nun mein erstes richtiges JS Skript zu schreiben. Bisher habe ich eher Erfahrungen mit C und Java in der Uni gemacht. Komme daher nich gänzlich ohne Vorwissen was das Programmieren angeht. JS ist dennoch eher Neuland für mich.
Zum Problem: Ich möchte mir aktuell ein JS Skript schreiben, mit dem ich mein Apple TV bedienen kann. Als Basis dient dieses Projekt: pyatv. Der Befehl wird zwar richtig erstellt, aber bei exec passiert bisher nichts. Das Apple Tv rührt sich keine Meter.
Was auf der normalen Konsole einwandfrei funktioniert, will mit dem JS Skript bisher nicht so wirklich. Der Punkt exec Kommando ausführen ist im javascript Adapter aktiviert. Die Klasse für die Apple TV funktioniert soweit, dass der Befehl richtig erstellt wird. Wenn ich den Befehl der erstellt wird aus dem Log kopiere und regulär in der Konsole ausführe klappt es wie es soll. Das Skript auf dem Server lässt sich vom User iobroker ausführen.
Daher meine Frage wo in meinem Skript der Fehler liegt?
Quellcode -
@iphilbln könnte ein rechte problem sein - der service-user iobroker führt das exec aus - evtl hat der keine rechte, die befehle auszuführen
mach dir mal ein test-blocky mit nur dem exec befehl und kopiere einen funktionerenden befehl dort rein - da kannst du dann debuggen - das ergebnis ansehen, was vom exec kommt
-
@liv-in-sky hatte ich auch erst in Verdacht aber result bleibt leer, was bedeutet dass eigentlich keine Fehler geworfen werden. Was mich aber stutzig macht ist, dass selbst mittelst dem
atvscript
Befehlen, welche ein JSON zurückgeben Result leer bleibt. In Der Konsole kann ich die Befehle halt ganz normal mit dem User iobroker ausführen. So ganz verstehe ich daher nicht was du mit dem Rechteproblem für den service-user iobroker meinen könntest. Vllt könntest du nochmal kurz näher erklären was du damit meinst und wie ich das testen kann. -
@iphilbln Dann liegt es auch nicht an den Rechten. Viele wissen einfach nicht, dass JS etc. im User-Context des Users "iobroker" ausgeführt werden
Fast schon zu einfach, aber auch gerne vergessen: "exec" im JS-Adapter erlaubt?
-
habe das noch gefunden https://forum.iobroker.net/topic/44184/exec-führt-py-nicht-aus?_=1660464290121
oder
https://forum.iobroker.net/topic/43995/python-skript-mit-blockly-exec-ausführen/4wie führst du etwas mit dem iobroker user auf der console aus ?
versuche mal den ganzen pfad beim aufruf zu nutzen - ich glaube , in deinem script rufst du das programm direkt auf - ohne pfad
um etwas zu sehen nutze ich den exec block auf diese weise:
-
Der Punkt exec Kommando ausführen ist im javascript Adapter aktiviert - steht oben
-
@liv-in-sky sagte in Apple TV steuern - exec Befehl ohne Funktion:
Der Punkt exec Kommando ausführen ist im javascript Adapter aktiviert - steht oben
...doch glatt wieder überlesen
-
@liv-in-sky werde ich heute Abend mal austesten und berichten. Jetzt gehts erstmal ab zum See die Sonne gebießen.
Danke schon mal für eure Hilfe. -
@liv-in-sky also ich bin jetzt schon ein Stück weiter gekommen. Probleme macht der Kurzbefehl zum Aufruf des Skripts. Was in der Konsole mit dem user iobroker klappt funktioniert so nicht mittels execute.
Hier mal ein Beispiel aus der Konsole:
Hier in Blockly, wo das Ergebnis leer bleibt:
Wenn ich das Skript direkt in exec anspreche, wird das Skript auch ausgeführt und das Apple TV führt das Kommando durch.
Hier noch kurze Infos wo das Skript liegt und den Rechten.
Die Frage ist jetzt, wie man mithilfe von exec den Kurzbefehel
atvscript
ausführen kann bzw wo der gespeichert ist?Vielleicht ist das noch hilfreich: In meine .bashrc Datei musste ich auch erst den Pfad exportieren
# add pyatv path to bash export PATH="/home/iobroker/.local/bin:$PATH"
-
glaube, da kann ich dir nicht mehr weiterhelfen
-
ich habe noch nie den user iobroker über ssh genutzt - der user ist ein system user von iobroker - das dies so funktioniert wußte ich nicht - hast du dem user einfach ein password gegeben ?
-
ich würde im test-blocky den ganzen pfad angeben vor dem scriptnamen - bzw es mal testen.
-
in deinem blockly ist das loglevel auf "keins" gestellt - ändere das mal auf "debug" - evtl gibt es dann mehr infos
@iphilbln sagte in Apple TV steuern - exec Befehl ohne Funktion:
Die Frage ist jetzt, wie man mithilfe von exec den Kurzbefehel atvscript ausführen kann bzw wo der gespeichert ist?
das steht doch im bild darüber, wo das script gespeichert ist: /home/iobroker/.local/lib/phyton3.9/......
- hast du mal so einen aufruf gestestet: https://forum.iobroker.net/post/612043
-
-
Ich habe eben mal probiert. Kleines Script:
#!/usr/bin/python import json iv="236" ov="233" ol="99" daten = json.dumps({'input': iv, 'output': ov, 'outload': ol}) print daten
Dann Blockly:
Funktioniert (kpl. Pfadangabe + Extension)
-
Ich glaube das habt ihr jetzt falsch verstanden. Das Ausführen des Skripts über den absoluten Pfad klappt einwandfrei. Es hakt dabei, dass Skript über sein Alias anzusprechen bzw. auszuführen.
-
@liv-in-sky
Mein iobroker läuft auf einem ganz normalen Debian Lxc Container in meiner Proxmox VE. Wieso sollte man sich also nicht per ssh einwählen können. Sollte bei deiner Installation auch klappen, ganz egal auf welchem Gerät du deinen iobroker ausführst. Wie das mit deinem Kennwort ist, kann ich dir allerdings nicht sagen. Kenne mich mit fertigen Images nicht aus, hab iobroker manuell installiert. -
@iphilbln sagte in Apple TV steuern - exec Befehl ohne Funktion:
@liv-in-sky
Mein iobroker läuft auf einem ganz normalen Debian Lxc Container in meiner Proxmox VE. Wieso sollte man sich also nicht per ssh einwählen können. Sollte bei deiner Installation auch klappen, ganz egal auf welchem Gerät du deinen iobroker ausführst. Wie das mit deinem Kennwort ist, kann ich dir allerdings nicht sagen. Kenne mich mit fertigen Images nicht aus, hab iobroker manuell installiert.das ist es ja- ich habe die selbe installation - da kann ich mich ohne änderungen nicht mit dem iobroker -user einlogen - aber ist nicht so wichtig - war nur neugierig
das mit dem alias verstehe ich nicht so wirklich - ein alias in debian wird ja in der .bashrc angelegt z.b.
alias ll='ls -l'
ich weiß nicht, wie sich iobroker letztlich in das system einloggt. wenn ich im /home/iobroker die .bashrc ändere und ein alias eingebe, ist das nicht in exec-block verfügbar. man ist auch nicht standardmäßig im /home/iobroker verzeichnis, wenn man den exec ausführt
da muss ein entwickler sagen können, wie das funktioniert und was du wo definieren musst, um ein alias zu verwenden
-
@liv-in-sky ach ok, dann hab ich dich falsch verstanden denke ich. Mein default user, den ich zu begin erstellt habe und unter dem ich iobroker installiert habe, heißt halt iobroker. Führt dieser nicht dann auch den iobroker dann aus? Würde mich jedenfalls wundern wenn es parallel noch einen User iobroker gibt. Wäre mir jedenfalls neu, dass es dann ein anderer User ausführt.
Wenn ich das jetzt richtig gelesen habe, müsste man eine interactive Shell öffnen und dort dann den Befehl ausführen.
Interactive Shell -
@iphilbln warum musst du das alias verwenden ? könntest du das nicht umgehen ?
-
@liv-in-sky meinst du jetzt indem ich den absoluten Pfad verwende oder wie sollte man es umgehen?
-
@iphilbln ja genau
-
@liv-in-sky würde ich halt gerne vermeiden und einen Weg finden das auch mit alias verwenden zu können.
Aber im Notfall geb ich dir recht, könnte man es halt mit dem absoluten Pfad implementieren. -
@iphilbln dann frage mal bei @AlCalzone, @apollon77 oder @foxriver76 - vielleicht wissen die entwickler des js-controllers einen trick dafür, wie man mit dem exec befehl ein alias des linux systems nutzen kann
wenn von den 3en das keiner weiß, ....