+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 23
  1. #1
    Registriert seit
    Sep 2008
    Ort
    Hamburg
    Beiträge
    1,226

    Standard Fehlende Zeichen bei Übertragung - zu viele Threads?

    Hallo,

    ich stehe seit Jahren vor dem Problem, dass bei verschiedenen Datenübertragungen von externen Geräten zu Symcon, auf ganz unterschiedlichen Wegen (TCP, USB direkt am Host, USB über Silex USB Host) immer wieder Zeichen fehlen, mit gravierenden Folgen. Ich habe schon in die meisten Richtungen geforscht, aber mir erscheint eigentlich nur noch eines denkbar, nämlich dass immer dann, wenn kurzzeitig alle Threads "voll" sind, ankommende Datenpakete nicht verarbeitet werden, unabhängig ob ich sie per Skript zusammenfüge oder mit entsprechenden Cutterinstanzen.

    Frage an die Entwickler: Ist dies möglich oder ist eine andere Erklärung wahrscheinlicher?

    Gibt es eine Möglichkeit, zu erforschen, welche Skripte zu viele Threads blockieren? Das blitzt ja in der Threadanzeige immer nur für Sekundenbruchteile auf. Sie sieht schon immer mal für kurze Momente "voll" aus aber es ist kaum zu erkennen, womit.

    Ich bin wirklich ratlos und mich plagt dieses Phänomen seit Jahren in meiner Heiminstallation.

    Danke!
    LCN für alles fixe | HM für alles bewegliche | Lötkolben für alles, was es nicht gibt
    "Der RGB-Streifen ist das Arschgeweih der Home Automation."

  2. #2
    Registriert seit
    Oct 2010
    Ort
    Paderborn
    Beiträge
    2,891

    Hast du denn schon mal probiert, die Anzahl der Threads zu erhöhen? Der Default liegt meiner Meinung nach zur Zeit bei 30.
    HM per RaspberryMatic | EKM-868 | LGS-868 | 1 Wire | Fibaro Motion Sensor & Aeon Labs Z-Stick S2 | SONOS | Denon AVR 3312 | Vu+ Ultimo 4K | Sony KD-75XE9405 | Fritzbox 6360 | Hikvision DS-2CD2686G2-IZS | Echo Dot + Show | Stall.biz AirSniffer | Vaillant eBUS | Intel NUC i3 | IPS V5.5 Beta

  3. #3
    Registriert seit
    Sep 2008
    Ort
    Hamburg
    Beiträge
    1,226

    Ja, das verschiebt das Problem ja aber nur auf die Lange Bank. Irgendwo muss ein Fehler sein, der dafür sorgt, dass manchmal "irre viele" Threads gleichzeitig belegt sind.
    LCN für alles fixe | HM für alles bewegliche | Lötkolben für alles, was es nicht gibt
    "Der RGB-Streifen ist das Arschgeweih der Home Automation."

  4. #4
    Registriert seit
    Sep 2008
    Ort
    Hamburg
    Beiträge
    1,226

    Name:  Screenshot 2020-10-03 203133.png
