Kommandos an LCN-Module kommen nicht zuverlässig an

Hi Uwe,

kannst du mal den LCN Bus Monitor mitlaufen lassen, ob dort die Telegramme auch fehlen? Denn wenn ja, dann kann IP-Symcon ja nicht wirklich was dagegen tun. Oder habe ich deine Analyse dort falsch verstanden?

Das Warten auf die Quittierung ist übrigens asynchron in IP-Symcon implementiert, sodass wir trotzdem nebenbei alle eingehenden Statusmeldungen verarbeiten. Da sollte also unsererseits nichts verloren gehen. Warum die Quittierungsanforderung auf PCHK/PKE Seite zu einem Telegramverlust führen sollte kann ich mir aber auch noch nicht erklären. Somit sehr spannend das Verhalten.

paresy

Hallo Uwe, hallo paresy,

dass Statusmeldungen von LED nicht sicher erkannt werden und die LED gelegentlich nicht entsprechend reagieren, kannte ich schon von früher. Die LCN-Hotline hat mir empfohlen die LED immer aktiv zu schalten, was seither und auch mit 6.1 bei mir bisher funktioniert.

Dass Statusmeldungen von Binäreingängen (Bewegungsmelder) nicht durchkommen, konnte ich bisher nicht feststellen, bzw. hab ich bisher nicht bemerkt. Ich habe 18 Bewegungsmelder, die ich auf IPS-Schaltung umgestellt habe, verlorene Statusmeldungen habe ich bisher nicht bemerkt.

Falls Statusmeldung in IPS nicht durchkommen wäre das fatal, dann würden die Systemzustände auseinander laufen. Ich frage zur Sicherheit im IPS-Startscript mit „SM“, „MF“ alle Module ab, um Gleichstand der Systeme zu haben. Vor ganz wichtigen Funktionen frage ich den Status zur Sicherheit mit „SM“, „MF“ ab.

Ich hab in den letzten Wochen sehr viel Zeit in den Umbau in Richtung IPS gesteckt. Dein Hinweis dämpft gerade meine positive Stimmung, die bei mir in den letzten Tagen entstanden ist. Wie gesagt, bei mir scheints gerade gut zu laufen. Hab heute Mittag deshalb die neue Symbox für die vollautomatische Backup-Lösung bestellt.

@paresy: Es wäre wirklich mal sehr nett, wenn mal wenigstens eine Antwort auf Verbesserungswünsche bekommen würde. Auch wenn diese erst mal negativ ausfallen. Man fühlt sich sonst sehr ignoriert.

Viele Grüße
Fridolin

Aktuell kommt nichts - ich habe den Wunsch mit den Retries aber gesehen.

paresy

Natürlich kann ich das - Quittung ist wieder an (ging diesmal übrigens ohne reconnect vom Socket) und Aufzeichnug gestartet. Jetzt warte ich auf nachvollziehbare Fehler …

Grüße, Uwe

Eigentlich „typisch“ (so kenne ich das vom Büro aber auch), seit die Aufzeichnung in der Pro läuft kommen keine Fehler mehr …

1 „Gefällt mir“

Hallo zusammen,
ich habe bei mir noch mal ein Messung gemacht.
10.000 Schaltvorgänge, jede Sekunde wir ein LCN Ausgang umgeschaltet.
(maximaler Timeout 30 Sekunden)
a) ohne Auswertung der Quittierung

  • 10000 Versuche
  • 9973 Ok

b) mit Auswertung der Quittierung

  • 10000 Versuche
  • 11 Retries
  • 9998 OK

c) mit eigener Auswertung der Quittierung (Registervariable)
Generelle LCN Quittierung abgeschaltet

  • 10000 Versuche
  • 53 einfache Retries / kein 2facher Retry
  • 10000 OK

d) mit eigener Auswertung der Quittierung (Registervariable)
Generelle LCN Quittierung eingeschaltet

  • 10000 Versuche
  • 57 Retries / 1 zweifacher Retry
  • 10000 OK

Meine Erkenntnis: Derzeit schaltet LCN am zuverlässigen bei Auswertung der Quittierung.
Jedoch gibt es auch hier 2 Fälle aus 10.000Versuche ohne Erfolg.

In einer eigenen Auswertung des Quittierung sind alle Schaltvorgänger erfolgreich.

Anbei das Skript zur eigenen Auswertung der Quittierung:

