NEWS
[gelöst] - Prusa Telemetriedaten mit Blockly einbinden
-
@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
-
@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
-
@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
-
@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.
-
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
-
@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.
-
@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. -
@codierknecht sagte in Prusa Telemetriedaten mit Blockly einbinden:
Wenn der Thread für Dich erledigt ist,
ich?
-
Ich habe auch vor auf den Prosa zuzugreifen. Meine Idee ist, einen RGB-Streiben anhand der Informationen aus der API unterschiedlich leuchten zu lassen und natürlich auch gewisse Informationen in ioBroker anzeigen zu lassen.
@hylamayn-de Kannst du deine Lösung hier mal detailliert zeigen?
Danke und Grüße
-
Hi hier ist mal der ansatz dafür
diese zeile im Blockly müsstet ihr ändern
curl -v http://192.168.0.91/api/printer --digest -u USER:PASSWORD
um die api einzusehen
http://ip/api/printer
http://ip/api/version<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="B=%HkNFd;Jc-lk:s1;ct">result</variable> </variables> <block type="on" id="iHq6A)^AZ=QN+;coR^ht" x="238" y="-387"> <field name="OID">tuya.0.bffbff9117c8137818tkbd.1</field> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="schedule" id="$@Q{Q!oh$(Xi+YfJ+Sth"> <field name="SCHEDULE">*/30 * * * * *</field> <statement name="STATEMENT"> <block type="exec" id="rl%::%dMuDzH:Oq|nx4Y"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG">info</field> <value name="COMMAND"> <shadow type="text" id="S*SWo2P:N:YD_t7GS@AP"> <field name="TEXT">curl -v http://192.168.0.91/api/printer --digest -u USER:PASSWORD</field> </shadow> </value> <statement name="STATEMENT"> <block type="comment" id="yX7S6rmlAz8S41pwf76$"> <field name="COMMENT">Bett-Temperatur</field> <next> <block type="update" id="/JU=hq_EbM2uBYcH#CaL"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Prusa_Mini_Data.MK4.temp_bed</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_attr" id="3/qiV[k;qu[CEb1F)vlm"> <value name="PATH"> <shadow type="text" id="@oLvnd+50^[4HE/z}A32"> <field name="TEXT">telemetry.temp-bed</field> </shadow> </value> <value name="OBJECT"> <shadow type="get_object" id="RBy5134AZ8s%X*gAr;oY"> <field name="OID">Object ID</field> </shadow> <block type="convert_json2object" id="wY8~t+qQ~SSt/NP+P?2v"> <value name="VALUE"> <block type="variables_get" id="LbTt(:6:+br;^?Ac98Z-"> <field name="VAR" id="B=%HkNFd;Jc-lk:s1;ct">result</field> </block> </value> </block> </value> </block> </value> <next> <block type="comment" id="){|e{c5FD%a!Wj:zbQ?`"> <field name="COMMENT">Nozzle-Temperatur</field> <next> <block type="update" id="KI|.h+7Bi_(u^I?ED4/*"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Prusa_Mini_Data.MK4.temp_nozzle</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_attr" id="3JtjS~*Azu.Tvy0B5ZdR"> <value name="PATH"> <shadow type="text" id="@.t;#czSI9/wagM2I$4k"> <field name="TEXT">telemetry.temp-nozzle</field> </shadow> </value> <value name="OBJECT"> <shadow type="get_object" id="RBy5134AZ8s%X*gAr;oY"> <field name="OID">Object ID</field> </shadow> <block type="convert_json2object" id="B!?BT$h.22H?X|dNhtuE"> <value name="VALUE"> <block type="variables_get" id="UwY@-hJ:*uEOSI3{OP]d"> <field name="VAR" id="B=%HkNFd;Jc-lk:s1;ct">result</field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block> </xml>