LCN_SendCommand vs. CSCK_Sendtext

Hi, die Überschrift verrät es schon - nimmt man besser LCN-SendCommand oder CSCK-SendText, um LCN Befehle an die PCHK abzusetzen ? Irgendwo hatte ich gelesen, dass man das über CSCK_SendCommand nicht machen soll, wegen Timings etc…

Mit LCN_SendCommand habe ich aber 2 Probleme:

  1. Wie sende ich damit an eine Gruppe ? (Schätze, es geht nicht - oder wird das da noch eingebaut?)
  2. Leider habe ich mit LCN_SendCommand Probleme mit Sonderzeichen, wenn ich z.B. einen Text an ein GTxD senden will. Da hilft auch utf8-Konvertierung nicht weiter, ist da vielleicht bei der RasPi-Version ein Bug ? Besonders fällt mir das beim Gradzeichen auf. Wenn das kein bekannter Bug ist, teste ich gerne weiter und versuche, ein Beispiel zu senden.

Hi Tom,
zu 1. Geht nicht an Gruppen. Ich habe trotzdem auf LCN-SendCommand umgebaut.
zu 2. Geht bei mir so im GT4D :


<?
// Wenn im Büro Licht ist
    $lichtstatus = GetValueBoolean(21665 /*[Module\020\Licht Büro A1  (0, 20)\Decke]*/ );
    if ($lichtstatus)                                 // Brenner hat eingeschaltet
	{
	  IPS_SetScriptTimer($_IPS['SELF']  , 30);                  // ScriptTimer einschalten (auf 1 Sekunde setzen)
	}
    else                                                 // Brenner hat wieder ausgeschaltet
	{
	  IPS_SetScriptTimer($_IPS['SELF']  , 0);                  // ScriptTimer einschalten (auf 1 Sekunde setzen)

	}

