This is how I have, with some help from the community, started to integrate my Enphase PV system into openHAB. There are a few posts scattered around about accessing the JSON data on the Envoy directly and I liked the idea of getting the data from my LAN rather than via the Enphase website API. I also like the idea of refreshing the data every minute or so rather than the 15 minutes via the Enphase website.
Apart from an Enphase Envoy I have used the HTTP binding and the JsonPath transformation.
LAN pages that I have come across, (of course change to your Envoy IP)
http://192.168.1.216/production.json?details=1
http://192.168.1.216/api/v1/consumption
http://192.168.1.216/api/v1/production
http://192.168.1.216/production.json
Individual inverter data,
http://192.168.1.216/api/v1/production/inverters
User: envoy
Pass: 123456 (last 6 digits of the serial number)
I have used 2 of the links above,
Data Link:
http://192.168.1.216/production.json?details=1
1. Create HTTP thing
2. Create Channels
There is quite a lot of data available that can be added as separate channels under the areas of production, consumption & storage. Consumption of course requires your install to have the consumption CT’s installed, storage the same likely requires your install to have the Enphase storage installed.
The below is the data I have linked to Channels however there is more data and can be explored via loading the JSON data into a evaluator like this one, https://jsonpath.herokuapp.com
i. Select, Add Channel. Give it a name, most will be Number Channels, add the appropriate JSONPATH and Save.
ii. Under the New Channel,
- ‘Add Link to Item’
- ‘Create New Item’
- Profile, select ‘Default’
After a short time you should see your item populate with its data,
The ones I have used are below,
Production:
JSONPATH:$.production.[0].activeCount
JSONPATH:$.production.[1].whToday
JSONPATH:$.production.[1].whLifetime
JSONPATH:$.production.[1].whLastSevenDays
JSONPATH:$.production.[1].rmsCurrent
JSONPATH:$.production.[1].pwrFactor
JSONPATH:$.production.[1].lines.[0].wNow
JSONPATH:$.production.[1].lines.[1].wNow
JSONPATH:$.production.[1].lines.[2].wNow
JSONPATH:$.production.[1].lines.[0].rmsCurrent
JSONPATH:$.production.[1].lines.[1].rmsCurrent
JSONPATH:$.production.[1].lines.[2].rmsCurrent
JSONPATH:$.production.[1].lines.[0].rmsVoltage
JSONPATH:$.production.[1].lines.[1].rmsVoltage
JSONPATH:$.production.[1].lines.[2].rmsVoltage
Consumption:
JSONPATH:$.consumption.[0].wNow
JSONPATH:$.consumption.[0].whToday
JSONPATH:$.consumption.[0].whLastSevenDays
JSONPATH:$.consumption.[0].rmsCurrent
JSONPATH:$.consumption.[0].lines.[0].wNow
JSONPATH:$.consumption.[0].lines.[1].wNow
JSONPATH:$.consumption.[0].lines.[2].wNow
JSONPATH:$.consumption.[0].lines.[0].rmsCurrent
JSONPATH:$.consumption.[0].lines.[1].rmsCurrent
JSONPATH:$.consumption.[0].lines.[2].rmsCurrent
JSONPATH:$.consumption.[0].lines.[0].rmsVoltage
JSONPATH:$.consumption.[0].lines.[1].rmsVoltage
JSONPATH:$.consumption.[0].lines.[2].rmsVoltage
Net Consumption:
JSONPATH:$.consumption.[1].wNow
JSONPATH:$.consumption.[1].rmsCurrent
Individual inverter data can also be collected from,
http://192.168.1.216/api/v1/production/inverters
User: envoy
Pass: 123456 (last 6 digits of the serial number)
1. Create HTTP thing
This URL requires authentication, click ‘Show Advanced’ and add the user/pass(last 6 digits of Envoy serial)
Select, ‘Digest Authentication’ and save.
Similar process for adding channels.
The channels available for each inverter are,
JSONPATH:$.[0]serialNumber
JSONPATH:$.[0]lastReportWatts
JSONPATH:$.[0]maxReportWatts
JSONPATH:$.[0]lastReportDate
The above should help getting your Enphase data into Items within your openHAB, I tried a few different refresh times and settled on 70 seconds. In my testing it all seemed work fine with a refresh time of 5 seconds but seemed a bit unnecessary.
After modifying a chart from the openHAB demo site I have made the below that shows some data in a useful format,
config:
chartType: day
label: Solar Chart
sidebar: true
order: ""
slots:
grid:
- component: oh-chart-grid
config:
bottom: 80
top: "120"
xAxis:
- component: oh-category-axis
config:
gridIndex: 0
categoryType: day
weekdayFormat: default
monthFormat: default
axisPointer:
snap: true
handle:
show: true
backgroundColor: blue
label:
show: true
backgroundColor: "#2196f3"
yAxis:
- component: oh-value-axis
config:
gridIndex: 0
name: W
series:
- component: oh-aggregate-series
config:
name: Consumption (Day Before)
gridIndex: 0
xAxisIndex: 0
yAxisIndex: 0
type: line
color: red
item: EnphaseDetailed_EnphaseConsumptionwNow
dimension1: hour
offsetAmount: 1
offsetUnit: day
smooth: true
lineStyle:
type: dotted
opacity: 0.8
- component: oh-aggregate-series
config:
name: Consumption (Current)
gridIndex: 0
xAxisIndex: 0
yAxisIndex: 0
type: line
color: red
item: EnphaseDetailed_EnphaseConsumptionwNow
dimension1: hour
smooth: true
lineStyle:
width: 3
areaStyle:
opacity: 0.2
markLine:
data:
- type: average
markPoint:
data:
- type: min
name: min
- type: max
name: max
- component: oh-aggregate-series
config:
name: Net Consumption
gridIndex: 0
xAxisIndex: 0
yAxisIndex: 0
type: bar
color: blue
item: EnphaseDetailed_EnphaseNetConsumptionwNow
dimension1: hour
- component: oh-aggregate-series
config:
gridIndex: 0
xAxisIndex: 0
yAxisIndex: 0
type: line
color: green
name: Production (Current)
item: EnphaseDetailed_EnphasewNow1
dimension1: hour
smooth: true
lineStyle:
width: 3
areaStyle:
opacity: 0.2
markLine:
data:
- type: average
markPoint:
data:
- type: min
name: min
- type: max
name: max
- component: oh-aggregate-series
config:
name: Production (Day before)
gridIndex: 0
xAxisIndex: 0
yAxisIndex: 0
type: line
color: green
item: EnphaseDetailed_EnphasewNow1
dimension1: hour
offsetAmount: 1
offsetUnit: day
smooth: true
lineStyle:
type: dotted
opacity: 0.8
tooltip:
- component: oh-chart-tooltip
config:
show: true
orient: vertical
confine: true
title:
- component: oh-chart-title
config:
show: true
subtext: Sampled every hour
text: Solar Chart
visualMap: []
legend:
- component: oh-chart-legend
config:
show: true
orient: horizontal
bottom: left
I have only installed about a third of my system and I am still looking for other ways to display the data in interesting ways and thinking up some rules I can put in place to use the solar production more intelligently.
If you have any ideas please post them.