SMA Webbox

Habe diese Problem auch und leider noch keine Lösung gefunden. Es wird einfach keine Datei geschrieben, egal welche Parameter ich auch verändere.

Aber bei dem Zugriffsproblem habe ich evtl. einen Tipp: Die Passwörter werden zwischen Portal und SunnyExplorer abgeglichen. Du mußt im Explorer das gleiche Passwort verwenden wie im Portal.

Hallo,

ich hatte oder habe von Zeit zur Zeit ähnliche Probleme. Schaut doch mal in den Taskmanager unter Porzesse ob der Sunnyexplorer schon aktiv ist. Bitte aber auch den Haken „Prozesse aller Benutzer anzeigen“. Muste erst alle sunnyexplorer schliessen und erst dann ging es wieder. Wobei ich noch keinen Ausfall im Sunnyportal hatte. Das hat bis jetzt immer sehr gut funktioniert.

Gruß Stephan

Ich hab inzwischen die Software neu installiert und habe ein paar Probleme beseitigen können, aber schreiben tut er immer noch nicht. Was mich richtig fertig macht ist die Tatsache, dass es am Anfang für einen halben Tag ging. Und dann gab es Probleme mit noch laufender Instanzen. Ich hatte das Skript im 5 Minuten Takt laufen lassen. Aber nun geht nicht mal
mehr das schreiben von Hand in der Console. Echt blöde. Hatte auch schon den ganzen Wechselrichter inkl Gateway gekappt, aber hat auch nix gebracht. Schade, dann muss wohl doch noch ein extra Zähler auf Modbus Basis her. :frowning:

Oder hat jemand noch ne alte Sunny Explorer Version für mich, die ich mal testen könnte?

Okay, dass ist verrückt. Hatte es gestern verzweifelt aufgegeben. Heute starte ich das gleiche Skript nochmal, und schon funktioniert es wieder. Hmm… mal sehen wie lange.

Was für Abfragezeiten habt ihr so laufen?

Hallo,
ich bin gerade dabei die Anbindung aus dem Portal einzusetzten. Vom Prinzip bekomme ich auch Daten zurück (ich verwende das Skript aus Beitrag #76). Jedoch läuft es bei mir auf einen Fehler:

Warning: Cannot auto-convert to Float from Variant. Error: Could not convert variant of type (String) into type (Double) in D:\IP-Symcon\scripts\39523.ips.php on line 108

Warning: substr() expects parameter 1 to be string, array given in D:\IP-Symcon\scripts\39523.ips.php on line 95

Warning: Cannot auto-convert to Float from Variant. Error: Could not convert variant of type (String) into type (Double) in D:\IP-Symcon\scripts\39523.ips.php on line 108

Warning: substr() expects parameter 1 to be string, array given in D:\IP-Symcon\scripts\39523.ips.php on line 95

Fatal error: Maximum execution time of 30 seconds exceeded in D:\IP-Symcon\scripts\39523.ips.php on line 113
Abort Processing during Fatal-Error: Maximum execution time of 30 seconds exceeded
Error in Script D:\IP-Symcon\scripts\39523.ips.php on Line 113

Dies führt natürlich dazu das das Script abbricht…

Ideen ?

Vielen dank für die Unterstützung.

@wawibu:

Ich hatte bisher dein Script aus #76 im Einsatz (etwas angepasst).
Leider funktioniert es seit ein paar Tagen nicht mehr.

Die Anmeldung scheint irgendwie zu laufen (cookie_sma.txt wird geschrieben), allerdings werden dann keine Daten mehr geholt (JSON is leer). Ich vermute, dass der Login nicht mehr richtig funktioniert. Wenn ich mich manuell auf der Webseite anmelde, funktioniert mein User.

Wie sieht es bei Dir aus? Geht es noch? Ideen?

Danke,

Marco

EDIT (25.02.2016):

Offensichtlich scheint der User Agent der in Curl angegeben ist nicht mehr vom Sunnyportal akzeptiert zu werden.
Beim debuggen habe ich herausgefunden, dass ein „Login failed“ zurück geliefert wird.

Wenn im Script aus #76 folgende Zeile ersetzt wird, dann geht es wieder:


//curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"); --> geht nicht mehr
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)");

Hallo Leute,

ich bin totaler Neuling mit IPS und versuche derzeit meine PV-Anlage (SMA mit Sonny Home Manager) in IPS zu integrieren. Einen Senec.ies G1 Speicher habe auch noch den ich gerne in IPS darstellen würde, aber zuerst mal die PV-Anlage.

