Display der 19 Tasten Fernbedienung ansteuern

Ich habe die 19 Tasten Fernbedienung mit Display und würde gerne das Display von IPS aus ansteuern.

Von Homematic aus kann ich das Display (Unteradresse :18) einwandfrei ansteuern. Daher habe ich einen Homematic Empfänger in IPS angelegt und die Adress Suche (Suche neue Geräte) gestartet. Ich bekomme darüber alle Tasten der Fernbedienung aber leider nicht das Display angezeigt. Weiß jemand wie ich das Display ansteuern kann??? Leider kann ich die Adresse des Homematic Device nicht händisch eingeben…

Danke
Martin

Ich habe einen Workaround gefunden, unschön aber funktioniert.

Da das Display nicht über die Adress Search Funktion gefunden werden kann, muss diese manuell eingetragen werden.

  • Ein Device „Homematic Empfänger“ anlegen und Objekt ID merken
  • IPS beenden
  • Dateien Settings.* sichern
  • Datei Settings.xml manuell editieren (nach Objeckt ID suchen) und die Adresse für das Display mit der richtigen Seriennr. eintragen (Unteradresse :18) :
    <Address Value=„SERIENNR:18“/>
  • IPS starten

Mittels folgender Funktion können die Texte ans Display gesendet werden:
function setDisplay($text, $beep, $backlight, $unit) {
HM_WriteValueString(51722 , „TEXT“, $text);
HM_WriteValueString(51722 , „BEEP“, $beep);
HM_WriteValueString(51722 , „BACKLIGHT“, $backlight);
HM_WriteValueString(51722 , „UNIT“, $unit);
HM_WriteValueBoolean(51722 , „SUBMIT“, True);
}

Dabei sind folgende Werte möglich:
// Backlight
OFF = 0
ON = 1
BLINK = 2
// Unit
OFF = 0
PERCENT = 1
WATT = 2
CELSIUS = 3
FARENHEID = 4
// Beep
Ton OFF = 0
Ton 1 = 1
Ton 2 = 2
Ton 3 = 3

Kennt jemand den Parameter für die Symbole?

Gruß
Martin

… schönes Ding … :slight_smile:
„Parameter für die Symbole“ kriegen wir auch noch raus …

MST

… nette Spielerei - man kann nun noch eine Quittierung einbauen und
wenn diese nicht erfolgt erneut melden ect.pp…

$temp = GetValue(40931 /*[Neben Gebäude\Sauna\Temp Sauna\Temperature]*/);
$temp = number_format($temp, 1, ".", "." );

setDisplay("Sauna", 3, 1, 0);
IPS_Sleep(3000);
setDisplay($temp, 0, 1, 3);

// Backlight OFF = 0 ON = 1 BLINK = 2
// Unit OFF = 0 PERCENT = 1 WATT = 2 CELSIUS = 3 FARENHEID = 4
// Beep Ton OFF = 0 Ton 1 = 1 Ton 2 = 2 Ton 3 = 3

function setDisplay($text, $beep, $backlight, $unit) {
$id = 34506 /*[ZBV_Test_QC\HomeMatic\HM Display groß]*/;
HM_WriteValueString($id  , "TEXT", $text);
HM_WriteValueString($id  , "BEEP", $beep);
HM_WriteValueString($id  , "BACKLIGHT", $backlight);
HM_WriteValueString($id  , "UNIT", $unit);
HM_WriteValueBoolean($id  , "SUBMIT", True);
}

Nachdem ich mir mit dem CCU Update meine Zentrale abgeschossen habe, musste ich wohl oder Übel in die Tiefen der Homematic einsteigen. Dabei bin ich auf die Datei /usr/local/etc/config/homematic.regadom gestossen. Diese Datei enthält Informationen über alle verbundenen Devices. Es gibt Einträge für Devices, Channels, Verknüpfungen usw.

Dabei habe ich folgende Parameter für das Display gefunden

ARROW_DOWN
ARROW_UP
BELL
BLIND
BULB
CLOCK
DOOR
PHONE
SCENE
SWITCH
WINDOW

Einfach mittels HM_WriteValueBoolean das gewünschte Symbol setzen. Z.B.
HM_WriteValueBoolean($id_aktor, „PHONE“, true)

Martin

Hallo Martin,

HM_WriteValueBoolean($id, "BULB", true);
HM_WriteValueString($id, "TEXT", "Lampe");
HM_WriteValueBoolean($id, "SUBMIT", True);
setDisplay("Gute", 0, 1, 0);
IPS_Sleep(2000);
$id = 34506 /*[ZBV_Test_QC\HomeMatic\HM Display groß]*/;
HM_WriteValueBoolean($id, "SCENE", True);
setDisplay("Nacht", 1, 1, 0);

function setDisplay($text, $beep, $backlight, $unit) {
$id = 34506 /*[ZBV_Test_QC\HomeMatic\HM Display groß]*/;
HM_WriteValueString($id, "TEXT", $text);
HM_WriteValueString($id, "BEEP", $beep);
HM_WriteValueString($id, "BACKLIGHT", $backlight);
HM_WriteValueString($id, "UNIT", $unit);
HM_WriteValueBoolean($id, "SUBMIT", True);
}

Danke, dass wir auch von Deinem Fund partizipieren durften…

MST

Seid Ihr hier mittlerweile schon weiter ?

Ich habe jetzt die 19 Tasten Fernbedienung, beim Anlegen z.B. legt er keine Variablen an… alles noch sehr sehr manuell…

So, fummel mich da gerade nochmal rein.

Habt ihr für die Display Messages und Symbole jeweils manuell eigene Variablen angelegt ? Oder haut ihr die Befehle immer nur per Skript raus ?

