Home assistant energy - negative values

I’m currently using pvoutput to get my solar energy generation. Since that only returns a daily running total I have knocked up an automation and some sensors to track the running total Is there a better way than this?

template:
  - sensor:
      - name: "Power Generation"
        unit_of_measurement: "W"
        state_class: "measurement"
        device_class: "power"
        unique_id: pvoutput_power_generation
        state: '{% if is_state_attr("sensor.pvoutput", "power_generation", "NaN") %}0{% else %}{{ states.sensor.pvoutput.attributes.power_generation }}{% endif %}'

  - sensor:
      - name: "Solar Energy Running Total"
        unit_of_measurement: "kWh"
        state_class: "measurement"
        device_class: "energy"
        attributes:
          last_reset: "1970-01-01T00:00:00+00:00"
        unique_id: solar_energy_running_total
        state: 0

input_number:
  solar_generation_daily_last_update:
    step: .001
    unit_of_measurement: kWh
    min: 0
    max: 30

automation:
  - alias: calculate_running_solar_generation
    id: calculate_running_solar_generation
    trigger:
      - platform: state
        entity_id: sensor.energy_generation
    action:
      - service: python_script.set_state
        data_template:
          entity_id: sensor.solar_energy_running_total
          state: "{{ (states('sensor.solar_energy_running_total') | float) + (states('sensor.energy_generation') | float) - (states('input_number.solar_generation_daily_last_update') | float) }}"
      - service: input_number.set_value
        target:
          entity_id: input_number.solar_generation_daily_last_update
        data:
          value: "{{ states('sensor.energy_generation') }}"

Python script from here How to manually set state/value of sensor? - #3 by rodpayne