Ginlong, Omnik Solar, Solarman and Trannergy Inverters Topic is solved

Python and python framework

Moderator: leecollings

User avatar
Nateonas
Posts: 6
Joined: Wednesday 20 June 2018 20:46
Target OS: Raspberry Pi / ODroid
Domoticz version: 2024.4
Location: NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Nateonas »

http://log.trannergy.com:10000/ is not working anymore from 10th of September 2021 8:30 CEST. They moved to the "3rd generation", what a joy!

Anybody any ideas on a new URL? Obviously the URL's in the below message don't seem to work.
Spoiler: show
Dear Customer,
Thank you for using Trannergy inverters.
In order to provide better service, we have upgraded Trannergy monitoring platform to 3rd generation.
New web portal would be:
https://business.trannergy.com (for installer/distributor)
https://smart.trannergy.com ( for residents)
New App (Search on Google Play or Apple Store):
Solarman Business (for installer/distributor)
Solarman Smart ( for residents)
This new generation platform will provide more functions and better performance. Data on current platform have been migrated to new platform.
1) If you are just using the 1st generation monitoring platform, web portal https://log.trannergy.com and/or APP Trannergy-log, please log in new platform. Current platform will stop service on 10th Sept. and forwards.
2) If you are just using the 2nd generation monitoring platform, web portal https://log1.trannergy.com and/or APP Trannergy home/professional, the data migration is planned to be completed by the end of this year.
3) If you had migrated your account from 1st generation monitoring platform to 2nd before, your account is subjected to the 1) item.
Provided you have any question with this new monitoring, you could email [email protected] or contact your installer/supplier or Trannergy.
There is also online engineer available for assistance on new web portal and APP.
Thanks for your acknowledge of above content and we believe a better monitoring service/experience is coming.

Trannergy Monitoring
Toulon7559
Posts: 843
Joined: Sunday 23 February 2014 17:56
Target OS: Raspberry Pi / ODroid
Domoticz version: mixed
Location: Hengelo(Ov)/NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Toulon7559 »

What's wrong with https://smart.trannergy.com/ (for residents), which probably is applicable for you?
When calling that url, I get a meaningful response-window, although (without login-codes) obviously not able to proceed further than that first window.

Based on my experience with Ginlong/Solis in 2019 transferring from 1.0 to 2.0, the change-over to another monitoring platform can be an effort with some try&error ......
You can find related experiences earlier in this thread.
Spoiler: show
Dear Customers,

In order to provide better service, we will start to switch Platform 1.0 (http://www.ginlongmonitoring.com) to Platform 2.0 (https://m.ginlong.com)from 12:00 PM (UTC+8) , 27th March, 2019.
Please notice that hybrid inverters do NOT work on Platform 1.0, please visit Platform 2.0 to monitor hybrid inverters.

We will stop the operation of Platform 1.0 from 12:00 PM (UTC+8), 27th March, 2019. Account registration will be closed on Platform 1.0.
Platform 1.0 will be officially closed from 12:00 AM (UTC+8), 27th April, 2019.

Meanwhile, we are transferring data from Platform 1.0 to Platform 2.0. Users who registered before 12:00 AM (UTC+8), 25th March, 2019, can login Platform 2.0 directly. Users who registered between 12:00 AM (UTC+8), 25th March and 12:00 PM (UTC+8), 27th March, 2019, can login Platform 2.0 after 12:00 AM (UTC+8), 28th March, 2019.

Two ways to login Platform 2.0 for the first time
1) Login Platform 1.0 first, and the system will provide your account information for Platform 2.0. Then click Login button and you could directly login Platform 2.0.
2) Visit Platform 2.0 first, and click Platform 2.0 login guide on top left corner. In the popup window, input your account on Platform 1.0 to get the account information for Platform 2.0.
In the popup window, you could click download button to get the more guide information: Platform 2.0 Login Guide.pdf

If you meet any problem during the process, please contact customer services. E-mail address: [email protected]

Sorry for the inconvenience, and thank you for your cooperation.
We look forward to meeting you on Platform 2.0.
27th March, 2019
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
User avatar
Nateonas
Posts: 6
Joined: Wednesday 20 June 2018 20:46
Target OS: Raspberry Pi / ODroid
Domoticz version: 2024.4
Location: NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Nateonas »

Thanks for the reply! I'm a novice user that unfortunately does not speak any Python or JSON.

I was using the scripts at the beginning of this thread, which worked beautifully until this platform-upgrade. It gives the below output if I change the baseURL to:
http://smart.trannergy.com/

if I try
http://smart.trannergy.com:10000/
it takes longer, but also outputs a similar error.

What should I do to make this working again?


stationid.py
Spoiler: show
#!/usr/bin/python

import urllib, urllib2, hashlib
from xml.etree import ElementTree as ET


#config
username = '<user>' #your portal username
password = '<password>' #your portal password
baseURL = 'http://smart.trannergy.com/' #base url


# Working base urls:
# http://www.ginlongmonitoring.com:10000/
# http://www.omnikportal.com:10000/
# http://log.trannergy.com:10000/
# http://www.solarmanpv.com:10000/


m = hashlib.md5()
m.update(password)

#building url
requestURL = baseURL+'/serverapi/?method=Login&username='+username+'&password='+m.hexdigest()+'&key=apitest&client=iPhone'

#login call
root = ET.parse(urllib.urlopen(requestURL)).getroot()
token = root.find('token').text

print 'Logged In: '+username

#info url
infoURL = baseURL+'/serverapi/?method=Powerstationslist&username='+username+'&token='+token+'&key=apitest'
print 'Getting station id(s)... '