Mein System besteht aus einem Zotac auf dem Kubuntu LTS (aktuell) installiert ist. IPS läuft einwandfrei. Ich setze ebenfalls das Skript aus #76 ein. Damit ich schneller ein Ergebnis bekomme, habe ich derzeit - for ($i=1; $i <= 2; $i++){ // Werte 30 Minuten lang holen - gesetzt. Die Korrektur aus dem Beitrag zuvor habe ich ebenfalls eingebaut. Das Cookie - File wird angelegt. Wenn ich das Skript laufen lasse bekomme ich nachfolgende Skriptausgabe:

Warning: Invalid argument supplied for foreach() in /var/lib/symcon/scripts/15334.ips.php on line 84

In Zeile 84 steht: foreach ($result as $key => $value) {

Ob Werte vom Portal gelesen werden weiß ich nicht, da ich noch nicht weiß wo/wie man solche Dinge nachsehen kann.

setze ich print_r($result) vor Zeile 84 kommt kein Ergebnis, insofern denke ich, dass keine Werte aus dem Portal gelesen werden.

Weiß jemand Rat? Vielen Dank für Eure Hilfe!

Ziel ist, daß ich alles in der Art der freizugänglichen IPS Demo darstellen kann … Irgendwann mit Speicher und Ertragserwartung

Dietmar

Hallo Gemeinde,

seit ein paar Tagen läuft das Skript auf Post 76 bei mir nicht mehr fehlerfrei.
Das Skript bricht mit folgendem Fehler ab:

Abort Processing during exceed of maximal ErrorCount: Cannot auto-convert value for parameter VariableValue
   Error in Script /var/lib/symcon/scripts/34194.ips.php on Line 135

das ist der Code von Zeile 135
SetValue ($vid,$value); // Schreibe Wert in die Variable

mich wundert ausserdem, dass der JSON String bei mir so aussieht:

{"__type":"LiveDataUI","Timestamp":{"__type":"DateTime","DateTime":"2016-08-09T11:07:20","Kind":"Unspecified"},"PV":2131,"FeedIn":1919,"GridConsumption":0,"DirectConsumption":null,"SelfConsumption":212,"SelfSupply":212,"TotalConsumption":212,"DirectConsumptionQuote":null,"SelfConsumptionQuote":10,"AutarkyQuote":100,"BatteryIn":null,"BatteryOut":null,"BatteryChargeStatus":null,"OperationHealth":null,"BatteryStateOfHealth":null,"ModuleTemperature":null,"EnvironmentTemperature":null,"WindSpeed":null,"Insolation":null,"InfoMessages":[],"WarningMessages":[],"ErrorMessages":[],"Info":{}}

Hier ist mein Skript:

// Hier die LogIn Daten für das SunnyPortal eintragen:
$login_email = '****************';
$login_pass = '*****************';

// Hier muss die ID der neu angelegten Kategorie eingetragen werden und als ID der Parent der neu angelegten Kategorie. Bei mir liegen alle Scripte in der Kategorie 'Scripte'
$ParentID = IPS_GetCategoryIDByName ("SMA", 54812 /*[Schnittstellen]*/);

// *****************************************************************************
// Ab hier braucht nichts mehr verändert werden
// *****************************************************************************

// Erster Aufruf und Anmeldung am SunnyPortal
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.sunnyportal.com/Templates/Start.aspx');
# ctl00$ContentPlaceHolder1$Logincontrol1$txtUserName    << Feldbezeichnung für Benutzername
# ctl00$ContentPlaceHolder1$Logincontrol1$txtPassword    << Feldbezeichnung für Passwort
# ctl00$ContentPlaceHolder1$Logincontrol1$LoginBtn    << Feldbezeichnung für LogIn Button
curl_setopt($ch, CURLOPT_POSTFIELDS,'ctl00$ContentPlaceHolder1$Logincontrol1$txtUserName='.urlencode($login_email).'&ctl00$ContentPlaceHolder1$Logincontrol1$txtPassword='.urlencode($login_pass).'&__EVENTTARGET=ctl00$ContentPlaceHolder1$Logincontrol1$LoginBtn');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie_sma.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_sma.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30');
curl_setopt($ch, CURLOPT_REFERER, "https://www.sunnyportal.com");
$result = curl_exec($ch);

 for ($i=1; $i <= 11; $i++){  // Werte 3 Minuten lang holen
// for ($i=1; $i <= 117; $i++){  // Werte 30 Minuten lang holen

    // Zweiter Aufruf unter Verwendung des erzeugten Cookies um die Daten abzurufen
    curl_setopt($ch, CURLOPT_URL,"http://www.sunnyportal.com/homemanager");
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_sma.txt');
    curl_setopt($ch, CURLOPT_POST, 0);
    $result = curl_exec($ch);
    $result = json_decode($result,true);

    foreach ($result as $key => $value) {
        $vid = @IPS_GetVariableIDByName($key,$ParentID);
        if ($vid === false) {                                                         // überprüfe ob Variable existiert - falls nicht, werden diese neu angelegt
            $vid = IPS_CreateVariable(2);
          if (strpos($key,'Message') !== false or strpos($key,'Info') !== false or $key == "Timestamp"){    // setzte Variabletyp auf String, für Text-Meldungen
             $vid = IPS_CreateVariable(3);
            }
          IPS_SetParent($vid, $ParentID);
          IPS_SetName($vid, $key);
       }
       if ($key == "Timestamp") {
         $value1 = (substr($value,6,10));
         $value = date("d.m.Y \- H:i:s \U\h\r",$value1);
       }
       
       if (is_array($value)){                                                                 // Warnung, Info und Error sind String Arrays
          setValue($vid,"");                                                         // Variable löschen, da ein leeres Array übermittelt wird, wenn keine Nachricht vorliegt
             foreach ($value as $message) {
                SetValue($vid,$message);                                                // Schreibe Nachricht in die Variable
            }
        } else {                                                                      // restliche Daten werden hier in die entsprechenden Varibalen geschrieben
            if ($value == "") {                                                        // bei NULL wird der Wert mit 0 überschrieben
              $value=0;
            }
        SetValue ($vid,$value);                                                    // Schreibe Wert in die Variable
		  }
    }

    sleep (15); // 15 Sekunden warten bevor die nächsten Daten geholt werden

};
curl_close($ch);

?>

läuft es bei euch noch fehlerfrei?

Hallo,

hat jemand eine Lösung für das Skript-Problem zum Auslesen aus dem Sunny Portal?

Danke und Grüße

Frank.

Hallo zusammen,

hat das Problem schon jemand lösen können?
Offensichtlich hat SMA die Website überarbeitet und die Daten werden nun in einem anderen Format aufbereitet.

Wäre schön wenn es hier weitergeht.

Danke Speed

Hallo,

ich habe nun ein wenig gesucht und denke, dass der Timestamp nun offensichtlich in folgendem Format in der JSON Datei geliefert wird:

„Timestamp“:{"__type":„DateTime“,„DateTime“:„2017-07-07T19:41:07“,„Kind“:„Unspecified“}

In der Doku des Skript steht aber, dass der Timestamp so erwartet wird:
[Timestamp] => /Date(1418892056131)/

Damit dürfte die Berecchnung/Formatierung in Zeile 86:
if ($key == „Timestamp“) {
$value1 = (substr($value,6,10));
$value = date(„d.m.Y - H:m:s \U\h\r“,$value1);

nicht mehr funktionieren?!?

Die Frage, und da sind meine Anfängerkenntnisse leider zu wenig, ist nun, wie muss dieser Teil angepasst werden, damit es wieder spielt?

Vielleicht hat jemand eine Idee - wäre super!

Schöne Grüße
Speed

Hallo zusammen,

seit gestern (Samstag) läuft das Skript bei mir nicht mehr. Offenbar hat sich der Inhalt vom Ergebnis-String des Sunny Portal vollkommen verändert. Ich kann in dem Ergebnis keine Einzige der notwendigen Variablen mehr finden.

Könnt Ihr das bestätigen?

Grüße

Frank

Ich hätte auch Interesse die aktuellen Daten vom Sunny Portal auszulesen. Gibt es hier schonw as Neues?

Sind die Veränderungen so groß gewesen, dass damit das schöne Skript garnicht mehr funktioniert oder angepasst werden kann?
Oder gibt es zwischenzeitlich andere Lösungen, die ich noch nicht gefunden habe?

Das Skript funktioniert nicht mehr.

Ich habe die Daten inzwischen über Modbus ausgelesen. War ein langer Weg, funktioniert nun aber sehr zuverlässig.

Hatte mir die Infos dazu aus diesem Form und bei Google zusammengesucht.

Hallo

@fdzaebel:

Ich habe die Daten inzwischen über Modbus ausgelesen

ich bekomme demnächst einen SMA SunnyBoy 4 und möchte die Daten ebenfalls über ModBus übertragen. Wo werden sie gespeichert? Windows? Linux? Raspberry? Ich hätte sie gerne auf dem Raspi. Wäre dies direkt möglich oder wird Zusatzhardware benötigt?

Grüße, Gerhard

Hi Gerhard

Die selbe Frage habe ich auch.
Ich bekomme demnächst den SMA Homemanager 2.0.
Brauche ich dazu noch eine Hardware - Adapter oder ähnliches zur Verbindung mit IPS?

Schönen Gruß
Egon

Den SMA Homemanager kann man über TCP auslesen. Er brüllt wie die SMA Wechselrichter per Multicast ins Netz. Das muss man aber ggfls. vom Solateur aktivieren lassen. Es gibt dafür ein Modul von Codeking, ich verwende den SMA-EM Daemon auf einen Raspberry als Endpoint für den Multicast-Driss in einem extra VLAN und lade per Webhook nach IPS - und zusätzlich zu InfluxDB/Grafana