SolarLog 500 and 2024.10.2: "timeout for http connection"
The problem
After jumping from 2024.9.3 to 2024.10.2, SolarLog integration runs into a timeout error for the http connection.
What version of Home Assistant Core has the issue?
2024.10.2
What was the last working version of Home Assistant Core?
2024.9.3
What type of installation are you running?
Home Assistant OS
Integration causing the issue
SolarLog
Link to integration documentation on our website
https://www.home-assistant.io/integrations/solarlog/
Diagnostics information
Describe the issue you are experiencing
After jumping from 2024.9.3 to 2024.10.2, SolarLog integration runs into a timeout error for the http connection. Describe the behavior you expected
No timeout, clear connection to pull sensor data from SolarLog 500. Worked fine with 9.3. Steps to reproduce the issue
Update from 9.3 to 10.4
Voilá!
SL 500 has no password set for accessing the data (JSON, afair). Worked seamlessly with 9.3
even setting up SL-integration new didn't work (password request which is new was left aside as, no password is set)
What version of Home Assistant Core has the issue?
2024.10.2 What was the last working version of Home Assistant Core?
2024.9.3 In which browser are you experiencing the issue with?
Firefox (multiple, this is not a browser problem) Which operating system are you using to run this browser?
Ubuntu 22.04 State of relevant entities
No response Problem-relevant frontend configuration
No response Javascript errors shown in your browser console/inspector
timeout connecting to http://solarlog.lan timeout connecting to http://192.168.10.50
Additional information
Example YAML snippet
No response
Anything in the logs that might be useful for us?
No response
Additional information
No response
Hey there @ernst79, @dontinelli, mind taking a look at this issue as it has been labeled with an integration (solarlog) you are listed as a code owner for? Thanks!
Code owner commands
Code owners of solarlog can trigger bot actions by commenting:
@home-assistant closeCloses the issue.@home-assistant rename Awesome new titleRenames the issue.@home-assistant reopenReopen the issue.@home-assistant unassign solarlogRemoves the current integration label and assignees on the issue, add the integration domain after the command.@home-assistant add-label needs-more-informationAdd a label (needs-more-information, problem in dependency, problem in custom component) to the issue.@home-assistant remove-label needs-more-informationRemove a label (needs-more-information, problem in dependency, problem in custom component) on the issue.
(message by CodeOwnersMention)
solarlog documentation solarlog source (message by IssueLinks)
Could you please provide debug log?
@home-assistant add-label needs-more-information
Hi, I have a similar issue and can provide logs for 24.10.2. Interestingly, I have two solar-logs, and one works just fine. This is the error log from the other since updating to 24.10.x:
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 1022, in start
message, payload = await protocol.read() # type: ignore[union-attr]
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/aiohttp/streams.py", line 643, in read
await self._waiter
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/solarlog_cli/solarlog_client.py", line 104, in execute_http_request
response = await self.session.post(
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/aiohttp/client.py", line 686, in _request
await resp.start(conn)
File "/usr/local/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 1017, in start
with self._timer:
File "/usr/local/lib/python3.12/site-packages/aiohttp/helpers.py", line 736, in __exit__
raise asyncio.TimeoutError from exc_val
TimeoutError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/solarlog/coordinator.py", line 70, in _async_update_data
data = await self.solarlog.update_data()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/solarlog_cli/solarlog_connector.py", line 90, in update_data
data = await self.client.get_energy(data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/solarlog_cli/solarlog_client.py", line 211, in get_energy
await self.execute_http_request('{ "878": null }')
File "/usr/local/lib/python3.12/site-packages/solarlog_cli/solarlog_client.py", line 111, in execute_http_request
raise SolarLogConnectionError(msg) from exception
solarlog_cli.solarlog_exceptions.SolarLogConnectionError: Timeout occurred while connecting to Solar-Log at http://192.168.102.94
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 354, in _async_refresh
self.data = await self._async_update_data()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/solarlog/coordinator.py", line 75, in _async_update_data
raise ConfigEntryNotReady(ex) from ex
homeassistant.exceptions.ConfigEntryNotReady: Timeout occurred while connecting to Solar-Log at http://192.168.102.94
The solar-log is reachable, connection is unsecured and I already tried rebooting, resetting the local monitoring option and re-adding it to HA.
Your help is much appreciated! Thanks in advance!
Thanks, very helpful. Seems that again the 878-call causes the timeout, similar to https://github.com/home-assistant/core/issues/127380.
Could you try if curl works and post the response?
curl -X POST -H "Content-Type: application/json" http://yoursolarlogip -d '{ "878": null }'
It responds with the following html:
Code
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<title>Solar-Log™</title>
<link rel="SHORTCUT ICON" href="favicon.ico">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style> /* content of reset.css */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td
{
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-weight: inherit;
font-style: inherit;
font-size: 100%;
font-family: inherit;
vertical-align: baseline;
}
:focus { outline: 0; }
body { line-height: 16px; color: black; background: white; }
ol, ul { list-style: none; }
table { border-collapse: separate; border-spacing: 0; }
caption, th, td { text-align: left; font-weight: normal; }
blockquote:before, blockquote:after,
q:before, q:after { content: ""; }
blockquote, q { quotes: "" ""; }
sup { vertical-align: super; }
</style>
<style> /* important content of main.css so frontend looks nice before main.css is loaded */
.c_toggleHeaderViewport { float:right !important; margin:11px 0px 0px 0px !important; }
html
{
display: block;
width: 100%;
min-height: 100%;
height: 100%;
}
body
{
display: block;
width: 100%;
min-height: 100%;
height: 100%; /* this causes a vertical scrolling even if not necessary??? */
margin: 0;
padding: 0;
font-family: "Lucida Sans", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Corbel, Arial, sans-serif;
font-size: 16px;
position: relative;
background-color: #FFFFFF;
}
#header_body
{
background: #fff url(0/images/mainnav_header_bg.gif) repeat-x 0 0px;
}
/* Header */
#header_container
{
position: relative;
z-index: 5;
width: 100%;
height: 203px;
padding: 0;
}
#header
{
height: 100%;
width: 1074px;
margin: 0 auto;
padding: 0;
position: relative;
z-index: 3;
}
#logo_header_text_container
{
position: relative;
height: 157px;
float: left;
z-index: 6;
}
/* Header text */
#header_text_container
{
width: 620px;
height: 100%;
margin: 0 0 0 270px;
position: relative;
z-index: 6;
display: table;
}
#header_text
{
padding: 0;
display: table-cell;
vertical-align: middle;
}
#header_text .headline
{
text-align: center;
color: #1a1a1a;
font-weight: bold;
font-size: 29px;
line-height: 1.325em;
margin: 0 0 0 0;
}
/* the navigations in top of page including main + metanav */
#nav_container
{
height: 41px;
width: 100%;
position: relative;
z-index: 20;
margin-bottom: 4px;
}
#nav { padding: 0; }
#nav ul { float: left; }
#nav ul li.level1
{
float: left;
padding-top: 5px;
padding: 5px 3px 0 1px;
}
#nav ul li.level1 a { cursor: pointer; }
/* Small logo */
.small_logo
{
padding: 5px 15px 5px 2px;
margin-top: 6px;
float: left;
}
/* all navs */
#nav li { font-size: 13px; }
#nav li a
{
text-decoration: none;
color: #333;
display: block;
}
#nav li a span
{
display: block;
float: left;
padding: 5px 12px 12px 10px;
}
/* Level 1 */
#nav li.level1
{
float: left;
text-transform: uppercase;
font-weight: bold;
position: relative;
}
#nav li.level1 a.level1
{
float: left;
margin: 2px 1px 0 2px;
position: relative;
}
/* Language-Nav */
#nav #language_nav
{
position: relative;
z-index: 10;
}
#nav #language_nav li.level1
{
text-transform: none;
font-weight: normal;
padding-bottom: 4px;
}
#nav #language_nav li.level1 a.level1
{
margin: 0;
}
#nav #language_nav li.level1 a.level1 span
{
padding: 8px 13px 7px 4px;
}
#nav #language_nav li.level1 a.level1 span.short
{
background: transparent url(0/images/language_nav_arrow.gif) no-repeat right 6px;
padding: 0 14px 0 0;
float: none;
display: inline;
}
#nav #language_nav .sub_level { left: 0; }
/* Level 2 */
#nav .sub_level
{
position: absolute;
display: none;
z-index: 9;
top: 40px;
left: -3px;
width: 194px;
}
/* Logo */
#logo_container
{
position: relative;
float: left;
display: table;
vertical-align: middle;
text-align: center;
top: 0px;
left: 0px;
z-index: 10;
height: 157px;
width: 220px;
}
#logo_container_right
{
height: 60px;
position: absolute;
right: 0;
top: 100px;
width: 200px;
z-index: 10;
}
#logo,
#logo_container .product_image
{
display: table-cell;
vertical-align: middle;
text-align: center;
height: 100%;
width: 220px;
}
#logo_container .product_image
{
padding-top: 14px;
}
#logo a,
#logo_container .product_image a
{
display: inline-block;
vertical-align: middle;
text-align: center;
width: 100%;
text-decoration: none;
}
/* Body */
#body_container
{
height: auto !important;
min-height: 100%;
position: relative;
z-index: 4;
background-color: #FFFFFF;
padding: 6px 0 0 0;
width: 100%;
}
#body
{
padding: 6px 0 0px 0;
margin: 0 auto 0 auto;
position: relative;
background: #ffffff url(0/images/body_bg.png) repeat-x scroll 0 0;
background-color: #FFFFFF;
min-height: 100%;
height: auto !important;
height: 150px;
width: 100%;
z-index: 2;
}
/* Multi function container on the left side of content, i.e. for subnav */
#multi_function_container
{
width: 212px;
float: left;
box-shadow: 0 0 5px rgba(0,0,0,0.5);
border-radius: 5px;
background: #fff;
}
/* Main container */
#main_container
{
margin: 0;
z-index: 1;
position: relative;
width: 100%;
min-height: 584px;
}
#main
{
margin: 0 auto 0 auto;
padding: 29px 6px 40px 6px;
color: #333;
width: 1062px;
}
#content_container
{
width: 820px;
padding: 0;
float: right;
margin: 0;
padding: 1px 0 0 0;
position: relative;
background: #fff;
box-shadow: 0 0 5px rgba(0,0,0,0.5);
border-radius: 5px;
}
#content
{
padding: 0px 25px 25px 25px;
position: relative;
z-index: 2;
}
#footer_container
{
bottom: 0;
height: 42px;
position: fixed;
width: 100%;
z-index: 100000;
background: #003A6F;
border-top: 5px solid #ebebeb;
}
#footer
{
z-index: 2;
position: relative;
max-width: 1082px;
min-width: 540px;
width: 100%;
height: 31px;
margin: 0 auto;
}
#servicenav_container { padding: 0 20px; }
#copyright
{
float: left;
font-size: 11px;
color: #fff;
padding: 11px 0 0 0;
}
#copyright a { color: #fff; }
#buildrev,#footer_serial
{
float: right;
font-size: 11px;
color: #fff;
padding-top: 11px;
}
#footer_serial { margin-right: 10px; }
li { list-style-type: none; }
</style>
<style> /* important content of content.css so frontend looks nice before main.css is loaded */
.standard_form fieldset,
.standard_form .fieldset
{
margin: 0px 0 0 0;
padding: 18px 13px 23px 13px;
border-bottom: 1px solid #ccc;
}
.edit_form_tab_content,
.record_item_edit_form .edit_form_tab_content,
.standard_form .edit_form_tab_content
{
background: linear-gradient(#e3e4e6, white 333px, white);
border: 1px solid #ccc;
border-bottom: none;
display: none;
top: -4px;
position: relative;
z-index: 2;
}
.edit_form_tab_content_container .active,
.record_item_edit_form .active,
.standard_form .active
{
display: block;
}
#content.pageview{ margin-top: 21px; }
.save_layer_container
{
height: 100%;
width: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 200;
vertical-align: middle;
}
.save_layer
{
vertical-align: middle;
height: 100%;
width: 100%;
}
.save_layer .transparent_background
{
-moz-opacity: 0.50;
opacity: 0.50;
filter: alpha(opacity=50);
background: #033e7b;
height: 100%;
width: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
.loadingIcon
{
background: url("0/images/spinner_white.gif") no-repeat center center / 128px 128px rgba(0, 0, 0, 0);
width: 128px;
height: 128px;
}
.loadingIconFullsize
{
background: url("0/images/spinner_blue.gif") no-repeat center center / 200px 200px rgba(0, 0, 0, 0);
width: 100%;
height: 100%;
z-index: 2;
position: relative;
margin: auto;
}
</style>
<meta name="viewport" content="width=device-width, initial-scale=0.5, maximum-scale=2, minimum-scale=0.5">
<script>var SLTyp="",SLHW=0,SLCF=0,SLDF=0,SLSerial="00000000",OEMType=0,SubOEMType=0;var lbl_collector=[],rb=[],active_language="DE";var CurrencySign="DM";var DateFormat="dd.mm.yy",TimeFormat="HH:MM:ss",TimeNosecFormat="HH:MM";var tabs_to_hide=0;var lok=true;var EasyDone=false,EasyRunning=false;var diagramDate=new Date();var FormIsModified=false,FormOrigData={},FormHasErrors=false,FormHasErrorsManual=false;var FormPreVal="none",FormPostVal="none";var WelcomeTimer=0,WelcomeLang=0;var mpagecallback;var tab_control={constr:undefined,dest:undefined};var async_counter=0;var sollMonth=[],curAnlagenKWP,sollYearKWP;var indate=new Date();var loggedin=0,login_level=0,access_level=0,SubmitHaddFields;var DaysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);var _pw_warning_displayed=false;var sl_task_active=0;function lcdcallback(lcddat){if(lcddat[794]===undefined){return}for(var i=0;i<16;i++){LCDState[i][0]=lcddat[794][0][i][0];LCDState[i][1]=lcddat[794][0][i][1]}$("#timeshort").html(lcddat[701])};</script>
</head>
<body id="top">
<div id="full_page_loader">
<div id="fullsize_loader" class="save_layer_container">
<div class="save_layer">
<div class="transparent_background"></div>
<div class="loadingIconFullsize"></div>
</div>
</div>
</div>
<div id="page_container" style="display: none;">
<div id="page" class="default">
<div id="header_body_container">
<div id="header_body">
<div id="header_container" style="display: none;">
<div class="item_tools c_toggleHeaderViewport">
<div class="notification_bar" id="notificationBar"></div>
<a id="toggle_banner_icon" class="icon icon_header_off" onclick="toggleHeaderViewport()" href="#"></a>
</div>
<div id="header">
<div id="nav_container">
<div id="nav">
<a class="small_logo" title="Zur Herstellerseite" href="http://www.solar-log.com/"><img src="0/images/small_logo.png" alt="Solar-Log™"></a>
<ul id="language_nav" class="level1">
<li class="level1 hasSub language"><a class="level1" href="#"><span><span class="SDSI18N short" name="L_OLANG">Deutsch</span></span></a>
<div class="sub_level">
<div>
<ul class="level2">
<li class="level2"><a class="level2 SDSI18N L_OEM preventlink" l_oem_nr="1" name="L_OLANG_GERMAN" href="#" lang="DE">Deutsch - Deutsch</a></li>
<li class="level2"><a class="level2 SDSI18N L_OEM preventlink" l_oem_nr="2" name="L_OLANG_ENGLISH" href="#" lang="EN">Englisch - English</a></li>
<li class="level2"><a class="level2 SDSI18N L_OEM preventlink" l_oem_nr="5" name="L_OLANG_SPANISH" href="#" lang="ES">Spanisch - Español</a></li>
<li class="level2"><a class="level2 SDSI18N L_OEM preventlink" l_oem_nr="6" name="L_OLANG_FRENCH" href="#" lang="FR">Französisch - Français</a></li>
<li class="level2"><a class="level2 SDSI18N L_OEM preventlink" l_oem_nr="3" name="L_OLANG_ITALIAN" href="#" lang="IT">Italienisch - Italiano</a></li>
<li class="level2"><a class="level2 SDSI18N L_OEM preventlink" l_oem_nr="4" name="L_OLANG_DUTCH" href="#" lang="NL">Niederländisch - Nederlands</a></li>
<li class="level2"><a class="level2 SDSI18N L_OEM preventlink" l_oem_nr="9" name="L_OLANG_TURKISH" href="#" lang="TR">Türkisch - Türkçe</a></li>
<li class="level2"><a class="level2 SDSI18N L_OEM preventlink" l_oem_nr="10" name="L_OLANG_CHINESE" href="#" lang="ZH">Chinesisch - 中国的</a></li>
</ul>
</div>
</div>
</li>
</ul>
<ul id="mainnav" class="level1" style="display:none">
<li class="level1 nav mainnav_active production" data="p">
<a class="level1" href="#">
<span class="SDSI18N" name="L_YIELDDATA">Ertragsdaten</span>
</a>
</li>
<li class="level1 nav diagnostics" data="d">
<a class="level1" href="#">
<span class="SDSI18N" name="L_DIAGNOSIS">Diagnose</span>
</a>
</li>
<li class="level1 nav configuration" data="c">
<a class="level1" href="#">
<span class="SDSI18N" name="L_CONFIGURATION">Konfiguration</span>
</a>
</li>
<li class="level1" id="usermenu">
<a class="level1 preventlink" href="#">
<icon class="icon stdicon icon_user"></icon>
</a>
<ul>
<li id="li_login_inf" class="border"></li>
<li id="li_login" class="border" onclick="show_login_dialog();">
<icon class="icon stdicon icon_user"></icon>
<span class="SDSI18N" name="L_LOGIN">Anmelden</span>
</li>
<li id="li_logout" class="border" onclick="doLogout();" style="display: none;">
<icon class="icon stdicon icon_user"></icon>
<span class="SDSI18N" name="L_LOGOUT">Abmelden</span>
</li>
<li id="li_config_assist" class="border" onclick="config_assist.start_config_assist(false);" style="display: none;">
<icon class="icon stdicon icon_config"></icon>
<span class="SDSI18N" name="L_ASSISTANT">Assistent</span>
</li>
<li id="li_systeminfo" class="border" onclick='nav.jump_to_tab("g_system");' style="display: none;">
<icon class="icon stdicon icon_info"></icon>
<span class="SDSI18N" name="L_SYSINFO">Systeminfo</span>
</li>
<li id="li_infocenter" class="border" style="display: none;">
<a id="infocenter_link" href="https://qrsl.de/1350810269/fADEAH/" target="_blank">
<icon class="icon stdicon icon_info"></icon>
<span class="SDSI18N" name="L_INFOCENTER">Infocenter</span>
</a>
</li>
<li id="li_legal_notices" class="border" style="display: none;" onclick="show_legal_notices();">
<icon class="icon stdicon icon_file_text"></icon>
<span class="SDSI18N" name="L_LEGAL_NOTICES">Rechtliche Hinweise</span>
</li>
<li id="li_reboot" class="border" onclick="trigger_reboot();" style="display: none;">
<icon class="icon std_icon std_icon_reload"></icon>
<span class="SDSI18N" name="L_REBOOT">Neu starten</span>
</li>
</ul>
</li>
</ul>
<div class="CLEAR"></div>
</div>
</div>
<div id="logo_container_right">
<p id="logo"><a title="Zur Herstellerseite" href="http://www.solar-log.com/"><img src="0/images/logo.png" alt="Solar-Log™"></a></p>
</div>
<div id="logo_header_text_container">
<div id="product_image_container">
<div id="logo_container">
<a id="homebutton" class="product_image" title="Zur Startseite" href="http://solar-log/"><img alt="Device Image" src="img?i=images/devimage.png" height="170"></a>
</div>
</div>
<div id="header_text_container">
<div id="header_text">
<h1 class="headline"><span class="SDSI18N" name="L_WELCOMEMAIN">Willkommen im Hauptmenü <br>des Solar-Log <span id="HWTYP"></span> <span id="HWTEXT"></span></span></h1>
</div>
</div>
<div class="CLEAR"></div>
</div>
</div>
</div>
<div id="body_container">
<div id="body" class="custom_style">
<div id="main_container">
<div id="main">
<div id="multi_function_container">
<input id="current_page" name="current_page" value="1" type="hidden">
<div id="multi_function">
<div id="subnav_container">
<div id="subnav">
<div id="lcddiv" class="c_lcddiv">
<canvas height="60" width="100" class="round_box_shadow c_lcdcanvas" id="jh_lcd_display3"></canvas>
<p id="timeshort" style="font-size:8px;width:100px;text-align:center;"></p>
</div>
<div id="lcdline" class="c_lcdline"></div>
<ul class="level1" id="menucontainer"></ul>
</div>
</div>
</div>
</div>
<div id="content_container">
<div id="content" class="pageview">
<div id="tabloading">
<form class="record_item_edit_form standard_form" id="loading_form">
<div class="edit_form_tab_content_container">
<div class="edit_form_tab_content tab1 active">
<fieldset><div class="loadingIcon" style="width: 100%;"></div></fieldset>
</div>
</div>
</form>
</div>
<div id="tabtarget"></div>
</div>
</div>
<div class="CLEAR"></div>
</div>
</div>
<div class="CLEAR"></div>
</div>
</div>
</div>
<div id="footer_container" style="display: none;">
<div id="footer">
<div id="servicenav_container">
<p id="copyright">
© 2018 <a href="http://www.solar-log.com/">Solare Datensysteme GmbH</a> | <a href="mailto:[email protected]">[email protected]</a>
</p>
<p id="buildrev">Build Revision: <span id="build_revision"></span></p>
<p id="footer_serial" style="display: none;">SN: <span>-</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
<script>function loadScript(file_path,options,callback){function _dom_eval(code){if(code!==undefined&&code.length>0){var _script=document.createElement("script");_script.innerHTML=code;document.head.appendChild(_script).parentNode.removeChild(_script)}if(typeof(callback)==="function"){callback()}}loadFile(file_path,_dom_eval,options)}function loadCSS(file_path,options,callback){function _dom_eval(code){if(code!==undefined&&code.length>0){var _style=document.createElement("style");if(typeof(options)==="object"&&typeof(options.id)==="string"){_style.id=options.id}_style.innerHTML=code;document.head.appendChild(_style)}if(typeof(callback)==="function"){callback()}}loadFile(file_path,_dom_eval,options)}function loadFile(file_path,callback,options){if(typeof(file_path)!=="string"){return}if(typeof(options)!=="object"){options={}}options.data={};if(options.type!=="GET"){options.type="GET"}if(typeof(options.async)!=="boolean"){options.async=true}if(options.cache==="revision"||typeof(options.cache)!=="boolean"){var _regexp=new RegExp(/\?/);file_path+=(_regexp.test(file_path)?"&":"?")+"_="+svn_revision;options.cache=true}options.url=file_path;options.callback=callback;if(window.$===undefined||window.$.ajax===undefined){try{query_via_XHR(options)}catch(e){console.error("error from query_via_XHR: "+e);if(typeof(callback)==="function"){callback()}}}else{options.error=function(){window.clearTimeout(query_timeout);console.error("error loading file "+file_path);if(typeof(options.error)==="boolean"&&options.error){alert('Error loading file "'+options.url+"\"\n\nThe Solar-Log™ doesn't seem to answer\n\n\n\nPlease reload the page.\nIt may also help to clear the browser cache.\nIf the error persists, please contact the support.\nA detailed error description is necessary. This includes:\n* the firmware version of the Solar-Log™\n* the user browser\n* a screenshot of this dialog")}if((typeof(options.stop==="boolean")&&options.stop)){hide_fullsize_loader();document.querySelector(".loadingIcon").remove();document.querySelector(".tab1 fieldset").innerHTML='Error loading file "'+options.url+"\"<br>The Solar-Log™ doesn't seem to answer<br><br>Please reload the page.<br>It may also help to clear the browser cache.<br>If the error persists, please contact the support.<br>A detailed error description is necessary. This includes:<br>* the firmware version of the Solar-Log™<br>* the user browser<br>* a screenshot of this dialog"}else{if(typeof(options.callback)==="function"){options.callback()}}};options.success=function(data){window.clearTimeout(query_timeout);if(typeof(callback)==="function"){callback(data)}};var query_timeout=window.setTimeout(show_timeout_msg,30000);$.ajax(options)}}var _origin_hide;var _origin_show;function query_via_XHR(options){if(typeof(options)!=="object"){throw"invalid options object given"}if(options.method===undefined){options.method="GET"}else{if(typeof(options.method)!=="string"||options.method!=="GET"){throw"invalid method given"}}if(typeof(options.url)!=="string"){throw"invalid url given"}if(typeof(options.async)!=="boolean"){options.async=true}var _regexp=new RegExp(/\?/);if(options.cache===false){options.url+=(_regexp.test(options.url)?"&":"?")+"_="+Date.now()}else{if(options.cache==="revision"){options.url+=(_regexp.test(options.url)?"&":"?")+"_="+svn_revision}}var _contenttype="";if(options.url.search(".html")!==-1){_contenttype="text/html"}else{if(options.url.search(".css")!==-1){_contenttype="text/css"}else{if(options.url.search(".js")!==-1){_contenttype="application/javascript"}else{if(options.url.search(".json")!==-1){_contenttype="application/json"}else{throw"unsupported content-type given ("+options.url+")"}}}}var xmlhttp=new XMLHttpRequest();xmlhttp.open(options.method,options.url,options.async);if(typeof(options.timeout)==="number"){xmlhttp.timeout=options.timeout}xmlhttp.setRequestHeader("Content-Type",_contenttype);xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState===4){window.clearTimeout(query_timeout);if(xmlhttp.status>=200&&xmlhttp.status<400){if(typeof(options.callback)==="function"){options.callback(xmlhttp.responseText)}}else{if(options.method==="GET"){console.error("response error received ("+xmlhttp.status+" - "+options.url+")");if(typeof(options.error)==="boolean"&&options.error){alert('Error loading file "'+options.url+"\"\nThe Solar-Log™ doesn't seem to answer\n\nPlease reload the page.\nIt may also help to clear the browser cache.\nIf the error persists, please contact the support.\nA detailed error description is necessary. This includes:\n* the firmware version of the Solar-Log™\n* the user browser\n* a screenshot of this dialog")}if((typeof(options.stop==="boolean")&&options.stop)){hide_fullsize_loader();document.querySelector(".loadingIcon").remove();document.querySelector(".tab1 fieldset").innerHTML='Error loading file "'+options.url+"\"<br>The Solar-Log™ doesn't seem to answer<br><br>Please reload the page.<br>It may also help to clear the browser cache.<br>If the error persists, please contact the support.<br>A detailed error description is necessary. This includes:<br>* the firmware version of the Solar-Log™<br>* the user browser<br>* a screenshot of this dialog"}else{if(typeof(options.callback)==="function"){options.callback()}}}else{console.error("response error received ("+xmlhttp.status+")");if(typeof(options.error)==="boolean"&&options.error){alert('Error loading file "'+options.url+"\"\nThe Solar-Log™ doesn't seem to answer\n\nPlease reload the page.\nIt may also help to clear the browser cache.\nIf the error persists, please contact the support.\nA detailed error description is necessary. This includes:\n* the firmware version of the Solar-Log™\n* the user browser\n* a screenshot of this dialog")}if((typeof(options.stop==="boolean")&&options.stop)){hide_fullsize_loader();document.querySelector(".loadingIcon").remove();document.querySelector(".tab1 fieldset").innerHTML='Error loading file "'+options.url+"\"<br>The Solar-Log™ doesn't seem to answer<br><br>Please reload the page.<br>It may also help to clear the browser cache.<br>If the error persists, please contact the support.<br>A detailed error description is necessary. This includes:<br>* the firmware version of the Solar-Log™<br>* the user browser<br>* a screenshot of this dialog"}else{if(typeof(options.callback)==="function"){options.callback()}}}}}};var query_timeout=window.setTimeout(show_timeout_msg,30000);xmlhttp.send()}function show_timeout_msg(){if(typeof(SLdialogManager)!=="undefined"){var _txt="";if(typeof(getText)==="function"&&is_lang_initialized()){SLdialogManager.addDialog("js_error",{text:getText("T_SLOW_RESPOND"),important:true,buttons:[{id:"ok",name:getText("L_OK")}]},true).show("js_error")}else{_txt="The Solar-Log™ responds exceptionally slow.<br>Please check the connection to your device.<br><br>This could be normal if you use a bad mobile connection.<br>In this case, you can acknowledge this message and wait until the web interface is completely loaded.";SLdialogManager.addDialog("js_error",{text:_txt,important:true,buttons:[{id:"ok",name:"OK"}]},true).show("js_error")}}else{if(typeof(getText)==="function"&&is_lang_initialized()){alert(getText("T_SLOW_RESPOND").replace(/<br>/g,"\n"))}else{alert("The Solar-Log™ responds exceptionally slow.\nPlease check the connection to your device.\n\nThis could be normal if you use a bad mobile connection.\nIn this case, you can acknowledge this message and wait until the web interface is completely loaded.")}}return false}var svn_revision=Date.now()+"";var files_to_load=[{file:"0/main.css",options:{cache:"revision"}},{file:"_sdsWebIntegrationBeforeJQuery.js",options:{cache:"revision",filter:"web"}},{file:"jquery.jqplot.css",options:{cache:"revision"}},{file:"0/content.css",options:{cache:"revision"}},{file:"icons.css",options:{cache:"revision"}},{file:"compressed.js",options:{cache:"revision",disp_error:true,stop:true}},{file:"jquery-ui.css",options:{cache:"revision"}},{file:"jquery.timepicker.css",options:{cache:"revision"}},{file:"0/web_integration.css",options:{cache:"revision",filter:"web"}},{file:"_sdsWebIntegration.js",options:{cache:"revision",filter:"web"}}];function load_next_file_from_queue(finished_callback){if(files_to_load.length>0){var _next_file=files_to_load.splice(0,1)[0];if(_next_file.options.filter==="web"&&!isPortalMode()){load_next_file_from_queue(finished_callback)}else{if(_next_file.file.search(".css")!==-1){loadCSS(_next_file.file,_next_file.options,load_next_file_from_queue.bind(null,finished_callback))}else{if(_next_file.file.search(".js")!==-1){loadScript(_next_file.file,_next_file.options,load_next_file_from_queue.bind(null,finished_callback))}else{console.error("undefined filetype in files_to_load: "+_next_file.file);load_next_file_from_queue(finished_callback)}}}}else{finished_callback()}}window.onload=function(){checkPortalMode();loadFile("revision.html",function(data){var _rev_elem;if(typeof(data)==="string"){svn_revision=data.split(" ")[0];_rev_elem=document.getElementById("build_revision");if(_rev_elem!==null){_rev_elem.innerHTML=data}}else{_rev_elem=document.getElementById("build_revision");if(_rev_elem!==null){_rev_elem.innerHTML="Error"}}load_next_file_from_queue(function(){if(!isPortalMode()){load_legal_notices(initialize_page)}else{initialize_page()}})},{cache:false})};function initialize_page(){hide_fullsize_loader();install_loginbtn_handler();install_nav_click_handler();install_lang_click_handler();if(getCookie("banner_hidden")==="true"){hideBanner()}else{showBanner()}_origin_hide=$.fn.hide;_origin_show=$.fn.show;$.fn.hide=function(){if($(this).prop("tagName")==="OPTION"){$(this).prop("disabled",true)}return _origin_hide.apply($(this),arguments)};$.fn.show=function(){if($(this).prop("tagName")==="OPTION"){$(this).prop("disabled",false)}return _origin_show.apply($(this),arguments)};TheDisplay=$("#jh_lcd_display3").lcdisplay({background:"rgb(230,230,230)",inactiveColor:"rgb(190,190,190)",activeColor:"rgb(10,10,10)",width:100,item:{easy:false,gprs:false,wifi:false,bat:false,bat1:false,bat2:false,bat3:false,bat4:false,sig:0,t1:false,t2:false,t3:false,t4:false,t5:false,t6:false,t7:false,t8:false,t9:false,t10:false,t11:false,aa:false,ab:false,ac:false,ad:false,ae:false,af:false,ag:false,ah:false,ai:false,aj:false,ak:false,al:false,am:false,an:false,ba:false,bb:false,bc:false,bd:false,be:false,bf:false,bg:false,bh:false,bi:false,bj:false,bk:false,bl:false,bm:false,bn:false}});quManager.add_qu("lcdstate",{parameter:"794:0;701",callback:lcdcallback,global:true,active:false});var params=getURLParameters(this.document.URL);if(params.ilang!==undefined){sdsSetLanguage(params.ilang,updateHWOption.bind(null,continue_initialize_page))}else{updateHWOption(continue_initialize_page)}}function continue_initialize_page(){var params=getURLParameters(this.document.URL);quManager.activate_qu("lcdstate");if(config_assist.is_config_assist_dialog(params.b)){config_assist.continue_config_assist(params.b)}else{if(!EasyDone){nav.jump_to_tab("e_lang")}else{if(EasyRunning){config_assist.continue_config_assist("ca_devices")}else{queryData(true,"801:781;",function(data){if(data!==undefined&&data[801][781]===1){sl_task_active=data[801][781];nav.jump_to_tab("c_system_firmware")}else{if(data!==undefined&&data[801][781]===2){sl_task_active=data[801][781];nav.jump_to_tab("c_devicedetect_detect")}else{if(params.tth!==undefined){tabs_to_hide=params.tth}if(params.b!==undefined){nav.find_alias(params.b,function(result){if(result!==undefined){nav.jump_to_tab(params.b)}else{nav.jump_to_tab("p_live_cockpit")}})}else{nav.jump_to_tab("p_live_cockpit")}}}})}}}lcdtimefunc();window.setTimeout(function(){if(epoch_manager.getState()==="NOT_INITIALIZED"){epoch_manager.loadEpochs()}},20000)}function show_fullsize_loader(){var _elem=document.getElementById("fullsize_loader");if(_elem===null||_elem===undefined){var _container=document.createElement("div");_container.id="fullsize_loader";_container.classList.add("save_layer_container");var _save_layer=document.createElement("div");_save_layer.classList.add("save_layer");_container.appendChild(_save_layer);var _transparent_back=document.createElement("div");_transparent_back.classList.add("transparent_background");_save_layer.appendChild(_transparent_back);var _loading_icon=document.createElement("div");_loading_icon.classList.add("loadingIconFullsize");_save_layer.appendChild(_loading_icon);var _ctx=document.getElementById("full_page_loader");_ctx.appendChild(_container)}}function hide_fullsize_loader(){var _elem=document.getElementById("fullsize_loader");_elem.parentElement.removeChild(_elem)}function isPortalMode(){var params=getURLParameters(this.document.URL);return(params.m==="portal"||window.location!==window.parent.location)}function isPortalSimulationMode(){var params=getURLParameters(this.document.URL);return(params.m==="portal"&&window.location===window.parent.location)}function checkPortalMode(){var item;if(isPortalMode()){item=document.getElementById("body_container");if(item){item.style.padding="0"}item=document.getElementById("body");if(item){item.style.padding="0"}item=document.getElementById("header_body_container");if(item){item.id="header_body_container_web"}item=document.getElementById("lcddiv");if(item){item.classList.remove("c_lcddiv")}item=document.getElementById("jh_lcd_display3");if(item){item.classList.remove("c_lcdcanvas")}}else{item=document.getElementById("page_container");if(item){item.style.display="block"}item=document.getElementById("header_container");if(item){item.style.display="block"}item=document.getElementById("footer_container");if(item){item.style.display="block"}}}function getURLParameters(url){var result={};var searchIndex=url.indexOf("#");if(searchIndex===-1){return result}var sPageURL=url.substring(searchIndex+1);var sURLVariables=sPageURL.split("&");for(var i=0;i<sURLVariables.length;i++){var sParameterName=sURLVariables[i].split("=");result[sParameterName[0]]=sParameterName[1]}return result}function setURLParameter(key,value){var params=getURLParameters(window.location.hash);params[key]=value;var new_hash="";for(var _key in params){new_hash+=new_hash===""?"#":"&";new_hash+=_key+"="+params[_key]}window.location.hash=new_hash}window.onerror=function(msg){if(typeof(SLdialogManager)!=="undefined"&&typeof(getText)==="function"){var _txt=getText("T_JS_ERROR");_txt+="<br><br>"+getText("L_ORIG_ERRDESCR")+":<br>"+msg;SLdialogManager.addDialog("js_error",{title:getText("L_ERROR"),text:_txt,important:true,buttons:[{id:"ok",name:getText("L_OK")}]},true).show("js_error")}else{if(typeof(getText)==="function"){alert(getText("L_ERROR")+":\n\n"+getText("T_JS_ERROR").replace(/<br>/g,"\n")+"\n\n"+getText("L_ORIG_ERRDESCR")+":\n"+msg)}else{alert("Error:\n\nAn error has occurred.\nPlease reload the page.\nIt may also help to clear the browser cache.\nIf the error persists, please contact the support.\nA detailed error description is necessary. This includes:\n* the firmware version of the Solar-Log™\n* the used browser\n* the action, which leads to this issue (was a particular page or function called?)\n* a screenshot of this dialog\n\nOriginal error description:\n"+msg)}}return false};</script>
</body>
</html>
Sorry, I think there was a mistake in the curl-command I copied. Could you please use the below one.
curl --header "Content-Type: application/json" --request POST --data '{ "878": None }' http://yoursolarlogip/getjp
Here is the response
{"878":[["01.01.18",33931259,0,0,0,0,0],["01.01.19",42088079,0,0,0,0,0],["01.01.20",563419,0,0,0,0,0],["01.01.21",38392210,0,0,0,0,0],["01.01.22",60447,0,0,0,0,0],["01.01.24",18667387,0,0,0,0,0]]}%
Here is the response
{"878":[["01.01.18",33931259,0,0,0,0,0],["01.01.19",42088079,0,0,0,0,0],["01.01.20",563419,0,0,0,0,0],["01.01.21",38392210,0,0,0,0,0],["01.01.22",60447,0,0,0,0,0],["01.01.24",18667387,0,0,0,0,0]]}%
Ok, seems that the request works but takes longer than expected. Can you indicate how long the request took approx. so that I can increase the timeout accordingly (of course with a bit margin).
I tried it several times, the timeout was between 10-15 seconds. Probabaly my SD card is degraded a bit, the response in the UI is still fine however.
Could you please provide debug log?
Sorry, not possible, as I had to instantly revert back to 9.3 to get my house back into running order...
Could you please provide debug log?
Sorry, not possible, as I had to instantly revert back to 9.3 to get my house back into running order...
Understood. Could you also try the curl-command and confirm it works for you as well and indicate the (approximate) time to the response?
I tried it several times, the timeout was between 10-15 seconds. Probabaly my SD card is degraded a bit, the response in the UI is still fine however.
Currently the timeout is set to 10 seconds. Unless @toyota-axel would suggest otherwise, I would increase it to 30 seconds for the time being.
Sorry, I think there was a mistake in the curl-command I copied. Could you please use the below one.
curl --header "Content-Type: application/json" --request POST --data '{ "878": None }' http://yoursolarlogip/getjp
Here is the response: {"878":"QUERY IMPOSSIBLE 000"}
As the SolarLOG integration did and still does work in 9.3, what was changed and on top of that - why?
As the SolarLOG integration did and still does work in 9.3, what was changed and on top of that - why?
In the update several additional features were included, in particular the possibility to authenticate with password (so that you do not have to enable the open JSON API anymore), additional data points from the SolarLog (in particular self consumption) and finally new devices for inverters and other devices connected to your SolarLog (currently there is one entity for power and energy for each additional device (see for more details the documentation ). I for example have my heatpump attached to the SolarLog and can now add this as separate device in the energy dashboard. As the SolarLog provides additional data points, it may be extended in the future (e.g. to get status/last error of attached devices).
Ok, thank you. Let's see if 10.3 will work here! Apart from that I'm trying to get rif of the SolarLOG entirely and manage the units directly but, that's a different story...
@toyota-axel: can you confirm if the issue has been resolved as expected?