Ankündigung

Einklappen
Keine Ankündigung bisher.

SMA Sunny Portal webabfrage

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

    #16
    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.

    Kommentar


      #17
      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

      Kommentar


        #18
        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

        Kommentar


          #19
          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":{}}

          Kommentar


            #20
            Hallo,

            der HS kann kein HTTPS....

            Gruß Thorsten

            Kommentar


              #21
              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

              Kommentar


                #22
                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.

                Gruß Andree Czybulski

                Kommentar


                  #23
                  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

                  Kommentar


                    #24
                    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.

                    Kommentar


                      #25
                      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.
                      Gruß Andree Czybulski

                      Kommentar


                        #26
                        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.

                        Kommentar


                          #27
                          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

                          Kommentar


                            #28
                            Mittlerweile habe ich mir ganz banal mit einem start des perl-scripts im Hintergrund geholfen - dazu muss man nur ein "&" hinten anhängen. Im SSH bekommt man dann eine PID zurück geliefert. Durch das angehängte "disown" läuft der Prozess auch weiter, wenn man die putty-session schließt.
                            Code:
                             perl /usr/script/read_sma_sunnyportal.pm & disown
                            Aber schön ist die Lösung natürlich nicht, besser wäre sicher eine Lösung, die automatsich startet auch nach einem reboot und auch nach einem Programm-Abbruch. Daher gilt meine bitte an Linux-gewohnte User von oben weiter.

                            saegefisch

                            PS: Irgendwie dachte ich, dass eine "SMA-Daten-in-KNX-Lösung" hier mehr Reaktion auslösen würde - mir scheint es derzeit die erste einfache und rasch umsetzbare Lösung zu sein. Gibt es denn gar nichts daran zu verbessern? Ich hatte mit einem regen Dialog mit Forenkollegen gerechnet... Oder habe ich irgend etwas unglücklich formuliert und es gibt daher keine Reaktionen?

                            Kommentar


                              #29
                              Zur Info: Da gira den HS in meiner Wahrnehmung im Prinzip aufgegeben hat bzw. zumindest nicht in der Weise weiter entwickelt, wie es der HS verdient hätte (ich wäre gerne geblieben, wenn gira agil agiert hätte), bin ich für mich zur Entscheidung gekommen: Fade-out, ich suche einen Nachfolger. Mein persönlicher Favorit ist edomi. Für das obige Thema gibt es dort nun einen lauffähige Lösung als Baustein in edomi - ganz ohne Stückwerk. Die Lösung tut wunderbar Ihren Dienst, ohne die Dinge, die ich oben nicht verlässlich alleine gelöst bekommen habe. Daher: Bei Interesse:

                              https://knx-user-forum.de/forum/proj...d-post-methode

                              saegefisch

                              Kommentar


                                #30
                                Hallo saegefisch,
                                Das Skript funktioniert, den HS empfangt, vielen Dank!. Aber dieses sehe ich in der Debug-Seite ...
                                Hast du eine Idee, wo des Problems zu suchen?
                                Herzlichen Dank schon im voraus!

                                Frans
                                You do not have permission to view this gallery.
                                This gallery has 1 photos.

                                Kommentar

                                Lädt...
                                X