You might consider a trigger-based template sensor. It can’t have its value overwritten from the UI, and it combines an automation and an entity into one thing.
template:
- trigger:
- platform: state
entity_id: sensor.openweathermap_temperature
not_to:
- unavailable
- unknown
sensor:
- name: Highest Temp Ever
unique_id: c6174f4d-0709-4e70-a675-5ba3f07c80a0
state: >
{{ max(trigger.to_state.state | float, this.state | float(-999)) }}