NEWS
Apple TV steuern - exec Befehl ohne Funktion
-
@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ß, ....
-
@liv-in-sky naja bevor ich die jetzt verrückt mache, teste ich das erstmal mit dem child_process. Das sieht nach dem aus, was ich brauche. Aber kann es wenn erst nach Feierabend oder wahrscheinlich morgen austesten. Werde aber natürlich berichten ob es das ist was ich suche und umsetzen konnte.
-
@liv-in-sky Wo steht denn der alias? in der bash.rc oder sowas? Dann ist der Grund ja klar ... node.js führt das kommando direkt aus ... da ist keine Shell ...
Also nimm den absoluten befehl und dein problem ist weg.
Wenn der alias sein muss fällt mir nur ein zu versuchen ne shell im exec zu starten die dann ggf den alias kennt? Also sowas wie "/usr/sbin/bash -c aliasname" (also Pfad natürlich anpassen und die shell und so ... ob das tut .. null ahnung. Auf jeden Fall ist das starten der Shell am Ende ein overhead ...
-
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"
In der .bashrc ist nur der Pfad zu den installierten Python Module zum PATH hinzugefügt. Danach lässt sich das über den Modulnamen ausführen.
$ which bash $ /bin/bash
/bin/bash -c atvscript scan
liefert dann aber leider auch kein result mit exec. -
@iphilbln Dann bin ich als "Nicht so linux shell experte" raus ... am Ende gelten Aliase nur im Scope der entsprechenden Shell.
Aber ist es denn jeztzt überhaupt ein Alias wenn Du schreibst "nur Pfad hinzufügen dann ists direkt möglich"?
@AlCalzone noch ne idee wie man den Pfad hier "iobroker verträglich" manipuliert?
Aber ich würde die Frage nochmal aufgreifen: Warum denn überhaupt? Sicherheitstechnisch und aus anderen Gründen ists viel besser wenn es absolut aus dem Skript zugegriffen wird
-
@apollon77 mein Gedanken war folgender:
angenommen man zieht sein System um, aus welchen Gründen auch immer, und Python ist nicht mehr die Version 3.9. Dann würde der absolute Pfad kein Ergebnis mehr liefern weil das Modul jetzt unter …/python3.10/site-packages/… liegt oder meinetwegen lädt man sich das Modul einfach von GitHub runter und es liegt ganz woanders. Daher war meine Idee es über den Alias, sofern man das überhaupt so nennt bei Python Modulen, auszuführen. Allerdings müsste das ja dann auch anders in PATH in die bashrc eingetragen werden wenn es nur von GitHub geklont wird.
Ich denke ich werde das jetzt grundsätzlich anders umsetzen. Im ersten Schritt wird mit
exec „ find / -name atvremote.py 2>/dev/null“
der absolute Pfad ermittelt und dann über dan absoluten Pfad das Skript ausführen. -
@iphilbln Ja verstehe ich ... Der Find ist aber schon einiges an i/o was du dann bei jedem Call machst ... ob das soooo sinnig ist?
Vllt ein Shell script irgendwo hin legen welches du ausführst? Das könnte den Pfad "vor dem Call" adden und damit vllt gehen? -
@apollon77 hatte ich mir auch schon drüber Gedanken gemacht aber wäre dann ja auch wieder ein extraschritt der zu Fehlern führen könnte. Daher würde ich das denke ich eher in die Richtung lösen dass man ein Objekt Attribut hinzufügt in dem der absolut Pfad gespeichert ist und nur verglichen wird ob das Skript noch dort liegt ohne jedes Mal das gesamte fs durchsuchen zu müssen. Vielleicht noch ein Parameter für die Methode dass bei Start des Skripts erstmal nach einem Update das Pfads sucht. So könnte man schon mal den io wesentlich minimieren.