HTTP Binding to Prusa Core One

Hello!

Yesterday I got my new 3D Printer… A Prusa Core One.

What I already found out:
When I authenticate with user and password under http://ip-address/api/v1/status I can see the status of it in JSON format.

So I can see:

job
id 4
progress 90.00JS:90
time_remaining 660
time_printing 6745
storage
path /usb/
name usb
read_only false
printer
state PRINTING
temp_bed 60.0JS:60
target_bed 60.0JS:60
temp_nozzle 230.1
target_nozzle 230.0JS:230
axis_z 28.1
flow 100
speed 100
fan_hotend 2793
fan_print 5614

How can I get these informations into OpenHAB?
Tried with HTTP Binding but status still is “Unknown”…

Hope you can help. Sorry… I’m new to the topic “getting informations out of a JSON-URL”

Best regards
Tobias

2 Likes

Problem sovled…

After installing HTTP binding: First I had to set authentication to Digest-Auth…
Second I needed to Add Channels and then Link them to JSONPATH (for example: $.printer.state)

And also important: Use “string” and not “number” for a new thing…

Hi,

i’ve made a rule for shutting down the printer, when a job is finished. The behavior is controllable by a switch.

Maybe you want to use it.

 
Switch                  zigbee_plug_prusa                "CORE One"                                             <poweroutlet_eu>    (g3DPrint, Strom, Zigbee)                     ["PowerOutlet"]                         {channel="mqtt:topic:zigbee:steckdose_prusa:state", homekit="Outlet"}

Number:Power            zigbee_plug_prusa_power           "CORE One Leistung [%.1f %unit%]"                                       (g3DPrint, Strom)                             ["Power","Measurement"]                 {channel="mqtt:topic:zigbee:steckdose_prusa:power"}

String prusa_state "CORE One Status [%s]"  (g3DPrint, Prusa) ["Status"] {channel="http:url:prusacoreone:state"}
Number prusa_progress "CORE One Progress [%.1f] %" (g3DPrint, Prusa) ["Status"] {channel="http:url:prusacoreone:progress"}
Number:Temperature prusa_temp_bed "CORE One Druckbett [%.1f %unit%]"  (g3DPrint, Prusa, Temperaturen) ["Temperature","Measurement"] {channel="http:url:prusacoreone:temp_bed"}
Number:Temperature prusa_target_bed "CORE One Druckbett Soll [%.1f %unit%]"  (g3DPrint, Prusa) ["Temperature"] {channel="http:url:prusacoreone:target_bed"}
Number:Temperature prusa_temp_nozzle "CORE One Nozzle [%.1f %unit%]"  (g3DPrint, Prusa, Temperaturen) ["Temperature","Measurement"] {channel="http:url:prusacoreone:temp_nozzle"}
Number:Temperature prusa_target_nozzle "CORE One Nozzle Soll [%.1f %unit%]"  (g3DPrint, Prusa) ["Temperature"] {channel="http:url:prusacoreone:target_nozzle"}

Switch prusa_sleepmode "CORE One Sleepmode [%s]"  (g3DPrint, Prusa) ["Control"] 

Then the rules


var Timer prusaSwitchOffTimer

// siehe https://github.com/prusa3d/Prusa-Firmware-Buddy/blob/master/lib/WUI/link_content/basic_gets.cpp

rule "CORE One finished or failed"
when
    Item prusa_state changed from  "PRINTING" to "FINISHED" or
    Item prusa_state changed from  "PRINTING" to "ATTENTION"
then
    val int minutesBeforeShutdown = if(newState == "ATTENTION") 60 else 30 
    if ( prusa_sleepmode.state == ON) {
        logInfo("prusa", "Schalte Prusa CORE One in {} Minuten ab", minutesBeforeShutdown)
    }
    if(prusaSwitchOffTimer !== null) {
       prusaSwitchOffTimer.cancel()
    }
    prusaSwitchOffTimer = createTimer(now.plusMinutes(minutesBeforeShutdown)) [|
        if ( prusa_sleepmode.state == ON) {
           logInfo("prusa", "Schalte Prusa CORE One Strom ab")
           zigbee_plug_prusa.sendCommand(OFF)
        }
   ]
end

rule "CORE One busy"
when
Item prusa_state changed from "FINISHED" or
Item prusa_state changed from "ATTENTION"
then
    if(prusaSwitchOffTimer !== null) {
       logInfo("prusa", "prusaSwitchOffTimer killed")
       prusaSwitchOffTimer.cancel()
       prusaSwitchOffTimer = null
    }
end