Skip to content

Commit 101b40a

Browse files
committed
Add all temperatures to websocket for future use
- Add tools if you have more set in the printer profile - Add a few variants for chamber like cavity (jneilii firmware uses it) - Add TMC2240 temperatures, since most TMCs do not support temp, limit to list (temps do not show unless the driver is energizes, so add `or 0` since it will return None when it's not energized. I'm not sure what others drivers should be added so I only added 2240, but it's easy to add to it.
1 parent 3e34cc7 commit 101b40a

File tree

2 files changed

+53
-18
lines changed

2 files changed

+53
-18
lines changed

octoprint_moonraker_connector/client.py

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -301,12 +301,19 @@ class MoonrakerClient(JsonRpcClient):
301301
HTTP_URL = "http://{host}:{port}"
302302

303303
GENERIC_HEATER_PREFIX = "heater_generic "
304+
GENERIC_EXTRUDER_PREFIX = "extruder"
305+
GENERIC_TEMPERATURE_FAN_PREFIX = "temperature_fan "
306+
GENERIC_TEMPERATURE_PROBE_PREFIX = "temperature_probe "
307+
GENERIC_TEMPERATURE_SENSOR_PREFIX = "temperature_sensor "
308+
GENERIC_TMC_PREFIX = "tmc"
309+
TMC_HAVE_TEMPERATURE = [
310+
"tmc2240",
311+
]
304312
MACRO_PREFIX = "gcode_macro "
305313

306314
RELEVANT_PRINTER_OBJECTS = (
307315
"configfile",
308316
"display_status",
309-
"extruder",
310317
"gcode_move",
311318
"heater_bed",
312319
"idle_timeout",
@@ -315,7 +322,12 @@ class MoonrakerClient(JsonRpcClient):
315322
lambda obj_list: [
316323
x
317324
for x in obj_list
318-
if x.startswith(MoonrakerClient.GENERIC_HEATER_PREFIX)
325+
if x.startswith(MoonrakerClient.GENERIC_EXTRUDER_PREFIX)
326+
or x.startswith(MoonrakerClient.GENERIC_HEATER_PREFIX)
327+
or x.startswith(MoonrakerClient.GENERIC_TEMPERATURE_FAN_PREFIX)
328+
or x.startswith(MoonrakerClient.GENERIC_TEMPERATURE_PROBE_PREFIX)
329+
or x.startswith(MoonrakerClient.GENERIC_TEMPERATURE_SENSOR_PREFIX)
330+
or x.startswith(MoonrakerClient.GENERIC_TMC_PREFIX)
319331
or x.startswith(MoonrakerClient.MACRO_PREFIX)
320332
],
321333
)
@@ -567,8 +579,13 @@ def on_printer_objects(future: Future) -> None:
567579
self._heaters = [
568580
obj
569581
for obj in matched_objs
570-
if obj in ("extruder", "heater_bed")
582+
if obj in ("heater_bed")
583+
or obj.startswith(self.GENERIC_EXTRUDER_PREFIX)
571584
or obj.startswith(self.GENERIC_HEATER_PREFIX)
585+
or obj.startswith(self.GENERIC_TEMPERATURE_FAN_PREFIX)
586+
or obj.startswith(self.GENERIC_TEMPERATURE_PROBE_PREFIX)
587+
or obj.startswith(self.GENERIC_TEMPERATURE_SENSOR_PREFIX)
588+
or obj.startswith(self.GENERIC_TMC_PREFIX)
572589
]
573590

574591
self.query_printer_objects(matched_objs)
@@ -615,8 +632,8 @@ def on_result(future: Future) -> None:
615632
payload = result["status"]
616633
self._process_query_result(payload)
617634

618-
except Exception:
619-
self._logger.exception("Error while querying printer objects")
635+
except Exception as e:
636+
self._logger.exception(f"Error while querying printer objects: {e}")
620637

621638
params = {"objects": dict.fromkeys(objs)}
622639
future = self.call_method("printer.objects.query", params=params)
@@ -1078,15 +1095,25 @@ def _update_temperatures(self, payload: dict[str, Any]) -> None:
10781095
if heater not in payload:
10791096
continue
10801097

1081-
name = (
1082-
heater[len(self.GENERIC_HEATER_PREFIX) :]
1083-
if heater.startswith(self.GENERIC_HEATER_PREFIX)
1084-
else heater
1085-
)
1098+
if heater.startswith(self.GENERIC_HEATER_PREFIX):
1099+
name = heater[len(self.GENERIC_HEATER_PREFIX) :]
1100+
elif heater.startswith(self.GENERIC_TEMPERATURE_FAN_PREFIX):
1101+
name = heater[len(self.GENERIC_TEMPERATURE_FAN_PREFIX) :]
1102+
elif heater.startswith(self.GENERIC_TEMPERATURE_PROBE_PREFIX):
1103+
name = heater[len(self.GENERIC_TEMPERATURE_PROBE_PREFIX) :]
1104+
elif heater.startswith(self.GENERIC_TEMPERATURE_SENSOR_PREFIX):
1105+
name = heater[len(self.GENERIC_TEMPERATURE_SENSOR_PREFIX) :]
1106+
elif heater.startswith(self.GENERIC_TMC_PREFIX):
1107+
name = heater[8:]
1108+
driver = heater[:7]
1109+
if driver not in self.TMC_HAVE_TEMPERATURE:
1110+
continue
1111+
else:
1112+
name = heater
10861113

10871114
data = self._current_temperatures.get(name, TemperatureDataPoint())
10881115
if "temperature" in payload[heater]:
1089-
data.actual = payload[heater]["temperature"]
1116+
data.actual = payload[heater]["temperature"] or 0
10901117
dirty_actual = True
10911118
if "target" in payload[heater]:
10921119
data.target = payload[heater]["target"]

octoprint_moonraker_connector/connector.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def connection_preconditions_met(cls, params):
105105
host = params.get("host")
106106
return host and resolve_host(host)
107107

108-
TEMPERATURE_LOOKUP = {"extruder": "tool0", "heater_bed": "bed", "chamber": "chamber"}
108+
TEMPERATURE_LOOKUP = {"extruder": "tool0", "heater_bed": "bed", "chamber": "chamber", "Chamber": "chamber", "cavity": "chamber"}
109109

110110
def __init__(self, *args, **kwargs):
111111
super().__init__(*args, **kwargs)
@@ -573,6 +573,14 @@ def on_moonraker_connected(self):
573573
"apikey": self._apikey is not None,
574574
},
575575
)
576+
extruder_count = self._profile["extruder"]["count"]
577+
if extruder_count > 1:
578+
for i in range(1, extruder_count):
579+
if f"extruder{i}" not in self.TEMPERATURE_LOOKUP:
580+
self.TEMPERATURE_LOOKUP[f"extruder{i}"] = f"tool{i}"
581+
for heater, data in self._client.current_temperatures.items():
582+
if heater not in self.TEMPERATURE_LOOKUP:
583+
self.TEMPERATURE_LOOKUP[heater] = heater
576584
self._listener.on_printer_files_available(True)
577585
self.refresh_printer_files(recursive=True)
578586

@@ -598,12 +606,12 @@ def on_moonraker_server_info(self, server_info):
598606
def on_moonraker_temperature_update(
599607
self, data: dict[str, TemperatureDataPoint]
600608
) -> None:
601-
self._listener.on_printer_temperature_update(
602-
{
603-
self.TEMPERATURE_LOOKUP.get(key): (value.actual, value.target)
604-
for key, value in data.items()
605-
}
606-
)
609+
mapped_data = {}
610+
for key, value in data.items():
611+
new_key = self.TEMPERATURE_LOOKUP.get(key)
612+
if new_key is not None:
613+
mapped_data[new_key] = (value.actual, value.target)
614+
self._listener.on_printer_temperature_update(mapped_data)
607615

608616
def on_moonraker_gcode_log(self, *lines: str) -> None:
609617
self._listener.on_printer_logs(*lines)

0 commit comments

Comments
 (0)