Ich hab auch einen Deye aber den 2400er. Ebenso mit WLAN und Solarmananbindung.
Die API ist relativ einfach. Hier mein Skript
<?php
function datenholen($sn)
{
$token=getvalue(24584);
$appID=getvalue(49005);
$url = getvalue(38165)."/device/v1.0/currentData?appId=".$appID."&language=en&=";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Authorization: bearer ".$token,
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$data = "{
\"deviceSn\": \"".$sn."\"
}";
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$resp = curl_exec($curl);
curl_close($curl);
return $resp;
}
function logdaten($sn,$geraet)
{
$token=getvalue(24584);
$appID=getvalue(49005);
$url = getvalue(38165)."/device/v1.0/alertList?appId=".$appID."&language=en&=";
//Zeitstempel
$starttimestamp=mktime(0,0,0,date("m"),date("d"),date("y"));
$endtimestamp=time();
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Authorization: bearer ".$token,
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$data = "{
\"deviceSn\": \"".$sn."\",
\"endTimestamp\" : \"".$endtimestamp."\",
\"startTimestamp\" : \"".$starttimestamp."\"
}";
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$resp = curl_exec($curl);
curl_close($curl);
if ($resp<>"")
{
//Logdaten ins IPS Log schreiben
$logdaten=json_decode($resp,true);
if (is_array($logdaten))
{
if (array_key_exists("alertList", $logdaten))
{
$logdaten=$logdaten["alertList"];
//level 0:Hinweis, 1:Warnung, 2: Fehler
//influence 0:kein Einfluss, 1: Produktion, 2: Sicherheit, 3:Produktion&Sicherheit
$level="";
$influence="";
foreach ($logdaten as $eintrag)
{
switch ($eintrag["level"])
{
case 0: $level="MESSAGE";break;
case 1: $level="WARNING";break;
case 2: $level="ERROR";break;
}
switch ($eintrag["influence"])
{
case 0: $influence="kein Einfluss";break;
case 1: $influence="Produktion";break;
case 2: $influence="Sicherheit";break;
case 3: $influence="Produktion&Sicherheit";break;
}
Global_Log_Eintrag_erstellen($level,$geraet,"WRLOG - ".date("d.m.Y G:i:s",$eintrag["alertTime"])." ".$eintrag["alertName"]." ".$influence);
}
}
}
}
}
//eventuell Token holen
if (time()>=getvalue(52106)) IPS_RunScriptWait(56619); //ScriptID Token holen
//Logdaten Logger
logdaten("4047293442","WR Logger");
//Wechselrichter
logdaten("2103282105","WR");
//Modul 1
logdaten("2103282105-1","Modul1");
//Modul 2
logdaten("2103282105-2","Modul2");
//Modul 3
logdaten("2103282105-3","Modul3");
//Modul 4
logdaten("2103282105-4","Modul4");
//Logger
//var_dump(json_decode(datenholen("4047293442"),true));
//Wechselrichter
$wrdaten=json_decode(datenholen("2103282105"),true);
//var_dump($wrdaten);
if (is_array($wrdaten))
{
if (array_key_exists("dataList",$wrdaten))
{
//Update
setvalue(20614,mktime(intval($wrdaten["dataList"][7]["value"]),intval($wrdaten["dataList"][8]["value"]),intval($wrdaten["dataList"][9]["value"]),intval($wrdaten["dataList"][5]["value"]),intval($wrdaten["dataList"][6]["value"]),intval($wrdaten["dataList"][4]["value"])));
//Temperatur
if ($wrdaten["dataList"][39]["value"]>0) setvalue(42688,$wrdaten["dataList"][39]["value"]);
//PV1
//Ampere
setvalue(15569,$wrdaten["dataList"][17]["value"]);
//Leistung
setvalue(10271,$wrdaten["dataList"][21]["value"]);
//Volt
setvalue(12127,$wrdaten["dataList"][13]["value"]);
//PV2
setvalue(19442,$wrdaten["dataList"][18]["value"]);
setvalue(14759,$wrdaten["dataList"][22]["value"]);
setvalue(39168,$wrdaten["dataList"][14]["value"]);
//PV3
setvalue(20520,$wrdaten["dataList"][19]["value"]);
setvalue(54745,$wrdaten["dataList"][23]["value"]);
setvalue(48708,$wrdaten["dataList"][15]["value"]);
//PV4
setvalue(22639,$wrdaten["dataList"][20]["value"]);
setvalue(44506,$wrdaten["dataList"][24]["value"]);
setvalue(12708,$wrdaten["dataList"][16]["value"]);
}
else
{
Global_Log_Eintrag_erstellen("WARNING","WRLOGGER","WRLOG - Keine Daten empfangen");
}
}
Bei dir werden es nur zwei Anschlusse geben.
Was du brauchst ist die API-ID. Die bekommst du direkt beim Anbieter. Da reicht eni Mail. Die ID wird dir dann zugesendet.
Damit kannst du dann den Token ermitteln, den du benötigst.
Hier das Skript dazu
<?php
$url=getvalue(38165);
$user=getvalue(47023); //Benutzername vom Onlinezugang
$password=hash("sha256",getvalue(29895)); //Passwort vom Onlinezugang
$appId=getvalue(49005); //Daten kommen von Solarman
$appSecret=getvalue(41880); //Daten kommen Solarman
$erg=array();
$url = $url."/account/v1.0/token?appId=".$appId."&language=en&=";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$headers = array(
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$data ="
{
\"appSecret\": \"".$appSecret."\",
\"email\": \"".$user."\",
\"password\": \"".$password."\"
}";
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$resp = curl_exec($curl);
curl_close($curl);
$erg=json_decode($resp,true);
var_dump($erg);
if ($erg["success"] == true)
{
setvalue(24584,$erg["access_token"]);
setvalue(47369,$erg["refresh_token"]);
setvalue(52106,time()+$erg["expires_in"]);
}
else
{
setvalue(24584,"");
setvalue(47369,"");
setvalue(52106,"");
}
Die Daten sind allerdings immer ca. 10-15 Minuten hinten nach. Also für Echtzeitüberwachung ungeeignet. Dafür solltest du dir eine andere Art der Messung überlegen. Als Beispiel wäre z.b. ein Shelly Plug mit Verbrauchsmessung. Der misst auch in die umgekehrte Richtung.
Näheres auch hier
Wobei mich im Grunde nur die Temperatur interessiert. Den Rest bekomme ich von der Shelly bzw. ist für mich uninteressant.