I recently setup my Spyder Robotics Herpstat 2 Spyderweb thermostat that I use to maintain my Leopard Gecko enclosure temperature. The Spyderweb version of the Herpstat connects to the network via Wi-Fi and allows you to expose a JSON endpoint to collect data via the /RAWSTATUS endpoint
Enabling /RAWSTATUS page
- Navigate to your Herpstat IP address in a browser
- Enter the admin password (or complete the setup wizard)
- Go to the Admin section
- Check the box for “Show Advanced Status Integration Options”
- Check the newly available “Enable /RAWSTATUS Page” checkbox
- Save
Home Assistant Configuration
I thought it might be helpful to share my rest configuration since it is a bit tedious to type out the entire thing. Feel free to let me know if there is a better or more simple way of setting this up. I am using Fahrenheit, if you are using Celsius you’ll need to change the unit_of_measurement entries on the probe readings.
Also, you will want to configure your herpstat with a static IP address so that homeassistant can reliably get information from it. I set this up on my network by setting a static address for the Herpstat on my DHCP controller.
Add the following to your configuration.yaml
rest:
- resource: "http://{YOUR_HERPSTAT_IP_HERE}/RAWSTATUS"
scan_interval: 60
sensor:
#System properies
- name: "Herpstat MAC"
value_template: "{{ value_json['system']['mac'] }}"
- name: "Herpstat Nickname"
value_template: "{{ value_json['system']['nickname'] }}"
- name: "Herpstat IP"
value_template: "{{ value_json['system']['ip'] }}"
- name: "Herpstat Firmware"
value_template: "{{ value_json['system']['firmware'] }}"
- name: "Herpstat Number of Outputs"
value_template: "{{ value_json['system']['numberofoutputs'] }}"
- name: "Herpstat Power Resets"
value_template: "{{ value_json['system']['powerresets'] }}"
- name: "Herpstat Internal Temperature"
value_template: "{{ value_json['system']['internaltemp'] }}"
device_class: "temperature"
unit_of_measurement: "°F"
- name: "Herpstat Internal Temp Max"
value_template: "{{ value_json['system']['internaltempmax'] }}"
device_class: "temperature"
unit_of_measurement: "°F"
- name: "Herpstat Safety Relay"
value_template: "{{ value_json['system']['safetyrelay'] }}"
#Output 1 properties
- name: "Herpstat Output 1 Nickname"
value_template: "{{ value_json['output1']['outputnickname'] }}"
- name: "Herpstat Output 1 Mode"
value_template: "{{ value_json['output1']['outputmode'] }}"
- name: "Herpstat Output 1 Probe Temperature"
value_template: "{{ value_json['output1']['probereadingTEMP'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 1 Current Setting"
value_template: "{{ value_json['output1']['currentsetting'] }}"
device_class: "temperature"
unit_of_measurement: "°F"
- name: "Herpstat Output 1 Ramping"
value_template: "{{ value_json['output1']['ramping'] }}"
- name: "Herpstat Output 1 Ramp End"
value_template: "{{ value_json['output1']['endoframpsetting'] }}"
device_class: "temperature"
unit_of_measurement: "°F"
- name: "Herpstat Output 1 Probe Max Reading"
value_template: "{{ value_json['output1']['probereadingTEMPMAX'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 1 Probe Min Reading"
value_template: "{{ value_json['output1']['probereadingTEMPMIN'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 1 Relative Humidity"
value_template: "{{ value_json['output1']['probereadingRH'] }}"
device_class: "humidity"
unit_of_measurement: "%"
- name: "Herpstat Output 1 Relative Humidity Max Reading"
value_template: "{{ value_json['output1']['probereadingRHMAX'] }}"
device_class: "humidity"
unit_of_measurement: "%"
- name: "Herpstat Output 1 Relative Humidity Min Reading"
value_template: "{{ value_json['output1']['probereadingRHMIN'] }}"
- name: "Herpstat Output 1 Power Output"
value_template: "{{ value_json['output1']['poweroutput'] }}"
unit_of_measurement: "%"
- name: "Herpstat Output 1 Power Output Limit"
value_template: "{{ value_json['output1']['poweroutputLIMIT'] }}"
- name: "Herpstat Output 1 High/Low Alarm Enabled"
value_template: "{{ value_json['output1']['enablehighlowalarm'] }}"
- name: "Herpstat Output 1 High Alarm"
value_template: "{{ value_json['output1']['highalarm'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 1 Low Alarm"
value_template: "{{ value_json['output1']['lowalarm'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 1 Error Code"
value_template: "{{ value_json['output1']['errorcode'] }}"
- name: "Herpstat Output 1 Error Code Description"
value_template: "{{ value_json['output1']['errorcodedescription'] }}"
#Sensor 2 properties, Omit these if you have a Herpstat 1
- name: "Herpstat Output 2 Nickname"
value_template: "{{ value_json['output2']['outputnickname'] }}"
- name: "Herpstat Output 2 Mode"
value_template: "{{ value_json['output2']['outputmode'] }}"
- name: "Herpstat Output 2 Probe Temperature"
value_template: "{{ value_json['output2']['probereadingTEMP'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 2 Current Setting"
value_template: "{{ value_json['output2']['currentsetting'] }}"
device_class: "temperature"
unit_of_measurement: "°F"
- name: "Herpstat Output 2 Ramping"
value_template: "{{ value_json['output2']['ramping'] }}"
- name: "Herpstat Output 2 Ramp End"
value_template: "{{ value_json['output2']['endoframpsetting'] }}"
device_class: "temperature"
unit_of_measurement: "°F"
- name: "Herpstat Output 2 Probe Max Reading"
value_template: "{{ value_json['output2']['probereadingTEMPMAX'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 2 Probe Min Reading"
value_template: "{{ value_json['output2']['probereadingTEMPMIN'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 2 Relative Humidity"
value_template: "{{ value_json['output2']['probereadingRH'] }}"
device_class: "humidity"
- name: "Herpstat Output 2 Relative Humidity Max Reading"
value_template: "{{ value_json['output2']['probereadingRHMAX'] }}"
device_class: "humidity"
- name: "Herpstat Output 2 Relative Humidity Min Reading"
value_template: "{{ value_json['output2']['probereadingRHMIN'] }}"
- name: "Herpstat Output 2 Power Output"
value_template: "{{ value_json['output2']['poweroutput'] }}"
unit_of_measurement: "%"
- name: "Herpstat Output 2 Power Output Limit"
value_template: "{{ value_json['output2']['poweroutputLIMIT'] }}"
- name: "Herpstat Output 2 High/Low Alarm Enabled"
value_template: "{{ value_json['output2']['enablehighlowalarm'] }}"
- name: "Herpstat Output 2 High Alarm"
value_template: "{{ value_json['output2']['highalarm'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 2 Low Alarm"
value_template: "{{ value_json['output2']['lowalarm'] }}"
unit_of_measurement: "°F"
device_class: "temperature"
- name: "Herpstat Output 2 Error Code"
value_template: "{{ value_json['output2']['errorcode'] }}"
- name: "Herpstat Output 2 Error Code Description"
value_template: "{{ value_json['output2']['errorcodedescription'] }}"
After setting this up, you will have entities named like sensor.herpstat_output_1_probe_temperature
in your entity list.
I hope this helps someone out there!