My PVOutput: https://pvoutput.org/list.jsp?userid=131277
You first need some sensors:
sensor.inverters_energy=> energy produced
Optionnally you can add:
sensor.solar_production_power=> produced powersensor.home_consumed_energy_meter_daily=> energy consumed by home (includes consumed solar energy + imported grid energy)sensor.max_inverter_voltage=> maximum inverter voltage value (help catch inverters going down upon high voltage)sensor.grid_voltage=> grid voltagesensor.inverters_producing_count=> number of inverters currently producing (this can be removed)
Remove from the URL call what you do not use
#
# Energy Generation + Import = Energy Used + Export
#
# https://www.home-assistant.io/integrations/rest_command
rest_command:
# https://pvoutput.org/help/api_specification.html#add-status-service
pv_output_live:
url: https://pvoutput.org/service/r2/addstatus.jsp
method: POST
content_type: "application/x-www-form-urlencoded"
headers:
X-Pvoutput-Apikey: !secret pvoutput.api_key
X-Pvoutput-SystemId: !secret pvoutput.system_id
# dt, tm = date & time
# pe, pp, pv = production energy, power and voltage
# gv = grid voltage
# he = Energy consumed by home
# temp = Outdoor temperature
# m = message with the number of inverters producing
# pc = number of inverters producing
# Use &c1=1 at the end of the payload if using lifetime counters. Should work also with daily counters
payload: >-
{% set dt = now().strftime("%Y%m%d") %}
{% set tm = now().strftime("%H:%M") %}
{% set pe = (states("sensor.inverters_energy_meter_daily")|float(0) * 1000)|int(0) %}
{% set pp = states("sensor.solar_production_power")|int(0) %}
{% set pv = states("sensor.max_inverter_voltage")|float(0) %}
{% set gv = states("sensor.grid_voltage")|float(0) %}
{% set he = (states("sensor.home_consumed_energy_meter_daily")|float(0) * 1000)|int(0) %}
{% set oe = (states("sensor.openevse_energy_meter_daily")|float(0) * 1000)|int(0) %}
{% set temp = states("sensor.ws3800a_outdoor_temperature")|float(-1000) %}
{% set pc = states("sensor.inverters_producing_count")|int(0) %}
{% set b = 8 if states("binary_sensor.3erl_bridage_demande") == 'on' else 0 %}
{% set prep = states("sensor.electricite_prix_de_reglement_des_ecarts_positifs")|float(0) %}
{% set limit = states("input_number.inverters_power_limit")|float(1000) %}
{% if temp == -1000 %}
d={{dt}}&t={{tm}}&v1={{pe}}&v2={{pp}}&v3={{he}}&v6={{pv if pv > 0 else gv}}&v7={{pc}}&v8={{b}}&v9={{prep}}&v10={{limit}}&v11={{oe}}
{% else %}
d={{dt}}&t={{tm}}&v1={{pe}}&v2={{pp}}&v3={{he}}&v5={{temp}}&v6={{pv if pv > 0 else gv}}&v7={{pc}}&v8={{b}}&v9={{prep}}&v10={{limit}}&v11={{oe}}
{% endif %}
# https://pvoutput.org/help/api_specification.html#add-output-service
pv_output_daily:
url: https://pvoutput.org/service/r2/addoutput.jsp
method: POST
content_type: "application/x-www-form-urlencoded"
headers:
X-Pvoutput-Apikey: !secret pvoutput.api_key
X-Pvoutput-SystemId: !secret pvoutput.system_id
payload: 'd={{now().strftime("%Y%m%d")}}&g={{(states.sensor.inverters_energy_meter_daily.state|float(0) * 1000)|int(0)}}&e={{(states.sensor.grid_energy_returned_meter_daily.state|float(0) * 1000)|int(0)}}&c={{(states.sensor.home_consumed_energy_meter_daily.state|float(0) * 1000)|int(0)}}&cm={{("Updated at " + now().strftime("%H:%M"))|urlencode}}'
# https://www.home-assistant.io/docs/automation/
automation:
# Upload PV data to https://pvoutput.org/
- id: "0000000000060"
alias: "PVOutput Upload"
triggers:
- trigger: time_pattern
minutes: "*"
conditions: []
actions:
- action: rest_command.pv_output_live
data: {}