Könnt ihr sonst mal ein Screenshot der Variablen machen, wie das ganze bei euch aussieht ?

Hat eigentlich schon jemand eine möglichkeit gefunden, texte zu scrollen? will z.b. Telefonnummern anzeigen und dafür ist das Display einfach zu klein… :frowning:

korny

Ich habe ein Skript geschrieben, das eine String-Variable auswertet und das Display einer HomeMatic-Fernbedienung entsprechend setzt. Um das ganze komfortabler zu machen, werden alle Informationen aus einem einzigen String gezogen. Das Skript tut dann einige mehr oder minder „kluge“ Dinge:

-Falls im String eine unterstützte Einheit gefunden wird (z.B. °C) wird automatisch das entsprechende Einheitssymbol im Display verwendet.
-Falls der String ansonsten numerisch ist, wird er automatisch rechtsbündig angezeigt.
-vor dem String lassen sich, separiert durch ein Pipe-Zeichen | Sonderfunktionen und Symbole angeben, z.B. blink für ein blinkendes Display, beep für einen Piepton oder bulb für das Glühlampen-Symbol. Die Bezeichner der Sonderfunktionen finden ich im Code.

Das Skript kann als Event-Handler auf Variablenaktualisierungen reagieren. Zum Test kann es per Execute aufgerufen werden und zeigt dann einen Test-Text.

Einige beispiele für gültige Strings:

bulb|DIM50%
21.5°C
HALLO
blink beep3 bell|ALARM
switch light|850W
<?

// diese Zeilen bitte entsprechend ändern.
$displayId = 10182  /*[Hardware\HomeMatic\Fernbedienung Kino\DISPLAY]*/;
$testText = '21,5°C';

if($_IPS['SENDER'] == 'Execute')
	$text = $testText;
else if($_IPS['SENDER'] == 'Variable')
	$text = $_IPS['VALUE'];

$unit = '0';
if(substr($text, -2) == '°C')
{
	$unit = '3';
	$text = substr($text, 0, strlen($text) - 2);
}
else if(substr($text, -2) == '°F')
{
	$unit = '4';
	$text = substr($text, 0, strlen($text) - 2);
}
else if(substr($text, -1) == '%')
{
	$unit = '1';
	$text = substr($text, 0, strlen($text) - 1);
}
else if((strtolower(substr($text, -1)) == 'w') &&
	(is_numeric(substr($text, -2, 1)) || (substr($text, -2, 1) == ' ')))
{
	$unit = '2';
	$text = substr($text, 0, strlen($text) - 1);
}

if(strpos($text, '|') !== FALSE)
{
	$symbols = substr($text, 0, strpos($text, '|'));
	$symbols = explode(' ', $symbols);
	$text = substr($text, strpos($text, '|') + 1);
}

$text = trim($text);
$hasDot = (strpos($text, '.') !== FALSE);
$hasComma = (strpos($text, ',') !== FALSE);

if($hasDot || $hasComma)
{
	if($hasDot)
		$text = substr($text, 0, strpos($text, '.') + 2);
	else if($hasComma)
		$text = substr($text, 0, strpos($text, ',') + 2);
	if(strlen($text) > 6) $text = substr($text, 0, 6);
}
else
{
	if(strlen($text) > 5) $text = substr($text, 0, 5);
	if(is_numeric($text)) $text = str_pad($text, 5, ' ', STR_PAD_LEFT);
}

echo $text;

HM_WriteValueString($displayId, "TEXT", $text);
HM_WriteValueString($displayId, "UNIT", $unit);

foreach($symbols as $thisSymbol)
{
	switch(strtolower($thisSymbol))
	{
	   case 'beep':
	   case 'beep1':
	   	HM_WriteValueString($displayId, "BEEP", '1');
	   	break;
	   case 'beep2':
	   	HM_WriteValueString($displayId, "BEEP", '2');
	   	break;
	   case 'beep3':
	   	HM_WriteValueString($displayId, "BEEP", '3');
	   	break;
	   case 'light':
	   	HM_WriteValueString($displayId, "BACKLIGHT", '1');
	   	break;
	   case 'blink':
	   	HM_WriteValueString($displayId, "BACKLIGHT", '2');
	   	break;

	   case 'up':
	   	HM_WriteValueBoolean($displayId, "ARROW_UP", TRUE);
	   	break;
	   case 'down':
	   	HM_WriteValueBoolean($displayId, "ARROW_DOWN", TRUE);
	   	break;
	   case 'bell':
	   	HM_WriteValueBoolean($displayId, "BELL", TRUE);
	   	break;
	   case 'blind':
	   	HM_WriteValueBoolean($displayId, "BLIND", TRUE);
	   	break;
	   case 'bulb':
	   	HM_WriteValueBoolean($displayId, "BULB", TRUE);
	   	break;
	   case 'clock':
	   	HM_WriteValueBoolean($displayId, "CLOCK", TRUE);
	   	break;
	   case 'door':
	   	HM_WriteValueBoolean($displayId, "DOOR", TRUE);
	   	break;
	   case 'phone':
	   	HM_WriteValueBoolean($displayId, "PHONE", TRUE);
	   	break;
	   case 'scene':
	   	HM_WriteValueBoolean($displayId, "SCENE", TRUE);
	   	break;
	   case 'switch':
	   	HM_WriteValueBoolean($displayId, "SWITCH", TRUE);
	   	break;
	   case 'window':
	   	HM_WriteValueBoolean($displayId, "WINDOW", TRUE);
	   	break;
	}
}
HM_WriteValueBoolean($displayId, "SUBMIT", True);

?>