NEWS
Apple TV steuern - exec Befehl ohne Funktion
-
@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. -
@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? -
@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.
-
@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.
@iphilbln Du meinst im Blockly? Hm ... Es ist aktuell seit Jahren das erste mal das so etwas ein Thema kist und generell ist "suchen nach einem Skript" nie generisch umsetzbar ... sorry, sehe ich nicht als Sinnvolles Feature an. Vor allem aus Sicherheitsgesichtspunkten. Wer weiss was die suche findet.
Nicht umsonst ruft man auch unter Linux am besten alles mit absoluten Pfaden auf ;-) Weil keiner Wer wer dir im Pfad oder sonst wo irgendwas untergeschoben hat
-
@iphilbln Du meinst im Blockly? Hm ... Es ist aktuell seit Jahren das erste mal das so etwas ein Thema kist und generell ist "suchen nach einem Skript" nie generisch umsetzbar ... sorry, sehe ich nicht als Sinnvolles Feature an. Vor allem aus Sicherheitsgesichtspunkten. Wer weiss was die suche findet.
Nicht umsonst ruft man auch unter Linux am besten alles mit absoluten Pfaden auf ;-) Weil keiner Wer wer dir im Pfad oder sonst wo irgendwas untergeschoben hat
@apollon77 nein nicht im blockly. Schreibe mir ein JS Skript wobei es meine ersten Gehversuche mit JS sind. Hatte in der Uni bisher nur Kontakt mit C, Python und Java.
-
@iphilbln Du meinst im Blockly? Hm ... Es ist aktuell seit Jahren das erste mal das so etwas ein Thema kist und generell ist "suchen nach einem Skript" nie generisch umsetzbar ... sorry, sehe ich nicht als Sinnvolles Feature an. Vor allem aus Sicherheitsgesichtspunkten. Wer weiss was die suche findet.
Nicht umsonst ruft man auch unter Linux am besten alles mit absoluten Pfaden auf ;-) Weil keiner Wer wer dir im Pfad oder sonst wo irgendwas untergeschoben hat
@apollon77 man könnte die suche halt noch auf die Python Module eingrenzen und nicht das ganze fs danach durchsuchen. Das wĂŒrde denke ich auch noch Sinn ergeben.
-
WĂ€re der "saubere" weg dann nicht ein Symlink zur jeweils aktuellen Version und diesen dann per absolutem Pfad ausfĂŒhren?
Wenn schon per find, dann wĂŒrde ich das maximal zu Skriptbeginn machen.Oder (auch nicht super schön)
source /home/iobroker/.bashrc && eigentliches-kommandoausfĂŒhren. Bei mehreren dann halt verkettet. -
@alcalzone der Symlink mĂŒsste doch aber auch zuvor hĂ€ndisch erstellt werden bzw. man mĂŒsste wissen wo das Skript im FS gespeichert ist?
Mein Ansatz sah jetzt so aus, dass per find in den Python Modulen nach der neusten Version geschaut wird und dass Ergebnis dann als absoluter Pfad als Objekattribut gespeichert wird. Allerdings muss ich zugeben, dass ich mich aktuell noch nicht so wirklich mit der asynchronen Abarbeitung des
exec-Befehlszurecht finde. Entweder liefert es nurundefinedwie hier:

Oder ich kann im Block von exec gar nicht erst auf das Attribut zugreifen:
GitHub Link -> Zeile 47 auskommentiert

GitHub Link -> Zeile 59 auskommentiert

@apollon77
Vielleicht könnte mir einer von euch beiden erklÀren, wieso ich in dem exec-Block nicht auf das Attribut zugreifen kann? -
@alcalzone der Symlink mĂŒsste doch aber auch zuvor hĂ€ndisch erstellt werden bzw. man mĂŒsste wissen wo das Skript im FS gespeichert ist?
Mein Ansatz sah jetzt so aus, dass per find in den Python Modulen nach der neusten Version geschaut wird und dass Ergebnis dann als absoluter Pfad als Objekattribut gespeichert wird. Allerdings muss ich zugeben, dass ich mich aktuell noch nicht so wirklich mit der asynchronen Abarbeitung des
exec-Befehlszurecht finde. Entweder liefert es nurundefinedwie hier:

Oder ich kann im Block von exec gar nicht erst auf das Attribut zugreifen:
GitHub Link -> Zeile 47 auskommentiert

GitHub Link -> Zeile 59 auskommentiert

@apollon77
Vielleicht könnte mir einer von euch beiden erklÀren, wieso ich in dem exec-Block nicht auf das Attribut zugreifen kann?@iphilbln Ja das geht nicht wegen https://github.com/iPhilBln/ioBroker/blob/dev/functions/apple_tv/controlATV.js#L44
ersetze
exec(cmd, async function (error, result, stderr) {durch
exec(cmd, async (error, result, stderr) => {in einer "function" wird this auf die function gemappt.
-
@iphilbln Ja das geht nicht wegen https://github.com/iPhilBln/ioBroker/blob/dev/functions/apple_tv/controlATV.js#L44
ersetze
exec(cmd, async function (error, result, stderr) {durch
exec(cmd, async (error, result, stderr) => {in einer "function" wird this auf die function gemappt.
@apollon77 super vielen Dank. Hat funktioniert. đ
Ich teste heute Nachmittag noch etwas und schlieĂe dann ggf das Thema als gelöst.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen BeitrĂ€ge zu scrollen? Wenn du dich fĂŒr ein Konto anmeldest, kommst du immer genau dorthin zurĂŒck, wo du zuvor warst, und kannst dich ĂŒber neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und BeitrĂ€ge positiv bewerten, um anderen Community-Mitgliedern deine WertschĂ€tzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden đ
Registrieren Anmelden