Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] - Prusa Telemetriedaten mit Blockly einbinden

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] - Prusa Telemetriedaten mit Blockly einbinden

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

      Hallo,

      ich versuche, die vom Prusa Mk3s geschickten Telemetriedaten in IOBroker zu bekommen.
      Es gibt (mindestens) zwei URLs, die ich im Webbrowser aufrufen kann:
      http://192.xxx.xxx.xxx/api/printer und http://192.xxx.xxx.xxx/api/version
      Ich werde jeweils (einmalig) nach einem Benutzernamen und dem Passwort gefragt,
      danach kann ich mir die Daten als JSON String anschauen.

      Mein Blockly sieht bisher so aus:

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable id="YyN?0+-c0yZwIIzVi80;">result</variable>
        </variables>
        <block type="schedule" id="@%Y/`G*)Fq7*1~Pe$(nz" x="-912" y="-462">
          <field name="SCHEDULE">*/20 * * * * *</field>
          <statement name="STATEMENT">
            <block type="request" id="v,F(kk8,7ftks@}|clN;">
              <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation>
              <field name="WITH_STATEMENT">TRUE</field>
              <field name="LOG"></field>
              <value name="URL">
                <shadow type="text" id="Q!n]mQgQ=j(u2PjVg3Zu">
                  <field name="TEXT">http://192.xxx.xxx.xxx/api/printer</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <block type="debug" id="pqw*L;T(MI^eKTV*aGVe">
                  <field name="Severity">log</field>
                  <value name="TEXT">
                    <shadow type="text" id="-0q#*1Nu_E5q`dA83P(v">
                      <field name="TEXT">test</field>
                    </shadow>
                    <block type="variables_get" id="LA]g2NqF3o-zB:KaSnjB">
                      <field name="VAR" id="YyN?0+-c0yZwIIzVi80;">result</field>
                    </block>
                  </value>
                </block>
              </statement>
            </block>
          </statement>
        </block>
      </xml>
      

      Ich bekomme als "result" eine 401 Fehlermeldung: not authorized.
      Würde so eine Abfrage grundsätzlich so funktionieren?
      Und wie müsste ich die fehlenden Daten zur Autorisierung übergeben?

      Vielen Dank.

      Christoph

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @hylamayn.de last edited by

        @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

        Es gibt (mindestens) zwei URLs, die ich im Webbrowser aufrufen kann:
        http://192.xxx.xxx.xxx/api/printer und http://192.xxx.xxx.xxx/api/version
        Ich werde jeweils (einmalig) nach einem Benutzernamen und dem Passwort gefragt,
        danach kann ich mir die Daten als JSON String anschauen.

        der Browser wird die Credentials im Cache halten.
        Dein Blockly hat da keinen Zugriff drauf.

        hylamayn.de 1 Reply Last reply Reply Quote 0
        • hylamayn.de
          hylamayn.de @Homoran last edited by

          @homoran
          Hi,

          ja, das ist klar 🙂
          Die Frage ist, anders formuliert: wie kann ich das Eintippen in ein Web-Formular
          (die Eingabemaske für Benutzername und Passwort) per Blockly realisieren?
          Das ist ja ansich keine unmögliche (oder ungewöhnliche) Aufgabe, eine Webseite zu parsen.
          Sollte man als Laie meinen 😉

          Christoph

          Homoran Codierknecht 2 Replies Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @hylamayn.de last edited by

            @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

            Das ist ja ansich keine unmögliche (oder ungewöhnliche) Aufgabe, eine Webseite zu parsen.

            kommt auf die Art der Zugriffsverwaltung an.

            einige können (noch) die Credentials im URL mitgeben: ip@user:pass, oder andere arten.

            1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @hylamayn.de last edited by

              @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

              Die Frage ist, anders formuliert: wie kann ich das Eintippen in ein Web-Formular
              (die Eingabemaske für Benutzername und Passwort) per Blockly realisieren?

              Gar nicht.

              Das ist ja ansich keine unmögliche (oder ungewöhnliche) Aufgabe, eine Webseite zu parsen.
              Sollte man als Laie meinen

              Doch.

              Für HTTPS gibt's noch die "old school" Variante der Übergabe von Benutzername + Kennwort im URL.
              Nach dem Muster: https://user:password@192.168.x.y/api/printer
              Wird hier vermutlich nicht funktionieren, käme aber auf einen Versuch an.
              Oder man übergibt einen zusätzliche Header mit der (Basic-) Authentifizierung.
              Oder ein Token als Parameter. Das scheint mir so vergesehen zu sein.
              0a4c8b9b-527b-431e-9fca-ef6092591fbd-grafik.png

              Deine lokalen IP's brauchst Du hier übrigens nicht anonymisieren - das sind IP's in Deinem Netz. Damit kann von außen keiner etwas anfangen.

              hylamayn.de 1 Reply Last reply Reply Quote 1
              • hylamayn.de
                hylamayn.de @Codierknecht last edited by

                @codierknecht

                Hallo,

                nur damit ich den Strang für mich abschließen kann:
                ich kann im Browser diese Adresse aufrufen:
                http://192.168.178.117/api/printer (nicht https, wirklich http).
                Dann bekomme ich ein Fenster, wo ich Username und Passwort (nicht den API-Token) eingeben kann,
                die ich in PrusaLink hinterlegt habe.
                Und ab dann kann ich fröhlich meine Telemetrie-Daten abrufen, kriege z.B.:

                {"temperature": {"tool0": {"actual": 35.8, "target": 0.0}, "bed": {"actual": 35.7, "target": 0.0}}, "sd": {"ready": true}, "state": {"text": "Operational", "flags": {"operational": true, "paused": false, "printing": false, "cancelling": false, "pausing": false, "sdReady": true, "error": false, "ready": true, "closedOrError": false, "finished": false, "prepared": false, "link_state": "IDLE"}}, "telemetry": {"temp-bed": 35.7, "temp-nozzle": 35.8, "material": " - ", "z-height": 50.0, "print-speed": 100, "axis_x": 0.0, "axis_y": 0.0, "axis_z": 50.0}, "storage": {"local": {"free_space": 5557104640, "total_space": 7388884992}, "sd_card": null}}
                

                Diese Daten automatisiert abzurufen über ein Blockly-Script ist also wirklich >>unmöglich<<, ja? Und gleich weiter: warum das denn? 🙂
                Und wenn ja: wie kann ich denn sonst per Blockly auf solche Daten zugreifen (es geht wohl um das Stichwort "API", richtig? 😉 )

                Christoph

                Homoran 1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @hylamayn.de last edited by

                  @hylamayn-de Du hast aber schon die letzte Antwort von @Codierknecht gelesen?

                  hylamayn.de 1 Reply Last reply Reply Quote 0
                  • hylamayn.de
                    hylamayn.de @Homoran last edited by

                    @homoran

                    Gelesen schon, vielleicht nicht verstanden 😉

                    Ich habe den API-Key (=Token, ja?), mir fehlt nur die Info, wie ich ihn in Blockly einsetze, um die Daten abrufen zu können.
                    Im Webbrowser brauche ich keinen API-Key und kein Token, sonder eben (ich könnte mich hier wiederholen 😉 ) nur Username und Passwort...
                    Wie frage ich Telemetriedaten vom PRUSA Mk3s per Blockly ab? Hat das schonmal jemand geschafft?
                    Christoph

                    Homoran Codierknecht 2 Replies Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @hylamayn.de last edited by

                      @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                      ich könnte mich hier wiederholen

                      und ich müsste es jetzt, da alles bereits geschrieben wurde

                      @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                      vielleicht nicht verstanden

                      hast du es denn versucht?

                      @codierknecht sagte in Prusa Telemetriedaten mit Blockly einbinden:

                      Nach dem Muster: https://user:password@192.168.x.y/api/printer

                      was kam da raus

                      hylamayn.de 1 Reply Last reply Reply Quote 0
                      • hylamayn.de
                        hylamayn.de @Homoran last edited by

                        @homoran said in Prusa Telemetriedaten mit Blockly einbinden:

                        @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                        ich könnte mich hier wiederholen

                        und ich müsste es jetzt, da alles bereits geschrieben wurde

                        Witzig.

                        @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                        vielleicht nicht verstanden

                        hast du es denn versucht?

                        Versucht zu verstehen, was @codierknecht geschrieben hat? Es war in deutsch geschrieben, es war semantisch und grammatikalisch in Ordnung und klar formuliert. Also ja, ich habe das verstanden.
                        Das heißt aber nicht, dass ich weiß wie ich das umzusetzen habe. Und danach habe ich gefragt.
                        Wie macht man das Folgende in Blockly:

                        Oder man übergibt einen zusätzliche Header mit der (Basic-) Authentifizierung.
                        Oder ein Token als Parameter. Das scheint mir so vergesehen zu sein.>

                        @codierknecht sagte in Prusa Telemetriedaten mit Blockly einbinden:

                        Nach dem Muster: https://user:password@192.168.x.y/api/printer
                        was kam da raus

                        Wie @Codierknecht selbst schon vorher gesagt hatte funktioniert das so nicht, weder mit "http" noch mit "https".

                        Christoph

                        Homoran 1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators @hylamayn.de last edited by Homoran

                          @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                          Versucht zu verstehen, was @codierknecht geschrieben hat?

                          nein!

                          du sollst in einem Browser, in dem du die Credentials noch nicht eingegeben hast, oder in einem inkognito Tab in die Adresszeile

                          @codierknecht sagte in Prusa Telemetriedaten mit Blockly einbinden:

                          Nach dem Muster: https://user:password@192.168.x.y/api/printer

                          deine Credentials und die IP deines Prusa eingeben

                          hylamayn.de 1 Reply Last reply Reply Quote 0
                          • hylamayn.de
                            hylamayn.de @Homoran last edited by

                            @homoran said in Prusa Telemetriedaten mit Blockly einbinden:

                            @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                            Versucht zu verstehen, was @codierknecht geschrieben hat?

                            nein!

                            du sollst in einem Browser, in dem du die Credentials noch nicht eingegeben hast, oder in einem inkognito Tab in die Adresszeile

                            @codierknecht sagte in Prusa Telemetriedaten mit Blockly einbinden:

                            Nach dem Muster: https://user:password@192.168.x.y/api/printer

                            deine Credentials und die IP deines Prusa eingeben

                            Das funktioniert im Browser tadellos, und zwar nur mit "http". Bei "https" kommt:
                            "Die Website ist nicht erreichbar192.168.178.117 hat die Verbindung abgelehnt."

                            Nur in Blockly kriege ich das nicht hin:

                            <xml xmlns="https://developers.google.com/blockly/xml">
                              <variables>
                                <variable id="YyN?0+-c0yZwIIzVi80;">result</variable>
                              </variables>
                              <block type="schedule" id="7kOG2-xtNF,TGXL1D,wP" x="-912" y="-462">
                                <field name="SCHEDULE">*/20 * * * * *</field>
                                <statement name="STATEMENT">
                                  <block type="request" id="v-XtTy~3mxe-:F+]sI+}">
                                    <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation>
                                    <field name="WITH_STATEMENT">TRUE</field>
                                    <field name="LOG"></field>
                                    <value name="URL">
                                      <shadow type="text" id="dg,6Vk.Z1%W.2/HIYLmX">
                                        <field name="TEXT">http://christoph:geheim@192.168.178.117/api/printer</field>
                                      </shadow>
                                    </value>
                                    <statement name="STATEMENT">
                                      <block type="debug" id="-5uRqKuj:!vDX)Yb+%^-">
                                        <field name="Severity">log</field>
                                        <value name="TEXT">
                                          <shadow type="text" id="?oFfkgrFOeR0uzD[KyQ2">
                                            <field name="TEXT">test</field>
                                          </shadow>
                                          <block type="variables_get" id="%^QkU`@.zE.R~Itd~Kxu">
                                            <field name="VAR" id="YyN?0+-c0yZwIIzVi80;">result</field>
                                          </block>
                                        </value>
                                      </block>
                                    </statement>
                                  </block>
                                </statement>
                              </block>
                            </xml>
                            

                            Hier bekomme ich statt der gewünschten Daten in der Variablen "result" die Fehlermeldung der abgefragten Seite:

                            <!DOCTYPE html> <html> <head> <title>401 - Unauthorized</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <style> body {width: 80%; margin: auto; padding-top: 30px;} h1 {text-align: center; color: #707070;} p {text-indent: 30px; margin-top: 30px; margin-bottom: 30px;} </style> </head> <body> <h1>401 - Unauthorized</h1> <p>Method GET for /api/printer uri.</p> <hr> <small><i>webmaster: webmaster@192.168.178.117 </i></small> </body> </html>
                            

                            Christoph

                            Homoran 1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators @hylamayn.de last edited by

                              @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                              Das funktioniert im Browser tadellos,

                              auch wenn du in dem Browser noch nie deine Credentials in das Popup eingegeben hattest?

                              wenn ja, dann

                              @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                              Nur in Blockly kriege ich das nicht hin:

                              schaffen wir das

                              1 Reply Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @hylamayn.de last edited by

                                @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                                Im Webbrowser brauche ich keinen API-Key und kein Token

                                Nö - da sitzt ja dann auch jemand mit der Hand am Arm vor dem Bildschirm und kann die Credentials eingeben. Und zu allem Unglück "merkt" sich der Browser auch noch die Daten ... zumindest solange bis die Session abläuft.
                                Für etwas Automatisiertes wie Blockly ist das völlig unbrauchbar. Dein Ansinnen, da etwas zu "parsen" und per Blockly "von hinten durch die Brust ins Auge" irgendwelche Eingaben zu machen, funktioniert nicht.

                                Für genau diesen Anwendungsfall ist so ein API-Token gedacht.
                                Das wird in den URL eingebaut - wie genau, das sollte irgendwo bei Prusa herauszufinden sein.
                                In der Regel funktioniert das nach dem Prinzip:

                                http://192.168.x.y/api/printer?key=1234567890abdcef
                                
                                hylamayn.de 1 Reply Last reply Reply Quote 0
                                • hylamayn.de
                                  hylamayn.de @Codierknecht last edited by

                                  @codierknecht
                                  "durch die Brust ins Auge"? Ich bin gespannt, was Du zu meiner Lösung sagst ... 😉

                                  Ich hab das weder mit Blockly noch mit Javascript hinbekommen, auf die API des Prusa zuzugreifen.
                                  Statt dessen verwende ich dazu NodeRed, wo das problemlos geht. Ich schicke die JSON Datei, die
                                  ich damit bekomme, in einen Datenpunkt unter dem Namespace Nodered. Und diesen Datenpunkt
                                  (eigentlich zwei, da ich die Metadaten unter einer anderen Adresse noch mitnehme) verwende ich,
                                  um in einem Blockly-Script daraus Datenpunkte unter 0_userdata zu erstellen.
                                  Und damit habe ich alle gewünschten Parameter. So wie ich das unter Octoprint ganz ohne Aufwand
                                  auch haben könnte. Aber wo ist da der Spaß? 😉
                                  Ausserdem ist mir natürlich klar, dass Prusalink Beta-Software ist. Nach der nächsten Revision könnten
                                  Teile der Daten nicht mehr gesendet werden (ist sowieso einiges redundant) oder das Ganze klappt
                                  gar nicht mehr. So what? 😉

                                  Danke für Eure Hilfe!

                                  Christoph

                                  Homoran 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @hylamayn.de last edited by

                                    @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                                    Ich hab das weder mit Blockly noch mit Javascript hinbekommen,

                                    du hast ja auch nichts gezeigt!

                                    wenn das mit

                                    @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                                    NodeRed, ... problemlos geht.

                                    geht das auch mit Blockly!

                                    Aber ohne Feedback, logs und Infos kann man nicht dein Problem sehen.

                                    hylamayn.de 1 Reply Last reply Reply Quote 1
                                    • hylamayn.de
                                      hylamayn.de @Homoran last edited by

                                      @homoran @Codierknecht

                                      Nochmal vielen Dank für Eure Hilfe.
                                      Ich will es kurz machen und den Thread dann auch gleich schließen (Kann ich das eigentlich?).
                                      Eure Vorschläge funktionieren so nicht. Mehr oder weniger habe ich das auch schon geschrieben.

                                      Der Grund, dass das mit meinem Blockly nicht geklappt hat, ist: beim Aufruf der
                                      API-URL muss eine "digest authentification" durchgeführt werden, und diese Möglichkeit
                                      gibt es wohl nicht im "request" Modul (?). Hab jedenfalls nichts gefunden dazu.

                                      Ich verwende jetzt das "exec" Modul, und mache meine Abfrage per "curl".
                                      Wahrscheinlich ist das sicherheitstechnisch Mist, aber es funktioniert.

                                      Christoph

                                      Homoran 1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators @hylamayn.de last edited by

                                        @hylamayn-de sagte in Prusa Telemetriedaten mit Blockly einbinden:

                                        Eure Vorschläge funktionieren so nicht.

                                        wir haben ja noch gar keine richtigen Vorschläge gemacht.
                                        Dazu fehlen uns noch die notwendigen Informationen.

                                        Das bisherige waren nur allgemeine Möglichkeiten.

                                        Codierknecht 1 Reply Last reply Reply Quote 1
                                        • Codierknecht
                                          Codierknecht Developer Most Active @Homoran last edited by Codierknecht

                                          @homoran
                                          Wenn's damit funktioniert ... alles tutti.
                                          Ob NodeRed, Blockly oder gleich in JS ist dabei ja wurscht - am Ende kommt eh nur JS dabei raus.

                                          Die nutzen den API Key wohl etwas "unkonventionell" und scheinen den Begriff "API" nicht so recht verstanden zu haben oder grundsätzlich anders zu interpretieren.
                                          Den jedes Mal von Hand eingeben zu müssen hat für mich jedenfalls nix mit "Application Programming Interface" zu tun.

                                          @hylamayn-de
                                          Wenn der Thread für Dich erledigt ist, dann bearbeite bitten Deinen Eingangspost und setz ein "[gelöst] - " vor den Titel.

                                          Homoran 1 Reply Last reply Reply Quote 1
                                          • Homoran
                                            Homoran Global Moderator Administrators @Codierknecht last edited by

                                            @codierknecht sagte in Prusa Telemetriedaten mit Blockly einbinden:

                                            Wenn der Thread für Dich erledigt ist,

                                            ich? 😂

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            564
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            22
                                            1341
                                            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