Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. cURL Aufruf PushOver versenden

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    cURL Aufruf PushOver versenden

    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      flitzpiepe last edited by

      Hallo zusammen,

      ich bräuchte hier einmal eure Hilfe beim Aufruf eines CURL-Aufrufs aus einem Blockly-Script, um eine PushOver-Notification zu versenden.
      Aus der PushOver-API entnehme ich, dass der Aufruf, z.B. so aussehen muss:

      curl -s \
        --form-string "token=APP_TOKEN" \
        --form-string "user=USER_KEY" \
        --form-string "message=hello world" \
        https://api.pushover.net/1/messages.json
      

      Meinen Aufruf bastel ich mir indviduell zusammen und dieser sieht bei mir dann folgendermaßen aus:

      Unformatiert:

      /usr/bin/curl -s \ --form-string "token=atoxxx" \ --form-string "user=uMExxx" \ --form-string "message=huhu" \ --form-string "title=bla" \ --form-string "sound=pushover" \ --form-string "priority=0" \ https://api.pushover.net/1/messages.json
      

      Formatiert:

      /usr/bin/curl -s \ 
        --form-string "token=atoxxx" \ 
        --form-string "user=uMExxx" \ 
        --form-string "message=huhu" \ 
        --form-string "title=bla" \ 
        --form-string "sound=pushover" \ 
        --form-string "priority=0" \ 
        https://api.pushover.net/1/messages.json
      

      Im Blockly sieht der Aufruf dann so aus, wobei in der Variable "varRequest" dann der o.g. Aufruf steht:
      01.png

      Im Log sehe ich Folgendes, wenn der Block ausgeführt wird:

      02.png

      javascript.0 (22693) script.js.System.Kommunikation.PushOver.functionSendPushOverNotificationNow: PushOverNotification: Request: /usr/bin/curl -s \ --form-string "token=atoxxx" \ --form-string "user=uMExxx" \ --form-string "message=huhu" \ --form-string "title=bla" \ --form-string "sound=pushover" \ --form-string "priority=0" \ https://api.pushover.net/1/messages.json
      

      Wenn ich den CURL-Aufruf direkt auf der Console des Raspberry ausführe, scheint die Syntax ok, da der Befehl ohne Fehler entgegengenommen wird, aber letztendlich keine Notification ankommt:
      03.png

      Danke für die Hilfe im Voraus und freue mich auf Hinweise!!

      Grüße...

      1 Reply Last reply Reply Quote 0
      • F
        flitzpiepe last edited by flitzpiepe

        Hallo,

        ich habs rausgefunden, woran es liegt:
        Zwischen jeweils "\" und "--form" müssen zwei Leerzeichen- und nicht nur eins wie bei mir sein. Wenn ich manuell die Leerzeichen hinzufüge und den cURL Aufruf dann manuell abschicke, wird die Nachricht versendet.
        Mein Problem jetzt: In den Blockly-Abschnitten, wo ich den Text zusammensetze, verwende ich zwei Leerzeichen " ". Diese werden dann aber wohl auf ein Leerzeichen verkürzt (sieheLog), sodass die Nachricht nicht versendet wird, z.B:

        leerzeichen.png

        Wie kann ich einen String mit zwei aufeinder folgenden Leerzeichen eingeben, bzw. gibt es noch eine andere Möglichkeit?

        Grüße...

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

          Ja, so wie du den Ausdruck umformatiert hast, hast du recht... warum irgendwo ein zweites Leerzeichen geschluckt werden sollte, ist mir zwar nicht klar, aber das Problem hast du nicht, wenn du den Aufruf richtig umformatierst.

          /usr/bin/curl -s --form-string "token=atoxxx" --form-string "user=uMExxx" --form-string "message=huhu" --form-string "title=bla" --form-string "sound=pushover" --form-string "priority=0" https://api.pushover.net/1/messages.json
          

          Warum? Weil \ auf der Kommandozeile dafür sorgt, dass das nächste Zeichen nicht "interpretiert" wird. Hier soll, in der "formatierten" Version der Zeilenumbruch von der Kommandozeile ignoriert werden, damit man den Befehl auf mehreren Zeilen hat und schöner lesen kann.
          -> wenn du die Zeilenumbrüche entfernst, solltest du auch den \ entfernen, weil sonst das nächste Leerzeichen nicht mehr als Parametertrennung interpretiert wird (so kann man z.B. auch mit cd Ordner\ mit\ Leerzeichen navigieren usw., was ohne \ nicht ginge, weil dann nur in cd Ordner verstanden würde mit zwei ungenutzten Parametern mit und Leerzeichen).

          Also \ aus dem Befehl entfernen, dann geht es auch mit einem Leerzeichen. 🙂
          (Vermutlich wird auch in Blockly das \ im String Effekte haben, die du nicht willst -> in Javascript werden mit \ auch Spezialzeichen eingegeben, wie \n = Zeilenumbruch usw...)

          F 1 Reply Last reply Reply Quote 0
          • F
            flitzpiepe @Garfonso last edited by

            @Garfonso

            Vielen Dank... der Groschen ist gefallen und funktioniert jetzt Bestens!

            Grüße...

            F 1 Reply Last reply Reply Quote 0
            • F
              flitzpiepe @flitzpiepe last edited by

              Ok, zu früh gefreut 🙄
              Die Zeichenkette wird jetzt korrekt zusammengebaut: Wenn ich diese auf der Kommandozeile direkt einfüge und absende, wird die PushOver-Nachricht erfolgreich versendet. Soweit so gut.
              Wenn ich dies dann aber über den Blockly Request-Block mache, wird im Log ein Fehler angezeigt und es passiert nichts weiter:
              request.png

              Die Fehlermeldung sagt jetzt ja wenig aus. Hier steht, dass man die Variable "result" auswerten muss, um an die Antwort vom Request zu kommen. Ich habe sie mal angelegt und wenn der Haken bei "mit Ergenissen" gesetzt ist, steht hier "undefined" als Wert in der Variable.

              Ich bräuchte da wohl noch einen weiteren Gedankenanstoß.

              Danke und Grüße...

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

                Öh... mit Blocky kenn ich mich leider gar nicht aus. Da bin ich raus.
                Da steht was von LogLevel am Block, was ist wenn du den auf Debug stellst oder sowas?
                Gibt es try/catch in Blocky? Da könntest du mal gucken, ob du den Fehler abfangen kannst und z.B. error.stack ausgeben. Da steht normalerweise am meisten drinnen, was schief gegangen ist. -> aber wie gesagt, kenne mich mit Blocky nicht aus, das wäre der erste Schritt in Javascript, den ich gehen würde.

                1 Reply Last reply Reply Quote 0
                • F
                  flitzpiepe last edited by

                  Moin,

                  ich habe den Block, um die Antwort vom Request auszuwerten eingebaut, aber leider fehlt mir der Ansatz daraus weitere zielführende Informationen herausholen zu können:
                  debug1.png

                  Wenn der Request erfolgreich versendet werden würde, müsste hier m.E. "{"status":1,"request":"ae2XXX"}" zurück übermittelt werden, da dies auch zurück kommt wenn man den cURL Aufruf von der Eingabeaufforderung versendet:
                  debug2.png

                  Hat jemand noch Ideen?

                  Grüße...

                  OliverIO 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @flitzpiepe last edited by

                    @flitzpiepe

                    jetzt muss ich mal nachfragen.
                    ich kenne mich mit blockly auch nicht aus, aber
                    in der shell verwendest du das programm curl
                    in blockly den request-befehl. passt das überhaupt zusammen?`
                    müsstest du nicht den exec befehl nehmen um auf den shell den befehl auszuführen
                    und dann den text als ergebnis zurückbekommst?

                    F 1 Reply Last reply Reply Quote 0
                    • F
                      flitzpiepe @OliverIO last edited by

                      @OliverIO

                      Tataaa... daran lag es natürlich. Da war ich gedanklich auf dem falschen Dampfer. Danke für den Hinweis!
                      Das Versenden der Nachricht funktioniert jetzt auch aus dem Script.

                      Der Grund übrigens, warum ich dies so mache, anstatt auf den PushOver-Adapter zurückzugreifen ist, dass ich jetzt auch einfach Attachments versenden kann und vor allem unterschiedliche PushOver-Apps referenzieren kann, wozu ich sonst den PushOver-Adapter n-mal installieren müsste.

                      => Problem gelöst!

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      489
                      Online

                      32.0k
                      Users

                      80.4k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      1820
                      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