ReelHomeControl

Hallo,
basierend auf den Scripten von pleibling (DANKE!!!) habe ich meine ReelBox um IPS-Funktionen erweitert.

Reelbox:
http://www.reel-multimedia.com/german/index.html
Sat/Kabel/DVB-T Twin-Receiver mit Festplatte/DVD-Brenner, EPG, Linux, …

Ich habe das Menu der Reelbox um Funktionen erweitert, um mit meiner Standard-Indrarot-Fernbedienung (OneForAll) meine ganzen Steckdosen zu schalten.
Ich kann auch die Temperaturen aller FHTs anzeigen.

Wenn Interesse besteht, poste ich mal ein paar Bilder.
Ist aber ein reine Textinterface, nicht so toll wie IPS-WEB ode MCEHomecontrol.

Dafür kann ich jetzt aber per Fernbedienung endlich alles schalten.

Vorraussetzung:
Server mit IpSymcon/WEB
PHP-Scripte von MceHomeConntrol
Reelbox (oder vielleicht andere Linux-DVB-Receiver mit LAN/WLAN)

Axel

(oder vielleicht andere Linux-DVB-Receiver mit LAN/WLAN)

Ich habe momentan 3 Dreamboxen im Haus stehen. Eine DM7020 und 2 DM500 in den Kinderzimmer. Alle hängen mit am Netz.
Ist nett wenn du Programmlisten zu ändern hast. Musst nicht mehr jede einzelne SATBox an den PC bringen oder mit dem Laptop durchs Haus laufen um Einstellungen zu verändern.

mfG Franz

Hallo,

ich selber habe ebenfalls eine DBox2 mit Linux und einen Linux Video Disk Recoder, welches glaube ich die Software ist auf die die ReelBox basiert! :slight_smile:
Da ich schon lange nach solch einer Möglichkeit suche, meinen Fernseher noch ein bisschen mehr zu vernetzen :rolleyes: , würden mich ein paar Bilder von deiner Lösung brennend interessieren!

Vielen Dank schon im Voraus und viele Grüße

Akio

Für die Dreambox habe ich mal eine Textanzeige gebastelt. Über diesen Weg lasse ich mir die aktuellen Wetterinfos der KS300 anzeigen. Das Auslösen dieser Aktion geschieht aber über einen FS20 Handsender.

genauso könnte man aber auch jede andere Info von IP-SYMCON auf der Dreambox anzeigen.

Gruß Sven

na dann mal her mit den screenshoots :). interessiert mich ebenfalls brennend …

p.s.: wenn irgendwann mal mein adapter kommen sollte (denn ich natürlich schon bezahlt habe beim anbieter!), dann werde ich mir auch noch eine ir unterstützung machen, da die elv fernbedienung leider nicht so der burner ist vom desin her.

der benefit aber an der logitech 895 ist aber, das die die ir signale per funk überträgt. somit kann ich dann in der ganzen wohnung meine fb benutzen. und die sieht schick aus mit dem display :).

Hallo Sven,

ist das die orginale Enigma Messagebox mit einem speziellen Skin, oder eine andere Lösung?

Grüße, Keule

Ich benutze das Gemini Projekt Image. Würde das auch gehen, oder muss es das Original Skript sein?

mfG Franz

@Keule, es ist die orginale Enigma Messagebox.

@Franz, auf meiner Box läuft auch das Gemini Image 3.0.

hier ist ein Teil des Scriptes das ich benutze.

   $temp_aussen=round(GetValueFloat("Aussentemperatur"),1);
   $Regenmenge=round(GetValueFloat("IN_Regen_heute"),1);
   $Windgeschwindigkeit=round(GetValueFloat("Windgeschwindigkeit"),1);

   if(GetValueBoolean("Regen") == true ){
      $regen=" ! leider regnet es im Moment !";
   } else {
      $regen="";
   }
   
   $teil_A='-O nul "http://192.168.0.45/cgi-bin/xmessage?caption= Wetter Info&timeout=5&body=';
   $teil_2='Aussentemperatur  =  '.$temp_aussen.' C°%0A%0A';
   $teil_3='Luftfeuchte aussen  =  '.GetValueInteger("Luftfeuchtigkeit").' %'.'%0A%0A';
   $teil_4='Windgeschwindigkeit  =  '.$Windgeschwindigkeit.' kmh'.'%0A%0A';
   $teil_5='heutige Regenmenge  =  '.$Regenmenge.' mm'.'%0A%0A';
   $teil_6=$regen;
   $teil_E='&icon=1"-o nul';
   $Anzeige= $teil_A.$teil_2.$teil_3.$teil_4.$teil_5.$teil_6.$teil_E;

   IPS_Execute("C:\Programme\IP-Symcon\wget\wget",$Anzeige,false,false);