#login call
infoRoot = ET.parse(urllib.urlopen(infoURL)).getroot()
for elem in infoRoot.findall('power'):
print "StationID: "+elem.find('stationID').text
OUTPUT
Spoiler: show
pi@dmt:~/domoticz/scripts $ sudo python stationid.py
Traceback (most recent call last):
File "stationid.py", line 28, in <module>
root = ET.parse(urllib.urlopen(requestURL)).getroot()
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1182, in parse
tree.parse(source, parser)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 656, in parse
parser.feed(data)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1659, in feed
self._raiseerror(v)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1523, in _raiseerror
raise err
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 26
Grover01
Posts: 9
Joined: Tuesday 13 March 2018 15:24
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Grover01 »

In followup of the Trannergy platform migration, as previously noticed by different users, I contacted the customer service as mentioned in the notification mail you should have received. Customer service indeed is confirming the implementation of a different API. While using the script as shared at the start of this post, it indeed will result in errors, and you would not get this fixed using the method initially used.

With a minimum amount of words, the customer services created an appID and appSercret which should make it possible to talk to the new API. Additionally they also shared a manual with limited but useful information on how to talk to the API.
With my 20 years rusty knowledge of programming, I started as a complete new-be in Python to see if I could get this working.....and got it fixed.

Steps to get this implemented:
1) Contact customer support ([email protected]) and ask them to create an AppID and AppSecret connected to your loginname for your current account. And yes, this customer service is also for Trannergy.
2) Easiest way forward is to make a backup copy of your current, in this case, trannergy.py file
3) Copy & paste below code in the existing .py file
4) Adjust the #Trannergy account detail section to your need
5) Adjust the #Domoticz settings. You can copy them from your previous configuration
6) Test the script first
7) When successful, remove the # in front of the before last line

Happy coding :P

Note: Code is using Python 3, and you need the libs as mentioned at the top of the script.

Code: Select all

#!/usr/bin/env python3

import http.client, urllib.request, json, hashlib
from datetime import datetime

#Trannergy account details
apiSite   = "api.solarmanpv.com"
appID     = ""		#Change to your own appID, to be provided from Trannergy/Solarman
appSecret = ""		#Change to your own appSecret, to be provided from Trannergy/Solarman
email     = ""		#Change to your own account name/mail address
password  = b""		#Change password to your own, maintain the b in front of the password as password need to be binary

conn      = http.client.HTTPSConnection(apiSite)
password = hashlib.sha256(password).hexdigest()

#domoticz settings
domoticz_host           = "" #ip adress of the domoticz host
domoticz_port           = "8080"
domoticz_url            = "json.htm"
domoticz_ActualPower    = "" #idx of new device

#Request access token, manaul chapter/routine 2.1
payload = json.dumps({
  "appSecret": appSecret,
  "email": email,
  "password": password
})
headers = {
  'Content-Type': 'application/json'
}
conn.request("POST", "/account/v1.0/token?appId="+appID+"&language=en", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())
accesstoken = data['access_token']
print("Accesstoken :" +accesstoken)

