[Idee] LCN Display Menü

Hallo,
da ich mehrere LCN Displays verbaut habe kam mir dir Idee, die ja schon lange grasiert diese als Bedienung zu benutzen. Ich habe dieses versucht im Bad umzusetzen, dort ist ein GT4D.

Folgende Struktur hatte ich mir vorgestellt:

Taste 1 lang: Menü
Taste 2 kurz: OK
Taste 3 kurz: -
Taste 4 kurz: +

Dies sollte für die Bedienung reichen.

Ich habe dreizeilig eingestellt wobei sich in der ersten Zeile das Hauptmenü mit folgenden Punkten auswählen lassen soll:

  1. Licht
  2. Heizung
  3. Radio
  4. TV

Wählt man mit der OK Taste eins aus gelangt man in das dementsprechende Untermenü das in der zweiten Zeile angezeigt werden soll.

  1. Licht
    1.1 Deckenlicht
    1.2 Spiegelbeleuchtung
    1.3 RGB
    1.4 Lichtszenen
    1.5 Lichtautomatik

  2. Heizung
    2.1 Fußbodenheizung
    2.2 Handtuchheizkörper
    2.3 Programm

  3. Radio
    3.1 On / Off
    3.2 Quellenauswahl
    3.3 Senderauswahl
    3.4 Liederauswahl
    3.5 Lautstärke

  4. Radio
    4.1 On / Off
    4.2 Quellenauswahl
    4.3 Senderauswahl
    4.4 Lautstärke
    4.5 Automatik

Nach der Bestätigung durch OK soll das 3. Untermenü angezeigt werden.

Habe mir schon Gedanken zu der Umsetzung gemacht allerdings scheint von der Geschwindigkeit schon das Hauptmenü zum Problem zu werden. Mit den Tasten des GT4D steuere ich virtuelle Relais des Modules für eine Zeit von 1,02s an, die sich dann in IP Symcon auslesen lassen. Das klappt auch soweit ganz gut.

Mit der lang D1 aktiviere ich eine angelegte Variable Menü aktiv, die nach 40s eine Rücksetzung auslösen soll.
Menü aktiv soll in Verbindung mir D3 und D4 durch das Menüschalten was ich in einer Integer Variablen mit 4 Optionen angelegt habe.

Soweit bin ich jetzt allerdings habe ich das Problem das IP Symcon nur sehr langsam reagiert.

Ich fasse mal mit einigen Bildern und Quelltexten zusammen:

Hauptmenue:

<?
$MA = GetValueBoolean(54190 /*[LCN\Badezimmer Display Menü\Menü aktiv\Menü aktiv]*/  );
$D1 = GetValueBoolean(20841 /*[LCN\Modul ID 30 Badezimmer\Tasten\Menütaste (D1)  Relais 1 Modul Badezimmer mit Timer 1,02s \Status]*/ );
$D2 = GetValueBoolean(19652 /*[LCN\Modul ID 30 Badezimmer\Tasten\OK Taste (D2) Relais 2 Modul Badezimmer mit Timer 1,02s\Status]*/  );
$D3 = GetValueBoolean(26659 /*[LCN\Modul ID 30 Badezimmer\Tasten\Minus Taste (D3) Relais 3 Modul Badezimmer mit Timer 1,02s\Status]*/  );
$D4 = GetValueBoolean(55184 /*[LCN\Modul ID 30 Badezimmer\Tasten\Plus Taste (D4) Relais 4 Modul Badezimmer mit Timer 1,02s\Status]*/  );
$Hauptmenue = GetValueInteger(15946 /*[LCN\Badezimmer Display Menü\Hauptmenü\Hauptmenü\Auswahl Hauptmenü]*/   );

if( $MA == 1 && $D3 == 1 )

	{
		$Hauptmenue = ($Hauptmenue - 1);

	}
    if( $Hauptmenue < 0 )
    
   {
	 	$Hauptmenue = 4;
	}

if( $MA == 1 && $D4 == 1 )

	{
		$Hauptmenue = ($Hauptmenue + 1);

	}
    if( $Hauptmenue > 4 )

   {
	 	$Hauptmenue = 0;
	}

echo $Hauptmenue;

SetValueInteger(15946 /*[LCN\Badezimmer Display Menü\Hauptmenü\Hauptmenü\Auswahl Hauptmenü]*/  , $Hauptmenue);

?>

Textausgabe

