LCN komanndos pro Sekunde

Hallo zusammen,

ich bin mir bewusst, dass es bei LCN ein Limit gibt, wie viele Kommandos man pro Sekunde in den Bus schicken kann.
Waren es 8?

Ich habe nun Folgendes Problem:
Ich betreibe mein IPS auf einem Banana PI (ja, ist Beta).
Dort habe ich ein paar einfache Scripte und Events, die Befehle in den Bus schicken.
z.B. mache ich morgens um 4 Uhr 3 Lämpchen an und um 9 wieder aus. Jedes Lämpchen in einem eigenen Event. Dies bewirkt, dass in bestimmten Räumen eine Elektrische FBH an und wieder aus geht.

Meistens funktioniert das auch, allerdings von Zeit zu Zeit auch nicht. (FBH geht nur in 2 Räumen an oder in einem Raum nicht wieder aus).
Ich hätte jetzt erwartet, dass IPS die Kommandos queued, falls zu viele auf einmal kommen.

Oder werden die Events nicht gefeuert? Kann ich so etwas iregendwo sehen?

Danke,
Thorsten

Ist auf jeden ein Spanender Fehler… Wird vermutlich etwas Zeit kosten, den zu finden uns zu lösen.

Zu allererst die Antwort auf deinen Frage:
Ja, IP-Symcon queued alle Befehle… an arbeitet die nach und nach ab.

Wenn du nun also viele Ereignisse hast, wird für jedes Ereignis ein PHP Skript gestartet, welches wieder rum die Befehle ausführt. Normalerweise sollten diese also nach und nach wieder verschwinden. Warum das bei dir nicht passiert, ist jetzt also die Frage.

Kannst du mir mal ein paar Beispiele deiner Skripte/Ereignisse geben, welche sich aufhängen? Nutzt du irgendwo die IPS_RunScript* Befehle?

paresy

klar:

  1. IPS_RunScript* setze ich nicht ein. Zumindest nicht bewusst.

  2. Hier ein Script, welches alle 5 Minuten läuft:


<?
################################################
####      Define automation conditions      ####
################################################

$condition       = [];
$controlModule   = [];
$controlLed      = [];
$minAltitude     = [];
$maxAltitude     = [];
$minAzimut       = [];
$maxAzimut       = [];
$ledState        = [];

$condition[1]      = 'Wohnzimmer Terrasse 1';
$controlModule[1]  = 50333 /*[M201 Wohnen/Essen Rollo]*/;  
$controlLed[1]     =     1;
$minAltitude[1]    =    25;
$maxAltitude[1]    =    90;
$minAzimut[1]      =   120;
$maxAzimut[1]      =   300;

$condition[2]      = 'Wohnzimmer Terrasse 2';
$controlModule[2]  = 50333 /*[M201 Wohnen/Essen Rollo]*/;  
$controlLed[2]     =     1;
$minAltitude[2]    =     3;
$maxAltitude[2]    =    90;
$minAzimut[2]      =   160;
$maxAzimut[2]      =   300;

$condition[3]      = 'Wohnzimmer Oberlicht';
$controlModule[3]  = 50333 /*[M201 Wohnen/Essen Rollo]*/;  
$controlLed[3]     =     3;
$minAltitude[3]    =     3;
$maxAltitude[3]    =    90;
$minAzimut[3]      =   208;
$maxAzimut[3]      =   360;

$condition[4]      = 'Esszimmer';
$controlModule[4]  = 50333 /*[M201 Wohnen/Essen Rollo]*/;  
$controlLed[4]     =     4;
$minAltitude[4]    =     2;
$maxAltitude[4]    =    90;
$minAzimut[4]      =     0;
$maxAzimut[4]      =   117;

$condition[5]      = 'Luftraum unten 1';
$controlModule[5]  = 50204 /*[M202 TH-Rollo]*/; 
$controlLed[5]     =     1;
$minAltitude[5]    =    37;
$maxAltitude[5]    =    90;
$minAzimut[5]      =   137;
$maxAzimut[5]      =   300;

$condition[6]      = 'Luftraum unten 2';
$controlModule[6]  = 50204 /*[M202 TH-Rollo]*/; 
$controlLed[6]     =     1;
$minAltitude[6]    =     3;
$maxAltitude[6]    =    90;
$minAzimut[6]      =   179;
$maxAzimut[6]      =   300;

$condition[7]      = 'Treppe unten';
$controlModule[7]  = 50204 /*[M202 TH-Rollo]*/; 
$controlLed[7]     =     2;
$minAltitude[7]    =     3;
$maxAltitude[7]    =    90;
$minAzimut[7]      =   208;
$maxAzimut[7]      =   340;

$condition[8]      = 'Luftraum oben 1';
$controlModule[8]  = 50204 /*[M202 TH-Rollo]*/; 
$controlLed[8]     =     3;
$minAltitude[8]    =    14;
$maxAltitude[8]    =    90;
$minAzimut[8]      =   137;
$maxAzimut[8]      =   300;

