Ankündigung

Einklappen
Keine Ankündigung bisher.

TV Steuerung über linknx oder Script

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

    [wiregate] TV Steuerung über linknx oder Script

    Grüßt euch.

    Ich habe seit ein paar Tagen einen Sony TV. Ich würde ihn gerne per KNX steuern. Jetzt meine Fragen:

    - Hat das schon mal jemand mit dem WireGate gelöst (linknx)?
    - Besteht die Möglichkeit des Einschaltens (er kann ja WOL)?
    - Wie wäre es am sinnigsten lösbar?

    Ich danke euch schon mal für die Antworten und Tipps!


    Pascal

    #2
    Die primäre Möglichkeit über das WireGate auf andere Systeme zuzugreifen geht über Perl-Skripte, die als s.g. "WireGate Plugins" laufen, hier wird kein linknx benötigt.

    Damit WOL zu verschicken geht sehr einfach.
    Ob das den Fernseher startet, und was der für die sonstige Fernsteuerung benötigt weiß ich jedoch nicht. Hier müsstest Du nach einer entsprechenden Doku suchen um das dann im Perl zu implementieren.
    TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

    Kommentar


      #3
      Ich habe nun ein Script angefangen. Es läuft auch schon auf dem Wiregate und reagiert auf eine Taste. Nun stehe ich vor dem Problem, wo baue ich den Befehl von Sony ein? Kann mir jemand einen Tipp geben?

      Hier mein Code:

      Code:
      #mein erstes Perl Script :-P
      #Pascal Jacob - 23.01.2017
      
      
      # Aufruf-Zyklus auf 300 Sekunden setzen
      $plugin_info{$plugname.'_cycle'} = 300;
      
      
      #GA´s
      my $PowOffGA = '0/3/2';
      my $AusgangGA = '0/3/1';
      
      
      #Plugin auf GAs anmelden
      $plugin_subscribe{$PowOffGA}{$plugname} = 1;
      
      
      #########################
      ###  ENDE DEFINITION  ###
      #########################
      
      # Plugin aufgrund eines eintreffenden Telegramms oder zyklisch bearbeiten
      # bei eintreffenden Telegrammen auf "Write" reagieren
      
      if ($msg{'apci'} eq "A_GroupValue_Write") {
         if ($msg{'dst'} eq $PowOffGA) {
            $plugin_info{$plugname.'_PowOff'} = int($msg{'data'});
         }
      } else { # zyklischer Aufruf
         #$plugin_info{$plugname.'_PowOff'} = knx_read($PowOffGA,300,1);
      }
      
      #Oder-Funktion
      if ($plugin_info{$plugname.'_PowOff'} == 1) {
          knx_write($AusgangGA,1,1);
          $plugin_info{$plugname.'_Ausgang'} = 1;
          print "Ein"
      } else {
          knx_write($AusgangGA,0,1);
          $plugin_info{$plugname.'_Ausgang'} = 0;
          print "Aus"
      }
      
      return;
      Da muss jetzt das hier irgendwie rein:
      Sony_Bravia_2015.jpg
      Ich glaube ja es ist nicht schwer, aber mir fehlt der Ansatz. Ich habe was mit "use LWP::UserAgent" gefunden, ist das ein möglicher Weg?

      Zum WOL MagicPaket fehlt mir auch der Ansatz.

      Besten Dank schon mal und schönen Abend.

      Kommentar


        #4
        Du kannst in einem Perl Script auch normale Linux-Programme ausführen, indem deren Befehl in Backticks geschrieben steht. Das nutze ich z.B. beim Wake on LAN:
        Code:
        `wakeonlan $mac`;
        Genau so sollten sich auch HTTP-Aufrufe mit curl durchführen lassen. Curl kann man mit entsprechenden Parametern auch weitere Header-Infos mitgeben - was hier für den PSK notwendig wäre.
        TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

        Kommentar


          #5
          Guten Morgen.

          Ich habe jetzt viel gebastelt und viel probiert, komme aber zu keinem funktionsfähigen Ergebnis.

          Hier nun mein Code:
          Code:
          # Aufruf-Zyklus auf 300 Sekunden setzen
          $plugin_info{$plugname.'_cycle'} = 30;
          
          use LWP::UserAgent;
          use HTTP::Request;
          
          my $ua = LWP::UserAgent->new;
          
          my $server_endpoint = 'http://192.168.0.115/sony/ircc';
          
          #########################
          ###  ENDE DEFINITION  ###
          #########################
          
          my $req = HTTP::Request->new(POST => $server_endpoint);
          my $post_data = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:X_SendIRCC xmlns:u="urn:schemas-sony-com:service:IRCC:1"><IRCCCode>AAAAAQAAAAEAAAAUAw==</IRCCCode></u:X_SendIRCC></s:Body></s:Envelope>';
          
          # set custom HTTP request header fields
          #$req->protocol('HTTP/1.1');
          #$request->header('POST /sony/system HTTP/1.1');
          #$request->header('Host: 192.168.0.115');
          #$request->header('Accept: */*');
          #$request->header('content-type: text/xml; charset=UTF-8');
          $req->header('SOAPACTION' => 'urn:schemas-sony-com:service:IRCC:1#X_SendIRCC', 'X-Auth-PSK' => '2014');
          #$request->header(Connection: Keep-Alive');
          #$request->header('Content-Length: 313');
          # add POST data to HTTP request body
          $req->content($post_data);
          
          return;
          Kann mir jemand sagen, wo der Fehler liegt? Ich sehe in Wireshark kein POST. Wenn ich den Post mit einem ensprechenden Programm vom PC auslöse funktioniert alles wunderbar.

          Danke schon mal.


          elektrowichtel

          Kommentar

          Lädt...
          X