I am working on a similar idea
This is a beginning attempt at a dashboard I have an Indi All-Sky Camera that posts data on my Mosquitto MQTT broker. I also have pulled weather data from my Tempest weather station and from Open Weather Map. Tempest gives me wind and rain data for my observatory. Open Weather gives me cloud cover when the roof is closed. I have a Pegasus Uranus that gives me SQM when the roof is open. I and running the HACS Mushroom dashboard. I have some Blink camera that required about 5 lines of YAML to get updates every 15 seconds from the cameras. I have an L350 mount that I get a huge amount of data using a simple REST call.
I am running NINA and I have switched entirely to Tom Palmer's Target Scheduler so I am unsure how if I can duplicate the approach here but I will give it a try. There is a very interesting option here https://github.com/mawinkler/astrolive that uses Alpaca to bring all the data available to ASCOM into HA. I tried to load this but I wasn't able to work thru the issues.
I was vaguely aware of Home Assistant but discovered that it would be a fantastic way to run and monitor my observatory. I have a few KASA switches and it magically reports the power consumption and can control the switches. Also I see a way to reach into my Pegasus power boxes and get dew heater currents to monitor that.
I have a roof controller built on an M5STACK ESP32 that runs my Piertech Pier and ROR and another that runs a modified version of Robert's Browns mySQM Observing conditions monitor. I am hacking the ESP code to get its data via MQTT. Right now I am running HA on a VirtualBox VM. It will take you about 20 minutes to download and install both VirtualBox and Home Assistant and get it running.
I have a tiny bit of YAML code here
# Loads default set of integrations. Do not remove.
default_config:
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
#automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
logger:
default: warning
logs:
homeassistant.components.mqtt: warning
homeassistant.components.rest: warning
################################### 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: rest
name: "device_unique_key"
resource: 'http://192.168.1.15:32000/Reporting/Device'
method: GET
json_attributes:
- data
value_template: "{{ value_json.data[0].uniqueKey }}"
- platform: rest
name: "uranus_report"
resource_template: "http://192.168.1.15:32000/Driver/Uranus/Report?DriverUniqueKey={{ states('sensor.device_unique_key') }}"
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'] }}"
############################# 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.device_unique_key
- delay: '00:00:03' # Adjust the delay time as needed
- service: homeassistant.update_entity
target:
entity_id: sensor.uranus_report
############################### Weatherflow #####################################
- id: 'aaacfb28-19ac-487b-bc57-d37096e402fe'
alias: Publish Weatherflow to Observatory
description: Publish Temperature to Observatory
trigger:
- platform: state
entity_id:
- sensor.st_00012055_wind_gust
action:
- service: mqtt.publish
data:
qos: '1'
retain: false
topic: observatory
payload_template: >-
{{ {'temperature': states('sensor.st_00012055_temperature'),
'wind_gust': states('sensor.st_00012055_wind_gust'),
'illuminance': states('sensor.st_00012055_illuminance'),
'wind_speed_average': states('sensor.st_00012055_wind_speed_average'),
'lightning_average_distance': states('sensor.st_00012055_lightning_average_distance'),
'lightning_count': states('sensor.st_00012055_lightning_count'),
'rain_rate': states('sensor.st_00012055_precipitation_intensity'),
'humidity': states('sensor.st_00012055_humidity'),
'precipitation': states('sensor.st_00012055_precipitation'),
'precipitation_type': states('sensor.sensor.st_00012055_precipitation_type'),
'wind_direction': states('sensor.st_00012055_wind_direction'),
'wind_speed': states('sensor.st_00012055_wind_speed')} | to_json }}
mode: single
- id: 'd379ba78-f4e4-4e9a-b46f-a07b95c609c8'
alias: Publish Weatherflow to Observatory
description: Publish Temperature to Observatory
trigger:
- platform: state
entity_id:
- st_00012055_lightning_average_distance
- sensor.st_00012055_lightning_count
action:
- service: mqtt.publish
data:
qos: '1'
retain: false
topic: observatory
payload_template: >-
{{ { 'lightning_average_distance': states('sensor.st_00012055_lightning_average_distance'),
'lightning_count': states('sensor.st_00012055_lightning_count')} | to_json }}
mode: single
- id: 'f2ebf008-231f-48d9-80e2-2ed11d294359'
alias: Publish Weatherflow to Observatory
description: Publish Temperature to Observatory
trigger:
- platform: state
entity_id:
- sensor.device_unique_key
- sensor.openweathermap_cloud_coverage
- sensor.uranus_sky_quality
action:
- service: mqtt.publish
data:
qos: '1'
retain: false
topic: observatory
payload_template: >-
{{ {'uranus_air_pressure': states('sensor.uranus_pressure'),
'uranus_cloud_coverage': states('sensor.uranus_cloud_coverage'),
'uranus_relative_pressure': states('sensor.uranus_relative_pressure'),
'uranus_dew_point': states('sensor.uranus_dew_point'),
'uranus_pressure': states('sensor.uranus_pressure'),
'uranus_sky_temperature': states('sensor.uranus_sky_temperature'),
'uranus_SQM': states('sensor.uranus_sky_quality'),
'uranus_nelm': states('sensor.uranus_nelm'),
'openweathermap_visibility': states('sensor.openweathermap_visibility'),
'openweathermap_cloud_coverage': states('sensor.openweathermap_cloud_coverage')} | to_json }}
mode: single
- alias: "Refresh Blink Observatory 2 Image"
trigger:
- platform: time_pattern
seconds: "/15" # Change this to your preferred refresh interval (every 15 seconds in this example)
action:
- service: blink.trigger_camera
target:
entity_id: camera.g8v1_9001_3076_5032 # Replace with your Blink camera entity ID
- delay: '00:00:05'
- service: blink.blink_update
- service: camera.snapshot
target:
entity_id: camera.g8v1_9001_3076_5032 # Replace with your Blink camera entity ID
data:
filename: /tmp/observatory_image2.jpg
- alias: "Refresh Blink Observatory 1 Image"
trigger:
- platform: time_pattern
seconds: "/15" # Change this to your preferred refresh interval (every 15 seconds in this example)
action:
- service: blink.trigger_camera
target:
entity_id: camera.g8v1_9001_3076_50kl # Replace with your Blink camera entity ID
- delay: '00:00:05'
- service: blink.blink_update
- service: camera.snapshot
target:
entity_id: camera.g8v1_9001_3076_50kl # Replace with your Blink camera entity ID
data:
filename: /tmp/observatory_image1.jpg
This code gets data from MQTT, Pegasus URANUS, Indi All-Sky and my Blink Cameras.
I would love to collaborate to improve this idea.
Kurt
Edited by ispybadguys, 05 December 2023 - 08:17 AM.