Plugin: Any-Plugin für LoxBerry

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Prof.Mobilux
    Supermoderator
    • 25.08.2015
    • 4911

    #106
    Bin mir nicht sicher - kann sicherlich Christian Fenzl aber beantworten - könnte es sein, dass die Befehle über das NayPlugin als Root ausgeführt werden? Dann müsste auch der SSH Key unter Root und nicht unter dem User loxberry installiert werden.
    🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


    LoxBerry - Beyond the Limits

    Kommentar

    • schurli
      Extension Master
      • 29.01.2019
      • 123

      #107
      Zitat von Prof.Mobilux
      Bin mir nicht sicher - kann sicherlich Christian Fenzl aber beantworten - könnte es sein, dass die Befehle über das NayPlugin als Root ausgeführt werden? Dann müsste auch der SSH Key unter Root und nicht unter dem User loxberry installiert werden.
      Danke für den Tipp!
      so etwas habe ich mir auch schon gedacht. Die keys liegen jetzt in .ssh Directory (id_rsa, id_rsa.pub und known.hosts). Müssen die jetzt in ein anderes Unterverzeichnis, muss der owner geändert werden? Wenn ja, wie mache ich denn das (Ownership ändern)? Was ist denn normalerweise das su (das ist doch root?) Passwort?

      Kommentar

      • Prof.Mobilux
        Supermoderator
        • 25.08.2015
        • 4911

        #108
        Wenn die Befehle als root ausgeführt werden, kannst Du das Verzeichnis .ssh einfach nach /root kopieren (als User root). Und dann ein "chown -R root:root /root/.ssh", um den Eigentümer zu ändern. "su" steht für "switch user", mit "su -" wechslest Du zum Root-User. Das Passwort wurde bei der Installation vergeben und Dir angezeigt. Das hast Du Dir hoffentlich abgespeichert/ausgedruckt.
        🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


        LoxBerry - Beyond the Limits

        Kommentar

        • schurli
          Extension Master
          • 29.01.2019
          • 123

          #109
          Zitat von Prof.Mobilux
          Wenn die Befehle als root ausgeführt werden, kannst Du das Verzeichnis .ssh einfach nach /root kopieren (als User root). Und dann ein "chown -R root:root /root/.ssh", um den Eigentümer zu ändern. "su" steht für "switch user", mit "su -" wechslest Du zum Root-User. Das Passwort wurde bei der Installation vergeben und Dir angezeigt. Das hast Du Dir hoffentlich abgespeichert/ausgedruckt.
          Herzlichen Dank Herr Professor!!! Das war's. Nachdem ich keine Ahnung habe wäre das ohne Hilfe schwierig gewesen. Und natürlich habe ich mir das root Passwort nicht notiert gehabt, aber es gibt ein eigenes PlugIn zum Zurücksetzen des Root Passwortes, zum Glück .....

          Kommentar

          • MarkusCosi
            LoxBus Spammer
            • 28.09.2023
            • 262

            #110
            Hallo zusammen,

            das Any-Plugin ist wirklich schön, danke!

            Ich nutze es aktuell um beispielsweise per "curl -s 'URL' | grep -Po 'RegExp' | tail -c 2 | (cat && echo 'n')" die nächsten Mülltonnen aus einem Abfallkalender der Stadt auszulesen. Klappt alles wunderbar, inkl. Einbindung in Loxone.

            Zuletzt hatte ich einen Fall in Verbindung mit MusicCast wo ich gerne den konkreten Befehl fürs AnyPlugin per Loxone zuvor zusammengebaut hätte, z.B. mit dem Text-Generator Baustein. Geht so etwas?

            Viele Grüße!​

            Kommentar


            • MarkusCosi
              MarkusCosi kommentierte
              Kommentar bearbeiten
              Hallo Christian,

              ich frage, da ich nicht weiß wie ich es aufbauen sollte. Der konkrete Befehl im http-Ausgang wäre z.B. EinName udp command <Shell-Befehl>, wobei ich den <Shell-Befehl> gern übergeben würde als Text den ich vorher erstelle. Kann ich einen Text auf den Ausgang geben und per <v> im Befehl EIN übergeben?

            • Christian Fenzl
              Christian Fenzl kommentierte
              Kommentar bearbeiten
              Müsste sehen, wenn der Ausgang auf Digital=Nein gesetzt ist.

            • MarkusCosi
              MarkusCosi kommentierte
              Kommentar bearbeiten
              Hallo Christian,
              das probier ich dann mal aus, danke Dir!
          • Thomas M.
            Lebende Foren Legende
            • 25.08.2015
            • 3285

            #111
            Frage ...
            plugin arbeitet ...
            Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 49,6 KB ID: 441492

            befehl schaut so aus ... (der rest vom curl ist an der Stelle irrelevant, ist so lang.)

            Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 9,6 KB ID: 441493

            Command wird ausgeführt, antwort ist im logfile drin, kommt aber nicht per UDP zum MS.
            Weiß jemand wieso? Ich habe den Sende UDP Port deshalb mit absicht von default auf 9099 geändert. - hat nichts geändert.

            Ich hab auch schon als Antwort rcudp versucht, ändert auch nichts.
            Angehängte Dateien
            Zuletzt geändert von Thomas M.; 17.09.2024, 09:35.

            Kommentar

            • Thomas M.
              Lebende Foren Legende
              • 25.08.2015
              • 3285

              #112
              Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 11 Größe: 142,4 KB ID: 441519 Mit dem Menschen von Energie Steiermark hab ich die Antwort der API schlanker gebracht ...

              output vom plugin ist jetzt das. Keine Ahnung wieso nichts was ab "Output:" steht am angegebenen UDP Port am MS ankommt.

              also ich steh am Schlauch, muss irgendwie am plugin liegen,
              Angehängte Dateien
              Zuletzt geändert von Thomas M.; 17.09.2024, 19:04.

              Kommentar

              • Thomas M.
                Lebende Foren Legende
                • 25.08.2015
                • 3285

                #113
                plugin deinstalliert - neu installiert

                was aufgefallen ist, bisher jedes mal neu installieren - der erste reboot scheitert - der LB kommt micht mehr hoch.
                Ich musste jedes Mal in den Keller gehen und beim LB strom aus/ein machen, damit der LB wieder erreichbar war.

                Und egal was ich versuche, ich bekomme per UDP garnichts Richtung MS, hm.

                Gibts da sowas wie ein known issue zu dem Thema?

                Kommentar

                • Thomas M.
                  Lebende Foren Legende
                  • 25.08.2015
                  • 3285

                  #114
                  Christian Fenzl Mal vorsichtig bei dir angeklopft ... hast du eine Idee was hier schief läuft?

                  Jetzt seh ich erst ...
                  Remote: 192.168.0.111
                  [Wed Sep 18 21:51:46 2024] tcp2shell2.pl: Use of uninitialized value in concatenation (.) or string at /opt/loxberry/webfrontend/htmlauth/plugins/anyplugin/bin/tcp2shell2.pl line 535.
                  [Wed Sep 18 21:51:46 2024] tcp2shell2.pl: Use of uninitialized value in concatenation (.) or string at /opt/loxberry/webfrontend/htmlauth/plugins/anyplugin/bin/tcp2shell2.pl line 535.
                  New guest connection accepted from 192.168.0.111.
                  Zuletzt geändert von Thomas M.; 18.09.2024, 21:10.

                  Kommentar

                  • Christian Fenzl
                    Lebende Foren Legende
                    • 31.08.2015
                    • 11245

                    #115
                    Ich habe beim Testen ehrlich gesagt keine Probleme mit curl im Any-Plugin.
                    Definitiv wird die Länge auf 250 Zeichen abgeschnitten, weil Loxone per UDP nicht mehr erlaubt.

                    Kommt bei dir gar nichts an, oder nur der Anfang?

                    ich hab dir ein kleines Script getdata.sh gemacht, das legst du irgendwo auf den Loxberry.
                    Mit nano getdata.sh änderst du die URL und das MQTT Topic.
                    Mit chmod +x getdata.sh gibst du Ausführungsrechte.
                    Im MQTT Gateway machst du eine Subscription.
                    Und mit dem Any Plugin rufst du dann dieses Script auf (absoluten Pfad angeben).

                    Viel Erfolg!

                    lg, Christian

                    (Das ist der Inhalt des Scripts im ZIP, ganz einfach)
                    Code:
                    #/usr/bin/bash
                    OUTPUT="$(curl -s https://filesampleshub.com/download/code/json/sample1.json)"
                    echo publish to/my/topic $OUTPUT > /dev/udp/127.0.0.1/11884
                    Angehängte Dateien
                    Zuletzt geändert von Christian Fenzl; 19.09.2024, 20:08.
                    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                    Kommentar

                    • Thomas M.
                      Lebende Foren Legende
                      • 25.08.2015
                      • 3285

                      #116
                      dankeschön,

                      also bei mir kommt im MS überhaupt nichts an, nicht nur der Anfang.
                      ich werde mir deinen input aufsaugen und morgen umsetzen
                      Zuletzt geändert von Thomas M.; 19.09.2024, 21:00.

                      Kommentar

                      • Thomas M.
                        Lebende Foren Legende
                        • 25.08.2015
                        • 3285

                        #117
                        Hello!

                        Code:
                        ###################### Any-Plugin V0.3.1 ######################
                        Global variables from LoxBerry::System
                        Homedir: /opt/loxberry
                        Plugindir: anyplugin
                        YOUR commands: /opt/loxberry/data/plugins/anyplugin/commands
                        Running user is root
                        Restricted IPs (0):
                        Any-Plugin mode is UNSECURE
                        server waiting for tcp client connection on port 9095
                        Created udp out socket to 192.168.0.111 on port 9100
                        ####### New Connection ### 124-8-20 7:26:28 LOCAL TIME ######
                        Remote: 192.168.0.111
                        [Fri Sep 20 07:26:28 2024] tcp2shell2.pl: Use of uninitialized value in concatenation (.) or string at /opt/loxberry/webfrontend/htmlauth/plugins/anyplugin/bin/tcp2shell2.pl line 535.
                        [Fri Sep 20 07:26:28 2024] tcp2shell2.pl: Use of uninitialized value in concatenation (.) or string at /opt/loxberry/webfrontend/htmlauth/plugins/anyplugin/bin/tcp2shell2.pl line 535.
                        New guest connection accepted from 192.168.0.111.
                        GUEST: Smartenergy udp command /opt/loxberry/data/plugins/anyplugin/commands/getdata.sh
                        1. Parameter (Name) is Smartenergy
                        2. Parameter is udp (will return udp string)
                        3. Parameter is command (will run following command)
                        No MS defined. Setting to msnr=1
                        Miniserver used is 1 (Thomsis_Miniserver)
                        Calling exec_command
                        exec_command Commandline: '/opt/loxberry/data/plugins/anyplugin/commands/getdata.sh '
                        Try to fork
                        Command forked.
                        Exit Code: 0
                        Output:
                        Note: Unnecessary use of -X or --request, GET is already inferred.
                        % Total % Received % Xferd Average Speed Time Time Time Current
                        Dload Upload Total Spent Left Speed
                        0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 98.64.201.92:443...
                        * Connected to backend.energylive.e-steiermark.com (98.64.201.92) port 443 (#0)
                        * ALPN, offering h2
                        * ALPN, offering http/1.1
                        * successfully set certificate verify locations:
                        * CAfile: /etc/ssl/certs/ca-certificates.crt
                        * CApath: /etc/ssl/certs
                        } [5 bytes data]
                        * TLSv1.3 (OUT), TLS handshake, Client hello (1):
                        } [512 bytes data]
                        * TLSv1.3 (IN), TLS handshake, Server hello (2):
                        { [122 bytes data]
                        * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
                        { [19 bytes data]
                        * TLSv1.3 (IN), TLS handshake, Certificate (11):
                        { [4065 bytes data]
                        * TLSv1.3 (IN), TLS handshake, CERT verify (15):
                        { [264 bytes data]
                        * TLSv1.3 (IN), TLS handshake, Finished (20):
                        { [52 bytes data]
                        * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
                        } [1 bytes data]
                        * TLSv1.3 (OUT), TLS handshake, Finished (20):
                        } [52 bytes data]
                        * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
                        * ALPN, server accepted to use h2
                        * Server certificate:
                        * subject: CN=backend.energylive.e-steiermark.com
                        * start date: Sep 15 06:29:00 2024 GMT
                        * expire date: Dec 14 06:28:59 2024 GMT
                        * issuer: C=US; O=Google Trust Services; CN=WR1
                        * SSL certificate verify ok.
                        * Using HTTP2, server supports multi-use
                        * Connection state changed (HTTP/2 confirmed)
                        * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
                        } [5 bytes data]
                        * Using Stream ID: 1 (easy handle 0x365770)
                        } [5 bytes data]
                        > GET /api/v1/devices/I-10082023-01659002/measurements/latest HTTP/2
                        > Host: backend.energylive.e-steiermark.com
                        > user-agent: curl/7.74.0
                        > accept: */*
                        > x-api-key: De3VolMRmU7a8XSnCZhU7-ytFXowmfJrbAlGC7NLTgg
                        >
                        { [5 bytes data]
                        * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
                        { [57 bytes data]
                        * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
                        { [57 bytes data]
                        * old SSL session ID is stale, removing
                        { [5 bytes data]
                        * Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
                        } [5 bytes data]
                        0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0< HTTP/2 200
                        < date: Fri, 20 Sep 2024 05:26:43 GMT
                        < content-type: application/json
                        < vary: Origin
                        < vary: Access-Control-Request-Method
                        < vary: Access-Control-Request-Headers
                        < cache-control: no-cache, no-store, max-age=0, must-revalidate
                        < pragma: no-cache
                        < expires: 0
                        < x-content-type-options: nosniff
                        < strict-transport-security: max-age=31536000; includeSubDomains
                        < x-frame-options: DENY
                        < x-xss-protection: 0
                        < referrer-policy: no-referrer
                        < set-cookie: SESSION=9b816f41-f864-4c41-8ee8-75897ecec61a; Path=/; Secure; HTTPOnly; SameSite=Lax
                        < access-control-allow-origin: *
                        < access-control-allow-credentials: true
                        < access-control-allow-methods: GET, PUT, POST, DELETE, PATCH, OPTIONS
                        < access-control-allow-headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization
                        < access-control-max-age: 1728000
                        <
                        { [5 bytes data]
                        100 503 0 503 0 0 406 0 --:--:-- 0:00:01 --:--:-- 406
                        * Connection #0 to host backend.energylive.e-steiermark.com left intact
                        /opt/loxberry/data/plugins/anyplugin/commands/getdata.sh: 3: cannot create /dev/udp/127.0.0.1/11884: Directory nonexistent
                        publish Energylive [{"measurement":"0100010700","timestamp":1726809998 000,"value":450.0},{"measurement":"0100010800","ti mestamp":1726809998000,"value":1.570893E7},{"measu rement":"0100020700","timestamp":1726809998000,"va lue":0.0},{"measurement":"0100020800","timestamp": 1726809998000,"value":460960.0},{"measurement":"er rorCode","timestamp":1726809998000,"value":0.0},{" measurement":"freeHeap8Bit","timestamp":1726809957 000,"value":70048.0},{"measurement":"largestHeapBl ock8Bit","timestamp":1726809957000,"value":51200.0 }]
                        
                        SEND via UDP to MS1: "Smartenergy":Note: Unnecessary use of -X or --request, GET is already inferred.
                        % Total % Received % Xferd Average Speed Time Time Time Current
                        Dload Upload Total Spent Left Speed
                        0 0 0
                        Hm ...
                        /opt/loxberry/data/plugins/anyplugin/commands/getdata.sh: 3: cannot create /dev/udp/127.0.0.1/11884: Directory nonexistent



                        Es kommt weder am MS noch beim Loxberry im MQTT was an.
                        Der API Abruf funktioniert jedenfalls via skript
                        Zuletzt geändert von Thomas M.; 20.09.2024, 07:47.

                        Kommentar

                        • Thomas M.
                          Lebende Foren Legende
                          • 25.08.2015
                          • 3285

                          #118
                          Christian Fenzl
                          Könnt ich das nicht direkt via UDP an den MS schicken?

                          echo $OUTPUT > /dev/udp/192.168.0.111/9100
                          echo $OUTPUT

                          Der Fehler bleibt der gleiche ...
                          /opt/loxberry/data/plugins/anyplugin/commands/getdata.sh: 3: cannot create /dev/udp/192.168.0.111/9100: Directory nonexistent

                          bzw.

                          /opt/loxberry/data/plugins/anyplugin/commands/getdata.sh: 3: cannot create /dev/udp/127.0.0.1/11884: Directory nonexistent

                          Vielleicht ist das ja auch das Problem bei mir, da das plugin selbst nichts per udp senden kann und indirekt übers skript gehts auch nicht?!
                          Bin kein Linuxer, einfach frei interpretiert
                          Zuletzt geändert von Thomas M.; 20.09.2024, 08:46.

                          Kommentar

                          • Christian Fenzl
                            Lebende Foren Legende
                            • 31.08.2015
                            • 11245

                            #119
                            Gut möglich, dass dein UDP überhaupt nicht geht vom LoxBerry aus, aber keine Idee, wieso.

                            Code:
                            echo hallo > /dev/udp/127.0.0.1/8000
                            sollte unter Bash eigentlich ein UDP-Paket an angegebene IP und Port senden.

                            Hast du Pihole oder irgendsowas installiert?

                            Der Vorteil übers MQTT Gateway wäre, dass es dein JSON gleich zerlegt.

                            LG, Christian
                            Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                            Kommentar

                            • Christian Fenzl
                              Lebende Foren Legende
                              • 31.08.2015
                              • 11245

                              #120
                              Funktioniert das Script direkt von der Shell?
                              ​​​​​. /getdata.sh
                              Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                              Kommentar

                              Lädt...