<?php
$id_Test_State = 42752;
$id_Test_Output = 15330;
$ID_Test_Modul = IPS_GetInstance(IPS_GetParent($id_Test_Output))["ConnectionID"];

$id_counter  = 39629;

$id_repeat_counter  = 52353;

$id_error_counter_1 = 57075;
$id_error_counter_2 = 53325;
$id_error_counter_3 = 34422;
$id_error_counter_4 = 30319;
$id_error_counter_5 = 56692;
$id_error_counter_6 = 59986;

$id_error_counter_summ = 48761;    

if ($_IPS['SENDER'] == "Execute" )
{
    
    foreach( IPS_GetChildrenIDs($_IPS['SELF']) as &$event)
    {
        IPS_DeleteEvent($event);
    }
 
    
    $id_event = IPS_CreateEvent(0);                  //Ausgelöstes Ereignis
    IPS_SetEventTrigger($id_event, 1, $id_Test_State);   //Bei Aktualiserung von Variable $id_status
    IPS_SetParent($id_event, $_IPS['SELF']);         //Ereignis zuordnen
    IPS_SetEventActive($id_event, true);             //Ereignis aktivieren  
    IPS_SetEventAction($id_event, '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}', []);  


    SetValueInteger($id_counter, 0);
    SetValueInteger($id_error_counter_1, 0);
    SetValueInteger($id_error_counter_2, 0);
    SetValueInteger($id_error_counter_3, 0);
    SetValueInteger($id_error_counter_4, 0);
    SetValueInteger($id_error_counter_5, 0);
    SetValueInteger($id_error_counter_6, 0);


    AC_DeleteVariableData(30302, $id_repeat_counter, 0, 0);
    AC_SetLoggingStatus(30302, $id_repeat_counter, true);

	LCN_SendCommand($ID_Test_Modul, "TS", "---L00010000");
   
    IPS_SetScriptTimer($_IPS['SELF'], 5);  
  
    return;
}

if ($_IPS['SENDER'] == "RegisterVariable" )
{
    $string = explode(chr(0x0A),$_IPS['VALUE'] );
    //IPS_LogMessage("TestA",$_IPS['VALUE'] );
    
    auswertung($string[0]);

    if (count($string) > 1)
    {
        if (strlen($string[1]) >= 3)
        {
            auswertung($string[1]);
        }
    }
    
    if (count($string) > 2)
    {
        if (strlen($string[2]) >= 3)
        {
            auswertung($string[2]);
            //IPS_LogMessage("Test Extra lang","3 Meldungen" );
        }
    }
    
    if (count($string) > 3)
    {
        if (strlen($string[3]) >= 3)
        {
            auswertung($string[3]);
        }
    }

    if (count($string) > 4)
    {
        if (strlen($string[4]) >= 3)
        {
            auswertung($string[4]);
            IPS_LogMessage("Test Extra lang","5 Meldungen" );
        }
    }
    return;
};

if ($_IPS['SENDER'] == "Variable" )
{
    SetValueInteger($id_error_counter_6, GetValueInteger($id_error_counter_6) +1 );
    IPS_SetScriptTimer($_IPS['SELF'], 1);
    return;
}

if ($_IPS['SENDER'] == "TimerEvent" )
{
    IPS_SetScriptTimer($_IPS['SELF'], 30);
    
    $counter = GetValueInteger($id_counter);
    if ($counter < 10000)
    {
        SetValueInteger($id_counter,  $counter+1);
    
        $State = GetValueBoolean($id_Test_State);

        $noerror = switchoutput(!$State);
        if (!$noerror)
        {
            SetValueInteger($id_error_counter_1, GetValueInteger($id_error_counter_1) +1 );
        }
    }

}

    
        