<?
$Hauptmenue = GetValueInteger(15946 /*[LCN\Badezimmer Display Menü\Hauptmenü\Hauptmenü\Auswahl Hauptmenü]*/   );

if( $Hauptmenue == 0 )
{
   SetValueString(33300 /*[LCN\Badezimmer Display Menü\Ausgaben\Text]*/ , "Licht"  );
}

      if( $Hauptmenue == 1 )
		{
   		SetValueString(33300 /*[LCN\Badezimmer Display Menü\Ausgaben\Text]*/ , "Heizung"  );
		}

            if( $Hauptmenue == 2 )
				{
   				SetValueString(33300 /*[LCN\Badezimmer Display Menü\Ausgaben\Text]*/ , "Radio"  );
   			}

						if( $Hauptmenue == 3 )
						{
   						SetValueString(33300 /*[LCN\Badezimmer Display Menü\Ausgaben\Text]*/ , "TV"  );
						}
 

?>

Menue aktiv

<?
$D1 = GetValueBoolean(20841 /*[LCN\Modul ID 30 Badezimmer\Tasten\Menütaste (D1)  Relais 1 Modul Badezimmer mit Timer 1,02s \Status]*/ );
$D2 = GetValueBoolean(19652 /*[LCN\Modul ID 30 Badezimmer\Tasten\OK Taste (D2) Relais 2 Modul Badezimmer mit Timer 1,02s\Status]*/  );
$D3 = GetValueBoolean(26659 /*[LCN\Modul ID 30 Badezimmer\Tasten\Minus Taste (D3) Relais 3 Modul Badezimmer mit Timer 1,02s\Status]*/  );
$D4 = GetValueBoolean(55184 /*[LCN\Modul ID 30 Badezimmer\Tasten\Plus Taste (D4) Relais 4 Modul Badezimmer mit Timer 1,02s\Status]*/  );




if( $D1 == 1 or $D2 == 1 or $D3 == 1 or $D4 == 1 )

{
   
 //Setzen Befehl
    SetValueBoolean(54190 /*[LCN\Badezimmer Display Menü\Menü aktiv\Menü aktiv]*/ , true);

    //Timer anschalten
    IPS_SetScriptTimer(13547 /*[LCN\Badezimmer Display Menü\Menü aktiv]*/ , 40);

    
} else {

//Rücksetzen Befehl
    SetValueBoolean(54190 /*[LCN\Badezimmer Display Menü\Menü aktiv\Menü aktiv]*/ , false);

    //Timer ausschalten
    IPS_SetScriptTimer(13547 /*[LCN\Badezimmer Display Menü\Menü aktiv]*/ , 0);
 //Setzen Befehl
    SetValueBoolean(54190 /*[LCN\Badezimmer Display Menü\Menü aktiv\Menü aktiv]*/ , true);

    //Timer anschalten
    IPS_SetScriptTimer(13547 /*[LCN\Badezimmer Display Menü\Menü aktiv]*/ , 40);
	 
}
?>

Display Text senden

<?
$socket = GetValue(51409 /*[LCN\Socket]*/ );
$seg = GetValueString(36241 /*[LCN\Badezimmer Display Menü\Allgemein\Segment ID]*/  );
$mod = GetValueString(25061 /*[LCN\Badezimmer Display Menü\Allgemein\Modul ID]*/  );
$line = GetValueString(43693 /*[LCN\Badezimmer Display Menü\Ausgaben\Zeile]*/  );
$text = GetValueString(33300 /*[LCN\Badezimmer Display Menü\Ausgaben\Text]*/  );

echo $socket;
//echo $seg;
//echo $mod;
//echo $line;
//echo $text;

function SetGTTextLineS($socket, $seg, $mod, $line, $text)
{
	$text = utf8_encode(substr($text, 0, 58));

	$data = '';

	for($part = 0; $part < ceil(strlen($text) / 12); $part++)
	{
	   $data .=
			'>M' .
			str_pad($seg, 3, '0', STR_PAD_LEFT) .
			str_pad($mod, 3, '0', STR_PAD_LEFT) .
			'.' .
			'GTDT' .
			$line .
			($part + 1) .
			substr($text, $part * 12, 12) .
			"
";
		echo $data;
	}
	CSCK_SendText($socket, $data);
	echo $data;
}
SetGTTextLineS($socket, $seg, $mod, $line, "$text");
?>

Vielleicht hat ja einer auch noch ne Idee wie man das ganze weiter ausarbeiten kann