Hits: 168
Größe:  14.8 KB

    Es ist echt zum Mäuse melken.
    LCN für alles fixe | HM für alles bewegliche | Lötkolben für alles, was es nicht gibt
    "Der RGB-Streifen ist das Arschgeweih der Home Automation."

  5. #5
    Registriert seit
    Sep 2008
    Ort
    Hamburg
    Beiträge
    1,226

    Habe die Threadanzahl und Queue jetzt zum Test weiter hochgeschraubt, bin mittlerweile bei 100. Scheint eventuell seltener aufzutreten. Im Log findet sich zu den Zeiten, wo der Fehler aufgetreten ist, nichts auffälliges.
    LCN für alles fixe | HM für alles bewegliche | Lötkolben für alles, was es nicht gibt
    "Der RGB-Streifen ist das Arschgeweih der Home Automation."

  6. #6
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    10,629

    Cutter oder eigenes Script welche den String zusammenbaut?
    Könnte ein Fehler im Script sein, oder auch das schon Daten am IO fehlen, bevor sie am Cutter/RegVar landen?
    Sonst davon ein dump machen.
    Michael
    on Win10VM (ESXi): I7, 32GB RAM, HW-RAID5, 2xSat | HW: pivccu + ca.130 Geräte (ca.550ch), EM1000, CUL, 1Wire, FritzBox Cable, Android Phone + Tablet, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, RoundCube, Win2016 Ess., MediaPortal, Kodi

  7. #7
    Registriert seit
    Sep 2008
    Ort
    Hamburg
    Beiträge
    1,226

    Es passiert sowohl bei Cuttern als auch im eigenen Skript. Wegen des sporadischen Auftretens kann ich nichts ausschließen, aber ich habe das weder in direkten Konsolen (Putty o.ä.) beobachtet, noch in der Debugansicht der entsprechenden IO-Instanzen.

    Es passiert halt auch bei verschiedensten IO-Verbindungen, egal ob sie über USB kommen oder über TCP.
    LCN für alles fixe | HM für alles bewegliche | Lötkolben für alles, was es nicht gibt
    "Der RGB-Streifen ist das Arschgeweih der Home Automation."

  8. #8
    Registriert seit
    Oct 2007
    Ort
    Villach,Kärnten,Österreich
    Beiträge
    3,194

    Zitat Zitat von sokkederheld Beitrag anzeigen
    Hallo,
    Das blitzt ja in der Threadanzeige immer nur für Sekundenbruchteile auf. Sie sieht schon immer mal für kurze Momente "voll" aus aber es ist kaum zu erkennen, womit.
    Servus, ich kann dir da leider nicht helfen, hattee aber schon lange mal angeregt, das man in die Thread Anzeige abhängig von gewissen Kriterien "einfrieren" könnte. also zb.
    - Anzeige Stop wenn mehr als x Threads laufen,
    - oder Anzeige Stop wenn Thread x/y auftaucht

    schöne Grüße
    Bernhard

  9. #9
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    10,629

    Auch ein Cutter hat ja dahinter eine RegVar und ein Script.
    Wenn du es in den IOs siehst, dann schau dir die anderen Dumps der Ketten an, wo das auftritt.
    Die kannst du jetzt auch auf die Platte schreiben lassen und musst nicht die ganze Zeit vor der Konsole verbringen.
    Etwas grundlegendes kann es ja kaum sein, sonst würden ja auch mit bulit-in Instanzen Probleme geben, wie LCN oder Homematic.
    Wenn es bis zur RegVar sauber durchläuft, dann musst du uns dein(e) Scripte zeigen.
    Michael
    on Win10VM (ESXi): I7, 32GB RAM, HW-RAID5, 2xSat | HW: pivccu + ca.130 Geräte (ca.550ch), EM1000, CUL, 1Wire, FritzBox Cable, Android Phone + Tablet, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, RoundCube, Win2016 Ess., MediaPortal, Kodi

  10. #10
    Registriert seit
    Sep 2008
    Ort
    Hamburg
    Beiträge
    1,226

    Sind so einige, relativ verschiedene Skripte, die am Ende die Nachricht parsen. Die meisten haben mittlerweile Workarounds drin zur "Plausiblitätsprüfung" denn wenn das mit dem Zeichenverlust bei numerischen Werten auftritt, die irgendwo in Berechnungen wieder auftauchen, dann kann es ziemlich nervige Folgen haben.

    PHP-Code:
    <?
    $lock 
    true;

    $rootId $_IPS['SELF'];

    if(
    $_IPS['SENDER'] == 'RegisterVariable') {
        
    $bufStr RegVar_GetBuffer($_IPS['INSTANCE']) . $_IPS['VALUE'];
    } else if(
    $_IPS['SENDER'] == 'Execute') {
        
    $bufStr "{\"test\":true}\r\n{\"Hallo\":\"Welt!\"}\r";
    }

    $bufStr str_replace("\n"""$bufStr);
    while(
    strpos($bufStr"}") !== false)
    {
        
    $msg substr($bufStr0strpos($bufStr"}") + 1);
        
    $bufStr substr($bufStrstrpos($bufStr"}") + 1);
        
        if(
    $msg != "") {
            if(
    $_IPS['SENDER'] == 'Execute') {
                echo 
    "Json-Nachricht: ";
                echo 
    $msg "\r";
            }
            
    handle_msg($msg);
        }
    }

    if(
    $_IPS['SENDER'] == 'RegisterVariable') {
        if(
    $bufStr === false$bufStr "";
        
    RegVar_SetBuffer($_IPS['INSTANCE'], $bufStr);
    }

    function 
    handle_msg($json) {
        
    $arr json_decode($jsontrue);
        if(
    $arr) {
            foreach(
    $arr as $key => $value) {
                
    set_var($key$value);
            }
        }
    }

    function 
    set_var($name$value) {
        global 
    $lock$rootId;
        switch(
    gettype($value)) {
            case 
    "boolean"$ips_type 0; break;
            case 
    "integer"$ips_type 1; break;
            case 
    "double"$ips_type 2; break;
            case 
    "string"$ips_type 3; break;
            default:
                
    IPS_LogMessage($_IPS['SELF'], "Data type " .
                    
    gettype($value) . " of variable " .
                    
    $name " not supported.");
                return;
        }
        
    $var_id = @IPS_GetObjectIDByIdent($name$rootId);
        if(
    $var_id === false) {
            if(
    $lock) return; // WORKAROUND damit keine sinnlosen Variablen erzeugt werden!
            // durch einen unbekannten Datenfehler kommem manchmal einzelne Zeichen
            // der Verbindung nicht an
            
    $var_id IPS_CreateVariable($ips_type);
            
    IPS_SetName($var_id$name);
            
    IPS_SetIdent($var_id$name);
            
    IPS_SetParent($var_id$rootId);
        }
        
        if(
    $lock) {
            
    // WORKAROUND discard implausible water meter readouts
            
    if($name == "water" || $name == "water1" || $name == "water2") {
                
    $oldvalue GetValue($var_id);
                if(
    $value $oldvalue) return; // can't be lower than the old value
                
    if($value $oldvalue 1) return; // max increment 1m3
                //if($value > $oldvalue + 0.1) return;
            
    }
        }
        
        
    SetValue($var_id$value);
    }

    ?>
    LCN für alles fixe | HM für alles bewegliche | Lötkolben für alles, was es nicht gibt
    "Der RGB-Streifen ist das Arschgeweih der Home Automation."

Ähnliche Themen

  1. Registervariable erzeugt zu viele Threads
    Von sokkederheld im Forum Allgemeine Diskussion
    Antworten: 4
    Letzter Beitrag: 07.09.20, 12:49
  2. Beta: Fehler bei Modbus Übertragung
    Von gogo20012002 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 8
    Letzter Beitrag: 31.05.15, 10:12
  3. Antworten: 3
    Letzter Beitrag: 23.09.14, 20:22
  4. Hilfe bei Lizenz-Übertragung
    Von fucco im Forum WebFront
    Antworten: 2
    Letzter Beitrag: 14.11.13, 20:23
  5. änderung bei der seriellen übertragung
    Von hmpf99 im Forum Allgemeine Diskussion
    Antworten: 0
    Letzter Beitrag: 22.06.07, 08:23