#Request current power + lastupdate time + stationID, manual chapter/routine 4.4
payload = json.dumps({
  "page": 1,
  "size": 20
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'bearer '+accesstoken
}
conn.request("POST", "/station/v1.0/list?language=en", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())
stationID = str(data['stationList'][0]['id'])
currentpower = str(data['stationList'][0]['generationPower'])
lastupdatetime = int(data['stationList'][0]['lastUpdateTime'])
lastupdatetime = str(datetime.fromtimestamp(lastupdatetime))
print("Current Power :"+currentpower+"W")
print("Last update time :"+lastupdatetime)
print("StationID :"+stationID)

#Request deviceID + deviceSN, manual chapter/routine 4.2
payload = json.dumps({
  "deviceType": "INVERTER",
  "page": 1,
  "size": 10,
  "stationId": stationID
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'bearer '+accesstoken
}
conn.request("POST", "/station/v1.0/device?language=en", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())
deviceID = str(data['deviceListItems'][0]['deviceId'])
deviceSN = str(data['deviceListItems'][0]['deviceSn'])
print('Device serial : '+deviceSN)
print('Device ID : '+deviceID)

#Total generated power, manual chapter/routine 3.3
payload = json.dumps({
  "deviceSn": deviceSN,
  "deviceId": deviceID
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'bearer '+accesstoken
}
conn.request("POST", "/device/v1.0/currentData?language=en", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())
multiply='1000.0'
totalgenpower = float(data['dataList'][16]['value']) * float(multiply)
totalgenpower = str(totalgenpower)
print("Total generated power: " +totalgenpower+"W")

#uploading values to domoticz
url = ("http://" + domoticz_host + ":" + domoticz_port + "/" + domoticz_url+ "?type=command&param=udevice&idx=" + domoticz_ActualPower+ "&nvalue=0&svalue=" + currentpower+ ";" + totalgenpower)
#urllib.request.urlopen(url)
print(url)
DoMoAD
Posts: 13
Joined: Friday 11 May 2018 14:24
Target OS: Raspberry Pi / ODroid
Domoticz version: BETA
Location: Netherlands
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by DoMoAD »

Grover01 wrote: Thursday 14 October 2021 17:31 ...

Steps to get this implemented:
..

Happy coding :P

Note: Code is using Python 3, and you need the libs as mentioned at the top of the script.
I've requested the new api detail and changed the code. When i test the code i get the neaded data. Only problem i have is that the new api gives me rounded numbers for the generated energy. In my dealy report i see 1kWh bars every hour. is this normal behavior? I've looked through the code but other than the multiply by 1000 (that is needed to get the watts) i can't find any errors.
Grover01
Posts: 9
Joined: Tuesday 13 March 2018 15:24
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Grover01 »

Have you logged in to the trannergy webportal to check if you see similar behavior?
DoMoAD
Posts: 13
Joined: Friday 11 May 2018 14:24
Target OS: Raspberry Pi / ODroid
Domoticz version: BETA
Location: Netherlands
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by DoMoAD »

Grover01 wrote: Saturday 20 November 2021 22:18 Have you logged in to the trannergy webportal to check if you see similar behavior?
I use and checked de solarman portal. I've got nice none rounded values in de portal.

Found it: in the script you take value 16 out off the array. I've changed it to 13. Now i get a number that has a decimal point and i recognize the value as my total produced power.
PeJeWe
Posts: 56
Joined: Monday 28 November 2016 20:52
Target OS: Raspberry Pi / ODroid
Domoticz version: Latest
Location: Netherlands
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by PeJeWe »

Has anyone found out how to use the dongle Ginlong/Solis inverter equipped with a WIFI stick.
To use the "remote server B" option to send the data to domoticz?
I have tried several options that have in the end failed.
Toulon7559
Posts: 843
Joined: Sunday 23 February 2014 17:56
Target OS: Raspberry Pi / ODroid
Domoticz version: mixed
Location: Hengelo(Ov)/NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Toulon7559 »

Indeed, application of the Server_B interface for a quick&direct connection to Domoticz would be nice,
but have never/nowhere seen a working implementation and description how to realise that complete functional chain .....
Last edited by Toulon7559 on Wednesday 05 October 2022 14:57, edited 1 time in total.
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
PeJeWe
Posts: 56
Joined: Monday 28 November 2016 20:52
Target OS: Raspberry Pi / ODroid
Domoticz version: Latest
Location: Netherlands
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by PeJeWe »

Is there a way to adapt the python script from the "Omnik inverter plugin" to read also my Solis logger
This is what i get from my status page on the data logger in my Solis inverter.

Code: Select all

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0031)http://Inverter-IP/status.html -->
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
.in_body
{
	margin-top:0px;
	margin-left:0px;
	margin-right:0px;
	margin-bottom:0px;
	background-color:transparent;
}
.div_c
{
	margin-left:50px;
	margin-right:50px;
	margin-top:50px;
	margin-bottom:50px;
}
.cu
{
	cursor:pointer;
}
.b
{
	font-weight:bold;
}
.lab_5
{
	font-size:16px;
	color:#666666;
	margin-left:-20px;
}
.lab_l2
{
	float:left;
	width:32%;
	color:#666666;
	margin-bottom:-2px;
	font-size:14px;
}
.lab_r2
{
	float:left;
	width:68%;
	color:#666666;
	text-align:right;
	font-size:14px;
}
.cl
{
	clear:left;
}
.line
{
	height:1px;
	background-color:#666666;
	width:100%;
	margin-top:5px;
	margin-bottom:5px;
}
.sp_5
{
	height:5px;
	width:500px;
}
.sp_20
{
	height:20px;
	width:500px;
}
.label
{
	float:left;
	width:50%;
	color:#666666;
	margin-bottom:-2px;
	font-size:14px;
}
.lab_r
{
	float:left;
	width:50%;
	color:#666666;
	text-align:right;
	font-size:14px;
}
.lab_l
{
	float:left;
	width:40%;
	color:#666666;
	margin-bottom:-2px;
	margin-left:10%;
	font-size:14px;
}
.line_l
{
	height:1px;
	background-color:#666666;
	width:450px;
	margin-top:5px;
	margin-bottom:5px;
	margin-left:50px;
}
.sub
{
    display:inline-block;
    width:16px;
    text-align:center;
}
</style>
<script type="text/javascript">
var height=0;function fileText(id,value){if(document.getElementById(id)){document.getElementById(id).innerHTML=value}}function changeFont(){reCon("main_div").style.fontFamily=window.parent.reFont()}function child_getH(){var nh=document.body.offsetHeight+100;if(nh<500||nh==null){nh=500}if(height!=nh){height=nh;window.parent.child_height(height)}}function reCon(id){return document.getElementById(id)}function ready(){try{window.parent.show_ifr()}catch(e){}child_getH()}function show(v){var c=document.getElementById(v);if(c!=null){c.style.display=""}}function hide(v){var c=document.getElementById(v);if(c!=null){c.style.display="none"}};
</script>
<script type="text/javascript">
var webdata_sn = "100204********* ";
var webdata_msvn = "004B";
var webdata_ssvn = "0030";
var webdata_pv_type = "0204";
var webdata_rate_p = "";
var webdata_now_p = "20";
var webdata_today_e = "13.10";
var webdata_total_e = "372.0";
var webdata_alarm = "";
var webdata_utime = "0";
var cover_mid = "404058****";
var cover_ver = "MW_08_512_0501_1.82";
var cover_wmode = "STA";
var cover_ap_ssid = "AP_404******";
var cover_ap_ip = "10.10.100.254";
var cover_ap_mac = "34EAE734****";
var cover_sta_ssid = "*********";
var cover_sta_rssi = "74%";
var cover_sta_ip = "192.168.****";
var cover_sta_mac = "34EAE734****";
var status_a = "1";
var status_b = "0";
var status_c = "0";

function initPageText(){var list=window.parent.reList("status");fileText("st1",list["t1"]);fileText("st2",list["t2"]);fileText("st3",list["t3"]);for(var i=1;i<=27;i++){if(i!=14){fileText("tx"+i,list[i])}}changeFont();child_getH()}function upfold(v){if(document.getElementById("up_"+v+"_div").style.display=="none"){show("up_"+v+"_div");reCon("p_"+v).innerHTML="-"}else{hide("up_"+v+"_div");reCon("p_"+v).innerHTML="+"}}function init_main_page(){var on=window.parent.reTip("1");var off=window.parent.reTip("2");document.getElementById("cover_mid").innerHTML=cover_mid;document.getElementById("cover_ver").innerHTML=cover_ver;document.getElementById("cover_ap_status").innerHTML=off;document.getElementById("cover_sta_status").innerHTML=off;if(cover_wmode!="STA"){document.getElementById("cover_ap_status").innerHTML=on;document.getElementById("cover_ap_ssid").innerHTML=cover_ap_ssid;document.getElementById("cover_ap_ip").innerHTML=cover_ap_ip;document.getElementById("cover_ap_mac").innerHTML=cover_ap_mac}if(cover_wmode!="AP"){document.getElementById("cover_sta_status").innerHTML=on;document.getElementById("cover_sta_ssid").innerHTML=cover_sta_ssid;document.getElementById("cover_sta_rssi").innerHTML=cover_sta_rssi;document.getElementById("cover_sta_ip").innerHTML=cover_sta_ip;document.getElementById("cover_sta_mac").innerHTML=cover_sta_mac}if(webdata_sn==""){webdata_sn="---"}fileText("webdata_sn",webdata_sn);if(webdata_msvn==""){webdata_msvn="---"}fileText("webdata_msvn",webdata_msvn);if(webdata_ssvn==""){webdata_ssvn="---"}fileText("webdata_ssvn",webdata_ssvn);if(webdata_pv_type==""){webdata_pv_type="---"}fileText("webdata_pv_type",webdata_pv_type);if(webdata_rate_p==""){webdata_rate_p="---"}fileText("webdata_rate_p",webdata_rate_p+" W");if(webdata_now_p==""||webdata_now_p==0){webdata_now_p="---"}fileText("webdata_now_p",webdata_now_p+" W");if(webdata_today_e==""){webdata_today_e="---"}fileText("webdata_today_e",webdata_today_e+" kWh");if(webdata_total_e==""){webdata_total_e="---"}fileText("webdata_total_e",webdata_total_e+" kWh");if(webdata_alarm==""){webdata_alarm="---"}fileText("webdata_alarm",webdata_alarm);if(webdata_utime==""){if(document.getElementById("webdata_sn").innerHTML=="---"){webdata_utime="---"}else{webdata_utime=value+window.parent.reTip("5")}}fileText("webdata_utime",webdata_utime);var st_en=window.parent.reTip("3");var st_dis=window.parent.reTip("4");var st_un=window.parent.reTip("41");if(status_a=="1"){document.getElementById("cover_remote_status_a").innerHTML=st_en}else{if(status_a=="0"){document.getElementById("cover_remote_status_a").innerHTML=st_dis}else{document.getElementById("cover_remote_status_a").innerHTML=st_un}}if(status_b=="1"){document.getElementById("cover_remote_status_b").innerHTML=st_en}else{if(status_b=="0"){document.getElementById("cover_remote_status_b").innerHTML=st_dis}else{document.getElementById("cover_remote_status_b").innerHTML=st_un}}};

</script>
</head>
<body class="in_body" onload="init_main_page();">
	<div class="div_c" id="main_div" style="font-family: Arial;">
        <div class="lab_5 cu b" onclick="upfold(1);child_getH();"><span class="sub" id="p_1">-</span><span id="st1" style="margin-left:3px">Inverter information</span></div>
        <div class="sp_5"></div>
        <div id="up_1_div">
        <div class="lab_l2" id="tx1">Inverter serial number</div>
                <div class="lab_r2" id="webdata_sn">100204********* </div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" id="tx2">Firmware version (main)</div>
                <div class="lab_r2" id="webdata_msvn">004B</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" id="tx3">Firmware version (slave)</div>
                <div class="lab_r2" id="webdata_ssvn">0030</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" id="tx4">Inverter model</div>
                <div class="lab_r2" id="webdata_pv_type">0204</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" id="tx5">Rated power</div>
                <div class="lab_r2" id="webdata_rate_p">--- W</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx6">Current power</div>
                <div class="lab_r2" id="webdata_now_p" style="color:#666666;font-weight:bold;">20 W</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx7">Yield today</div>
                <div class="lab_r2" id="webdata_today_e" style="color:#666666;font-weight:bold;">13.10 kWh</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx8">Total yield</div>
                <div class="lab_r2" id="webdata_total_e" style="color:#666666;font-weight:bold;">372.0 kWh</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx9">Alerts</div>
                <div class="lab_r2" id="webdata_alarm" style="color:#666666;font-weight:bold;">---</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx10">Last updated</div>
                <div class="lab_r2" id="webdata_utime" style="color:#666666;font-weight:bold;">0</div>
        <div class="cl"></div>
        <div class="line"></div>
        </div>
        <div class="sp_20"></div>
        <div class="lab_5 cu b" onclick="upfold(2);child_getH();"><span class="sub" id="p_2">+</span><span id="st2" style="margin-left:3px">Device information</span></div>
                <div class="sp_5"></div>
                <div id="up_2_div" style="display:none">
                <div class="label" id="tx11">Device serial number</div>
                <div class="lab_r" id="cover_mid">4*********</div>
                <div class="cl"></div>
                <div class="line"></div>
                <div class="label" id="tx12">Firmware version</div>
                <div class="lab_r" id="cover_ver">MW_08_512_0501_1.82</div>
                <div class="cl"></div>
                <div class="line"></div>
                <div class="label" id="tx13">Wireless AP mode</div>
                <div class="lab_r" id="cover_ap_status" style="color:#666666;font-weight:bold;">Disable</div>
                <div class="cl"></div>
                <div class="line"></div>
                <div class="lab_l" id="ap_ssid">SSID</div>
                <div class="lab_r" id="cover_ap_ssid"></div>
                <div class="cl"></div>
                <div class="line_l"></div>
                <div class="lab_l" id="tx15">IP address</div>
                <div class="lab_r" id="cover_ap_ip"></div>
                <div class="cl"></div>
                <div class="line_l"></div>
                <div class="lab_l" id="tx16">MAC address</div>
                <div class="lab_r" id="cover_ap_mac"></div>
                <div class="cl"></div>
                <div class="line_l"></div>
                <div class="label" id="tx17">Wireless STA mode</div>
                <div class="lab_r" id="cover_sta_status" style="color:#666666;font-weight:bold;">Enable</div>
                <div class="cl"></div>
                <div class="line"></div>
                <div class="lab_l" id="tx18">Router SSID</div>
                <div class="lab_r" id="cover_sta_ssid">********</div>
                <div class="cl"></div>
                <div class="line_l"></div>
                <div class="lab_l" id="tx19">Signal Quality</div>
                <div class="lab_r" id="cover_sta_rssi">74%</div>
                <div class="cl"></div>
                <div class="line_l"></div>
                <div class="lab_l" id="tx20">IP address</div>
                <div class="lab_r" id="cover_sta_ip">192.*.*.*</div>
                <div class="cl"></div>
                <div class="line_l"></div>
                <div class="lab_l" id="tx21">MAC address</div>
                <div class="lab_r" id="cover_sta_mac">34EAE*******</div>
                <div class="cl"></div>
                <div class="line_l"></div>
                </div>
                
                <div class="sp_20"></div>
                <div class="lab_5 cu b" onclick="upfold(3);child_getH();"><span class="sub" id="p_3">+</span><span id="st3" style="margin-left:3px">Remote server information</span></div>
                <div class="sp_5"></div>
                <div id="up_3_div" style="display:none">
                <div class="label" id="tx25">Remote server A</div>
                <div class="lab_r" id="cover_remote_status_a">Connected</div>
                <div class="cl"></div>
                <div class="line"></div>
                <div class="label" id="tx26">Remote server B</div>
                <div class="lab_r" id="cover_remote_status_b">Not connected</div>
                <div class="cl"></div>
                <div class="line"></div>
                </div>
    </div>
	<script type="text/javascript">
	    initPageText();
	    ready();
	</script>


</body></html>
some items are changed to a *
Storic
Posts: 5
Joined: Friday 26 April 2019 9:23
Target OS: Windows
Domoticz version:
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Storic »

My script have suddenly stopped working after using it for years.
Now I get a error of:

Code: Select all

...\scripts>python test.py
Traceback (most recent call last):
  File "test.py", line 41, in <module>
    resultJson = resultData.json()
  File "C:\Python27\lib\site-packages\requests\models.py", line 898, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Python27\lib\json\__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Have anyone else experiened any problems?
Toulon7559
Posts: 843
Joined: Sunday 23 February 2014 17:56
Target OS: Raspberry Pi / ODroid
Domoticz version: mixed
Location: Hengelo(Ov)/NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Toulon7559 »

Since 2019 reading the data for my Ginlong700-inverter from their Monitoring site, first through their portal1.0, later through their portal2.0 with extended variant of the new script mentioned in the first message of this thread.
.
The Ginlong inverter was feeding data to the Monitoring site from it's LAN-DLS through an ethernet-switch, further connecting to the main router through a HomePlug-duoset.
.
Flawless till 24th of July 2022, when the HomePlug-set decided that it was time to quit at end-of-life.
.
Replaced the 'dead' HomePlug by a 4 wire-UTP-cable, and that easily revived the connection to the Ginlong Monitoring Site:
again able to read the graphs and values by manual url-calling to the Solis Monitoring site, as before.
However, after this restart the online reading back by means of the unchanged python-script on the Raspberry is no longer possible:
must be some strange coincidence, because do not see a clear technical reason why read-back-by-script over the unchanged route & script suddenly does not operate anymore.
The Raspberry reading from the Ginlong Monitoring site communicates over 'ordinary' LAN-cables, and has no communication with the inverter, but with the router, as before.
Running that same script on another Raspberry yields exactly same errors, with the debugging complaining (for unknown reasons) about the scriptline

Code: Select all

 resultJson = resultData.json()
Recognize the error reports from this earlier message.
Some other scripts have the same error reported (apparently borrowing elements from each other).

Speculations from my side:
- used the opportunity to update Domoticz of the subject Raspberries.
Might it be that such update causes some havoc by incompatibilities for Python-issue version 2.7?
- time to clean-up/upgrade the script into a version applying Python3.7?
Hints appreciated how to upgrade which components of the script.
- Perhaps time to revisit the implementation of the interface for Server_B (with Server_B inside the same 'LAN-segment' as the Ginlong-inverter's DLS)?

Edited October05, 2022:
At 'failing' RPIs the script revived by 'fresh' re-install from backup, not from running RPI.
By coincidence apparently corrupted at the same time that the Homeplug failed (or collateral damage due to repair of other software at that day?)
Because script does not seem culprit, the script deleted from this message, and message shrinked.
Not yet flawless operation of server-readout is argument to further look to the direct interface between Inverter en local webserver.
Last edited by Toulon7559 on Wednesday 18 January 2023 11:17, edited 13 times in total.
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
Toulon7559
Posts: 843
Joined: Sunday 23 February 2014 17:56
Target OS: Raspberry Pi / ODroid
Domoticz version: mixed
Location: Hengelo(Ov)/NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Toulon7559 »

Application of functionality for Server_B requires that as sparring partner for the Solis-Inverter a computer is needed with a webserver.
As webserver/Server_B a setup with Raspberry & Buster & Domoticz probably is an easy candidate.
[Have rerun the previous experiments, but see no difference using UTP-cable instead of Homeplug]
[Running netcat according to this message just produces a totally blank log.txt => no operational interface]
Apparently a subtlety missing to link the Inverter and Server_B:
saw some remarks in other forums that 'some versions' firmware of the inverter not always active for this function, but how to check/remedy/upgrade?
Most elaborate description found for the SolarMAN-setup is in this pdf-file, but rather aged and not discussing Server_B, except perhaps a remark on page 36 with apparent meaning 'more of same as described for Server_A'.

Just some questions before starting effort, requesting some hints for realisation
(perhaps open door, but then consider it as request-for-confirmation, or rpi-webserver-for-dummies):
1. what is standard functionality for webserver available in Domoticz/Buster?
2. what/where settings in such configuration to modify to become compatible for data transfer from the inverter?
3. how to deal with incoming data as per selected protocol?

Addition October05,2022:
Small, italic text shifted from earlier message.
Discussion continued in this message
Last edited by Toulon7559 on Thursday 06 October 2022 14:44, edited 3 times in total.
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
DrWhoop
Posts: 1
Joined: Friday 02 September 2022 9:46
Target OS: Linux
Domoticz version:
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by DrWhoop »

Grover01 wrote: Thursday 14 October 2021 17:31 In followup of the Trannergy platform migration, as previously noticed by different users, I contacted the customer service as mentioned in the notification mail you should have received. Customer service indeed is confirming the implementation of a different API. While using the script as shared at the start of this post, it indeed will result in errors, and you would not get this fixed using the method initially used.

With a minimum amount of words, the customer services created an appID and appSercret which should make it possible to talk to the new API. Additionally they also shared a manual with limited but useful information on how to talk to the API.
With my 20 years rusty knowledge of programming, I started as a complete new-be in Python to see if I could get this working.....and got it fixed.

Steps to get this implemented:
1) Contact customer support ([email protected]) and ask them to create an AppID and AppSecret connected to your loginname for your current account. And yes, this customer service is also for Trannergy.
2) Easiest way forward is to make a backup copy of your current, in this case, trannergy.py file
3) Copy & paste below code in the existing .py file
4) Adjust the #Trannergy account detail section to your need
5) Adjust the #Domoticz settings. You can copy them from your previous configuration
6) Test the script first
7) When successful, remove the # in front of the before last line