function switchoutput($output) 
{
    $id_error_counter_1 = 57075;
    $id_error_counter_2 = 53325;
    $id_error_counter_3 = 34422;
    $id_error_counter_4 = 30319;
    $id_error_counter_5 = 56692;
    $id_error_counter_6 = 59986;
   
    
    $polling_time = 100;
    $repeat_cadence = 300; // ms

    $runs = (int)($repeat_cadence / $polling_time);

    $counter = 1;
    
    if ($output)
    {
        $TX_BUF = '>M000099!A4DI100000'.chr(10);
    }
    else
    {
        $TX_BUF = '>M000099!A4DI000000'.chr(10);
    }
    
    SetValueBoolean(54679, false); 
    CSCK_SendText(13690 ,$TX_BUF); // an den Client Socket LCN
    
    $counter_offset = $counter;
    for ($counter =  $counter_offset ; $counter <= ($runs + $counter_offset-1); $counter++)
    {
        IPS_Sleep($polling_time);
        if (GetValueBoolean(54679)) // Abfrage Statusmeldung
        {
            $id_repeat_counter  = 52353;
            SetValueInteger($id_repeat_counter, $counter);
            SetValueBoolean(54679, false); 
            return true;
        }
    }
    SetValueInteger($id_error_counter_3, GetValueInteger($id_error_counter_3) +1 );
   
    //SetValueBoolean(54679, false); 
    CSCK_SendText(13690 ,$TX_BUF); // an den Client Socket LCN
    
    $counter_offset = $counter;
    for ($counter =  $counter_offset ; $counter <= ($runs + $counter_offset-1); $counter++)
    {
        IPS_Sleep($polling_time);
        if (GetValueBoolean(54679)) // Abfrage Statusmeldung
        {
            $id_repeat_counter  = 52353;
            SetValueInteger($id_repeat_counter, $counter);
            SetValueBoolean(54679, false); 
            return true;
        }
    }
    SetValueInteger($id_error_counter_4, GetValueInteger($id_error_counter_4) +1 );

    //SetValueBoolean(54679, false); 
    CSCK_SendText(13690 ,$TX_BUF); // an den Client Socket LCN
    
    $counter_offset = $counter;
    for ($counter =  $counter_offset ; $counter <= ($runs + $counter_offset-1); $counter++)
    {
        IPS_Sleep($polling_time);
        if (GetValueBoolean(54679)) // Abfrage Statusmeldung
        {
            $id_repeat_counter  = 52353;
            SetValueInteger($id_repeat_counter, $counter);
            SetValueBoolean(54679, false);
            return true;
        }
    }
    SetValueInteger($id_error_counter_5, GetValueInteger($id_error_counter_5) +1 );

    return false;
};






function auswertung($lcninput)
{
    $startstring = substr($lcninput, 0 ,2);

    switch ($startstring)
    {
        case ('%M'):
            //messwert($lcninput);
        break;

        case (':M'):
            //ausgang($lcninput);
        break;

        case ('-M'):
            //IPS_LogMessage("Test Status", $lcninput);
      
            
            if ( substr($lcninput,0, 8) == '-M000099')
            {
                if (substr($lcninput,8, 1) == '!')
                {
                    //IPS_LogMessage("LCN Bestätigung", "OK" . $lcninput);
                    SetValueBoolean(54679, true); 
                }
                else
                {
                    IPS_LogMessage("LCN Bestätigung", "NOK" . $lcninput);
                }

            }
            
            


        break;

        case ('+M'):
            //pchkmessage($lcninput);
        break;
 
        case ('=M'):
            //transponder($lcninput);
        break;

        case ('^p'):
            //IPS_LogMessage("LCN ping", $lcninput);
        break;


        default:
            IPS_LogMessage("LCN Message Neu", $lcninput);
        break;
    }
};

tippe oder füge den Code hier ein

Hallo Paresy,

wie schon geschrieben gibt trotz Auswertung der Quittierung noch Fehler.
Schon sehr selten, aber vorhanden.
Evtl habe ich den Ursprung gefunden:

Der Vorgang: Modul 99 / Ausgang 4 schalten / Quittierung kommt / Ausgang ist geschaltet
Kommt keine Quittierung wird wiederholt (Timeout 5 Sekunden)
Das Schalten des Ausgangs ist überwacht, nach 30 Sekunden erfolgt des nächste Vorgang.

Normal Fall:

> 02/18/22 09:49:57 | TXT | WAITING | >M000099!A4DI000000<LF> // Schalten anfordern
02/18/22 09:49:57 | TXT | TRANSMIT | >M000099!A4DI000000<LF> // senden PCHK
02/18/22 09:49:57 | TXT | RECEIVED | -M000099! // Quittierung
02/18/22 09:49:57 | TXT | RECEIVED | :M000099A4000 // Ausgang meldet geschaltet

Fehler Fall:

02/18/22 09:31:42 | TXT | WAITING | >M000099!A4DI100000<LF>
02/18/22 09:31:42 | TXT | TRANSMIT | >M000099!A4DI100000<LF>

