1

Onderwerp: Script aanpassen

Hallo,
Hier nieuw in het forum, en heb gelijk een leuke vraag.

Hieronder een script die perfect werkt bij mij, maar wil vanuit het Sunnyportal meer gegevens ontvangen. Eigenlijk hetzelfde als in het portal wordt weergegeven.
Is iemand hier al verder mee in het Sunnyportal? Of heeft iemand suggesties?


#############################################
#
# 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? smile
# - 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";
  }
}

2

Re: Script aanpassen

Tja... je geeft niet eens aan wat je met 'nog meer gegevens' precies bedoeld.
Dat script is niet echt ingewikkeld he. Dat kan je prima zelf aanpassen, dat is het idee achter OSS he.
Ik ga het iig niet VOOR je doen... tenzij je me er formeel opdracht voor geeft natuurlijk...

Pascal's Blobfree Homepage
Een dag geen NedLinux is een dag niet geleefd

Re: Script aanpassen

Dooddoener: wat is Sunnyportal? >>Pa-da boem<< icon_confused

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Script aanpassen

zie sunnyportal.com wink

Re: Script aanpassen

Ah, dat is zo'n wireless ding toch. Zo eentje waarvan een buurman van mij ooit eens is gehacked, waardoor hij nou ja... Rare dingen mee maakte. Klinkt trouwens als een foute pr0n naam en niet voor een zonnepanelen brand.  Wellicht zegt dat meer wat over mijn verrotte geest wink

ACAB: All computers are broken. https://medium.com/message/everything-i … e5f33a24e1 "I've decided that you need gray hair and hemorrhoids to be a consultant.
The gray hair makes you look distinguished & the hemorrhoids make you look concerned."

Re: Script aanpassen

De TS krijgt geen zinvolle antwoorden...

Re: Script aanpassen

De TS geeft geen thuis en ik vraag mij af of dit een hobby project is of commerciel en daarbij of de TS hier daadwerkelijk mee aan de slag wil gaan of zijn problemen over de heg probeert te gooien.

ACAB: All computers are broken. https://medium.com/message/everything-i … e5f33a24e1 "I've decided that you need gray hair and hemorrhoids to be a consultant.
The gray hair makes you look distinguished & the hemorrhoids make you look concerned."

Re: Script aanpassen

devtroll schreef:

TS hier [...knip...] zijn problemen over de heg probeert te gooien.

Een geheel script posten en vragen: "Waar zit de fout?"... Tja...

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....