Herpstat Spyderweb Sensors

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!

2 Likes

I was literally just about to embark on this and found this post. Will save me a lot of time! Thanks!

I would have never noticed that endpoint on the Herpstat. This is sick to be able to monitor in a dashboard since the Spyderweb UI is straight out of geocities, Thanks!

This is awesome, thank you! I didn’t know at first but depending on the setup of you’re Herpstat, not all values are pushed to the RAWSTATUS. This made it so none of the Entities refreshed after the first pull for me. (check you’re logs for which fail) I just commented out the ones I didn’t need and it’s working great now!