Hallo,
Versuche den Energy Manager em 300 einzubinden.
Dazu gibt's eine tolle Anleitung vom Hersteller wie man per json zugreifen kann und realisierte Beispiele im Netz.
Ich würde das gerne über httmod realisieren, sehe aber dass es doch nicht so trival ist, wie zunächst gedacht.
Der Zugriff soll lt Hersteller in folgenden 3 schritten erfolgen.
wie bringe ich dies httpmod bei?
Eine json schnittstellen Beschreibung gibts vom hersteller.
https://www.tq-automation.com/content/download/10996/file/TQ%20Energy%20Manager%20-%20JSON-API.0104.pdf (https://www.tq-automation.com/content/download/10996/file/TQ%20Energy%20Manager%20-%20JSON-API.0104.pdf)
Im Netz gibt's auch viele Beispiele wie man über json auslesen kann. Beispiel:
https://www.photovoltaikforum.com/thread/128382-skript-zum-auslesen-des-b-control-energy-manager-em300/ (https://www.photovoltaikforum.com/thread/128382-skript-zum-auslesen-des-b-control-energy-manager-em300/)
https://openhabdoc.readthedocs.io/de/latest/B-Control_EM_example/#auslesen-der-daten-via-json (https://openhabdoc.readthedocs.io/de/latest/B-Control_EM_example/#auslesen-der-daten-via-json)
Der Hersteller zeigt es selbst am Beispiel:
# curl --cookie-jar cookie.txt 192.168.178.24/start.php
{
http_statuscode:200,
ieq_serial:30220810060521,
serial:30220810060521,
app_version:0.42,
ieqbox_label:30220810060521,
auth_mode:pass,
authentication:false
}
# curl -b cookie.txt --cookie-jar cookie.txt -d
login=0000000042&password=aV12tz01&save_login=1 192.168.178.24/start.php
{
http_statuscode:200,
ieq_serial:30220810060521,
serial:30220810060521,
app_version:0.42,
ieqbox_label:30220810060521,
auth_mode:pass,
authentication:true
}
# curl -b ./cookie.txt -X GET http://192.168.178.24/mum-webservice/data.php
Wie kann ich das am besten über httpmod realisieren, insbesondere die 3 Urls incl Authentifizierung zu definieren?
Das reine Auslesen der json daten nach den 3 url aufrufen wäre dann wohl der einfache teil, den ich mir auch zutraue.
gestartet habe ich mit:
define EnergyManager HTTPMOD http://192.168.28.83/start.php 60
attr EnergyManager enableCookies 1
Ich habe mir auch das Beispiel de Rika Palletofen angesehen, schein mir aber auch nicht ganz zu passen.
Schau dir mal die sid... Attribute.
Als Haupt-URL (in DEF) eher die Ziel-URL (wo Du die Daten dann auslesen kannst - ...data.php). Dort gucken, was er zurückgibt wenn nicht angemeldet, und entsprechend reAuthRegex setzen.
enableCookies auf 1 setzen
sid01URL ....start.php
sid01IdRegex serial:([\d]+)
sid02URL ... start.php
sid02Data login=$sid&password=passwort
Wenn serial immer gleich ist, kannst Du dir die sid01... Attribute sparen und die richtige Serialnummer direkt in sid02Data schreiben
@amenomade
Vielen Dank fuer Deinen Ansatz zur Problemlösung.
Habe manuell das Auslesen hinbekommen mit folgendem code:
define EnergyManager HTTPMOD http://192.168.28.83/mum-webservice/data.php 60
setuuid EnergyManager 5cb9bbb2-f33f-70a6-65b5-c6fcf874498805dd
attr EnergyManager userattr get01JSON get01Name get02JSON get02Name get03JSON get03Name get04JSON get04Name getHeader1 reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name
attr EnergyManager enableCookies 1
attr EnergyManager getHeader1 Content-Type: application/json
attr EnergyManager reading01JSON 1-0:1.4.0*255
attr EnergyManager reading01Name Wirkleistung_Bezug_W
attr EnergyManager reading02JSON 1-0:1.8.0*255
attr EnergyManager reading02Name Wirkenergie_Bezug_Wh
attr EnergyManager reading03JSON 1-0:2.4.0*255
attr EnergyManager reading03Name Wirkleistung_Einspeisung_W
attr EnergyManager reading04JSON 1-0:2.8.0*255
attr EnergyManager reading04Name Wirkenergie_Einspeisung_Wh
attr EnergyManager room Energie
define FileLog_EnergyManager FileLog ./log/EnergyManager-%Y-%m-%d.log EnergyManager
setuuid FileLog_EnergyManager 5cb9c216-f33f-70a6-47ba-5fe7096e16ca8f1a
attr FileLog_EnergyManager room Energie
Beim Energymanager Em300 kann man die Authentifierung auf ohne password einstellen.
Danach habe ich den obigen code in der definition auf die start.php geändert und aktualisiert.
Dann scheint er sich informationen aus der start.php session irgendwie (cookie?) zu merken und eine erneute Anderung der Definition auf die .data.php laesst einen alle Daten lesen.
Ich vermute dass dies nur eine loesung auf zeit ist daher also doch eine sid loesung (vereinfacht?) benoetigt wird. Ein einfacher Aufruf der Start.php bei einer bestimmten Bedingung wäre ausreichend. Wie finde ich diese Bedingung und wie wäre der Aufruf der Start php fuer diesen Fall? Im Browser sieht man keine authz-Abfrage. Die daten werden sofort aufgerufen....
Zitat von: zwehn am 20 April 2019, 12:20:24
Ich vermute dass dies nur eine loesung auf zeit ist daher also doch eine sid loesung (vereinfacht?) benoetigt wird. Ein einfacher Aufruf der Start.php bei einer bestimmten Bedingung wäre ausreichend. Wie finde ich diese Bedingung und wie wäre der Aufruf der Start php fuer diesen Fall? Im Browser sieht man keine authz-Abfrage. Die daten werden sofort aufgerufen....
Wie gesagt:
ZitatDort gucken, was er zurückgibt wenn nicht angemeldet, und entsprechend reAuthRegex setzen.
@amenomade Danke, habe die Webseite die zum Fehler führt bei fehlender Auth gefunden:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="imagetoolbar" content="no" />
<title>B-control Energy Manager</title>
<link href="/mum-webservice/minify.php?css&l=de_DE" rel="stylesheet"
type="text/css" media="screen" />
<link href="/mum-webservice/minify.php?css.print&l=de_DE" rel="stylesheet"
type="text/css" media="print" />
<link rel="stylesheet" href="/mum-webservice-static/theme/jquery.ui.all.css">
<script src="/mum-webservice-static/resources/jquery-core/jquery-1.9.1.min.js"></script>
<script src="/mum-webservice-static/resources/jquery-ui/jquery.ui.core.min.js"></script>
<script src="/mum-webservice-static/resources/jquery-ui/jquery.ui.widget.min.js"></script>
<script src="/mum-webservice-static/resources/jquery-ui/jquery.ui.datepicker.min.js"></script>
<script src="/mum-webservice-static/resources/jquery-ui/jquery.ui.button.min.js"></script>
<script src="/mum-webservice-static/resources/jquery-ui/jquery-ui.min.js"></script>
<!--[if lte IE 8]><script type="text/javascript" src="/mum-webservice/minify.php?js.ie&l=de_DE"></script><![endif]-->
<script type="text/javascript" src="/mum-webservice/minify.php?js&l=de_DE"></script>
<link rel="stylesheet" href="/mum-webservice-static/resources/c3/c3.min.css" type="text/css">
<script src="/mum-webservice-static/resources/d3/d3.min.js" charset="utf-8"></script>
<script src="/mum-webservice-static/resources/c3/c3.min.js"></script>
<script>jQuery.noConflict();</script>
</head>
<body onload="error_redirect();">
<div id="container">
<div id="box">
<div id="kopf">
<div class="headline_logo">
<img src="/mum-webservice-static/theme/logo.png" style="display: block; margin-top: 12px; margin-left: 24px;">
</div>
<div class="headline_right">
B-control Energy Manager
</div>
</div>
<h1 id="print_title">
<span id="print_title_1"></span><br> <span id="print_title_2"></span>
</h1>
<div id="content">
<div id="left">
<div class="menu_header">
<a href='#' id='home_button' class='home' onClick='meter_selector.select(0);toggle_left_menu_settings(0);'></a>
</div>
<div id="menu">
</div>
</div>
<div id="inhalt">
<div class="inhalt_header">
<a id="help_link" href="javascript:showDiv('info')" class="help"></a>
</div>
<div id="select_list">
</div>
<div id="inhalt_content">
<h2>Fehler 404</h2>
<div class="inhalt_content">
<p>Die angeforderte Seite konnte nicht gefunden werden.<br />
<br />
<a href="/">Sollten Sie in 5 Sekunden nicht automatisch zurück zur Startseite weitergeleitet werden, so klicken Sie bitte hier.</a>
</p>
</div>
</div>
<div id="navi_inhalt" class="navi_inhalt">
<ul id="navi_list">
</ul>
</div>
</div>
<div id="content_indicator">
</div>
<div id="activity_indicator">
<div style="position: absolute; top: 50%; left: 50%; height: 30%; width: 50%; margin: -15% 0 0 -25%;">
<img src="/mum-webservice-static/theme/activity_indicator.gif" alt="" />
<span id="activity_indicator_text" style="color: #000000; font-style: italic;">Einen Moment noch ...</span>
<input id="activity_indicator_button" type="button" class="button_off" style="display:none; margin:5px auto;" value="Abbrechen">
</div>
</div>
<div id="info" class="popup_container">
<div class="popup_grayout"></div>
<div class="popup_window">
<div class="popup_content_header">
<h2>Hilfe</h2>
<input type="image" src="/mum-webservice-static/theme/bg_exit.png" style="float:right;" onclick="javascript:hideDiv('info')">
</div>
<div class="popup_content">
<div style="display: table-cell; vertical-align: middle; background: none !important;">
<p id="help">
</p>
</div>
</div>
<p class="popup_p_buttons">
<input type="button" class="button_off" style="display:block; margin:5px auto;" onclick="javascript:hideDiv('info')" value="Danke, Hilfe schließen">
</p>
</div>
</div>
</div>
<div id="footer" class="footer">
<div id="footer_left" class="footer_left">
© B-control, 2015 - 2017 |
<a href="info_text.php?imprint">Impressum</a> |
<a href="info_text.php?privacy_policy">Datenschutz</a> |
<a href="info_licenses.php">Lizenzen</a>
</div>
<div id="footer_right" class="footer_right">
Support: <a href="http://www.b-control.com" target="_blank">www.b-control.com</a>
</div>
</div>
<div id="teach_in" class="popup_container">
<div class="popup_grayout"></div>
<div class="popup_window">
<div class="popup_content_header">
<span id="header_text"></span>
<input type="image" id="teach_in_wizard_abort" src="/mum-webservice-static/theme/bg_exit.png" style="float:right;" onclick="teach_in_wizard_abort();">
</div>
<div id="teach_in_content" class="popup_content"></div>
</div>
</div>
<div id="teach_in" class="popup_container">
<div class="popup_grayout"></div>
<div class="popup_window">
<div class="popup_content_header">
<span id="header_text"></span>
<input type="image" id="teach_in_wizard_abort" src="/mum-webservice-static/theme/bg_exit.png" style="float:right;" onclick="teach_in_wizard_abort();">
</div>
<div id="teach_in_content" class="popup_content"></div>
</div>
</div>
<div id="error" class="popup_container">
<div class="popup_grayout"></div>
<div class="popup_window">
<div class="popup_content_header"></span>
<span id="error_headline"></span>
<input type="image" src="/mum-webservice-static/theme/bg_exit.png" style="float:right;" onclick="javascript:hideDiv('error')">
</div>
<div id="error_content" class="popup_content">
<div style="display: table-cell; vertical-align: middle; background: none !important;">
<p id="error_category"></p>
<p id="error_text"></p>
<p id="error_progress">
<span id="progress_text"></span>
</p>
</div>
</div>
<p id="error_buttons" class="popup_p_buttons">
<input type="button" class="button_off" style="display:block; margin:5px auto;" onclick="javascript:hideDiv('error')" value="Danke, habe ich gelesen">
</p>
</div>
</div>
</div>
</div>
</body>
</html>
Habe daher auf "Fehler 404" getestet mit folgendem code:
define TesterEM HTTPMOD http://192.168.28.83/mum-webservice/data.php 60
setuuid TesterEM 5cbafd65-f33f-70a6-0b8a-aaaea2f3aaf70c97
attr TesterEM userattr getHeader1 sid01Data sid01URL
attr TesterEM enableCookies 1
attr TesterEM extractAllJSON 1
attr TesterEM getHeader1 Content-Type: application/json
attr TesterEM reAuthRegex "Fehler 404"
attr TesterEM room Energie
attr TesterEM sid01Data " "
attr TesterEM sid01URL http://192.168.28.83/start.php
attr TesterEM verbose 5
Leider entscheidet fhem laut log, dass keine Authentifizierung benötigt wird:
2019.04.20 15:26:24 5: HttpUtils url=http://192.168.28.83/mum-webservice/data.php
2019.04.20 15:26:24 4: IP: 192.168.28.83 -> 192.168.28.83
2019.04.20 15:26:24 5: HttpUtils request header:
GET /mum-webservice/data.php HTTP/1.0
Host: 192.168.28.83
User-Agent: fhem
Accept-Encoding: gzip,deflate
Cookie: PHPSESSID=fbe256c1aa0b732cd4c5bd345de06d56
Content-Length: 0
Content-Type: application/x-www-form-urlencoded
2019.04.20 15:26:25 4: http://192.168.28.83/mum-webservice/data.php: HTTP response code 200
2019.04.20 15:26:25 5: HttpUtils http://192.168.28.83/mum-webservice/data.php: Got data, length: 24
2019.04.20 15:26:25 5: HttpUtils response header:
HTTP/1.0 200 OK
X-Frame-Options: DENY
X-Content-Security-Policy: allow 'self'
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: application/json
Content-Length: 24
Connection: close
Date: Sat, 20 Apr 2019 13:26:24 GMT
2019.04.20 15:26:25 4: TesterEM: Read callback: request type was update retry 0,
Body: {"authentication":false}
2019.04.20 15:26:25 5: TesterEM: JSON Flatter called : prefix , ref is HASH(0x4dfcd08)
2019.04.20 15:26:25 5: TesterEM: JSON Flatter sets authentication to false
2019.04.20 15:26:25 4: TesterEM: extracted JSON values to internal
2019.04.20 15:26:25 5: TesterEM: GetCookies is looking for Cookies
2019.04.20 15:26:25 5: TesterEM: ExtractSid called, context reading, num
2019.04.20 15:26:25 5: TesterEM: CheckAuth is checking buffer with ReAuthRegex "Fehler 404"
2019.04.20 15:26:25 4: TesterEM: CheckAuth decided no authentication required
2019.04.20 15:26:25 5: TesterEM: Read sets reading authentication to value false of JSON authentication
2019.04.20 15:26:25 5: TesterEM: Read starts parsing response to update with defined readings:
2019.04.20 15:26:25 4: TesterEM: Read response to update matched Reading(s) authentication
2019.04.20 15:26:25 5: TesterEM: HandleSendQueue called, qlen = 0
Ich finde es komisch, da 404 nw "Page not found" bedeutet.
Anyway.... in der Seite kommt
Zitat<h2>Fehler 404</h2>
und NICHT
Zitat"Fehler 404"
reAuthRegex sollte dann Fehler 404 ohne Quotes sein.
Ich glaube aber eher, dass das letzte Ergebnis der Fehler wenn nicht authentifiziert ist:
ZitatBody: {"authentication":false}
Dann lieber
attr <name> reAuthRegex "authentication":false
@amenomade das wars tatsächlich, Vielen Dank bin super happy und dankbar Deine Unterstützung und dann noch mit einer solchen schnellen Reaktionszeit bekommen zu haben!!!