Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - sunny webbox

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Hallo
    @makki
    die :85 ist aber absichtlich so eingestellt oder?
    Ja, Habe ich im Router so eingestellt.
    Gruß NetFritz
    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

    Kommentar


      #17
      Hatte nur gefragt, nicht das das ein sep. Port mit einem anderen Service dahinter ist..

      Makki
      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
      -> Bitte KEINE PNs!

      Kommentar


        #18
        Hallo
        Habe noch ein RPC-Perl-Script für die Webbox gefunden.
        Sunny Webbox RPC Schnittstelle via PHP & POST • Seite 2 • Photovoltaikforum
        Ich habe es mal auf meinen XUbuntu Rechner gezogen aber es läuft bei mir nicht. ( hängt sich auf ohne Rückmeldung und Fehlermeldung )
        Gruß NetFritz

        Code:
        !/usr/bin/perl -w
        
        use strict;
        use warnings;
        use IO::Socket::INET;
        use JSON;
        
        my $debug=0;
        my $webboxIP = "192.168.2.251:85";
        my %rpc = ();
        
        &configure_requests;
         
        &cls;
        
        my $data = &get_data_from_sunny_webbox($webboxIP,$rpc{"get_devices"});
        print "RPC_GET_DEVICES : \n";
        print "----------------- \n";
        print $data."\n\n\n";
        
        
        my $js_hash_ref = decode_json $data ;           # decode JSON Data , result is a Hash-reference
        my $tab = -1;                                   # preset number of tabs to format printout
        
        &print_hash($js_hash_ref);
        
        &pause(1);
        
        $data = &get_data_from_sunny_webbox($webboxIP,$rpc{"get_plant_overview"});
        print "RPC_GET_PLANT_OVERVIEW : \n";
        print "------------------------ \n";
        print $data."\n\n\n";
        
        $js_hash_ref = decode_json $data ;
        &print_hash($js_hash_ref);
        
        sub print_hash {
        
                my $hash_ref = shift;                   # reference to a hash
                my        %h = %$hash_ref;              # dereference
                $tab++;
        
                my $t = "\t"x$tab;
        
                foreach my $k (sort keys %h) {
                        print "$t$k: ";
                        if (ref($h{$k}) eq "HASH") {    # if element is a hash then print it ...
                                print "\n";
                                &print_hash($h{$k});
                                next;
                        }
                        if (ref($h{$k}) eq "ARRAY") {   # if element is an array then print array
                                print "\n";
                                &print_array($h{$k});
                                next;
                        }
                        print "$h{$k}\n";
                        if ($debug) {&pause}
                }
                $tab--;
        }
        
        sub print_array {
        
                my $arr_ref = shift;                    # reference to an array
                my     @arr = @$arr_ref;                # dereference
        
                $tab++;
        
                my $t = "\t"x$tab;
        
                foreach (sort @arr) {
                        print $t."\t";
                        if (ref($_) eq "HASH") {        # if element is a hash then print it ...
                                print "\n";
                                &print_hash($_);
                                next;
                        }
                        if (ref($_) eq "ARRAY") {       # if element is an array then print array
                                print "\n";
                                &print_array($_);
                                next;
                        }
                        print $_."\n";
                        if ($debug) {&pause}
                }
                $tab--;
        }
        
        sub get_data_from_sunny_webbox {
        
                my $ip        = shift;
                my $request   = shift;
                my $response;
                my $received;
        
                my $RecvSocket = new IO::Socket::INET->new(LocalPort=>34268,Proto=>'udp');
                my $SendSocket = new IO::Socket::INET->new(PeerPort=>34268,Proto=>'udp',PeerAddr=>"$ip");
        
                my $cs = $SendSocket->send($request);
                if ( ! defined $cs) { return "Send-Error";}
        
                $response = $RecvSocket->recv($received,1024);
                $received =~ s/\0//go;
        
                undef $RecvSocket;
                undef $SendSocket;
        
                return $received;
        }
        
        sub configure_requests {
        
        my $r       = "get_devices";
        my $obj     = '{ "version":"1.0", "proc":"GetDevices", "id":"1", "format":"JSON" }';
           $obj     = &add_null_chars($obj);
           $rpc{$r} = $obj;
        
           $r       = "get_plant_overview";
           $obj     = '{"version":"1.0", "proc":"GetPlantOverview", "id":"1", "format":"JSON" }';
           $obj     = &add_null_chars($obj);
           $rpc{$r} = $obj;
        
        # add more requests here ...
        
        }
        
        sub add_null_chars {
        
                my $s = shift;
                   $s =~ s/\s//go;
                   $s =~ s/(.)/$1\0/go;
        
                return $s;
        }
        sub remove_null_chars {
        
                my $s = shift;
                   $s =~ s/\0//go;
        
                return $s;
        }
        sub cls {
                my $os = $^O;                           # get Operating System
                if (index(lc($os),"win") > -1) {
                        system("cls");                  # Windows then clear screen (batch command)
                } else {
                        system("clear");                # Linux/Unix/Solars clear screen (bash command)
                }
        
        }
        
        sub pause {
                my $pr = shift;
        
                if ($pr) {print "\n\n\npress <return> to continue ...\n"}
        
                my $p = <stdin>
        }
        KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
        WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
        PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

        Kommentar


          #19
          Hallo Zusammen,

          hat schon jemand die Sunny Webbox mit dem HS am laufen, oder Visualisiert?

          Bin über jede Info dankbar.

          Gruß / Franz

          Kommentar


            #20
            Ja, das WireGate schreibt ihm die Werte auf den KNX, so entstand eines der drei WG-Plugins dafür

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #21
              Hallo
              Vielleicht hilft es weiter.
              Man kann die Webbox auch im Browser per rpc abfragen.
              RPC-Abfrage der Webbox ueber Http (einfach im Webbrowser eingeben)
              Code:
              --------------------------------------------------------
              [URL]http://IP_der-Webbox/rpc?RPC=[/URL]{"version":"1.0","proc":"GetDevices","id":"1","format":"JSON"}}
              -------------------------------------------------------
              [URL]http://IP_der-Webbox/rpc?RPC=[/URL]{"version":"1.0","proc":"GetProcessDataChannels","id":"1","format":"JSON","params":{"device":"0083:7e5cb61d"}}
              ------------------------------------------------------
              [URL]http://IP_der-Webbox/rpc?RPC=[/URL]{
              "version": "1.0",
              "proc": "GetProcessData",
              "id": "1",
              "format": "JSON",
              "params":
              {
              "devices":
              [
              {
              "key": "004e:7d30b9bc",
              "channels": null
              }
              ]
              }
              }
              -------------------------------------------------------------
              [URL]http://IP_der-Webbox/rpc?RPC=[/URL]{
              "version": "1.0",
              "proc": "GetPlantOverview",
              "id": "1",
              "format": "JSON"
              }
              Wenn die Antwort der HS auswerten kann, kann man das verwenden.
              Gruß NetFritz
              KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
              WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
              PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

              Kommentar


                #22
                Zitat von strippe186 Beitrag anzeigen
                gelöst

                So habe das Ganze über die Webabfrage gelöst. (vielleicht könnte jemand das Thema in den allgemeinen Teil verschieben - Forum Wiregate hat sich als falsch erwiesen)
                Das Problem der Sunny Webbox BT war die Eingabe von Benutzer und Passwort - hat ums verrecken nicht funktioniert.
                Daraufhin habe ich bei SMA nachgefragt, wie ein Autologin per HTTP geht. Antwort: Geht nicht
                Geht aber Doch (Sch... Hotline)
                http://INTERNEIP/culture/login?Language=LangDE&Userlevels=User&password=DEI N PASSWORT
                Damit ist dann die Webabfrage kein Problem mehr.....
                Gruß Bernd
                Bin gerade dabei das auch zu testen.
                Die Url passt glaub ich noch.
                Nutzt das noch jemand? Vll sogar strippe186 noch hier aktiv?

                Ein Screenshot der Webabfrage wäre klasse!

                Gruß
                Maeckes

                Kommentar


                  #23
                  Hallo
                  Wenn Du ein Plugin fürs Wiregate suchst, hier ist es.
                  Code:
                  # return;
                  # holt über HTTP-RPC die Daten von der SMA-Webbox
                  # es wird GetProcessData und GetPlantOverview abgefragt
                  # by NetFritz 5.2012
                  #
                  use HTML::Entities;
                  use LWP::UserAgent;
                  use JSON::XS;
                  use DBI;
                  my $stkd;
                  # in $iso steht Datum-Zeit = 'Y-m-d H:M:S'
                  my @dta = localtime(time);
                  my $iso=($dta[5]+1900)."-";
                  $iso.=sprintf('%02d-',$dta[4]+1);
                  $iso.=sprintf('%02d ',$dta[3]);
                  $iso.=sprintf('%02d:',$dta[2]);
                  $iso.=sprintf('%02d:',$dta[1]);
                  $iso.=sprintf('%02d',$dta[0]);
                  # ======= Anfang Konfig =======
                  my $url = "http://192.168.2.7:85"; # IP der Webbox
                  my $key = "xxxx:xxxxxxxx";         # Key des WR muss vorher ermittelt werden
                  my $leistung_ga = "5/0/1";
                  my $leistung_pro_kw_ga = "5/0/2";
                  my $tagesertrag_ga = "5/0/3";
                  my $gesammtertrag_ga = "5/0/4";
                  my $zustand_ga = "5/0/5";
                  my $meldung_ga = "5/0/6";
                  my $DC_Strom_Eingang_ga = "5/0/7";
                  my $DC_Spannung_Eingang_ga = "5/0/8";
                  my $Netzstrom_ga = "5/0/9";
                  my $Leistung_Haushalt_ga = "5/0/15";
                  # ======= Ende Konfig =========
                  # Eigenen Aufruf-Zyklus auf 60 Sekunden setzen
                  # der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!
                  $plugin_info{$plugname.'_cycle'} = 60;
                  my $res;
                  my $ref;
                  # ===== Abfragestring GetProcessData =====
                  my $callobj = '/rpc?RPC={
                                  "version": "1.0",
                                  "proc": "GetProcessData",
                                  "id": "1",
                                  "format": "JSON",
                                  "params":
                                  {
                                    "devices":
                                    [
                                    {
                                      "key": "'. $key .'",
                                      "channels": null
                                    }
                                    ]
                                  }
                                }';
                  #
                  # ==== Abfragestring GetPlantOverview =====
                  my $callobj1 = '/rpc?RPC={
                               "version": "1.0",
                               "proc": "GetPlantOverview",
                               "id": "1",
                               "format": "JSON"
                               }';
                  #
                  # ====== Abfrage GetProcessData ======
                  $res = $url.$callobj;
                  $ref = rpcs($res);
                  #
                  my $Ipv = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[0]->{'value'}; # DC Strom Eingang
                  my $Upv = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[1]->{'value'}; # DC Spannung Eingang
                  my $Fac = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[5]->{'value'}; # NetzFrequenz
                  my $Iac = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[6]->{'value'}; # Netzstrom
                  my $Pac = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[7]->{'value'}; # Leistung
                  my $Riso = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[8]->{'value'}; # Isolationswiderstand
                  my $hon = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[10]->{'value'}; # Einspeisezeit
                  my $hTotal = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[11]->{'value'}; # Betriebszeit
                  my $ETotal = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[12]->{'value'}; # Gesammtertrag
                  my $NetzEin = $ref->{'result'}->{'devices'}->[0]->{'channels'}->[13]->{'value'}; # Netz-Ein
                  # return $Ipv . "=" . $Upv . "=" . $Fac . "=" . $Iac . "=" . $Pac . "=" . $Riso . "=" . $hon . "=" . $hTotal . "=" . $ETotal . "=" . $NetzEin;
                  
                  #
                  # ===== Abfrage GetPlantOverview =====
                  $res = $url.$callobj1;
                  $ref = rpcs($res);
                  my $GriPwr = $ref->{'result'}->{'overview'}->[0]->{'value'}; # Leistung
                  my $GriEgyTdy = $ref->{'result'}->{'overview'}->[1]->{'value'}; # Tagesertrag
                  my $GriEgyTot = $ref->{'result'}->{'overview'}->[2]->{'value'}; # Gesamtertrag
                  my $OpStt = $ref->{'result'}->{'overview'}->[3]->{'value'}; # Zustand
                  my $Msg = $ref->{'result'}->{'overview'}->[4]->{'value'}; # Meldung
                  #
                  if ($Msg == ""){
                    $Msg = "iO";
                    knx_write("5/0/24",0,1); # PV Stoerung false
                  }else{
                    knx_write("5/0/24",1,1); # PV Stoerung true
                  }
                  $plugin_info{'email.pl.Stoerung'} = $Msg." ".$OpStt;
                  #
                  knx_write($gesammtertrag_ga,$GriEgyTot,9);
                  # return $GriPwr . "=" . $GriEgyTdy ."=". $GriEgyTot ."=". $OpStt ."=". $Msg ;
                  # return $GriPwr;
                  # system("/usr/bin/nohup ./var/www/myhouse/cron/sml_zaehler.pl"); # Zaehler-Script aufrufen
                  # auf den KNX-Bus schreiben
                  # my $Tag_CO2_vermeidung = $GriEgyTdy*700; # 700g/kWh
                  # Werte auf den BUS schreiben
                   knx_write($leistung_ga,$GriPwr,9);
                   knx_write($leistung_pro_kw_ga,$GriPwr/4.05,9);
                   knx_write($tagesertrag_ga,$GriEgyTdy,9);
                  # knx_write($gesammtertrag_ga,$GriEgyTot,9);
                   knx_write($zustand_ga,$OpStt,16);
                   knx_write($DC_Strom_Eingang_ga,$Ipv,9);
                   knx_write($DC_Spannung_Eingang_ga,$Upv,9);
                   knx_write($Netzstrom_ga,$Iac,9);
                   knx_write($meldung_ga,$Msg,16);
                  my $leistung_pv = knx_read("5/0/1",0,9);
                  my $Leistung_Zaehler = knx_read("5/0/12",0,9);
                  my $leistg_haush = $leistung_pv-$Leistung_Zaehler; # Leistung Haushalt
                  knx_write($Leistung_Haushalt_ga,$leistg_haush,9);
                  my $eigenverbrausquote = eval {sprintf ("%.1f", $leistg_haush/($leistung_pv/100))};
                  if($eigenverbrausquote > 1000)
                  {
                  $eigenverbrausquote = 1000;
                  }
                  
                  #
                  # my $eigenverbrauch = $leistg_haush/($leistung_pv/100);
                  my $eigenverbrauch = eval { sprintf ("%.1f", $leistg_haush/($leistung_pv/100))};
                  if ($eigenverbrauch <= 0)
                  {
                     $eigenverbrauch = 0;
                  }
                  elsif($eigenverbrauch > 100)
                  {
                     $eigenverbrauch = 100;
                  }
                   knx_write("5/0/16",$eigenverbrauch,9);
                   update_rrd("Eigenverbrauch","",$eigenverbrauch*10);
                  #
                  # 70%Regelung
                  my $siebzig = 2835; # 70% von 4050Wp
                  if ($Leistung_Zaehler > $siebzig){
                  update_rrd("pv_70","",$Leistung_Zaehler - $siebzig);
                  }else{
                  update_rrd("pv_70","","0");
                  }
                  # Wert in RRD schreiben
                  update_rrd("pv_leistung","",$GriPwr);
                  update_rrd("pv_leistung_kW","",$Pac/1000);
                  update_rrd("pv_std","",$Pac/1000); # 1 Wert pro Std.
                  update_rrd("pv_10min","",$Pac/1000); # 1 Wert pro 10min.
                  update_rrd("pv_tagesertrag","",$GriEgyTdy);
                  update_rrd("pv_DC_Strom_Eingang","",$Ipv*100);
                  #update_rrd("pv_DC_Spannung_Eingang","",$Upv);
                  update_rrd("Leistung_Haushalt","",$leistg_haush);
                  update_rrd("pv_Eigenverbrausquote","",$eigenverbrausquote);
                  # schreibt in DB
                  # DB oeffnen
                  my $dbargs = {AutoCommit => 0, PrintError => 1};
                  my $dbh = DBI->connect("dbi:SQLite2:dbname=/var/www/myhouse/sq_lite/myhouse.sqlite", "", "", $dbargs);
                  #if ($dbh->err()) { die "$DBI::errstr\n"; }
                  #   $dbh->do("UPDATE myhouse SET date_zeit='".$iso."', wert='".$GriEgyTot."' WHERE adr='5/0/4'");
                  #   $dbh->commit; # Änderungen auf die Datenbank einfügen
                  #   $dbh->disconnect(); # DB schliessen
                  #
                  # ===== Sub holt die Werte von der Webbox =====
                  sub rpcs{
                     my $res = shift;
                     my $brs = LWP::UserAgent->new;
                     $brs->timeout(5);
                     my $req = HTTP::Request->new(GET => $res);
                     my $resp = $brs->request($req);
                     #
                     if($resp->is_success()) {
                       # print "Erfolg !";
                     }else {
                       return "Keine Antwort !";
                     }
                     #
                     my $content = $resp->content;
                     my %js_hash_ref = %{decode_json $content};
                     my $ref=\%js_hash_ref;
                     #
                     return($ref);
                  }
                  #return($stkd . $OpStt. "=" . $Msg);
                  return();
                  Läuft schon seit Mai 2012 bei mir.
                  Gruß NetFritz
                  KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                  WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                  PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                  Kommentar

                  Lädt...
                  X