$condition[9]      = 'Luftraum oben 2';
$controlModule[9]  = 50204 /*[M202 TH-Rollo]*/; 
$controlLed[9]     =     3;
$minAltitude[9]    =     3;
$maxAltitude[9]    =    90;
$minAzimut[9]      =   179;
$maxAzimut[9]      =   300;

$condition[10]     = 'Treppe oben';
$controlModule[10] = 50204 /*[M202 TH-Rollo]*/; 
$controlLed[10]    =     4;
$minAltitude[10]   =     3;
$maxAltitude[10]   =    90;
$minAzimut[10]     =   208;
$maxAzimut[10]     =   325;

$condition[11]     = 'Schlafen 1';
$controlModule[11] = 52238 /*[M203 Schlafen/Kind Rollo]*/; 
$controlLed[11]    =     4;
$minAltitude[11]   =     8;
$maxAltitude[11]   =    90;
$minAzimut[11]     =   125;
$maxAzimut[11]     =   300;

$condition[12]     = 'Schlafen 2';
$controlModule[12] = 52238 /*[M203 Schlafen/Kind Rollo]*/; 
$controlLed[12]    =     4;
$minAltitude[12]   =     3;
$maxAltitude[12]   =    90;
$minAzimut[12]     =   160;
$maxAzimut[12]     =   300;

$condition[13]     = 'Gaeste Garten';
$controlModule[13] = 21501 /*[M204 Gast Rollo]*/; 
$controlLed[13]    =     1;
$minAltitude[13]   =     3;
$maxAltitude[13]   =    90;
$minAzimut[13]     =   208;
$maxAzimut[13]     =   340;

$condition[14]     = 'Gaeste Schreibtisch';
$controlModule[14] = 21501 /*[M204 Gast Rollo]*/; 
$controlLed[14]    =     2;
$minAltitude[14]   =     3;
$maxAltitude[14]   =    90;
$minAzimut[14]     =   120;
$maxAzimut[14]     =   300;

$condition[15]     = 'Gaeste Bett';
$controlModule[15] = 21501 /*[M204 Gast Rollo]*/; 
$controlLed[15]    =     3;
$minAltitude[15]   =     0;
$maxAltitude[15]   =    90;
$minAzimut[15]     =    28;
$maxAzimut[15]     =   200;

################################################
####       set all LEDs to off ("A")        ####
################################################
foreach ($condition as $i => $value) {
    $ledState[$controlModule[$i]][$controlLed[$i]] =  'A';
}

################################################
####      set relevant LED to on ("E")      ####
################################################

$azimut   = intval(GetValuefloat(12438 /*[Beschattung\Azimut]*/ ));
$altitude = intval(GetValuefloat(49682 /*[Beschattung\Altitude]*/));

foreach ($condition as $i => $value) {
 if ( ( $azimut >= $minAzimut[$i] ) && ( $azimut <= $maxAzimut[$i] ) && ( $altitude >= $minAltitude[$i] ) && ( $altitude <= $maxAltitude[$i] ) ){
   $ledState[$controlModule[$i]][$controlLed[$i]] = 'E';
 }
}

################################################
####            set LEDs in LCN             ####
################################################
foreach ($ledState as $module => $value) {
  foreach ($value as $led => $state){
    LCN_SetLamp($module, $led, $state);
  }
}

?>

→ Ich hab mit 15 Bedingungen definiert, unter welchen Sonne auf eines unserer 11 Fenster scheint.

Entsprechend dieser Bedingungen schalte ich dann alle 5 Minuten Lämpchen im LCN ein oder aus. Das regelt im Endeffekt dann unsere Beschattung.
Ja, es gibt etwas vergleichbares bereits hier vorgefertigt, ich habe dieses Script allerdings in einer Perl version seit 4 Jahren ohne Problme im Einsatz. Wozu also ändern.

Am Ende habe ich also immer 11 Kommandos in den Bus.

EIn Weiteres „Problemkind“ ist ein Event, welches immer um 4:00 bzw. 9:00 läuft. Genauer gesagt 3 Mal, für 3 verschiedene LEDs.


Typ: Cyclic
Ziel: Obergeschoss\Elternbad\VR: FBH Automatik Elternbad

Zyklisches: Täglich um 04:00:00

Code: LCN_SetLamp(30736, 5, "E");

Gruß,
Thorsten

Hi,

ich muss mich berichtigen.
Das Script ist scheinbar nicht der „Fehler“. Probelme gab es eher mit Events die lediglich je eines dieser Kommandos im LCN triggern:

  • LCN_SwitchRelay($_IPS[‚TARGET‘], true);
  • LCN_SwitchRelay($_IPS[‚TARGET‘], false);
  • LCN_SetLamp(30736, 5, „E“);
  • LCN_SetLamp(30736, 5, „A“);

Scheint also doch eher nichts mit der Anzahl der Kommandos zu tun zu haben.

Gruß,
Thorsten