das Programm wget schickt die Info an die Dreambox

Gruß Sven

Hallo zusammen,
habe seit kurzem eine Reelbox Avantgarde II und versuche diese in IP-Symcon zu integrieren.

@axbl
Hast du mehr Details über deine verwendeten Scripte und ein paar screenshoots?

@Sven
Funktioniert das auch bei der Reelbox?

Gruß Luar

hallo luar,

hast du inzwischen einen Weg gefunden IPS irgendwie in der Reelbox zu integrieren? Hab auch ne AV II.

Gruß Hardlog

Ich versuche weiterhin mit einer Reelbox AVII zu kommunizieren.
Laut Wiki des Reelboxforum müßte es eigentlich via TCP gehen: http://wiki.reel-multimedia.com/index.php/SVDRP-Protokoll und http://www.vdr-wiki.de/wiki/index.php/SVDRP
Hab nen Client Socket angelegt.
Doch wie sende ich nun die Befehle? Einfach wie folgt?

CSCK_SendText(59759 /*[Client Socket - Reelbox]*/, "svdrpsend.sh MESG Hallo Welt..." );

So einfach ist es wohl doch nicht oder (geht zumindest bei mir so nicht?

Gruß
hardlog

Hi,
probiere es mal so. Erst mal ein Skript in IPS anlegen, in meinem Fall inc_PHPReelbox.
Die IP der Reelbox eintragen.

<?php

// SVDRP is a class do communicate with a vdr via svdrp
class SVDRP
{

	var $cfgServer;
	var $cfgPort;
	var $cfgTimeOut;

	var $handle;
	var $debug;

	function SVDRP($server = "hier die IP der Reelbox", $port=2001, $timeout = 60, $debug = 0)
	{
		$this->cfgServer = $server;
		$this->cfgPort = $port;
		$this->cfgTimeOut = $timeout;
		$this->debug = $debug;
		$this->handle = 0;
	}

	function DebugMessage($msg)
	{
		if($this->debug) echo ($msg);
	}

	function Connect()
	{
		if($this->handle) Disconnect();
		$errno = 0;
		$errstr = "";
		$this->handle = fsockopen($this->cfgServer, $this->cfgPort, $errno, $errstr, $this->cfgTimeOut);

		if(!$this->handle)
		{
			$this->DebugMessage("error $errno: $errstr");
			return false;
		}

		$this->DebugMessage("handle: $this->handle<br>
");


		$input = fgets($this->handle,128);

		if(!preg_match("/^220 /", $input) || $input == "")
		{
			$this->DebugMessage("wrong welcome message: '$input'<br>
");
			$this->Disconnect();
			return false;
		}


		$this->DebugMessage("Welcome message: $input<br><br>
");

		return true;
	}

	function Command($cmd)
	{
		if(!$this->handle) return false;

		$ret = array();

		$this->DebugMessage("Kommando $cmd<br><pr"."e>");
		fputs($this->handle, $cmd . "
");
		$s = "";
		$nline = 0;
		while($s .= fgets($this->handle,2048))
		{
			$nline++;

                         $this->DebugMessage($s);
			 if(!preg_match("/^(\\d{3})([ -])(.*)$/", $s, $data))
			 {
			 	continue;
			 }




			 $number = $data[1];
			 // TODO: Fehlernummer bearbeiten
			 $ret[] = $data[3];
			 if($data[2] != "-" && $nline == 1) $ret =  $data[3] ;
 			 if($data[2] != "-") break;
			 $s = "";

		}

		$this->DebugMessage("</pr"."e>");
		return $ret;
	}

	function ListChannels($numberorname="")
	{
		if(!$this->handle) return false;
		$channels = array();
		$lines = $this->Command("LSTC$numberorname");
		if(!$lines) return false;
		foreach($lines as $a => $l)
		{
			$a = split(":", $l);
			$name = $a[0];
			$freq = $a[1];
			$b = split(";", $name);
			$name = $b[0];
			if(!isset($b[1])) $b[1] = $name;
			$group = $b[1];


			$c["name"] = $name;
			$c["group"] = $group;
			$c["frequency"] = $freq;

			$channels[] = $c;


		}
		return $channels;
	}

	function Help()
	{
		return $this->Command("HELP");
	}
	function Disconnect()
	{
		if(!$this->handle) return;
		$this->Command("QUIT");

		fclose($this->handle);
		$this->handle = 0;
		$this->DebugMessage("disconnected");
	}
	function ClearEpg()
	{
		if(!$this->handle) return false;
		$this->Command("CLRE");
		return true;
	}
	function SwitchUp()
	{
		if(!$this->handle) return false;
		$this->Command("CHAN +");
		return true;
	}
	function SwitchDown()
	{
		if(!$this->handle) return false;
		$this->Command("CHAN -");
		return true;
	}
	function SwitchChannel($channel)
	{
		if(!$this->handle) return false;
		$this->Command("CHAN $channel");
		return true;
	}
	function DeleteChannel($id)
	{
		if(!$this->handle) return false;
		$this->Command("DELC $id");
		return true;
	}
	function DeleteRecord($id)
	{
		if(!$this->handle) return false;
		$this->Command("DELR $id");
		return true;
	}

	function GrabImage($filename, $type="jpeg", $quality="", $width="", $height)
	{
		if(!$this->handle) return false;
		$this->Command("GRAB $filename $type $quality $width $height");
		return true;
	}
	function HitKey($key)
	{
		if(!$this->handle) return false;
		$this->Command("HITK $key");
		return true;
	}
	function PowerOff()
	{
		if(!$this->handle) return false;
		$this->Command("HITK Power");
		return true;

	}
	function GetKeys()
	{
		if(!$this->handle) return false;

		$lines = $this->Command("HITK");
		$keys = array();
		foreach($lines as $l)
		{
			if(!preg_match("/^ {4}(.*)$/", $l, $m)) continue;
			$keys[] = $m[1];
		}

		return $keys;
	}
	function ListEPG($pStrChannel="", $pStrTime="")
	{
		if(!$this->handle) return false;
		$lines = $this->Command("LSTE");

		$epg = array ();
		$channel = array();
		$event = array();

		$channelname = "";
		foreach($lines as $l)
		{
			preg_match("/^(.)\\s*(.*)$/", $l, $m);
			$type = $m[1];
			$text = $m[2];
			switch($type)
			{
			case 'C': // Channel
				list( $channeldata, $channelname ) = explode( ' ', $text, 2 );

				break;
			case 'E': // new Event
				sscanf($text, "%u %ld %d %X", $event["EventID"], $event["StartTime"], $event["Duration"], $event["TableID"]);

				break;
			case 'T': // Title
				$event["Title"] = $text;
				break;
			case 'S': // Short text
				$event["Shottext"] = $text;
				break;
			case 'D': // Description
				$event["Desc"] = $text;
				break;
			case 'V': // VPS
				$event["VPS"] = $text;
				break;
			case 'e': // Event end
				if ((trim($pStrTime) != '') && (( $event['StartTime'] > $pStrTime ) || ($event['StartTime'] + $event["Duration"] < $pStrTime)))
					continue;

				$channel[] = $event;
				$event = array();

				break;
			case 'c': // Channel end
				if ((trim($pStrChannel) != '') && ($channelname != $pStrChannel))
					continue;

				$epg[$channelname] = $channel;
				$channel = array();

				break;
			}

		}
		if ((trim($pStrTime) == '') || (( $event['StartTime'] < $pStrTime ) && ($event['StartTime'] + $event["Duration"] > $pStrTime)))
			$channel[] = $event;

		if ((trim($pStrChannel) != '') || ($channelname == $pStrChannel))
			$epg[$channelname] = $channel;

		return $epg;
	}

	function Message($msg)
	{
		if(!$this->handle) return false;
		$this->Command("MESG $msg");
		return true;
	}


	// Volume commands
	function ToggleMute()
	{
		if(!$this->handle) return false;
		$this->Command("VOLU mute");
		return true;
	}
	function VolumeUp()
	{
		if(!$this->handle) return false;
		$this->Command("VOLU +");
		return true;
	}
	function VolumeDown()
	{
		if(!$this->handle) return false;
		$this->Command("VOLU -");
		return true;
	}
	function SetVolume($v)
	{
		if(!$this->handle) return false;
		$this->Command("VOLU $v");
		return true;
	}
	function GetVolume()
	{
		if(!$this->handle) return false;
		$v = $this->Command("VOLU");
		if($v == "Audio is mute") return 0;
		if(!preg_match("/Audio volume is (.*)/", $v, $m)) return false;

		return $m[1];
	}
	function GetDiskStat()
	{
		if(!$this->handle) return false;
		$stat = $this->Command("STAT DISK");
		sscanf($stat, "%dMB %dMB %d%%", $FreeMUsedMB, $FreeMB, $Percent);
		$ret["FreeMB + UsedMB"] = $FreeMUsedMB;
		$ret["FreeMB"] = $FreeMB;
		$ret["UsedMB"] = $FreeMUsedMB - $FreeMB;
		$ret["Percent"] = $Percent;
		return $ret;
	}
	function StartScan()
	{
		if(!$this->handle) return false;
		$this->Command("SCAN");
		return true;
	}
	function MoveChannel($number, $to)
	{
		if(!$this->handle) return false;
		$this->Command("MOVC $number $to");
		return true;

	}

	function DeleteTimer($id)
	{
		if(!$this->handle) return false;
		$this->Command("DELT $id");
		return true;
	}

	function MoveTimer($number, $to)
	{
		if(!$this->handle) return false;
		$this->Command("MOVT $number $to");
		return true;
	}

	function TimerOnOff($n, $state = "on")
	{
		if(!$this->handle) return false;
		//if($state == "1") $state = "on";
		//if($state == "0") $state = "off";
		//if($state == false) $state = "off";
		// if($state == true) $state = "on";
		switch($state)
		{
		case false:
		case "off":
		case "0":
		$state = "off";
		break;
		default:
		$state = "on";
		break;
		}

		return $this->Command("MODT $n $state");
	}

	function ListTimers()
	{

	}

	function ShowMessage($msg = "")
	{
		if(!$this->handle) return false;
		return $this->Command("MESG $msg");
	}

	function ListRecords()
	{
		if(!$this->handle) return false;

		$lines = $this->Command("LSTR");
		$records = array();
		foreach($lines as $l)
		{

			if(!preg_match("/^(\\d)\s(\\d*)\\.(\\d*)\\.(\\d*) (\\d*)\\:(\\d*).\s(.*)$/", $l, $m)) continue;
			$id = $m[1];
			$m["id"] 		= $m[1];
			$m["day"] 		= $m[2];
			$m["month"] 	= $m[3];
			$m["year"] 		= $m[4];
			$m["hour"] 		= $m[5];
			$m["minute"] 	= $m[6];
			$m["desc"] 		= $m[7];

			$records[$id] = $m;
		}

		return $records;

	}

	// TODO: perhaps better implementation
	function ListRecord($n)
	{
		if(!$this->handle) return false;
		$m = $this->Command("LSTR $n");
		return $m[0];
	}



	//TODO: Implement following commands:
	/*


	LSTT    MODT 	NEWT UPDT
	MODC  NEWC
	    NEXT
	PUTE

	*/
}

// Small Example
/*
echo "<pr"."e>";
$a = new SVDRP();
$a->Connect();
print_r($a->Help());
print_r($a->ListChannels());
$a->GetKeys();
print_r($a->GetVolume());
print_r($a->GetDiskStat());
$a->Disconnect();
*/
?>


Dann kannst Du zum Beispiel mit folgendem Befehl eine Nachricht an die Box schicken.

<?

include "47351.ips.php";    //Class PHP Reelbox Skript ID von deiner inc_PHPReelbox



$Wohnzimmer = new SVDRP();
$Wohnzimmer->Connect();
$Wohnzimmer->Message("Kannst Du bitte einen Kaffe machen? Danke!");
$Wohnzimmer->Disconnect();

?>

Tausend Dank Uwe!

Hast Du auch ne Möglichkeit Bilder auf die Box zu senden (z.B. Das Videobild der IPCam wenn es an der Tür klingelt)

Gruß
hardlog

Nein, leider noch nicht.:frowning:

Wird auch nichts werden da mit dieser Klasse nur der VDR-Anteil gesteuert.

Um Einblendungen zu machen müßte man die eHD der Reelbox ansteuern können aber dafür gibt es keine Klasse oder Schnittstelle innerhalb der Reelbox.