This is one post in a series of getting up and running with Home Assistant from scratch.
Today I will be adding my 3D printer to Home Assistant via the octoprint integration, this post will build up on core concepts that have already been covered in some of my previous posts.
If you wish to follow along, you will need the following.
- Octoprint setup and running for your 3D printer
- A static IP Address assigned to your Octoprint server (makes configuration a whole lot easier)
- The Octoprint MQTT Plugin installed
- (Optional) A webcam configured in Octoprint
As mentioned above, in order to monitor Octoprint from Home Assistant you will need the Octoprint MQTT plugin as this allows Octoprint to publish relative information about your printer and any running jobs.
You can install the plugin through Octoprints built-in plugin manager, and configure it to point to your home MQTT server (or cloud server if you are not hosting your own).
I would suggest picking a meaningful topic when setting up MQTT, especially if you are running more than 1 3D printer. In my case I will set this topic to octoprint/anet_a8/:
We can confirm that our configuration is correct by subscribing to either
octoprint/anet_a8/# in your preferred MQTT client (in my case I am using MQTTBox).
The first thing we need to do is add the Octoprint component’s configuration into your configuration.yaml file.
1 2 3 4 5 octoprint: host: !secret octoprint_host api_key: !secret octoprint_api bed: true number_of_tools: 1
This is the main component to integrate OctoPrint sensors, you will have to set up sensors and binary sensors separately.
Next you will need to create a new octoprint sensor (shown below) in your
configuration.yaml file and select the monitored conditions that you are interested in.
1 2 3 4 5 6 - platform: octoprint name: Anet A8 monitored_conditions: - Current State - Temperatures - Job Percentage
After a quick restart of Home Assistant you should see your new sensors.
I prefer to group similar sensors together in Home Assistant to make it easier to get to the information that I want to see. Below I am creating a new card called Anet A8 which contains all the sensors that I want to see…
1 2 3 4 5 6 7 8 9 aneta8_group: name: Anet A8 entities: - sensor.anet_a8_current_state - sensor.anet_a8_job_percentage - sensor.anet_a8_target_bed_temp - sensor.anet_a8_actual_bed_temp - sensor.anet_a8_actual_tool0_temp - sensor.anet_a8_target_tool0_temp
This results in the following card appearing in Home Assistant after a restart.
If you are wondering where to get the entity names specific to your 3D printer (e.g. sensor.anet_a8_job_percentag) you can get them through the states panel under the Developer Tools section of your Home Assistant instance.
The next thing I want to do is rename some of the automatically generated names to ones that make more sense to me. To do this I added the following configuration to my customize.yaml file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 sensor.anet_a8_current_state: friendly_name: Status icon: mdi:printer-3d sensor.anet_a8_job_percentage: friendly_name: "Job %" icon: mdi:percent sensor.anet_a8_target_bed_temp: friendly_name: "Bed Temp (target)" icon: mdi:vector-square sensor.anet_a8_actual_bed_temp: friendly_name: "Bed Temp (actual)" icon: mdi:vector-square sensor.anet_a8_actual_tool0_temp: friendly_name: "Tool Temp (actual)" icon: mdi:temperature-celsius sensor.anet_a8_target_tool0_temp: friendly_name: "Tool Temp (target)" icon: mdi:temperature-celsius
The results after a restart can be seen below:
Octoprint by default provides a webcam stream which is available at:
In my case that would make it:
To get the webcam appearing in Home Assistant all we need to do is add a new mjpeg camera with the stream URL and a meaningful name:
1 2 3 4 camera: - platform: mjpeg mjpeg_url: http://10.0.0.101/webcam/?action=stream&1532530153491 name: "Anet A8"
The last thing left to do is create a 3D Printer view in Home Assistant (i.e. a TAB on the top row) which will be used to only display information from my 3D printer, to do this I added the following configuration to the groups.yaml file.
1 2 3 4 5 6 7 8 3d_printers_view: name: "3D Printers" view: yes entities: - device_tracker.google_maps_111184378817367767624 - device_tracker.google_maps_117179315722226620815 - group.aneta8_group - camera.anet_a8
After restarting Home Assistant:
I feel a lot more comfortable being able to check on my 3D printer from another room, and having it integrate so easily into Home Assistant is a huge bonus.
This also opens up the doors for a lot of automation around your printer (e.g. power down after print completion (using a Sonoff), cut power in thermal runaway, etc.).
Having your printer talking on MQTT also allows for integration into other tools such as Node-RED greatly expanding what you can do with your automation.
I hope that you found this post helpful, and as always I welcome all feedback, comments and questions.