Hallo ich bin neu hier und versuche schon seit ein paar Tagen ein Problem zu lösen. Es geht um das PHP Kommando “LCN_SndCommand”. Hiermit kann man ein LCN Modul direkt ansprechen. In dem Beispiel in der Dokumentation, wird ein Ausgang “A1” sofort auf 0% gedimmt. Hierbei steht dann der Datenwert auf “DI000000” In der Beschreibung steht weiter, “Eventuelle Zahlen müssen in der dezimalen Darstellung (3 Zeichen) gesendet werden”. Genau das verstehe ich nicht. Das Beispiel ist auch nicht gerade geschickt gewählt. Was muss ich wie eintragen, wenn ich z.B. 100% haben will. Also den Ausgang komplett einschalten. Ich habe das jetzt schon mit einem Multimeter getestet und kam zwar bei den unterschiedlichsten Zahlen auf unterschiedliche Ausgangswerte, jedoch ist mir das nicht klar, wie hier in den 6 Stellen (DI000000) die 100% eingetragen werden soll. Vollen Ausgang bekam ich bei (DI025000). Wer kann da weiterhelfen?
Warum nutzt du nicht die normalen LCN Output Instanzen?
Kann es sein, dass du nicht die 50/200 Dimmschritte im Gateway korrekt konfiguriert hast?
paresy
Mit ich bin neu hier, meinte ich natürlich auch das ganze Thema an sich. Ich arbeite erst sehr kurz mit den Scripten und somit fehlt mir hier noch sehr viel Wissen. Von daher sagt mir der Begriff LCN Output nichts. Das zweite was du meintest sagt mir schon was, aber ich komme gerade nicht drauf, wie ich das bei mir nachsehen kann. Diese 50/200 waren doch Werte für die Module. 50 ging nur bei den alten und 200 bei den neueren oder? Aber wo finde ich das nochmal? Ich stehe gerade auf dem Schlauch.
Vielleicht hilft das, bin kein Profi, aber mir hat das damals Uwe mit folgendem Befehl gezeigt.
LCN_SendCommand(22590, „A1“, „DI000“); //C6 kurz
Setze ich, in der Konsole in der Schnellausführung die 000 auf 050, ist das Licht auf 50%
Habs nun hinbekommen. habe das mit dem Gateway gefunden und es stand bei mir tatsächlich auf 200. Habe nach der Umstellung auf 50, den Befehl in “DI100” umgestellt und siehe da, es funktioniert. Also benötigt man hier auch nur 3 Stellen und nicht wie in dem Beispiel 6.
hierbei habe ich dann aber noch eine Frage. Man kann diesen Befehl auch benutzen um eine Taste aus den Tastentabellen, welches in den LCN Modulen programmiert ist, anzusprechen. Hierbei muss dann der Befehl wohl wie folgt lauten:
LCN_SendCommand(29143, „TS“, „K—00000010“)
Die 29143 Ist die Splitter Instanz ID von dem Modul. “TS” bedeutet Tastentabelle. Das K steht für das Kommando kurz, hier die Tastentabelle A, gefolgt von - - - (3x Minuszeichen) als Platzhalter für die anderen Tastentabellen. Und dann kommen 8 Stellen für die einzelnen Tasten. Die Taste die man ansprechen will, bekommt eine 1. Somit sagt mein Befehl Taste A7 Befehl kurz. Jedoch funktioniert das bei mir nicht. Ich bekomme eine Fehlermeldung:
Parse error: syntax error, unexpected end of file in /mnt/data/symcon/scripts/42541.ips.php on line 3
Wäre schön, wenn mir das auch noch jemand entschlüsseln könnte. Dann komme ich erstmal weiter.
Besten Dank!
Stratas
Da fehlt wohl einfach das Semikolon hinter den Befehl…
Michael
Das wars. Bei mir stand da ein Komma. Hatte ich nicht mit getippt. Aber mit dem “;” am Ende funktioniert es jetzt.
Super Danke!!!
Nur für die Zukunft. Das “K” steht für das Kurzsignal, Für das lange und Loslassen Signal, kann es ja nicht beides ein “L” sein. Einer davon muss mindestens ein anderer Buchstabe sein. Weißt du das zufällig? Dann schreibe ich mir das mit dazu, wenn ich das mal benötige.
Stratas
ich habe da ein Script vorliegen, wenn daran Interesse besteht, schreibe ich das gerne hier. Dem Script kann man im Klartext die Befehle übergeben, ist etwas einfacher ![]()
Ich habe es noch nicht im Einsatz.
Beispielsweise
LCN_SendTaste(12345, „A1“, „kurz“); // A1 kurz
LCN_SendTaste(12345, „A1“, „lang“); // A1 lang
LCN_SendTaste(12345, „B3“, „kurz“); // B3 kurz
Hast du PCHK Doku von LCN ?
Wenn ja, da steht alles drin.
Wenn nein, solltest du die dir von Issendorff besorgen.
lg Thomas
Hallo rro,
ja das könnte die Sache vereinfachen. Wenn Du das zur Verfügung stellst?
Oder soll das das schon sein, was du geschrieben hast?
Gern hier …
<?php
function LCN_SendTaste(int $instanzID, string $taste, string $typ = "kurz")
{
// Alle möglichen Tasten in Reihenfolge A1..D8
$tasten = [
"A1","A2","A3","A4","A5","A6","A7","A8",
"B1","B2","B3","B4","B5","B6","B7","B8",
"C1","C2","C3","C4","C5","C6","C7","C8",
"D1","D2","D3","D4","D5","D6","D7","D8"
];
$taste = strtoupper($taste);
$typ = strtolower($typ);
if(!in_array($taste, $tasten)) {
echo "Ungültige Taste: $taste\n";
return false;
}
// Index bestimmen (0-basiert)
$index = array_search($taste, $tasten);
// Basiswert = 2^(Index*2 + 1)
$wert = 1 << ($index * 2 + 1);
// Bei "lang" verdoppeln
if($typ === "lang") {
$wert = $wert << 1;
}
// Hexadezimal mit 8 Stellen
$hex = strtoupper(str_pad(dechex($wert), 8, "0", STR_PAD_LEFT));
// Datenstring für LCN
$daten = "--K-" . $hex;
// Befehl senden
LCN_SendCommand($instanzID, "TS", $daten);
return true;
}
super Danke. Das sieht gar nicht so kompliziert aus. Ich denke das dieses Skript nun im Hintergrund läuft oder? wie überwacht das nun den Befehl, den ich dann benutze? Oder muss das nur einmal durchlaufen und das System behält sich das im Hintergrund? Dann müsste das nur bei jedem Neustart einmal laufen richtig?
Der Befehl loslassen ist da aber nicht hinterlegt richtig?
Nein, den loslassen Befehl braucht man dabei nicht.
Das Script wird immer dann aufgerufen, wenn man es benötigt, quasi als Unterroutine. Sorry, wenn ich das vielleicht falsch beschreibe, ich taste mich gerade erst an PHP ran. Mir waren die Befehle zu kryptisch, mit diesem Aufruf ist es wesentlich einfacher. Besonders, wenn mal jemand anderes daran muss, weil es mir zu kompliziert wird oder ich nicht mehr da bin ![]()
Ich nutze es noch nicht, bereite alles dafür vor und spiele noch. Ich denke, ich würde es so versuchen, das Script ablegen/ abspeichern und dann von anderen Scripten aus aufrufen. Da muss ich aber erst einmal sehen, wie das geht. Soll aber so funktionieren. Der Ansatz kam damals von Uwe, der mir da viel gezeigt und geholfen hat. Der grinst jetzt bestimmt da oben über meine Versuche und sagt wieder „dran bleiben“ ![]()