IPS per LAN steuern?

Hallo allerseits, helft mir bitte mal auf den richtigen Weg.

Ich habe ein XBMC Mediacenter unter Linux und nutze als Fernbedienung das Logitech Dinovo Mini BT Keyboard.
Bin damit sehr zufrieden.

Das XBMC nutzt bei mir aber bei weitem nicht alle Tasten und nun würde ich ein paar freie Tasten gerne mit IPS Funktionen belegen.

z.B. Wohnzimmerlicht EIN/AUS oder Rolladen Rauf/Runter.

Habt ihr eine Idee für mich wie ich das realisieren kann?

Ich dachte das ich in XBMC auf einige Tasten ein System Commando mappe welchen dann ein Linux Script (SHELL/PHP/PERL) ausführt.

Dieses sollte dann irgendwie IPS ansprechen und dort z.B. ein passendes Script aufrufen.

Mir fehlt leider nur der Ansatz wie ich letzteres realisieren kann!?

Würde mich über ein paar Tips freuen.

Danke, Gruß Martin

Unter linux sollte ein echo „befehl“ | nc ipsrechner 1234 ausreichen. In IPS dann Serversocket mit Skript anlegen, welche die Befehle dann ausführt.

Krass, so einfach soll das gehen?

Werd ich gleich mal Testen.

Danke

Super, funktioniert bestens dankeschön :slight_smile:

Wenns fertig ist stell ich die Lösung hier ein

Gruß Martin

Hallo allerseits, dank dem kleinen Kickstart oben im Thread habe ich nun eine einfache aber tolle Lösung um beim Heimkinoabend auch die Wohnraumumgebung von der Mediacenter Fernbedienung aus zu steuern.

Im Wesentlichen besteht das ganze aus folgendem:

  1. Einer Keyboard.Xml Datei für den XBMC Rechner. In dieser ist definiert was XBMC bei einem bestimmten Tastendruck
    ausführen soll. (In unerem Fall ein kleines Python Script)

  2. Ein oder mehrere Python Scripte auf dem XBMC Rechner diese dienen nur als Vermittler und machen nichts anderes wie
    ein Shell Script zu starten. (XBMC kann auch direkt Shell Skripte aufrufen, aber dabei minimiert sich das und geht nicht
    mehr von selbst in der Vollbildmode

  3. Ein oder mehrer Shell Scipte. Diese werden von dem zugehörigen Python Skript aufgerufen und senden den Befehl an
    den IPS Rechner.

  4. Einen Serversocket mit passender RegVar auf dem IPS System. An diesen Socket senden die Shell Skripte ihren Befehl

  5. Ein Skript zur Auswertung der Befehle die in der RegVar landen auf dem IPS System
    Dieses Skript schaut sich die Empfangenen Daten an und wenn ein gültiger Befehl dabei ist wird die jeweilige Funktion
    ausgeführt.

Eine Rückmeldung an das XBMC gibt es nicht.

  1. Die Keyboard XML (liegt unter /home/USER/.xbmc/userdata/keymaps und schaut bei mir so aus:
<keymap>
  <global>
    <keyboard>
      <return mod="win">XBMC.RunScript("/home/htpc/.xbmc/scripts/togglesl.py")</return>
      <volume_up mod="win">XBMC.RunScript("/home/htpc/.xbmc/scripts/volumeup.py")</volume_up>
      <volume_down mod="win">XBMC.RunScript("/home/htpc/.xbmc/scripts/volumedown.py")</volume_down>
      <pageup mod="win">XBMC.RunScript("/home/htpc/.xbmc/scripts/rolloup.py")</pageup>
      <pagedown mod="win">XBMC.RunScript("/home/htpc/.xbmc/scripts/rollodown.py")</pagedown>
      <one mod="win">XBMC.RunScript("/home/htpc/.xbmc/scripts/hell.py")</one>
      <zero mod="win">XBMC.RunScript("/home/htpc/.xbmc/scripts/dunkel.py")</zero>
    </keyboard>
  </global>
</keymap>

  1. Die Scripte auf dem XBMC System ich habe die Scripte einfach unter /home/htpc/.xbmc/scripts/ abgelegt.
    unter Linux müssen sie dem User gehören der das XBMC ausführt und als Ausführbar geflaggt sein.

    a) Python Script

import subprocess
    script = "/home/htpc/.xbmc/scripts/togglesl.sh"       
    subprocess.call(script, shell=True)
    
b) Shell Script
#!/bin/sh
   /bin/echo "964567togglesl" | /bin/nc 192.168.1.100 8765

Ich habe dem eigentlichen Befehl einfach eine willkürliche Nummer vorangestellt damit die Befehle für 3. nicht zu
erraten sind.

  1. Die IPS Konfiguration

    Der Server Socket

Die Umgebung (RegVar und Script)

  1. Das Auswertungs Script
<?
if ($_IPS['SENDER'] == "RegisterVariable")
{
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    //$data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    // neu empfangene Daten an $data anhängen
    $data = $_IPS['VALUE'];
	echo ">".$data."<
";
	
   if ( $data == "964567togglesl
" ) {
      EIB_Switch(18952 /*[Erdgeschoss\Wohnzimmer\Stehlampe]*/ , !GetValue(IPS_GetObjectIDByIdent("Value" ,18952 /*[Erdgeschoss\Wohnzimmer\Stehlampe]*/ )));
	}

   if ( $data == "964567rollozu
" ) {
		IPS_RunScript(40772 /*[Erdgeschoss\Rolläden\Instanzen\WohnzimmerfensterZu]*/ );
		IPS_RunScript(52752 /*[Erdgeschoss\Rolläden\Instanzen\WohnzimmertürZu]*/ );
	}

	if ( $data == "964567rolloauf
" ) {
		IPS_RunScript(12051 /*[Erdgeschoss\Rolläden\Instanzen\WohnzimmertürAuf]*/ );
		IPS_RunScript(47451 /*[Erdgeschoss\Rolläden\Instanzen\WohnzimmerfensterAuf]*/ );
	}
	
	if ( $data == "964567dunkelheit
" ) {
		IPS_RunScript(40232 /*[Allgemein\Funktionen\Szenensteuerung\WohnzimmerDunkel]*/ );
		
	}
   if ( $data == "964567gemuetlich
" ) {
		IPS_RunScript(19305 /*[Allgemein\Funktionen\Szenensteuerung\GemütlicherWohnraum]*/ );

	}

   if ( $data == "964567volup
" ) {
		IPS_RunScript(54425 /*[Allgemein\Funktionen\PioneerVSX922\MainVolUP]*/ );
	}
   if ( $data == "964567voldown
" ) {
		IPS_RunScript(18821 /*[Allgemein\Funktionen\PioneerVSX922\MainVolDOWN]*/ );
	}

    // wenn das Trennzeichen ; in $data gefunden worden ist
    /*if (strpos($data, ';'))
    {
        // $data in durch ; separierte Datensätze zerlegen
        $datasets = explode(';', $data);

        // alle nicht durch ; terminierten Datensätze ausgeben
        for ($i = 0; $i < count($datasets) - 1; $i++)
        {
            echo "empfangener Datensatz: ".$datasets[$i]."
";
            IPS_RunScript($datasets[$i]);
        }

        // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
        $data = $datasets[count($datasets) - 1];
    }

    // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
    RegVar_SetBuffer($_IPS['INSTANCE'], $data);
	*/
}
?>

So das wars! Wers nachmachen mag muss natürlich die Scripte selbst nach seinen Bedürfnissen anpassen.

Gruß Martin