Ankündigung

Einklappen
Keine Ankündigung bisher.

SMA Sunny Portal webabfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • saegefisch
    antwortet
    Eine Frage an Linux-Fraktion: Wie richte es am besten ein, dass das Perl-Script automatisch beim Hochfahren startet, aber auch wieder startet, wenn es aus irgend einem Grund nicht mehr läuft (z.B. weil das Perl-Script sich wegen eines Fehler beendet hat, ins Log geschrieben hat und jetzt wieder starten sollte). Denn das Script sollte eigentlich immer laufen, damit der HS dauerhaft und verlässlich die SMA-Daten von meiner PV bekommt.

    Herzlichen Dank schon im voraus!

    saegefisch

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    von Linux Nerd kann bei mir auch nicht die Rede sein - es hapert schon mit dem einrichten des automatsichen Starts - da muss ich auch immer erst suchen, wie und wo's geht. Aber ein RasPi sollte dafür genauso geiegnet sein. Oder ein Cubiboard/Cubitruck oder sonstiges. Solange die Pakete für Perl drauf sind, sollte das genaus klappen. Skript kopieren und mal manuell starten. Vorher im HS das IP-Telegramm einrichten und testweise mal nur einen Wert einlesen. Wenn geht, auf alle Werte ausbauen und autostart. Oder per putty im Hintergrund starten, sollte dann auch weiter laufen.

    Und: Warten auf Nerds...

    saegefisch.

    Einen Kommentar schreiben:


  • ArchieSmith
    antwortet
    Sieht ja schon mal cool aus.
    Leider bin ich jetzt nicht so der Linux Nerd.
    Habe einen RaspPi worauf Debian läuft.
    Oder man läßt irgendwo eine VM laufen.
    Evtl. kann man da ein fertiges Image basteln wo schon alles drin ist und man nur noch die entsprechenden Daten ändert.

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    Das Coding ist noch ungeschliffen, aber er geht!
    Sicher bekommen wir hier gemeinsam eine charmante Lösung hin. Also: Verbesserungen/Kritik/Vorschläge/Ideen willkommen!

    Code:
    #############################################
    #
    # A Module to read the values from the Sunny Portal Home Manager.
    #
    # Adapted version for a linux-server reading the data from the SunnyPortal
    # in intervals and push them as an IP-Telegramm to the homeserver
    #
    # Source of login/read/cookie-core: FHEM Forum: http://forum.fhem.de/index.php/topic,27667.0.html FHEM Wiki:
    # Author of login/read/cookie-core: Brun von der Gönne
    #
    # Author of adapted Version: "saegefisch" in KNX-User-Forum
    # Version: 1.0 from 20.05.2015: reflects changes in delivered data structure from SMA sunnyportal (was changed on 19.05.2015)
    #
    # Feel free to change it to your own needs. Use it on your own risk. But which risk? :)
    # - Maybe additional writing into a CSV?
    # - Or into an MySQL?
    # - Or into NAGIOS getting a fully-featured chart in the "Männervisu"?
    # - How could we get the data from the WRs (kWh) in addition (without Blutooth, but via LAN)?
    # Please share your changes in the Forum!
    #
    ##############################################
    
     use strict; use warnings; use POSIX; use Data::Dumper; use Time::HiRes qw(gettimeofday); use LWP::UserAgent; use HTTP::Cookies; use IO::Socket::INET;
    
    # Parameters
      my $username = '<sma_portaluser>';               # >>>>>> ATTENTION: User/password are visible!!! Use a user with guest-role only (no write permission)!!!
      my $password = "<sma-portalpasswort>";           # >>>>>> ATTENTION: User/password are visible!!! Use a user with guest-role only (no write permission)!!!
      my $interval = 20;                   # Update intervall in sec
      my $ip_hs = '<IP  des  HS>';         # IP-Adress of your gira homeserver in your LAN
      my $port_hs = '<port>';               # Port (use the same in IP-Telegramm-Settings!)
      my $count_err_max = 360;             # accepted count of requests with error before job will stop
      my $usernameField = "ctl00\$ContentPlaceHolder1\$Logincontrol1\$txtUserName";    # name-tag in HTTML of the input field of the form: User
      my $passwordField = "ctl00\$ContentPlaceHolder1\$Logincontrol1\$txtPassword";    # name-tag in HTTML of the input field of the form: Password
      my $loginButton = "ctl00\$ContentPlaceHolder1\$Logincontrol1\$LoginBtn";         # name-tag in HTTML of the input field of the form: Absenden-Button
      my $url_login = 'https://www.sunnyportal.com/Templates/Start.aspx';              # URL for login
      my $url_first = 'https://www.sunnyportal.com/FixedPages/HoManLive.aspx';         # First call after login
      my $url_data = 'https://www.sunnyportal.com/homemanager';                        # all following calls delivering the data
    
    
    # Prepare
    
      my $count_err = 0;
      my $ua = LWP::UserAgent->new;
      # Define user agent type $ua->agent('Mozilla/8.0'); Cookies
      $ua->cookie_jar(
        HTTP::Cookies->new(
          file => './log/mycookies.txt',
          ignore_discard => 1,
          autosave => 1
        )
      );
    
    # Log in
    
      my $loginp = $ua->post($url_login,[$usernameField => $username, $passwordField => $password, "__EVENTTARGET" => $loginButton]);
      my $testp = $ua->get($url_first);
      my $timestamp = time();
    
    # read in intervals as long as error count is low enough
    
      while ($count_err < $count_err_max) {
        get_data();
        sleep($interval);
      }
    
    
    # -------------
    
    sub get_data {
      $testp = $ua->get($url_data);
      my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
      $Monat += 1;  $Jahrestag += 1;  $Jahr += 1900;
      my $send_data = $Jahr . $Monat . $Monatstag . $Stunden . $Minuten . $Sekunden . ";";  # build own timestamp YYYYMMDDhhmmss
    
      if (($testp->content =~ m/FeedIn/i)&&!($testp->content=~ m/expired/i)) {
        my $string = $testp->content;
        $string =~ s/\{//;
        $string =~ s/\}//;
        my@array=split(/,/,$string);
    
        foreach (@array){
          chomp();
          $_ =~ s/"//g;
          my ($shm_name, $shm_val) = split(/:/,$_);
          # print "$shm_name : $shm_val\n";            # usefull for debugging and testing (output in many lines)
          if ($shm_name eq "Timestamp" or  $shm_name eq "DateTime" or $shm_name eq "Kind" or  $shm_name eq "__type") {next;}
          if ($shm_val ne "null" and $shm_val ne '[]' and $shm_val ne '{}') {
            $send_data = $send_data . "$shm_val;";
          } else {
            $send_data = $send_data . ";";
          }
        }
        $send_data = $send_data . "\n";
    
    #   Create socket for sending TCP
    
        my $socket = new IO::Socket::INET (
          PeerHost => $ip_hs,
          PeerPort => $port_hs,
          Proto => 'tcp',
        );
        die "cannot connect to the server $!\n" unless $socket;
        my $size = $socket->send($send_data);
        # print $send_data;                             # usefull for debugging and testing (output in one line = CSV-structured)
        # print "sent data of length $size\n";          # could be written into a log file
        shutdown($socket, 1);
        $socket->close();
        $count_err = 0;
    
      } else {
        $count_err++;
        print "ERROR - no proper data from SunnyPortal! Err-Count: $count_err\n";
      }
    }
    saegefisch
    Zuletzt geändert von saegefisch; 20.05.2015, 15:24.

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    Na, dann müssen wir uns selber helfen! Es folgt gleich das Coding zu einer funktionierenden Lösung auf Perl-Basis. Wie es bei mir funktioniert:

    * Neben dem HS läuft bei mir dauerhaft ein kleiner Intel NUC (core i3, Ubuntu Server) unter anderem als Backend für meine SAT>IP-Lösung (tvheadend) und was man sonst noch so als Service im Haus mal haben mag. Zum Beispiel genau ein Script, wie das folgende... Das Gerät braucht zwischen 4-8Watt. Man kann derlei auch auf einem NAS oder sonstwo installieren, ich persönlich möchte das stets getrennt wissen, um bei einem Fehler keine Daten zu gefährden (regelmäßiges Backup hin oder her).
    * Skript ablegen. Vielleicht schreibt ein Linux-Profi mal, wo man das am besten hinlegt. Ich habe mich für /usr/script/ entschieden, dort liegen meine Helferlein.
    * Perl muss natürlich installiert sein.
    * Im SMA SunnyPortal sollte man sich einen User mit eingeschränkten Rechten (sollte nichts ändern dürfen) anlegen, denn das Passwort steht im Klartext im Script!!!
    * Parametrisierung am Script-Anfang: <sma-portaluser>, <sma-portalpasswort>, ggf. Intervall, <IP des HS>, <Port>. Der Rest sollte universell sein.
    * Ausführung mit perl /usr/script/read_sma_sunnyportal.pl
    * Die automatsiche Ausführung des Scrits einrichten. Die Logik muss erkennen, wenn das Programm abbrach und es am besten automatsich wieder starten. Vielleicht kann ein Linux-Pfrofi hier was einfach und sinnvolles beisteuern. Den automatsichen Aufruf brauche ich auch noch... bis jetzt läuft es nur im putty-Fenster... aber es läuft! Siehe Screenshots
    * im HS habe ich iKos angelegt und ein IP-Telegramm-Empfang (siehe Screenshots). Als Absender-IP muss die IP des Linix-Servers notiert werden, auf dem das Script ausgeführt wird. Freie Wahl des Ports, sollte nur zum Wert im Script passen...
    * BINGO!

    SMA sunnyportal auslesen 1.JPGSMA sunnyportal auslesen 2.JPGSMA sunnyportal auslesen 3.JPGSMA sunnyportal auslesen 4.JPG

    saegefisch

    Einen Kommentar schreiben:


  • ArchieSmith
    antwortet
    Zitat von saegefisch Beitrag anzeigen
    Ausblick 2: Arbeitet nicht gira und SMA gemeinsam an einer Lösung dazu? Plugin? Ich hörte mal davon.
    Ja schade eigentlich. Ich warte auch drauf. Kunde sieht das Plugin für den QC letztes Jahr auf der L&B und möchte das gerne bei sich haben und bisher immer noch nix.
    Traurig eigentlich. Aber Gira hat da wohl im Moment andere Prioritäten.

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    Danke Thorsten für die klare Info. Sehr schade...

    Frage: Ist bekannt, ob gira an einer Lösung arbeitet, um den HS an dieser Stelle auf den aktuellen Stand der Technik zu heben? Denn so stellt sich der HS ja selber ins Abseits. Es gibt Bestrebungen, mitel- und langfristig http gänzlich durch https zu ersetzen. Es wird daher mehr und mehr Seiten geben, die gar kein http mehr anbieten werden und damit verliert sich er Nutzen des HS an dieser Stelle.
    http://www.heise.de/security/meldung...n-2631303.html

    Ausblick: Bis dahin wird wohl nur eine Tool helfen, dass die Daten von SMA per https abholt und andersweitig dem HS bereit stellt. Ich habe bereits ein Perl-Skrip begonnen, dass die Daten abholt und per IP-Telegramm in den HS pusht. Wenn es funktioniert, werde ich es hier gerne kommunizieren. Sicher gibt es hier Menschen, die viel besser programmierne können und die grundsätzliche Lösung dann charmant aufhübschen können - es wäre m.E. ein Gewinn für alle SMA-Nutzer. Ich suchte schon seit 2 Jahren nach einer einfachen Lösung und freue mich, hier einen Fortschritt zu sehen.

    Ausblick 2: Arbeitet nicht gira und SMA gemeinsam an einer Lösung dazu? Plugin? Ich hörte mal davon. Weiß jemand etwas zum Stand der Entwicklung der beiden Unternehmen dazu?

    saegefisch

    Einen Kommentar schreiben:


  • ThorstenW
    antwortet
    Hallo,

    der HS kann kein HTTPS....

    Gruß Thorsten

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    es gab heute wohl ein Update von SMA. Der Request liefert jetzt eine anderes Struktur:
    Code:
     
     {"__type":"LiveDataUI","Timestamp":{"__type":"DateTime","DateTime":"2015-05-19T12:18:57","Kind":"Unspecified"},"PV":7672,"FeedIn":5295,"GridConsumption":0,"DirectConsumption":2357,"SelfConsumption":2377,"SelfSupply":2357,"TotalConsumption":2357,"DirectConsumptionQuote":31,"SelfConsumptionQuote":31,"AutarkyQuote":100,"BatteryIn":20,"BatteryOut":0,"BatteryChargeStatus":99,"OperationHealth":null,"BatteryStateOfHealth":null,"InfoMessages":[],"WarningMessages":[],"ErrorMessages":[],"Info":{}}

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    Hi maeckes,
    mein Solarteur sagte mir damals, dass man entweder eine WebBox oder eine homemanger anschließen kann. Da ich einen Speicher plante mit dem Ziel der Eigenverbrauchsoptimierung und der HM hier gute Arbeit macht, war die Wahl für mich klar. Die "Kröte" war, dass der HM aber keine Daten rausrückt, sondern nur ins SunnyPortal. Die Webbox (aber nur die "große" von den beiden Ausführungen) konnte die WR-Daten lokal ablegen und abfragbar halten. Und sie war auch recht teuer zusätzlich, wo ich dei Daten doch eigentlich schon habe - nur eben nicht drankam. Bis heute, da liegen die Daten jetzt sooooo nah.

    Der oben beschriebene Weg wäre eine wunderbare Lösung, die eigenen Daten wieder zurück nach Hause zu holen und so zu verarbeiten, wie man es möchte: HS ins Archiv. Denkbar wäre natülich auch CSV, nagios oder sonst etwas. Abseits des HS natürlich nur mit einer Abfragelösung z.B. mit einem Linux-Server. Der HS scheint mir die natürliche Lösung ohne Umwege, da hier das Hirn des smart-homes steckt, dass uns alle hier im Forumn lockt und juckt und fasziniert und antreibt und frustriert und aufrafft und ...

    saegefisch

    Einen Kommentar schreiben:


  • maeckes
    antwortet
    Also ich beschäftige mich auch immer mal wieder mit dem Thema.
    Ich habe hier eine Sunny Webbox stehen.

    Habe mal etwas gegooglelt und herausgefunden, dass eine Abfrage der Daten (von der Webbox) wohl auch möglich ist.
    So könnte man die Daten direkt aus dem eigenen Netzwerk verwenden und ohne Umwege aus dem Netz.
    Der Homeserver würde die Daten ungefiltert bekommen und man könnte direkt die Diagramme daraus ableiten. Problem: Alte Daten bekommt man nicht rein.

    Gruß
    Maeckes

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    Anmerkung:
    * Mit dem SMA Energiemeter und dem SunnyIsland sind auch die Werte aus/ins Netz und aus/in die Batterie wohl sehr valide. Ein schöner Datenschatz für's Archiv...
    * Timestamp ohne die beiden letzten Stellen ist wohl standard-Unix. Die beiden Stellen hinten sind wohl die "Hunderstel-Sekunde".

    Nachtrag:
    Mir graut's gerade: Wir sind so nah dran, kann es sein, dass der HS kein HTTPS kann? <argh!!> Ich hoffe, ich liege falsch damit. Falls doch: Ist jemand etwas bekannt, ob gira an https arbeitet? Der Anteil an http ohne s wird jeden Tag spürbar geringer, sollte gira da nicht dringend nachbessern? Sonst würde der HS mal aus der Zeit fallen...
    Bis dahin könnte man nur mit einem kleinen Server (RasPi, NUC, NAS,...) den Zugriff machen und die Daten so ablegen, dass der HS sie im LAN lesen kann, oder?

    saegefisch
    Zuletzt geändert von saegefisch; 18.05.2015, 17:56.

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    Hallo SMA-Kollegen,

    ich habe seit 2 Jahren eine PV auf Nord- und Südseite mit 2 SMA WR und dem SMA homemanger und seit 1 Jahr einen SI 6.0H mit Li-Pufferspeicher. Einerseits sind das was und wie von SMA wirklich sehr cool und macht viel Spaß. Aber es gibt auch einige Punkte, die nicht so doll sind (iphone App: kein reconnect ohne Neustart, Darstellung auf ipad,...) oder auch, dass man an die Daten aus dem SunnyPortal nicht einfach herankommt.
    * Die Vorschläge für die Visu oben mit den Grafiken sind prima! Werde ich noch versuchen. Aber wie schon erwähnt: die sind x Minuten nachläufig.
    * Ich hätte die Daten sehr gerne pur, um damit was auch immer zu machen. Zum Beispiel: Tagsüber "lade" ich die Sonnenenergie per Wärmepumpe in mein Warmwasser. Wenn ich noch genug erzeuge (="Einspeisen" > Grenzwert), dann möchte ich zusätzlich danach noch per Heizpatrone höher heizen, um so die Wärmemenge weiter zu erhöhen (die WP hört früher auf). An schlechten Tagen reicht mir die WP völlig.

    Was ich zufällig gefunden habe beim Aufruf des SunnyPortals in mehreren Browser-Tabs: Beim ersten Aufruf

    https://www.sunnyportal.com/homemanager

    anmelden, dann kommt man in die übliche Portalsicht. Beim 2. und jedem folgenden Aufruf kommt das:
    Code:
    {"Timestamp":"\/Date(1431966281348)\/","PV":3013,"FeedIn":2075,"GridConsumption":0,"DirectConsumption":508,"SelfConsumption":938,"SelfSupply":508,"TotalConsumption":508,"DirectConsumptionQuote":17,"SelfConsumptionQuote":31,"AutarkyQuote":100,"BatteryIn":430,"BatteryOut":0,"BatteryChargeStatus":99,"OperationHealth":null,"BatteryStateOfHealth":null,"InfoMessages":[],"WarningMessages":[],"ErrorMessages":[],"Info":{}}
    Nach etwas googeln habe ich gesehen, dass auch man das auch schon andernorts gefunden hat. WIchtig: Es ist kein Parsen der Seite nötig, die sich mit jedem Umbau des Portals ändern könnte. Die Daten kommen recht gut lesbar heraus!

    Was ich leider noch nicht geschafft habe, das per Web-Abfrage im HS zu realisieren. Ich kann auf der Debug-Seite nicht sehen, warum es nicht klappt. Vielleicht hat jemand mehr Erfolg damit oder weiß besser, mit der Web-Abfrage umzugehen.
    Code:
    GET /homemanager HTTP/1.0 Authorization: Basic <meinHash> Host: https://www.sunnyportal.com Connection: Close
    Daten: Bezeichnung | https://www.sunnyportal.com | 443
    Senden: /homemanger | [] | [X] | <user> | <passwort>
    Empfang: Bleliebiger Text | Text "PV": | Wert als Klartext <iKo> | Beliebiger Text

    Ich bin für jede Hilfe dankbar, was auf Daten, Senden, Empfang drauf muss, damit man z.B. den ersten Wert in ein iKo schreiben kann. Die restlichen Datenblöcke sind dann leicht zu ergänzen

    => Das wäre für alle SMA-Nutzer eine recht saubere Lösung, die Werte Sekundengenau zu bekommen

    saegefisch
    Zuletzt geändert von saegefisch; 18.05.2015, 17:41.

    Einen Kommentar schreiben:


  • MrDuFF
    antwortet
    Hi,

    ja die Geschichte läuft jetzt seit ein paar Monaten schmerzfrei.
    Dars schon ne zeitlang her ist müsst ich zu Hause schaun was ich genau für ein Image auf dem Raspberry drauf hab. ( suche SMASpot u. Pvoutput )
    Gibt auf alle fälle ein fertiges Image für die BT Auslesung des SMA Wechselrichter , welcher dann die Daten an pvoutput.org sendet.
    Die Website kann man dann relativ leicht mit dem HS abfragen.

    Einen Kommentar schreiben:


  • Spielkind
    antwortet
    @MrDuff, kamst Du weiter mit Deinem RPi Ansatz? Falls ja, würde mich ein kurzer Erfahrungsbericht interessieren. Dank Dir!

    Grüße, Volker

    Einen Kommentar schreiben:

Lädt...
X