Happy coding :P

Note: Code is using Python 3, and you need the libs as mentioned at the top of the script.

Code: Select all

#!/usr/bin/env python3

import http.client, urllib.request, json, hashlib
from datetime import datetime

#Trannergy account details
apiSite   = "api.solarmanpv.com"
appID     = ""		#Change to your own appID, to be provided from Trannergy/Solarman
appSecret = ""		#Change to your own appSecret, to be provided from Trannergy/Solarman
email     = ""		#Change to your own account name/mail address
password  = b""		#Change password to your own, maintain the b in front of the password as password need to be binary

conn      = http.client.HTTPSConnection(apiSite)
password = hashlib.sha256(password).hexdigest()

#domoticz settings
domoticz_host           = "" #ip adress of the domoticz host
domoticz_port           = "8080"
domoticz_url            = "json.htm"
domoticz_ActualPower    = "" #idx of new device

#Request access token, manaul chapter/routine 2.1
payload = json.dumps({
  "appSecret": appSecret,
  "email": email,
  "password": password
})
headers = {
  'Content-Type': 'application/json'
}
conn.request("POST", "/account/v1.0/token?appId="+appID+"&language=en", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())
accesstoken = data['access_token']
print("Accesstoken :" +accesstoken)

#Request current power + lastupdate time + stationID, manual chapter/routine 4.4
payload = json.dumps({
  "page": 1,
  "size": 20
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'bearer '+accesstoken
}
conn.request("POST", "/station/v1.0/list?language=en", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())
stationID = str(data['stationList'][0]['id'])
currentpower = str(data['stationList'][0]['generationPower'])
lastupdatetime = int(data['stationList'][0]['lastUpdateTime'])
lastupdatetime = str(datetime.fromtimestamp(lastupdatetime))
print("Current Power :"+currentpower+"W")
print("Last update time :"+lastupdatetime)
print("StationID :"+stationID)

#Request deviceID + deviceSN, manual chapter/routine 4.2
payload = json.dumps({
  "deviceType": "INVERTER",
  "page": 1,
  "size": 10,
  "stationId": stationID
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'bearer '+accesstoken
}
conn.request("POST", "/station/v1.0/device?language=en", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())
deviceID = str(data['deviceListItems'][0]['deviceId'])
deviceSN = str(data['deviceListItems'][0]['deviceSn'])
print('Device serial : '+deviceSN)
print('Device ID : '+deviceID)

#Total generated power, manual chapter/routine 3.3
payload = json.dumps({
  "deviceSn": deviceSN,
  "deviceId": deviceID
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'bearer '+accesstoken
}
conn.request("POST", "/device/v1.0/currentData?language=en", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())
multiply='1000.0'
totalgenpower = float(data['dataList'][16]['value']) * float(multiply)
totalgenpower = str(totalgenpower)
print("Total generated power: " +totalgenpower+"W")

#uploading values to domoticz
url = ("http://" + domoticz_host + ":" + domoticz_port + "/" + domoticz_url+ "?type=command&param=udevice&idx=" + domoticz_ActualPower+ "&nvalue=0&svalue=" + currentpower+ ";" + totalgenpower)
#urllib.request.urlopen(url)
print(url)

I tried this one and it does seem to work. However, every day I get a strange negative peak that messes up the entire total of the day. Since I'm new to Domoticz, I have no idea what might cause this preak. I know I can delete it from the "week-overview", but I can't prevent this peak from happening. Any suggestion is welcome!

Cheers!
Toulon7559
Posts: 843
Joined: Sunday 23 February 2014 17:56
Target OS: Raspberry Pi / ODroid
Domoticz version: mixed
Location: Hengelo(Ov)/NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Toulon7559 »

Subject: Direct reading from SOLIS4GMini700

Still (unsuccesfully) trying direct reading the data for my Ginlong_Solis700-4G inverter, looking around for possible alternative approaches.

In Domoticz' wiki found under Plugins a contribution by sincze for direct reading of an Omnik-inverter:
https://github.com/sincze/Domoticz-Omni ... Web-Plugin and also packages at github:
e.g.https://github.com/graham0/ginlong-wifi ... ginlong.py , https://github.com/Nateonas/Domoticz_Dz ... arInvertor and https://github.com/simon3270/ginlong-python

With 2nd package and also 4th package (seeming the most recent development and best suiting my needs) got a pingable interface between the Solis-LANstick and the RPI at the LAN serving as Server_B with the following setup for the LAN-stick.
Solis_Inverter Setup
Solis_Inverter Setup
screenshot-192.168.0.112-2022.10.04-13_44_30.png (121.25 KiB) Viewed 3500 times


For Server_B with this settings for UDP in response to the advice in the READ.MD of the 4th github-package.
Setup_for_Server_B
Setup_for_Server_B
screenshot-192.168.0.112-2022.10.05-ServerBSetup.png (21.76 KiB) Viewed 3496 times
Considering resemblance between this group of inverters, tried the link mentioned in the github-packages:
http://<inverter-ip>/js/status.js
Calling my Ginlong-inverter/LAN-stick with that url-string yields a reaction, but different than expected.
Spoiler: show
var txt;var opt;function initPage(){txt=window.parent.reList().page.status;opt=window.parent.reList().page.option;for(var A=1;A<13;A++){inner("t"+A,txt["t"+A]);inner("p1_"+A,txt.pg1[A]);inner("p2_"+A,txt.pg2[A]);inner("p3_"+A,txt.pg3[A]);inner("p4_"+A,txt.pg4[A])}inner("p3_1_1",txt.pg1[6]);inner("p3_2_1",txt.pg1[6]);inner("p3_1_2",txt.pg3[6]);inner("p3_2_2",txt.pg3[6]);inner("p3_1_3",txt.pg3[4]);inner("p3_2_3",txt.pg3[4]);inner("p3_2_4",txt.pg3[5]);inner("p3_2_5",txt.pg3[7]);changeFont();child_getH()}function initData(){child_getH();ajax("status.json?CMD=inv_query&rand="+Math.random())}function ajaxReturn(B){if(B.time!=null){inner("gtype",txt.pg1["s3"]);inner("gsn",B.g_sn);inner("ver",B.g_ver);inner("time",new Date(B.time*1000).toString());inner("worktime",B.g_time+" "+txt.pg1["s4"]);inner("error",B.g_err);inner("mac",B.mac);inner("auto_ip",enb_txt(B.auto_ip));inner("ip",B.ip);inner("sub",B.sub);inner("gate",B.gate);inner("auto_dns",enb_txt(B.auto_dns));inner("dns",B.dns);inner("dns_bak",B.dns_bak);inner("type",reInvBrand(B.i_type));if(B.i_num==null||B.i_num==0){}else{show("inv_data",true);inner("list",B.i_sn);var A=[B.i_sn,B.i_ver_m,B.i_ver_s,B.i_modle,B.i_pow,B.i_pow_n,B.i_eday,B.i_eall,B.i_alarm,B.i_last_t];inv_data_show(A)}inner("ip_a",B.l_a_ip);inner("port_a",B.l_a_port);inner("agreement_a",agr_txt(9,B.l_a_agr));if(B.ip_b!=null){show("server_b",true);inner("ip_b",B.ip_b);inner("port_b",B.port_b);inner("domain_b",B.ipdm_b);inner("agreement_b",agr_txt(9,B.agr_b))}if(B.i_status!=null){if(B.i_status==0){show("inv_data",false)}else{show("inv_data",true)}}}if(B.conn_a!=null){initStatus("status_0",B.conn_a)}if(B.conn_b!=null){initStatus("status_1",B.conn_b)}}var sels=1;function upfold(A){var B=getCon("pg"+A);if(B.style.display=="none"){B.style.display="";getCon("p"+A).src="image/up.png"}else{B.style.display="none";getCon("p"+A).src="image/down.png"}child_getH();if(A==3&&B.style.display!="none"){ajax("s_ping.json?CMD=inv_query&server=110&rand="+Math.random())}}function inv_data_show(A){var D=new Array("list","mver","sver","inv_tp","rate_p","now_p","day_e","all_e","alarm","uptime");if(A!=null){for(var B=1;B<10;B++){if(A==""){if(isNaN(parseInt(A))){inner(D,"---");continue}}var C=A;switch(B){case 4:C+=" W";break;case 5:if(C*1==4294967295){C="---"}else{C+=" W"}break;case 6:if(C*1==4294967295){C="---"}else{C+=" kWh"}break;case 7:if(C*1==4294967295){C="---"}else{C+=" kWh"}break;case 9:if(getCon("list").innerHTML=="---"){C="---"}else{C+=txt.pg2["s2"]}break}inner(D,C)}}}function initStatus(C,B){var A=txt.pg3["s1"];var D=txt.pg3["s2"];if(B==1){getCon(C).innerHTML=A}else{getCon(C).innerHTML=D}}function enb_txt(A){var B=txt.pg2["s4"];if(A==1){B=txt.pg2["s3"]}return B}function agr_txt(C,A){var B="";if(C==1){B=opt[1];if(A==1){B=opt[2]}}if(C==3){B=opt[3];if(A==1){B=opt[4]}}if(C==5){B=opt[5];if(A==1){B=opt[6]}}if(C==7){B=opt[7];if(A==1){B=opt[8]}}if(C==9){if(A==2){B=opt[11]}else{if(A==1){B=opt[10]}else{if(A==3){B=opt[12]}else{B=opt[9]}}}}return B};


This reaction from my Solis-inverter does not provide info for settings like shown in sincze's referenced github-section,
but looks like a script. Implicitly it means that some of the scripts from github are incompatible with this firmware.
Just wondering whether still 'something useful' can be done with this script-reaction.
Any other (un)documented calls known to the Ginlong/Solis-inverters which yield a reaction which could be applied to extract data directly from the inverter?

When using the examples from github, now manage to get a listening interface for Server_B, but not reception of messages & decoding.
Fully aware that contents of messages from a 4G-variant of the inverter are different from a 2G-variant (applicable for various scripts in github), but a first sign for an interface is that some messages should be visible.
In that perspective have also been looking with Wireshark at the related LAN-traffic.
In the Statistics-window the inverter's IP-address is listed, but not the IP-address of the SolisMonitoringSite, although that handshake flawlessly operates.
Difficult to catch the messages in the running display, but also do not see the expected traffic from the inverter to the local RPI designated as Server_B.
Any hints where/how to look for existence of those messages?
Or do I have the 'luck' to have a non-standard Solis-configuration related to LAN-stick, with no output towards Server_B?
Perhaps some 'hidden' setting to activate such output?
Last edited by Toulon7559 on Thursday 13 April 2023 21:09, edited 2 times in total.
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
User avatar
sincze
Posts: 1299
Joined: Monday 02 June 2014 22:46
Target OS: Raspberry Pi / ODroid
Domoticz version: 2024.4
Location: Netherlands / Breda Area
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by sincze »

Can you use FIDDLER and then login via your browser on the SOLIS inverter.
We should be able to see the JSON that we need fly by, including the necessary request.
Pass2php
LAN: RFLink, P1, OTGW, MySensors
USB: RFXCom, ZWave, Sonoff 3
MQTT: ZIgbee2MQTT,
ZWAVE: Zwave-JS-UI
WIFI: Mi-light, Tasmota, Xiaomi Shelly
Solar: Omnik, PVOutput
Video: Kodi, Harmony HUB, Chromecast
Sensors: You name it I got 1.
User avatar
waltervl
Posts: 5148
Joined: Monday 28 January 2019 18:48
Target OS: Linux
Domoticz version: 2024.7
Location: NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by waltervl »

Since new stable (and probably due to new Python framework) the Omnik-Local-Web-plugin causing errors causing my installation to crash....
see also issue https://github.com/sincze/Domoticz-Omni ... /issues/11
error:

Code: Select all

2022-11-07 21:20:24.962 Error: PP Omnik: Call to function 'onMessage' failed, exception details:
2022-11-07 21:20:24.967 Error: PP Omnik: Traceback (most recent call last):
2022-11-07 21:20:24.967 Error: PP Omnik: File "/home/bolt/domoticz/plugins/Domoticz-Omnik-Local-Web-Plugin/plugin.py", line 221, in onMessage
2022-11-07 21:20:24.967 Error: PP Omnik: _plugin.onMessage(Connection, Data)
2022-11-07 21:20:24.967 Error: PP Omnik: File "/home/bolt/domoticz/plugins/Domoticz-Omnik-Local-Web-Plugin/plugin.py", line 133, in onMessage
2022-11-07 21:20:24.967 Error: PP Omnik: strData = Data["Data"].decode("utf-8", "ignore")
2022-11-07 21:20:24.967 Error: PP Omnik: KeyError: 'Data'
The URL http://inverter-ip/js/status.js is working fine and gives data but somehow it is read differently in the new Python framework.
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
PeJeWe
Posts: 56
Joined: Monday 28 November 2016 20:52
Target OS: Raspberry Pi / ODroid
Domoticz version: Latest
Location: Netherlands
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by PeJeWe »

i found out a hidden page in the solis data logger.
http://inverter_ip/config_hide.html

can we do something with this??
Toulon7559
Posts: 843
Joined: Sunday 23 February 2014 17:56
Target OS: Raspberry Pi / ODroid
Domoticz version: mixed
Location: Hengelo(Ov)/NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Toulon7559 »

@PeJeWe

Which version Solis-inverter do you have?
For my device [= Solis4G700 with Firmware version ME-121001-V1.0.6(201704012008) ] that detected weblink does not work.
However reluctant to change the firmware, because "don't touch a working configuration".
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
Toulon7559
Posts: 843
Joined: Sunday 23 February 2014 17:56
Target OS: Raspberry Pi / ODroid
Domoticz version: mixed
Location: Hengelo(Ov)/NL
Contact:

Re: Ginlong, Omnik Solar, Solarman and Trannergy Inverters

Post by Toulon7559 »

Subject: Reading from Solis Monitoring Site

Have always happily been using Galadril's Python-script, but after a system-crash in July this year and subsequent reinstall of O.S.&Domoticz from backup-files, now 'refusing' to read from the Solis Monitoring Site, with a shower of error reports when testing on CLI:
direct, manual call to the MonitoringSite is without problems, demonstrating that the login-info is still correct.
Later upgrades of Raspian_Buster and Domoticz should be no reason for this behaviour, but not sure .....

More clear that upgrade to Raspian_Bullseye requires to shift to Python3.x

Has anybody made a working variant of the Solis-reading script adapted for Python3.x?

The script in this message seems a starter (although aimed at Trannergy-inverter), but have the observed malfunctions meanwhile been remedied?

Added January 18, 2023:
Without any help the read-out with Galadrils' script has become operative again.
Anyway this unpredictable 'dip' is a reason to revisit the effort to raise the local functionality for Server_B_interface.
Last edited by Toulon7559 on Wednesday 18 January 2023 11:20, edited 6 times in total.
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest