Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Apple TV steuern - exec Befehl ohne Funktion

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Apple TV steuern - exec Befehl ohne Funktion

    This topic has been deleted. Only users with topic management privileges can see it.
    • iPhilBln
      iPhilBln @liv-in-sky last edited by

      @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.

      1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 @liv-in-sky last edited by

        @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 ...

        1 Reply Last reply Reply Quote 1
        • iPhilBln
          iPhilBln @iPhilBln last edited by

          @apollon77

          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.

          apollon77 1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 @iPhilBln last edited by

            @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

            iPhilBln 1 Reply Last reply Reply Quote 0
            • iPhilBln
              iPhilBln @apollon77 last edited by iPhilBln

              @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 1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 @iPhilBln last edited by

                @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 1 Reply Last reply Reply Quote 0
                • iPhilBln
                  iPhilBln @apollon77 last edited by

                  @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 1 Reply Last reply Reply Quote 0
                  • apollon77
                    apollon77 @iPhilBln last edited by

                    @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 2 Replies Last reply Reply Quote 0
                    • iPhilBln
                      iPhilBln @apollon77 last edited by iPhilBln

                      @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.

                      1 Reply Last reply Reply Quote 0
                      • iPhilBln
                        iPhilBln @apollon77 last edited by

                        @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.

                        1 Reply Last reply Reply Quote 0
                        • AlCalzone
                          AlCalzone Developer last edited by

                          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-kommando ausführen. Bei mehreren dann halt verkettet.

                          1 Reply Last reply Reply Quote 1
                          • iPhilBln
                            iPhilBln last edited by iPhilBln

                            @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-Befehls zurecht finde. Entweder liefert es nur undefined wie hier:
                            Bildschirmfoto 2022-08-17 um 20.06.41.png

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

                            GitHub Link -> Zeile 59 auskommentiert
                            zeile59.png

                            @apollon77
                            Vielleicht könnte mir einer von euch beiden erklären, wieso ich in dem exec-Block nicht auf das Attribut zugreifen kann?

                            apollon77 1 Reply Last reply Reply Quote 0
                            • apollon77
                              apollon77 @iPhilBln last edited by

                              @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 1 Reply Last reply Reply Quote 1
                              • iPhilBln
                                iPhilBln @apollon77 last edited by iPhilBln

                                @apollon77 super vielen Dank. Hat funktioniert. 👍
                                Ich teste heute Nachmittag noch etwas und schließe dann ggf das Thema als gelöst.

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                539
                                Online

                                31.9k
                                Users

                                80.1k
                                Topics

                                1.3m
                                Posts

                                5
                                34
                                2793
                                Loading More Posts
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes
                                Reply
                                • Reply as topic
                                Log in to reply
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                The ioBroker Community 2014-2023
                                logo