$rel6=GetValueBoolean(30440 /*[Module\007\Relais 6 (0, 7)\Status]*/ );
if ($rel6 == 0)
{
$temp_aussen= GetValueFloat (38984 /*[Module\155\Values (91, 155)\Dallas Temp. A3]*/    );
$feuchte_aussen = GetValueFloat (50245 /*[Module\155\Values (90, 155)\HYT Feuchte A2]*/    );
$temp_wohnen = GetValueFloat (37813 /*[Module\040\Values (0, 40)\Raum ist A3]*/   );
if (strlen($temp_aussen) === 2){$temp_aussen=$temp_aussen.'.0';}
if (strlen($feuchte_aussen) === 2){$feuchte_aussen=$feuchte_aussen.'.0';}
if (strlen($temp_wohnen) === 2){$temp_wohnen=$temp_wohnen.'.0';}

$zeile='A'.$temp_aussen.'°'.' '.$feuchte_aussen.'% W'.$temp_wohnen.'°';
$webfrontzeile1 = utf8_decode($zeile);
$zeilealt=GetValueString(35880 /*[.Skripte\Display\Zeile1]*/  );
if ($zeile == $zeilealt)
{

}
else
{
SetValueString(35880 /*[.Skripte\Display\Zeile1]*/ , $zeile);
SetValueString(41932 /*[.Skripte\Display\webfrontzeile1]*/  , $webfrontzeile1);

$text=utf8_decode(substr($zeile,0,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT11'.$text);
$text=utf8_decode(substr($zeile,12,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT12'.$text);
$text=utf8_decode(substr($zeile,24,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT13'.$text);
}
//Zeile2
$temp_buero = GetValueFloat (56220 /*[Module\020\Values (92, 20)\Büro A3]*/   );
$temp_kuhltruhe = GetValueFloat (59265 /*[Module\010-IX\Values (91, 10)\Kühltruhe A3]*/  );
$temp_ofen = GetValueFloat (19010 /*[Module\020\Values (91, 20)\Ofenrohr A3]*/   );
if (strlen($temp_buero) === 2){$temp_buero=$temp_buero.'.0';}
if (strlen($temp_kuhltruhe) === 2){$temp_kuhltruhe=$temp_kuhltruhe.'.0';}
if (strlen($temp_ofen) === 2){$temp_ofen=$temp_ofen.'.0';}

$zeile='B'.$temp_buero.'°'.' K'.$temp_kuhltruhe.'° O'.$temp_ofen.'°';
$zeilealt=GetValueString(29446 /*[.Skripte\Display\Zeile3]*/);
if ($zeile == $zeilealt)
{

}
else
{
SetValueString(29446 /*[.Skripte\Display\Zeile3]*/ , $zeile);
$text=utf8_decode(substr($zeile,0,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT31'.$text.chr(10));
$text=utf8_decode(substr($zeile,12,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT32'.$text.chr(10));
$text=utf8_decode(substr($zeile,24,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT33'.$text.chr(10));
}
}
else //Relais ==1
{
$temp_kessel= GetValueFloat (10624 /*[Module\010-IX\Values (94, 10)\Kessel A3]*/ );
$temp_speicher = GetValueFloat (19807 /*[Module\010-IX\Values (95, 10)\Speicher A3]*/ );
$temp_aussen = GetValueFloat (38984 /*[Module\155\Values (91, 155)\Dallas Temp. A3]*/);
if (strlen($temp_kessel) === 2){$temp_kessel=$temp_kessel.'.0';}
if (strlen($temp_speicher) === 2){$temp_speicher=$temp_speicher.'.0';}
if (strlen($temp_aussen) === 2){$temp_aussen=$temp_aussen.'.0';}

$zeile='K'.$temp_kessel.'°'.' S'.$temp_speicher.'° A'.$temp_aussen.'°';
$zeilealt=GetValueString(35880 /*[.Skripte\Display\Zeile1]*/);
if ($zeile == $zeilealt)
{
}
else
{
SetValueString(35880 /*[.Skripte\Display\Zeile1]*/ , $zeile);
//print_r ($zeile.chr(10));
$text=utf8_decode(substr($zeile,0,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT11'.$text.chr(10));
$text=utf8_decode(substr($zeile,12,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT12'.$text.chr(10));
$text=utf8_decode(substr($zeile,24,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT13'.$text.chr(10));

}
//Zeile2
$temp_vorlauf = GetValueFloat (39860 /*[Module\010-IX\Values (93, 10)\Vorlauf A3]*/ );
$temp_ruecklauf = GetValueFloat (44949 /*[Module\010-IX\Values (97, 10)\RücklaufA3]*/  );
$temp_ofen = GetValueFloat (19010 /*[Module\020\Values (91, 20)\Ofenrohr A3]*/   );
if (strlen($temp_vorlauf) === 2){$temp_vorlauf=$temp_vorlauf.'.0';}
if (strlen($temp_ruecklauf) === 2){$temp_ruecklauf=$temp_ruecklauf.'.0';}
if (strlen($temp_ofen) === 2){$temp_ofen=$temp_ofen.'.0';}

$zeile='V'.$temp_vorlauf.'°'.' R'.$temp_ruecklauf.'° O'.$temp_ofen.'°';
$zeilealt=GetValueString(29446 /*[.Skripte\Display\Zeile3]*/);
if ($zeile == $zeilealt)
{
}
else
{
SetValueString(29446 /*[.Skripte\Display\Zeile3]*/ , $zeile);
$text=utf8_decode(substr($zeile,0,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT31'.$text.chr(10));
$text=utf8_decode(substr($zeile,12,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT32'.$text.chr(10));
$text=utf8_decode(substr($zeile,24,12));
LCN_SendCommand(24208 /*[OG 140C|UPÿÿP GT4Dÿÿÿÿÿÿ (000,007)]*/ ,'GT','DT33'.$text.chr(10));
}
}
?>

Achtung, ist kein Lauftext drin, wollte 2 feste Zeilen haben, per LCN umschaltbar.($rel6)

Hm, ich mach das so mit einem hier geklauten Skript (etwas angepasst):

<?
$z1="16° (12°) 13°";
$z1=utf8_decode($z1);

SetGTTextLineI(17977 /*[AZ_Tom Tür (000,085)]*/, 1, $z1);
//SetGTTextLineS(24935 /*[PCHK]*/, 0,85,1, $z1);

function SetGTTextLineI($instance, $line, $text)
{
    $text = substr($text, 0, 58);

    for($part = 0; $part < ceil(strlen($text) / 12); $part++)
    {
		 echo substr($text, $part * 12, 12)."
";
       if(!@LCN_SendCommand($instance, 'GT',
            'DT' .
            $line .
            ($part + 1) .
            substr($text, $part * 12, 12) .
            "
")) return;
    }
}
?>

sobald due die Gradzeichen raus nimmst oder den Text auf 10 Zeichen kürzst, geht es. Sonst nicht :mad: