Has anyone out there wrote a custom script for use with Home Assistant that will upload the relevant stats to pvoutput.org? I could probably figure it out myself given some time but why re-invent the wheel. I'm also willing to work with anybody on creating an integration if there is interest.
Sending solar generation stats to pvoutput
I'm just taking a poke at the api docs right now if anyone is interested: https://pvoutput.org/help/api_specification.html#add-status-service
KamenMacKay theres an integration to pull PV output data into HA https://www.home-assistant.io/integrations/pvoutput/ and I just found someone else has written a script to upload to PV output https://forum.pvoutput.org/t/home-assistant-upload/809
Just pushed my first reading using this (v2 is the total watts being currently generated) and I think everything else is self-explanatory:
curl -d "d=20230923" -d "t=14:15" -d "v2=1400" -H "X-Pvoutput-Apikey: yourapikey" -H "X-Pvoutput-SystemId: yoursystemid" https://pvoutput.org/service/r2/addstatus.jsp
I'm grabbing the total watts generated by this givtcp sensor:
sensor.givtcp_ea2302g468_pv_power
Thanks...I'm looking at that right now and figuring out how to incorporate that into Home Assistant. Will post back when successful.
I kinda gave up on this, Givenergy AIO unit and Solax inverter, given that both have api's and PV Output doesn't have a drop down for those specific models other methods are way too confusing for me.
Ok so it took a little bit of work but here's what needs to be done. Modify your configuration.yml and put this at the bottom:
shell_command:
pvoutputcurl: 'curl -d "d={{now().strftime("%Y%m%d")}}" -d "t={{now().strftime("%H:%M")}}" -d "v2={{ states.sensor.givtcp_yourgivenergyserialnumber_pv_power.state }}" -H "X-Pvoutput-Apikey: yourapikey" -H "X-Pvoutput-SystemId: yoursystemid" https://pvoutput.org/service/r2/addstatus.jsp'
(make sure to properly the indent the second line in the code snippet other HA will complain)
You can then create an automation that will run this every 5 minutes. Create a time pattern trigger. Leaving hours and seconds blanks, enter /5 in the minutes.
Add action: Call Service...Shell Command: pvoutputcurl
Save the config and you should be good to go.

I believe PVoutput is supported natively if you use Givenergy-local in HA as opposed to GivTCP.
There's also a Givenergy team going if you wanted to join us!
https://pvoutput.org/listteam.jsp?tid=1694
There's a standalone config aswell here for GivTCP: https://github.com/sOckhamSter/PVOutput_for_GivTCP
@hoggy Brilliant! The standalone config was much more complete than my hacky version so I'm using that now. Thanks1

KamenMacKay no worries (it's not my work, It's Speak to the Geek @SpeakToTheGeek )
@hoggy I don't know what we'd do if we didn't have Speak to the Geek around to figure this stuff out for us 🙂
Thanks @KamenMacKay for the pvoutput info and hoggy for pointing us to the integration script, I’ve created my account on pvoutput.org and with this script I am sending data up every 5 minutes.
Had to fiddle with the curl commands as I have two inverters and needed to add the PV energy today and PV energy now from the two arrays together (lots more brackets and a few errors doing so), but its working fine now.
I adapted the suggested automations, merging the separate regular heartbeat and the end of day together into a single automation, just to reduce automation clutter in Home Assistant:
`alias: PVOutput for GivTCP - Update pvoutput.org with PV system performance
description: ""
trigger:
- platform: time_pattern
minutes: /5
id: 5min-poll - platform: time
at: "23:55:00"
id: end-of-day
action: - choose:
- conditions:
- condition: trigger
id:- 5min-poll
- condition: time
before: "23:54:00"
sequence: - service: rest_command.update_pvoutput
data: {}
- conditions:
- condition: trigger
id:- end-of-day
sequence:
- end-of-day
- service: rest_command.update_pvoutput_endofday
data: {}
mode: single
`
- condition: trigger
- condition: trigger
- conditions:
hoggy Is there a step by step on what to do somewhere, thought id have a look since I had a bit of time today but im getting completely lost with everything lol, ive gotten as far as adding addons and sorting integrations, no clue on the yaml and custom automations and whatnot yet.

Jellybaby you have the AIO don't you?
I'm not entirely sure it supports that yet using Givenergy Local plugin in HA.
I'd suggest you may be better off searching for "Speak to the Geek" Youtube videos on installing GivTCP as it walks you through step by step.
hoggy ah okie dokie, will hold off for a while 🙂
Jellybaby There’s two main ways of talking to the Givenergy inverters, Givenergy Local and GivTCP.
I followed the GivTCP route as that was what I found described on the givenergy wiki site, a link to Speak to the Geek’s video on how to setup GivTCP
On this post https://community.givenergy.cloud/d/3022-inverter-settings/5 I’ve shared a brief run through of how I got my inverters setup and managed in Home Assistant, the videos I used, the basic dashboard and my flux evening discharge script. Should get you started
Sending your PV data to pvoutput.org, you just copy the GivTCP curl script that hoggy referred to in https://github.com/sOckhamSter/PVOutput_for_GivTCP into configuration.yaml and add the two automation scripts (or add the merged one I shared above). You’ll need either the file editor integration or visual studio server add on installed to be able to edit configuration.yaml
geoffreycoan An alternative approach is to run the standalone version of PALM in the background. PALM started off several years ago as software that would upload usage and generation data to PVOutput and then grew to include the overnight SoC targeting that's now used in GivTCP.
Pop this in your configuration.yaml. Replace the ** with your inverter serial.
update_pvoutput:
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
payload: >-
d={{now().strftime("%Y%m%d")}} {#- date -#}
&t={{now().strftime("%H:%M")}} {#- time -#}
&v1={{(states('sensor.givtcp_**********_pv_energy_today_kwh') | float * 1000) | int }} {#- energy generation (Wh) -#}
&v2={{states('sensor.givtcp_**********_pv_power') }} {#- power generation (W) -#}
&v3={{(states('sensor.givtcp_**********_self_consumption_energy_today_kwh') | float * 1000) | int }} {#- energy consumption (Wh) -#}
&v4={{states('sensor.givtcp_**********_self_consumption_power')|float|round(0)}} {#- power consumption (W) -#}
&v5={{states('sensor.openweathermap_temperature')|float|round(1)}} {#- ambient temperature -#}
&v6={{states('sensor.givtcp_**********_grid_voltage') }}" {#- voltage -#}`
Add two rows to your secrets.yaml file, replacing the * with your pvoutput API details.
pvoutput_api_key: *********
pvoutput_system_id: *********
Create an automation to call the output. Will update PVoutput every 15 minutes whilst the sun is up.
alias: "Script: Update pvoutput"
description: ""
trigger:
- platform: time_pattern
minutes: /15
condition:
- condition: state
entity_id: sun.sun
state: above_horizon
action:
- service: rest_command.update_pvoutput
data: {}
mode: singlestevelewis Thanks Steve, I didn’t know that palm is another option for sending data to PV output.org
And for others here’s the GitHub https://github.com/salewis38/palm
KamenMacKay Haha there are plenty of us geeks around doing stuff like this!