I am pulling data using REST from my Pegasus Uranus and UPBv2 box. It took me a while because I need to get the Unique Keys and then use them in the HTTP request. I can get my dew heaters, could conditions, and SQM this way. I was going to put some roof status but my Indi-All-Sky camera posts each image to the MQTT broker and I can verify the roof is open or closed in a glance. I feel better about that rather than looking at the state of a roof switch.
The M5STACK ESP32 driving my roof does a REST GET to retrieve all of the mount data from my L350 and posts this to the MQTT broker that HA accesses. I do this to verify roof clearance in addition to checking a photo cell that looks at a reflector on the back of the scope to provide additional storage verification.
BTW I found an interesting MQTT Broker at shiftr.io that has a nice display that shows what data is going where. I might switch my mosquitto broker out for this.
(edited I streamlined the YAML here and added the UBPV2 Power Sensor and showed the MQTT entries for getting the Indi-All-Sky Camera)
Kurt
################################### MQTT SENSORS #####################################
mqtt:
sensor:
- name: "Mount Altitude"
state_topic: "L350/mount.altitude_degs"
unit_of_measurement: "°"
unique_id: "mount_altitude_sensor"
value_template: "{{ value | round(2) }}"
- name: "Mount Azimuth"
state_topic: "L350/mount.azimuth_degs"
unit_of_measurement: "°"
unique_id: "mount_azimuth_sensor"
value_template: "{{ value | round(2) }}"
- name: "Mount Axis 0 Current"
state_topic: "L350/mount.axis0.measured_current_amps"
unit_of_measurement: "A"
unique_id: "mount_axis0_current"
value_template: "{{ value | round(2) }}"
- name: "Mount Axis 1 Current"
state_topic: "L350/mount.axis1.measured_current_amps"
unit_of_measurement: "A"
unique_id: "mount_axis1_current"
value_template: "{{ value | round(2) }}"
- name: "Mount Axis 0 RMS"
state_topic: "L350/mount.axis0.rms_error_arcsec"
unit_of_measurement: "\""
unique_id: "mount_axis0_rms_error_arcsec"
value_template: "{{ value | round(2) }}"
- name: "Mount Axis 1 RMS"
state_topic: "L350/mount.axis1.rms_error_arcsec"
unit_of_measurement: "\""
unique_id: "mount_axis1_rms_error_arcsec"
value_template: "{{ value | round(3) }}"
- name: "indi_allsky_stars"
state_topic: "indi-allsky/stars"
unique_id: "indi_allsky_stars"
camera:
name: "Indi Allsky Latest"
topic: "indi-allsky/latest"
unique_id: "indi_allsky_latest_camera"
encoding: "jpeg"
################################### URANUS SENSORS #####################################
sensor:
- platform: template
sensors:
upbv2_sensor:
friendly_name: "UPBv2 Sensor"
value_template: "{{ state_attr('sensor.connected_devices', 'data') | selectattr('name', 'equalto', 'UPBv2') | map(attribute='uniqueKey') | list | first }}"
- platform: rest
name: "Connected Devices"
resource: "http://192.168.1.15:32000/Server/DeviceManager/Connected"
json_attributes:
- data
value_template: OK
- platform: rest
name: "upbv2_dew_report"
resource_template: "http://192.168.1.15:32000/Driver/UPBv2/Dew/Hub/Status?DriverUniqueKey={{ state_attr('sensor.connected_devices', 'data') | selectattr('name', 'equalto', 'UPBv2') | map(attribute='uniqueKey') | list | first }}"
method: GET
json_attributes:
- data
value_template: OK
- platform: rest
name: "power_readings_report"
resource_template: "http://192.168.1.15:32000/Driver/UPBv2/Report/Power?DriverUniqueKey={{ state_attr('sensor.connected_devices', 'data') | selectattr('name', 'equalto', 'UPBv2') | map(attribute='uniqueKey') | list | first }}"
method: GET
json_attributes:
- data
value_template: OK
- platform: rest
name: "uranus_report"
resource_template: "http://192.168.1.15:32000/Driver/Uranus/Report?DriverUniqueKey={{ state_attr('sensor.connected_devices', 'data') | selectattr('name', 'equalto', 'Uranus') | map(attribute='uniqueKey') | list | first }}"
method: GET
json_attributes:
- data
value_template: OK
- platform: template
sensors:
uranus_temperature:
friendly_name: "Uranus Temperature"
unique_id: uranus_temperature
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['temperature']['temperature'] | float }}"
unit_of_measurement: "°C"
uranus_humidity:
friendly_name: "Uranus Humidity"
unique_id: uranus_humidity
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['relativeHumidity']['percentage'] }}"
unit_of_measurement: "%"
uranus_pressure:
friendly_name: "Uranus Pressure"
unique_id: uranus_pressure
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['absolutePressure']['hPa'] }}"
unit_of_measurement: "hPa"
uranus_dew_point:
friendly_name: "Uranus Dew Point"
unique_id: uranus_dew_point
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['dewPoint']['temperature'] }}"
unit_of_measurement: "°C"
uranus_relative_pressure:
friendly_name: "Uranus Relative Pressure"
unique_id: uranus_relative_pressure
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['relativePressure']['hPa'] }}"
unit_of_measurement: "hPa"
uranus_altitude:
friendly_name: "Uranus Altitude"
unique_id: uranus_altitude
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['barometricAltitude']['meters'] }}"
unit_of_measurement: "m"
uranus_sky_quality:
friendly_name: "Uranus Sky Quality"
unique_id: uranus_sky_quality
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['skyQuality']['mpsas'] }}"
unit_of_measurement: "mpsas"
uranus_nelm:
friendly_name: "Uranus Naked Eye Limit Magnitude"
unique_id: uranus_nelm
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['nelm']['vMag'] }}"
uranus_illuminance:
friendly_name: "Uranus Illuminance"
unique_id: uranus_illuminance
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['illuminance']['lux'] }}"
unit_of_measurement: "lux"
uranus_temperature_difference:
friendly_name: "Uranus Temperature Difference"
unique_id: uranus_temperature_difference
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['temperatureDifference']['temperature'] }}"
unit_of_measurement: "°C"
uranus_cloud_coverage:
friendly_name: "Uranus Cloud Coverage"
unique_id: uranus_cloud_coverage
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['cloudCoverage']['percentage'] }}"
unit_of_measurement: "%"
uranus_sky_temperature:
friendly_name: "Uranus Sky Temperature"
unique_id: uranus_sky_temperature
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['skyTemperature']['temperature'] }}"
unit_of_measurement: "°C"
uranus_latitude:
friendly_name: "Uranus Latitude"
unique_id: uranus_latitude
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['latitude']['dd']['decimalDegree'] }}"
unit_of_measurement: "°"
uranus_longitude:
friendly_name: "Uranus Longitude"
unique_id: uranus_longitude
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['longitude']['dd']['decimalDegree'] }}"
unit_of_measurement: "°"
uranus_total_satellites:
friendly_name: "Uranus Total Satellites"
unique_id: uranus_total_satellites
value_template: "{{ state_attr('sensor.uranus_report', 'data')['message']['totalSatellites'] }}"
upbv2_port1_current:
friendly_name: "UPBv2 Port 1 Current"
unit_of_measurement: "A"
value_template: "{{ state_attr('sensor.upbv2_dew_report', 'data').message.hub[0].current.value | round(3)}}"
upbv2_port1_power:
friendly_name: "UPBv2 Port 1 Heater Power"
unit_of_measurement: "W"
value_template: "{{ state_attr('sensor.upbv2_dew_report', 'data').message.hub[0].port.power | round(3) }}"
upbv2_port2_current:
friendly_name: "UPBv2 Port 2 Heater Current"
unit_of_measurement: "A"
value_template: "{{ state_attr('sensor.upbv2_dew_report', 'data').message.hub[1].current.value | round(3) }}"
upbv2_port2_power:
friendly_name: "UPBv2 Port 2 Heater Power"
unit_of_measurement: "W"
value_template: "{{ state_attr('sensor.upbv2_dew_report', 'data').message.hub[1].port.power | round(3) }}"
upbv2_port3_current:
friendly_name: "UPBv2 Port 3 Heater Current"
unit_of_measurement: "A"
value_template: "{{ state_attr('sensor.upbv2_dew_report', 'data').message.hub[2].current.value | round(3) }}"
upbv2_port3_power:
friendly_name: "UPBv2 Port 3 Heater Power"
unit_of_measurement: "W"
value_template: "{{ state_attr('sensor.upbv2_dew_report', 'data').message.hub[2].port.power | round(3) }}"
upbv2_current:
friendly_name: "upbv2_current"
unit_of_measurement: "A"
value_template: "{{ state_attr('sensor.power_readings_report', 'data').message.current | round(3) }}"
upbv2_power:
friendly_name: "upbv2_power"
unit_of_measurement: "W"
value_template: "{{ state_attr('sensor.power_readings_report', 'data').message.power | round(3) }}"
template:
- trigger:
platform: homeassistant
event: start
action:
- delay: 00:00:10
- repeat:
while:
- condition: template
value_template: "{{ states('sensor.Connected Devices') == 'unavailable' }}"
sequence:
- service: homeassistant.update_entity
entity_id: sensor.connected_devices
- delay: 00:00:01
############################# URANUS Automations #################################
automation:
- id: 'periodic_uranus_report_update'
alias: Periodic Update Uranus Report
trigger:
- platform: time_pattern
seconds: "/10" # Adjust this as needed for your desired interval
action:
- service: homeassistant.update_entity
target:
entity_id: sensor.connected_devices
- delay: '00:00:03' # Adjust the delay time as needed
- service: homeassistant.update_entity
target:
entity_id: sensor.uranus_report,sensor.upbv2_dew_report
Edited by ispybadguys, 14 December 2023 - 03:29 PM.