If it helps, I’ve just helped integrate a GivEnergy battery system into openHAB (no solar PV though) via the cloud API. We used the HTTP Binding and JINJA Transformation Service, with the following text configs:
Things
Replace <YOUR-INVERTER-ID>
with the ID of your inverter, and <YOUR-API-KEY>
with your massive API key from your account security settings.
Thing http:url:givenergy-settings "GivEnergy Settings" [
baseURL = "https://api.givenergy.cloud/v1/inverter/<YOUR-INVERTER-ID>/settings",
headers="Authorization=Bearer <YOUR-API-KEY>", "Content-Type=application/json", "Accept=application/json",
refresh = "60",
delay = "1000",
ignoreSSLErrors = "true",
stateMethod = "POST",
commandMethod = "POST",
authMode = "BASIC"
]
{
Channels:
Type string : charge_start "Charge start" [
mode = "READWRITE",
stateExtension = "64/read",
commandExtension = "64/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type string : charge_end "Charge end" [
mode = "READWRITE",
stateExtension = "65/read",
commandExtension = "65/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type switch : charge_enable "Charge enable" [
mode = "READWRITE",
stateExtension = "66/read",
commandExtension = "66/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }",
onValue = "true",
offValue = "false"
]
Type string : discharge_start "Discharge start" [
mode = "READWRITE",
stateExtension = "53/read",
commandExtension = "53/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type string : discharge_end "Discharge end" [
mode = "READWRITE",
stateExtension = "54/read",
commandExtension = "54/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type switch : discharge_enable "Discharge enable" [
mode = "READWRITE",
stateExtension = "56/read",
commandExtension = "56/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }",
onValue = "true",
offValue = "false"
]
Type switch : charge_upper_limit_enable "Charge upper limit enable" [
mode = "READWRITE",
stateExtension = "17/read",
commandExtension = "17/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }",
onValue = "true",
offValue = "false"
]
Type switch : eco_mode_enable "Eco mode enable" [
mode = "READWRITE",
stateExtension = "24/read",
commandExtension = "24/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }",
onValue = "true",
offValue = "false"
]
Type dimmer : inverter_max_output_active_power_percent "Inverter Max Output Active Power Percent" [
mode = "READWRITE",
stateExtension = "47/read",
commandExtension = "47/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type dimmer : battery_reserve_percent_limit "Battery Reserve % Limit" [
mode = "READWRITE",
stateExtension = "71/read",
commandExtension = "71/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type number : battery_charge_power "Battery Charge Power" [
mode = "READWRITE",
stateExtension = "72/read",
commandExtension = "72/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type number : battery_discharge_power "Battery Discharge Power" [
mode = "READWRITE",
stateExtension = "73/read",
commandExtension = "73/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type dimmer : battery_cutoff_percent_limit "Battery Cutoff % Limit" [
mode = "READWRITE",
stateExtension = "75/read",
commandExtension = "75/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
Type dimmer : charge_upper_percent_limit "AC Charge Upper % Limit" [
mode = "READWRITE",
stateExtension = "77/read",
commandExtension = "77/write",
stateTransformation = "JSONPATH:$.data.value",
commandTransformation = "JINJA:{\"value\": {{value}} }"
]
}
Thing http:url:givenergy-system-data "GivEnergy System Data" [
baseURL = "https://api.givenergy.cloud/v1/inverter/<YOUR-INVERTER-ID>/system-data/latest",
headers="Authorization=Bearer <YOUR-API-KEY>", "Content-Type=application/json", "Accept=application/json",
refresh = "60",
delay = "1000",
ignoreSSLErrors = "true",
stateMethod = "GET",
authMode = "BASIC"
]
{
Channels:
Type number : grid_voltage "Grid voltage" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.grid.voltage"
]
Type number : grid_current "Grid current" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.grid.current"
]
Type number : grid_power "Grid power" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.grid.power"
]
Type number : grid_frequency "Grid frequency" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.grid.frequency"
]
Type dimmer : battery_percent "Battery percent" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.battery.percent"
]
Type number : battery_power "Battery power" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.battery.power"
]
Type number : battery_temperature "Battery temperature" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.battery.temperature"
]
Type number : inverter_temperature "Inverter temperature" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.inverter.temperature"
]
Type number : inverter_power "Inverter power" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.inverter.power"
]
Type number : inverter_output_voltage "Inverter output voltage" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.inverter.output_voltage"
]
Type number : inverter_output_frequency "Inverter output frequency" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.inverter.output_frequency"
]
Type number : inverter_eps_power "Inverter eps power" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.inverter.eps_power"
]
Type number : consumption "Consumption" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.consumption"
]
}
Thing http:url:givenergy-meter-readings "GivEnergy Meter Readings" [
baseURL = "https://api.givenergy.cloud/v1/inverter/<YOUR-INVERTER-ID>/meter-data/latest",
headers="Authorization=Bearer <YOUR-API-KEY>", "Content-Type=application/json", "Accept=application/json",
refresh = "60",
delay = "1000",
ignoreSSLErrors = "true",
stateMethod = "GET",
authMode = "BASIC"
]
{
Channels:
Type number : today_solar "Today solar" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.today.solar"
]
Type number : today_grid_import "Today grid import" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.today.grid.import"
]
Type number : today_grid_export "Today grid export" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.today.grid.export"
]
Type number : today_battery_charge "Today battery charge" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.today.battery.charge"
]
Type number : today_battery_discharge "Today battery discharge" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.today.battery.discharge"
]
Type number : today_consumption "Today consumption" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.today.consumption"
]
Type number : total_solar "Total solar" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.total.solar"
]
Type number : total_grid_import "Total grid import" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.total.grid.import"
]
Type number : total_grid_export "Total grid export" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.total.grid.export"
]
Type number : total_battery_charge "Total battery charge" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.total.battery.charge"
]
Type number : total_battery_discharge "Total battery discharge" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.total.battery.discharge"
]
Type number : total_consumption "Total consumption" [
mode = "READONLY",
stateTransformation = "JSONPATH:$.data.total.consumption"
]
}
Items
/*
EQUIPMENT
*/
Group gGivEnergy "GivEnergy" (gIndoor) ["Equipment"]
Group gGivEnergySettings "GivEnergy Settings" (gGivEnergy) ["Equipment"]
Group gGivEnergyLatestData "GivEnergy Latest Data" (gGivEnergy) ["Equipment"]
Group gGivEnergyMeterReading"GivEnergy Meter Reading" (gGivEnergy) ["Equipment"]
/*
SETTINGS
*/
String strGivEnergy_Charge_Start "GivEnergy charge start" (gGivEnergySettings) ["Setpoint", "Timestamp"] {channel="http:url:givenergy-settings:charge_start"}
String strGivEnergy_Charge_End "GivEnergy charge end" (gGivEnergySettings) ["Setpoint", "Timestamp"] {channel="http:url:givenergy-settings:charge_end"}
Switch sGivEnergy_Charge_Enable "GivEnergy charge enable" (gGivEnergySettings) ["Setpoint", "Timestamp"] {channel="http:url:givenergy-settings:charge_enable"}
Switch sGivEnergy_Charge_Upper_Limit_Enable "GivEnergy charge upper limit enable" (gGivEnergySettings) ["Switch", "Battery"] {channel="http:url:givenergy-settings:charge_upper_limit_enable"}
Dimmer dGivEnergy_Charge_Upper_Percent_Limit "GivEnergy charge upper percent limit" (gGivEnergySettings) ["Setpoint"] {channel="http:url:givenergy-settings:charge_upper_percent_limit"}
Switch sGivEnergy_Eco_Mode_Enable "GivEnergy eco mode enable" (gGivEnergySettings) ["Switch", "Battery"] {channel="http:url:givenergy-settings:eco_mode_enable"}
Number nGivEnergy_Battery_Charge_Power "GiveEnergy battery charge power" (gGivEnergySettings) ["Measurement", "Power"] {channel="http:url:givenergy-settings:battery_charge_power"}
String strGivEnergy_Discharge_Start "GivEnergy discharge start" (gGivEnergySettings) ["Setpoint", "Timestamp"] {channel="http:url:givenergy-settings:discharge_start"}
String strGivEnergy_Discharge_End "GivEnergy discharge end" (gGivEnergySettings) ["Setpoint", "Timestamp"] {channel="http:url:givenergy-settings:discharge_end"}
Switch sGivEnergy_Discharge_Enable "GivEnergy discharge enable" (gGivEnergySettings) ["Switch", "Battery"] {channel="http:url:givenergy-settings:discharge_enable"}
Dimmer dGivEnergy_Cutoff_Percent_Limit "GivEnergy cutoff percent limit" (gGivEnergySettings) ["Setpoint"] {channel="http:url:givenergy-settings:battery_cutoff_percent_limit"}
Number nGivEnergy_Battery_Discharge_Power "GiveEnergy battery discharge power" (gGivEnergySettings) ["Measurement", "Power"] {channel="http:url:givenergy-settings:battery_discharge_power"}
Dimmer dGivEnergy_Inverter_Max_Ouput_Active_Power_Percent "GivEnergy Inverter Max Output Active Power Percent" (gGivEnergySettings) ["Setpoint"] {channel="http:url:givenergy-settings:inverter_max_output_active_power_percent"}
Dimmer dGivEnergy_Battery_Reserve_Percent_Limit "GivEnergy Battery Reserve % Limit" (gGivEnergySettings) ["Setpoint"] {channel="http:url:givenergy-settings:battery_reserve_percent_limit"}
/*
LATEST DATA
*/
Number nGivEnergy_Grid_Voltage "GiveEnergy grid voltage" (gGivEnergyLatestData) ["Measurement", "Voltage"] {channel="http:url:givenergy-system-data:grid_voltage"}
Number nGivEnergy_Grid_Current "GiveEnergy grid current" (gGivEnergyLatestData) ["Measurement", "Current"] {channel="http:url:givenergy-system-data:grid_current"}
Number nGivEnergy_Grid_Power "GiveEnergy grid power" (gGivEnergyLatestData) ["Measurement", "Power"] {channel="http:url:givenergy-system-data:grid_power"}
Number nGivEnergy_Grid_Frequency "GiveEnergy grid frequency" (gGivEnergyLatestData) ["Measurement", "Frequency"] {channel="http:url:givenergy-system-data:grid_frequency"}
Dimmer nGivEnergy_Battery_Percent "GiveEnergy battery percent" (gGivEnergyLatestData) ["Measurement", "Charge"] {channel="http:url:givenergy-system-data:battery_percent"}
Number nGivEnergy_Battery_Power "GiveEnergy battery power" (gGivEnergyLatestData) ["Measurement", "Power"] {channel="http:url:givenergy-system-data:battery_power"}
Number nGivEnergy_Battery_Temperature "GiveEnergy battery temperature" (gGivEnergyLatestData) ["Measurement", "Temperature"] {channel="http:url:givenergy-system-data:battery_temperature"}
Number nGivEnergy_Inverter_Temperature "GiveEnergy inverter temperature" (gGivEnergyLatestData) ["Measurement", "Temperature"] {channel="http:url:givenergy-system-data:inverter_temperature"}
Number nGivEnergy_Inverter_Power "GiveEnergy inverter power" (gGivEnergyLatestData) ["Measurement", "Power"] {channel="http:url:givenergy-system-data:inverter_power"}
Number nGivEnergy_Inverter_Output_Voltage "GiveEnergy inverter output voltage" (gGivEnergyLatestData) ["Measurement", "Voltage"] {channel="http:url:givenergy-system-data:inverter_output_voltage"}
Number nGivEnergy_Inverter_Output_Frequency "GiveEnergy inverter output frequency" (gGivEnergyLatestData) ["Measurement", "Frequency"] {channel="http:url:givenergy-system-data:inverter_output_frequency"}
Number nGivEnergy_Inverter_EPS_Power "GiveEnergy inverter EPS Power" (gGivEnergyLatestData) ["Measurement", "Power"] {channel="http:url:givenergy-system-data:inverter_eps_power"}
Number nGivEnergy_Consumption "GiveEnergy consumption" (gGivEnergyLatestData) ["Measurement", "Power"] {channel="http:url:givenergy-system-data:consumption"}
/*
METER DATA
*/
Number nGivEnergy_Today_Solar "GiveEnergy today solar" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:today_solar"}
Number nGivEnergy_Today_Grid_Import "GiveEnergy today grid import" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:today_grid_import"}
Number nGivEnergy_Today_Grid_Export "GiveEnergy today grid export" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:today_grid_export"}
Number nGivEnergy_Today_Battery_Charge "GiveEnergy today battery charge" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:today_battery_charge"}
Number nGivEnergy_Today_Battery_Discharge "GiveEnergy today battery discharge" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:today_battery_discharge"}
Number nGivEnergy_Today_Consumption "GiveEnergy today consumption" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:today_consumption"}
Number nGivEnergy_Total_Solar "GiveEnergy total solar" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:total_solar"}
Number nGivEnergy_Total_Grid_Import "GiveEnergy total grid import" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:total_grid_import"}
Number nGivEnergy_Total_Grid_Export "GiveEnergy total grid export" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:total_grid_export"}
Number nGivEnergy_Total_Battery_Charge "GiveEnergy total battery charge" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:total_battery_charge"}
Number nGivEnergy_Total_Battery_Discharge "GiveEnergy total battery discharge" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:total_battery_discharge"}
Number nGivEnergy_Total_Consumption "GiveEnergy total consumption" (gGivEnergyMeterReading) ["Measurement", "Energy"] {channel="http:url:givenergy-meter-readings:total_consumption"}
At some point I intend to be able to change the charge and discharge times from within openHAB, but haven’t investigated yet.
Do you fancy sharing how you set this up and configurations? We’d like to eventually move off the cloud API!