{"id":1,"date":"2021-05-01T13:43:53","date_gmt":"2021-05-01T13:43:53","guid":{"rendered":"https:\/\/www.bjorn-meijer.nl\/?p=1"},"modified":"2023-02-15T05:14:17","modified_gmt":"2023-02-15T05:14:17","slug":"realtime-uitlezen-apsystems-in-domoticz","status":"publish","type":"post","link":"https:\/\/www.bjorn-meijer.nl\/en\/2021\/05\/01\/realtime-readout-apsystems-in-domoticz\/","title":{"rendered":"Real-time readout APSystems in Domoticz"},"content":{"rendered":"<p>We have recently become proud owners of solar panels. Because energy consumption has already been tracked in <a href=\"https:\/\/www.domoticz.com\" target=\"_blank\" rel=\"noreferrer noopener\">domoticz<\/a> and am not in favor of different portals\/apps to keep track of everything, I also wanted to have the yield of the solar panels displayed in <a href=\"https:\/\/domoticz.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">domoticz<\/a>. <\/p>\n\n\n\n<p>After the supplier had mounted all the panels on the roof and the system was running, I asked if the ECU-R could also be read via <a href=\"https:\/\/domoticz.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">domoticz<\/a>. Unfortunately, this turned out to be shielded. But there was an app (EMA App) and a <a href=\"https:\/\/apsystemsema.com\/ema\/index.action\" target=\"_blank\" rel=\"noreferrer noopener\">web portal<\/a> with which you could read the consumption. Both options resulted in a delay of approximately five minutes. There was also the ECUAPP. By clicking on the side of the router, it broadcasts a WiFi signal for an hour. By connecting your phone\/tablet to this WiFi hotspot, you can read the real-time values with the ECUAPP.<\/p>\n\n\n\n<p>on <a href=\"https:\/\/gathering.tweakers.net\/forum\/list_messages\/2032302\/0\" target=\"_blank\" rel=\"noreferrer noopener\">Tweakers.net<\/a> they would have also found out and a number of smart minds have already been busy reading a large part of the data via a Python script. It should be noted that this only works via <strong>WiFi<\/strong>.<\/p>\n\n\n\n<p>A number of Tweakers members use Home Assistant. So the plug-in needs to be (slightly) adjusted so that it can be used for Domoticz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-plug-in-installeren\">Install Plugin<\/h2>\n\n\n\n<p>In addition to the code below, you also have the <a href=\"https:\/\/www.bjorn-meijer.nl\/en\/kz90\/\">plug<\/a><a href=\"https:\/\/www.bjorn-meijer.nl\/en\/kz90\/\" target=\"_blank\" rel=\"noreferrer noopener\">-in<\/a> which can be downloaded from Github.<\/p>\n\n\n\n<p>To run the python scripts on the Raspberry Pi <a data-type=\"yada_wiki\" data-id=\"53\" href=\"https:\/\/www.bjorn-meijer.nl\/en\/wiki\/python3-x-install-on-raspberry-pi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Python 3.x<\/a> to be installed.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n#!\/usr\/bin\/env python3 from APSystemsECUR import APSystemsECUR import time import asyncio import urllib.request import urllib.parse import urllib from pprint import pprint ecu_ip = &quot; &quot; sleep = 300 url = &#039; :8080\/json.htm?&#039; semicolon = &#039;\\u003B&#039; loop = asyncio.get_event_loop() ecu = APSystemsECUR(ecu_ip) while True: try: data = loop.run_until_complete(ecu.async_query_ecu()) print(data) lifetime_energy = str(data.get(&#039;lifetime_energy &#039;)*1000) today_energy_kwh = str(data.get(&#039;today_energy&#039;)*1000) current_power = str(data.get(&#039;current_power&#039;)) print(&#039;current_power: &#039; + current_power) generated_energy = (current_power + semicolon + lifetime_energy ) print(&#039;output: &#039; + today_energy_kwh + &#039;;&#039; + current_power) #pwr = .format(today_energy_kwh, current_power) #print(&#039;PWR: &#039; + pwr) print(&#039;Today energy [kWh]: &#039; + today_energy_kwh) if (float (today_energy_kwh) &gt;= 0 or float(current_power) &gt;= 0): getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 1606, &#039;svalue&#039; : (generated_energy)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) print(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) getVars = {&#039;type &#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 1610, &#039;svalue&#039;: data.get(&#039;timestamp&#039;)} webUrl = urllib.request.urlopen(url + urllib .parse.urlencode(getVars)) #print(url + urllib.parse.urlencode(getVars)) #inverter values inverters = data.get(&#039;inverters&#039;) #count number of inverters Inverter_qty = len(data.get(&#039;inverters&#039;)) print(&#039;Inverter_cnt: &#039; + str(Inverter_qty)) # loop through all inverters and get the data for i in range(Inverter_qty): Inverter = list(inverters.keys())[i] print(&#039;InverterId: &#039; + Inverter ) InverterOnline = data[&#039;inverters&#039;][Inverter][&#039;online&#039;] print(&#039;Online: &#039; + str(InverterOnline)) InverterTemperature = data[&#039;inverters&#039;][Inverter][&#039;temperature&#039;] print(&#039;Temperature: &#039; + str(InverterTemperature)) nVoltage = len(data[&#039;inverters&#039;][Inverter][&#039;voltage&#039;]) nPower = len(data[&#039;inverters&#039;][Inverter][&#039;power&#039;]) for x in range( nPower): voltage = data[&#039;inverters&#039;][Inverter][&#039;voltage&#039;][x] power = data[&#039;inverters&#039;][Inverter][&#039;power&#039;][x] print(&#039;Power inverter &#039; + str( i + 1) + &#039; panel &#039; + str(x + 1) + &#039;: &#039; + str(power) + &#039; W&#039;) #upload values to Domoticz for inverter 1 if (i == 0) and (x == 0) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 1624, &#039;svalue&#039;: voltage} webUrl = urllib.request.urlopen(url + urllib. parse.urlencode(getVars)) getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 1609, &#039;svalue&#039; : InverterTemperature} webUrl = urllib.request. urlopen(url + urllib.parse.urlencode(getVars)) if (InverterOnline == True) and (voltage != 0) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039; : 1607, &#039;switchcmd&#039;: &#039;On&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) elif (InverterOnline == True) and (voltage == 0) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039;: 1607, &#039;switchcmd&#039;: &#039;Off&#039;, &#039;level&#039;: 0, &#039;passcode&#039; : &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) else : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039;: 1607, &#039;switchcmd&#039;: &#039;Off&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) #upload values to Domoticz for inverter 2 if (i == 1) and (x == 0) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 1614, &#039;svalue&#039; : InverterTemperature} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) if (InverterOnline == True) and (voltage != 0) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight &#039;, &#039;idx&#039;: 1611, &#039;switchcmd&#039;: &#039;On&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) elif ( InverterOnline == True) and (voltage == 0) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039;: 1611, &#039;switchcmd&#039;: &#039;Off&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) else : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039; idx&#039;: 1611, &#039;switchcmd&#039;: &#039;Off&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) #upload values to Domoticz for inverter 3 if (i == 2) and (x == 0) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 1615, &#039;svalue &#039;: InverterTemperature} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) if (InverterOnline == True) and (voltage != 0) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039; param&#039; : &#039;switchlight&#039;, &#039;idx&#039;: 1612, &#039;switchcmd&#039;: &#039;On&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode( getVars)) elif (InverterOnline == True) and (voltage == 0) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039; : 1612, &#039;switchcmd&#039; : &#039;Off&#039; , &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) else : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039;: 1612, &#039;switchcmd&#039;: &#039;Off&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) #upload values to Domoticz for inverter 4 if (i == 3) and (x == 0) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 1616, &#039;svalue&#039;: InverterTemperature} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) if (InverterOnline == True) and (voltage != 0) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039;: 1613, &#039;switchcmd&#039;: &#039;On&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib .parse.urlencode(getVars)) elif (InverterOnline == True) and (voltage == 0) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039; : 1613, &#039;switchcmd &#039;: &#039;Off&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars)) else : getVars = {&#039;type&#039; : &#039;command&#039; , &#039;param&#039; : &#039;switchlight&#039;, &#039;idx&#039;: 1613, &#039;switchcmd&#039;: &#039;Off&#039;, &#039;level&#039;: 0, &#039;passcode&#039;: &#039;&#039; } webUrl = urllib.request.urlopen(url + urllib.parse. urlencode(getVars)) #upload power values to Domoticz for inverter 1 if (i == 0) and (x == 0) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 1608, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 0 ) and (x == 1) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 1617, &#039;svalue&#039; : (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 0) and (x == 2) : getVars = {&#039;type&#039; : &#039;command&#039; , &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 198, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon ) + &#039;0&#039;) elif (i == 0) and (x == 3) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 199, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) #upload power values to Domoticz for inverter 2 if (i == 1) and (x == 0) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 1618, &#039;svalue&#039; : (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 1) and (x == 1) : getVars = {&#039;type&#039; : &#039;command &#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 1619, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + ( semicolon) + &#039;0&#039;) elif (i == 1) and (x == 2) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 202, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 1) and (x == 3) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 203, &#039;svalue&#039; : (power)} webUrl = urllib.request.urlopen( url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) #upload power values to Domoticz for inverter 3 if (i == 2) and (x == 0) : getVars = {&#039;type&#039; : &#039; command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 1620, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 2) and (x == 1) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx &#039;: 1621, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 2) and (x = = 2) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 206, &#039;svalue&#039; : (power)} webUrl = urllib.request.urlopen (url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 2) and (x == 3) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 207, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039; ) #upload power values to Domoticz for inverter 4 if (i == 3) and (x == 0) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039; idx&#039;: 1622, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 3) and (x == 1) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 1623, &#039;svalue&#039; : (power)} webUrl = urllib.request. urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) elif (i == 3) and (x == 2) : getVars = {&#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039;: 210, &#039;svalue&#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0 &#039;) elif (i == 3) and (x == 3) : getVars = { &#039;type&#039; : &#039;command&#039;, &#039;param&#039; : &#039;udevice&#039;, &#039;nvalue&#039; : 0, &#039;idx&#039; : 211, &#039;svalue &#039;: (power)} webUrl = urllib.request.urlopen(url + urllib.parse.urlencode(getVars) + (semicolon) + &#039;0&#039;) except Exception as err: print(f&quot;[ERROR]&quot;, {err} ) #print(f&quot;Sleeping for {sleep} sec&quot;) time.sleep(sleep)\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Place the plugin and above script in your Domoticz folder under scripts\/python\/ECU-R.<\/li>\n\n\n\n<li>Create a Dummy sensor in Domoticz and call it &#039;Virtual switches&#039; or another clear name.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Add dummy sensors in Domoticz<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"983\" height=\"255\" src=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Dummy-sensor.jpg\" alt=\"Add dummy sensor in Domoticz\" class=\"wp-image-46\" srcset=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Dummy-sensor.jpg 983w, https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Dummy-sensor-300x78.jpg 300w, https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Dummy-sensor-768x199.jpg 768w\" sizes=\"(max-width: 983px) 100vw, 983px\" \/><figcaption class=\"wp-element-caption\">Add dummy sensor in Domoticz<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a virtual sensor of the type &#039;Elektra (Current + counter)&#039;. Name the sensor &#039;Solar generation&#039;.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"428\" height=\"250\" src=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Opwekking-zonnepanelen.jpg\" alt=\"Create a virtual sensor for generating solar panels\" class=\"wp-image-45\" srcset=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Opwekking-zonnepanelen.jpg 428w, https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Opwekking-zonnepanelen-300x175.jpg 300w\" sizes=\"(max-width: 428px) 100vw, 428px\" \/><figcaption class=\"wp-element-caption\">Create a virtual sensor for generating solar panels<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a virtual sensor of type &#039;Switch&#039; and name it Inverter [<em>number inverter<\/em>].<\/li>\n\n\n\n<li>Repeat this step for the number of microinverters you have.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"426\" height=\"249\" src=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Lichtschakelaar.jpg\" alt=\"Create virtual sensor for APSystem inverter\" class=\"wp-image-47\" srcset=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Lichtschakelaar.jpg 426w, https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Lichtschakelaar-300x175.jpg 300w\" sizes=\"(max-width: 426px) 100vw, 426px\" \/><figcaption class=\"wp-element-caption\">Create virtual sensor for APSystems inverter<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a virtual sensor of the type &#039;Consumption (Electric)&#039; and name it Inverter [<em>number inverter<\/em>] \u2013 Power [<em>panel number<\/em>].<\/li>\n\n\n\n<li>Repeat this step for the number of panels per microinverter.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"427\" height=\"251\" src=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Power-zonnepaneel.jpg\" alt=\"Virtual sensor for generated power inverter\" class=\"wp-image-48\" srcset=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Power-zonnepaneel.jpg 427w, https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Power-zonnepaneel-300x176.jpg 300w\" sizes=\"(max-width: 427px) 100vw, 427px\" \/><figcaption class=\"wp-element-caption\">Virtual sensor for generated power inverter<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a virtual sensor of type &#039;Temperature&#039; and name it Inverter [<em>number inverter<\/em>] \u2013 Temperature.<\/li>\n\n\n\n<li>Repeat this step for the number of microinverters you have.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"426\" height=\"252\" src=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Temperatuur-inverter.jpg\" alt=\"Virtual sensor for temperature display inverter\" class=\"wp-image-49\" srcset=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Temperatuur-inverter.jpg 426w, https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Temperatuur-inverter-300x177.jpg 300w\" sizes=\"(max-width: 426px) 100vw, 426px\" \/><figcaption class=\"wp-element-caption\">Virtual sensor for temperature display inverter<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a virtual sensor of type &#039;Text&#039; and name it Timestamp.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"428\" height=\"249\" src=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Timestamp-zonnepanelen.jpg\" alt=\"\" class=\"wp-image-50\" srcset=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Timestamp-zonnepanelen.jpg 428w, https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Timestamp-zonnepanelen-300x175.jpg 300w\" sizes=\"(max-width: 428px) 100vw, 428px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to &#039;Devices&#039; and adjust the idx&#039;s in the above script to the idx of the virtual sensors you just created and save the script.<\/li>\n\n\n\n<li>Start the script with the command <code>python3 \/scripts\/python\/ECU-R\/ECU-R.py<\/code>.<\/li>\n\n\n\n<li>To have the script start automatically after every reboot of the Raspberry Pi, add the following line in <a data-type=\"yada_wiki\" data-id=\"57\" href=\"https:\/\/www.bjorn-meijer.nl\/en\/wiki\/crontab-add-in-raspberry-pi\/\" target=\"_blank\" rel=\"noreferrer noopener\">crontab<\/a>: <code>@reboot python3 \/home\/pi\/domoticz\/scripts\/python\/ECU-R\/ECU-R.py<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-update-25-01-2023\">Update 25-01-2023<\/h2>\n\n\n\n<p>User Sebastiaan Terlouw has slightly modified the script so that it is now also compatible with the DS3 controller.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Update 2\/15\/2023<\/h2>\n\n\n\n<p>Sebastiaan Terlouw has added the mains voltage to the script.<\/p>","protected":false},"excerpt":{"rendered":"<p>We have recently become proud owners of solar panels. Because the energy consumption has already been tracked in Domoticz and I am not in favor\u2026 <a class=\"read-more\" href=\"https:\/\/www.bjorn-meijer.nl\/en\/2021\/05\/01\/realtime-readout-apsystems-in-domoticz\/\">Continue reading<\/a><\/p>","protected":false},"author":1,"featured_media":68,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[12,13,16,15,14],"class_list":["post-1","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-domoticz","tag-apsystems","tag-ecu-r","tag-python","tag-realtime-waarden","tag-zonnepanelen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.11 (Yoast SEO v23.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Realtime uitlezen APSystems in Domoticz - Bj\u00f6rn Meijer<\/title>\n<meta name=\"description\" content=\"Houd de opbrengst, temperatuur en vermogen van zonnepanelen met micro-omvormers van APSysems &quot;realtime&quot; bij Domoticz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bjorn-meijer.nl\/en\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Realtime uitlezen APSystems in Domoticz\" \/>\n<meta property=\"og:description\" content=\"Sinds kort zijn wij trotse bezitters van zonnepanelen. Omdat het energieverbruik reeds werd bijgehouden in Domoticz en geen voorstander ben van\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bjorn-meijer.nl\/en\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/\" \/>\n<meta property=\"og:site_name\" content=\"Bj\u00f6rn Meijer\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-01T13:43:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-15T05:14:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png\" \/>\n\t<meta property=\"og:image:width\" content=\"300\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bj\u00f6rn Meijer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bj\u00f6rn Meijer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/\"},\"author\":{\"name\":\"Bj\u00f6rn Meijer\",\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/3621be5a6ce9a9884a7b8b200cd52615\"},\"headline\":\"Realtime uitlezen APSystems in Domoticz\",\"datePublished\":\"2021-05-01T13:43:53+00:00\",\"dateModified\":\"2023-02-15T05:14:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/\"},\"wordCount\":518,\"commentCount\":34,\"publisher\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/3621be5a6ce9a9884a7b8b200cd52615\"},\"image\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png\",\"keywords\":[\"APSystems\",\"ECU-R\",\"python\",\"realtime waarden\",\"zonnepanelen\"],\"articleSection\":[\"Domoticz\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/\",\"url\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/\",\"name\":\"Realtime uitlezen APSystems in Domoticz - Bj\u00f6rn Meijer\",\"isPartOf\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png\",\"datePublished\":\"2021-05-01T13:43:53+00:00\",\"dateModified\":\"2023-02-15T05:14:17+00:00\",\"description\":\"Houd de opbrengst, temperatuur en vermogen van zonnepanelen met micro-omvormers van APSysems \\\"realtime\\\" bij Domoticz.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#primaryimage\",\"url\":\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png\",\"contentUrl\":\"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png\",\"width\":300,\"height\":300,\"caption\":\"Domoticz\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.bjorn-meijer.nl\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Realtime uitlezen APSystems in Domoticz\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/#website\",\"url\":\"https:\/\/www.bjorn-meijer.nl\/de\/\",\"name\":\"Bj\u00f6rn Meijer\",\"description\":\"At My Playground\",\"publisher\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/3621be5a6ce9a9884a7b8b200cd52615\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.bjorn-meijer.nl\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/3621be5a6ce9a9884a7b8b200cd52615\",\"name\":\"Bj\u00f6rn Meijer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/i0.wp.com\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/11\/logo-orange.png?fit=165%2C165&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/11\/logo-orange.png?fit=165%2C165&ssl=1\",\"width\":165,\"height\":165,\"caption\":\"Bj\u00f6rn Meijer\"},\"logo\":{\"@id\":\"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/www.bjorn-meijer.nl\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Realtime uitlezen APSystems in Domoticz - Bj\u00f6rn Meijer","description":"Houd de opbrengst, temperatuur en vermogen van zonnepanelen met micro-omvormers van APSysems \"realtime\" bij Domoticz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bjorn-meijer.nl\/en\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/","og_locale":"en_US","og_type":"article","og_title":"Realtime uitlezen APSystems in Domoticz","og_description":"Sinds kort zijn wij trotse bezitters van zonnepanelen. Omdat het energieverbruik reeds werd bijgehouden in Domoticz en geen voorstander ben van","og_url":"https:\/\/www.bjorn-meijer.nl\/en\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/","og_site_name":"Bj\u00f6rn Meijer","article_published_time":"2021-05-01T13:43:53+00:00","article_modified_time":"2023-02-15T05:14:17+00:00","og_image":[{"width":300,"height":300,"url":"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png","type":"image\/png"}],"author":"Bj\u00f6rn Meijer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bj\u00f6rn Meijer","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#article","isPartOf":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/"},"author":{"name":"Bj\u00f6rn Meijer","@id":"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/3621be5a6ce9a9884a7b8b200cd52615"},"headline":"Realtime uitlezen APSystems in Domoticz","datePublished":"2021-05-01T13:43:53+00:00","dateModified":"2023-02-15T05:14:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/"},"wordCount":518,"commentCount":34,"publisher":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/3621be5a6ce9a9884a7b8b200cd52615"},"image":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png","keywords":["APSystems","ECU-R","python","realtime waarden","zonnepanelen"],"articleSection":["Domoticz"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/","url":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/","name":"Realtime uitlezen APSystems in Domoticz - Bj\u00f6rn Meijer","isPartOf":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#primaryimage"},"image":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png","datePublished":"2021-05-01T13:43:53+00:00","dateModified":"2023-02-15T05:14:17+00:00","description":"Houd de opbrengst, temperatuur en vermogen van zonnepanelen met micro-omvormers van APSysems \"realtime\" bij Domoticz.","breadcrumb":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#primaryimage","url":"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png","contentUrl":"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png","width":300,"height":300,"caption":"Domoticz"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bjorn-meijer.nl\/de\/2021\/05\/01\/echtzeitauslesung-apsystems-in-domoticz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bjorn-meijer.nl\/de\/"},{"@type":"ListItem","position":2,"name":"Realtime uitlezen APSystems in Domoticz"}]},{"@type":"WebSite","@id":"https:\/\/www.bjorn-meijer.nl\/de\/#website","url":"https:\/\/www.bjorn-meijer.nl\/de\/","name":"Bj\u00f6rn Meijer","description":"At My Playground","publisher":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/3621be5a6ce9a9884a7b8b200cd52615"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bjorn-meijer.nl\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/3621be5a6ce9a9884a7b8b200cd52615","name":"Bj\u00f6rn Meijer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/image\/","url":"https:\/\/i0.wp.com\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/11\/logo-orange.png?fit=165%2C165&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/11\/logo-orange.png?fit=165%2C165&ssl=1","width":165,"height":165,"caption":"Bj\u00f6rn Meijer"},"logo":{"@id":"https:\/\/www.bjorn-meijer.nl\/de\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/www.bjorn-meijer.nl"]}]}},"jetpack_featured_media_url":"https:\/\/www.bjorn-meijer.nl\/wp-content\/uploads\/2021\/05\/Domoticz.png","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/posts\/1","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/comments?post=1"}],"version-history":[{"count":19,"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":2550,"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/posts\/1\/revisions\/2550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/media\/68"}],"wp:attachment":[{"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/media?parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/categories?post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bjorn-meijer.nl\/en\/wp-json\/wp\/v2\/tags?post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}