**02/18/22 09:31:44 | TXT | RECEIVED | %M000099.A01201481**
//vermutlich Falsch interpretiert als Quittierung, keine Quittierung erfolgt

// nächster Vorgang nach 30 Sekunden
02/18/22 09:32:12 | TXT | WAITING | >M000099!A4DI100000<LF>
02/18/22 09:32:12 | TXT | TRANSMIT | >M000099!A4DI100000<LF>
02/18/22 09:32:12 | TXT | RECEIVED | -M000099!
02/18/22 09:32:12 | TXT | RECEIVED | :M000099A4100

Falls du das nachvollziehen kannst, bitte ich dich zu korrigieren

Gruß
Jan Peter

Moin Jan Peter,
welche LCN-FW hat dein Modul 99?
Welche Version hat deine PCHK? Noch ist die 3.2.2 die aktuelle Version im Download - auf neueren PKE/VISU ist aber auch schon eine 3.2.3 im Einsatz.

Grüße, Uwe

Hallo Uwe,
das Modul ist relativ neu: FW = FW1B060F
Ich nutze eine PKE.

Gruß
Jan Peter

Moin Jan Peter,
das ist nicht neu genug für meine „Vermutung“ … (1B… ist ja auch schon von 2017)

Ganz unten auf http://lcn-pke/ steht auch die Version der PCHK … (für meine dortige Vermutung habe ich aber noch keine Bestätigung, kommt noch …).

Grüße, Uwe

Hi Peter,

stimmt. Das kann tatsächlich passieren. Wir werten aktuell jede Antwort aus, da die Befehle verschiedene Antworten liefern. Ich befürchte also, dass wir noch eine Tabelle machen müssen, für welche Befehle, welche Typen von Antworten erwartet werden und dies strikter prüfen müssen, damit die Quittierungen zu 100% zuverlässig erkannt werden. Ich kümmere mich darum.

Ich versuche das noch in die 6.2 zu bringen und brauche dann ein paar Tester, da ich da bestimmt Randfälle übersehen werden :wink:

paresy

2 „Gefällt mir“

Hallo Uwe,

©2018 - Issendorff KG - Version: 1.82 - LCN-PCHK 3.2.2

Gruß
Jan Peter

Danke für die Info !

Das sieht bei mir schon etwas anders aus (so eingekauft)
©2020 - Issendorff KG - Version: 2.08 - LCN-PCHK 3.2.3
Ob das dann aber bereits „die beste Version“ ist wird sich noch zeigen - auch ich werde das Downloadangebot sicherlich beobachten.

@paresy - ich bin beim testen (wie immer) gerne dabei. Die Unterschiede bei alten und neuen Modulen sind IMHO schon recht „leidich“ - habe ich aber verfügbar.

Grüße, Uwe

gibt es ein Update von PKE mit PCHK 3.2.2 auf 3.2.3?

Nein, bislang nicht. Aber laut Hotline ist da wohl was „in Arbeit“. Bleibt nur abwarten …

Grüße, Uwe

Hallo liebes Schwarmwissen,

seit ich kürzlich zunächst auf 6.0, dann in einem Rutsch auf 6.1 updated habe, ist mein Fehlerlog voll mit den Meldungen…

Klicke ich auf eine der Fehlermeldungen, erhalte ich…

Kann mir jemand sagen/helfen, woran das liegen kann? Ich hatte seinerzeit nur das Update ausgeführt, sonst keine Veränderungen vorgenommen. Auch betrifft es quer durch den Gemüsegarten scheinbar alle Module mit Values.

Ich danke euch.

VG: Lars

System: LCN, IP-Symcon auf Symbox (CM3), IPSStudio

Hallo Lars,

ich hatte das Problem auch und habe es dadurch gelöst, dass ich die Messwerte der alten Module durch neue Module auslese. Diese werden dann automatisch im Bus kommuniziert.
Danach kannst du das Auslesen alle 60 Sekunden abschalten und die Probleme sind weg.

Viele Grüße
Fridolin

1 „Gefällt mir“

Danke Fridolin :slight_smile:

Bei der Gelegenheit mal eine Frage: wie definiert sich ‚alte Module‘ und ‚neue Module‘? Meine stammen von 2015 (FW- und Seriennummern muss ich endlich mal alle auslesen und dokumentieren, waren damals aber alle neu).

Danke Dir und euch allen.

VG: Lars

Die neuen Module haben 12 Variablen die alt nur Tvar.

Viele Grüße
Fridolin