Ankündigung

Einklappen
Keine Ankündigung bisher.

SMA Webbox RPC mit PHP-CLI

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

    [wiregate] SMA Webbox RPC mit PHP-CLI

    Hallo
    Ich habe auf den Wiregate PHP-CLI installiert.
    Auf dem Wiregate habe ich nun ein PHP-CLI Script das über RPC die Daten von der Webbox holt.
    Dieses PHP-CLI-Script rufe ich nun mit einem Plugin auf.
    Code:
    # Sunny Webbox mit einem PHP_CLI Script ueber RPC auslesen
    # 16.12.11
    my $gesamtertrag_ga = "5/0/1"; 
    # 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 $response = qx(usr/bin/php ../var/www/myhouse/pv/sma_rpc.php);   # ohne Hochkomma o.ä.
    # ----
    # knx_write($gesamtertrag_ga,$response{'gesamtertrag'},9);
    #-----
     return $response;
    Das Plugin gibt mir so ein Array aus.
    "Array ( [leistung] => 21 [leistung_pro_kw] => 0 [tagesertrag] => 1.167 [gesamtertrag] => 2618.01 )"

    Nun möchte ich das z.B. die Gesamtleistung mit
    "knx_write($gesammtertrag_ga,$response{'gesamtertr ag'},9);"
    auf den Bus kommt.
    Das gelingt mir aber nicht. Auch nicht wenn ich die Variable $respone als %response deklariere.
    Hat jemand einen Rat?
    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

    #2
    Zitat von NetFritz Beitrag anzeigen
    Code:
    # knx_write($gesammtertrag_ga,$response{'gesammtertrag'},9)
    Hoi NetFritz

    Wenn Du das "#" weg machst?
    Grüsse Bodo
    Fragen gehören ins Forum, und nicht in mein Postfach;
    EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

    Kommentar


      #3
      Hallo
      @Bodo
      Wenn Du das "#" weg machst?
      Der war aber gut.

      Nein dann geht es trotzdem nicht.
      das liegt aber nicht an KNX.
      Wenn ich am Ende
      "return $response{'gesamtertrag'};"
      schreibe bekomme ich als Ausgabe eine Fehlermeldung.
      "Global symbol "%response" requires explicit package name at (eval 1445) line 12, line 30520."
      Line12 ist "return $response{'gesamtertrag'};"
      Mit der Fehlermeldung kann ich als Perl Laie nichts anfangen.
      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


        #4
        Zitat von NetFritz Beitrag anzeigen
        "Global symbol "%response" requires explicit package name at (eval 1445) line 12, line 30520."
        Line12 ist "return $response{'gesamtertrag'};"
        Mit der Fehlermeldung kann ich als Perl Laie nichts anfangen.
        Gruß NetFritz
        Hoi

        my $response #mit my ist die Variable definiert
        ein ARRAY ist mit % gekennzeichnet und ein einzelnes Element mit $
        Zitat von NetFritz Beitrag anzeigen
        my $response = qx(usr/bin/php ../var/www/myhouse/pv/sma_rpc.php);
        muss wohl
        PHP-Code:
        my %response qx(usr/bin/php ../var/www/myhouse/pv/sma_rpc.php); 
        heissen?!
        Grüsse Bodo
        Fragen gehören ins Forum, und nicht in mein Postfach;
        EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

        Kommentar


          #5
          Hallo

          Code:
          my %response = qx(usr/bin/php ../var/www/myhouse/pv/sma_rpc.php);
          return $response{'gesamtertrag'};
          Keine Fehlermeldung und auch keine Rückgabe mit return.
          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


            #6
            Hallo
            Die Rückgabe vom PHP-CLI-Script ist gar kein Array sondern ein String.
            Werde die PHP Ausgabe nochmal überdenken.
            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


              #7
              Hoi

              Du kannst den String, wenn er die Ansammlung von einzelnen Werten ist in ein Array packen, mit perl.
              Wie sieht denn die Ausgabe des PHP-Scripts aus?
              Grüsse Bodo
              Fragen gehören ins Forum, und nicht in mein Postfach;
              EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

              Kommentar


                #8
                Hallo
                Code:
                Array 
                ( 
                   [leistung] => 21
                   [leistung_pro_kw] => 0
                   [tagesertrag] => 1.167 
                   [gesamtertrag] => 2618.01 
                )
                Habe das Array in PHP mit print_r ausgegeben.
                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


                  #9
                  So könnte es klappen

                  Hoi

                  print_r gibt das assoziative array (= hash) menschenlesbar aus.
                  Da denke ich liegt der Hase im Pfeffer.
                  Und wenn du mal nur print oder echo versuchst?

                  EDIT Das mit print_r kann man so machen. Das gibt einen langen String, in dem alles drin ist und noch mehr.
                  Den String kann man dann in Perl zelegen:

                  Code:
                  #!/usr/bin/perl
                  %hash = ();
                  $response = qx(usr/bin/php /var/www/sma_rpc.php);  # da lag das PHP-script bei mir
                  my @lines = split(m/\n|\r/, $response);
                  foreach(@lines) {
                    if($_ !~ m/(Array|\(|\))/) {       # die Zeilen Array und ( und ) herausselektiert
                      $_ =~ s/\[//;                    # das Zeichen [ herausselektiert
                      $_ =~ s/\]//;                    # das Zeichen ] herausselektiert
                      $_ =~ s/>//;                     # das Zeichen > herausselektiert
                      $_ =~ s/=//;                     # das Zeichen = herausselektiert
                      $_ =~ s/\s{4}/,/;                # vier leerzeichen werden ein ,
                      $_ =~ s/\s{2}/,/;                # zwei Leerzeichen werden ein ,
                      $_ =~ s/^,//;                    # ein , am Anfang herausselektiert
                      my ($key,$wert)=split(/,/, $_);  # Jede Zeile ist ein Key,Wert Paar 
                      $hash{$key}=$wert;               # jetzt endlich wird ein hash daraus
                  #    print "$key => $wert\n";
                    }
                  }
                  print $hash{'gesamtertrag'};
                  Grüsse Bodo
                  Fragen gehören ins Forum, und nicht in mein Postfach;
                  EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                  Kommentar


                    #10
                    Hallo
                    Mit echo einen zusammengesetzten String ausgeben ist auch möglich.
                    Würde es lieber auf der PHP Seite mit json_encode und auf der Perl Seite mit json_decode machen.
                    Dann habe ich wieder ein Hash-Array.
                    Bin aber noch auf der Suche wie ich das mit Perl löse.
                    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


                      #11
                      Hoi

                      Siehe EDIT #9
                      Grüsse Bodo
                      Fragen gehören ins Forum, und nicht in mein Postfach;
                      EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                      Kommentar


                        #12
                        Hallo
                        So geht es.
                        Der erste Wert ist schon auf den Bus.
                        Auf diese Lösung wäre ich nicht gekommen.
                        Danke.
                        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


                          #13
                          Hallo
                          Habe soeben gesehen das makki schon ein Plugin für die Webbox
                          ins SCM gestellt hat.
                          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


                            #14
                            Zitat von NetFritz Beitrag anzeigen
                            Array
                            (
                            ..
                            Das wird so nix, m.W. ist das für Perl nur ein String, der mit dem Wort Array beginnt.
                            Bodo, tschuldige aber das tut ja körperlich weh
                            -> XML, JSON, CSV, whatever aber keine Regexp zum parsen..

                            Das PHP sollte etwas strukturiertes ausspucken - der Rest von o.g. dürfte 1:1 in einen Hash [%] passen (Array = @..)

                            Was im SVN ist nur ein Quickhack, der offensichtlich nicht für alle funktioniert, insofern besteht hier schon noch Verbesserungspotential, aber wenns denn am Ende in ein WG-Plugin soll kann man sich das PHP auch ein bisschen sparen

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

                            Kommentar


                              #15
                              Was natürlich sehr schade ist für die Leute die schon PHP können aber kein Perl (unauffällig auf sich selber zeig)

                              Kommentar

                              Lädt...
                              X