+ Antworten
Ergebnis 1 bis 4 von 4
  1. #1
    Registriert seit
    Jan 2016
    Ort
    Hannover
    Beiträge
    43

    Question Nicht erreichbare CCU blockiert IPS für 60 Sekunden komplett

    Hallo,

    ich habe zwei CCU, eine davon im LAN, eine zweite weiter entfernt hinter einem VPN über LTE. Die zweite CCU ist oft nicht erreichbar, wenn der Standort grade offline ist. Immer wenn die CCU nicht erreichbar ist, dann gibt es das Phänomen, dass das gesamte IPS für 60 Sekunden "einfriert" und danach wieder 60 Sekunden normal läuft - im stetigen Wechsel. Die GUI ist nicht betroffen, aber alle Aktionen. Es ist also oft nur mit einer Sekunde Verzögerung z.B. möglich, einen Lichtschalter zu bedienen.

    Ich habe noch keine Möglichkeit gefunden, das stoppen, außer, die CCU (Socket) abzuschalten. Ideen für Workarounds habe ich, z.B. könnte ich einen regelmäßigen Check implementieren, der den Socket dann abschaltet und wieder anschaltet. Das löst aber ja nicht die Ursache.

    Kennt jemand eine Möglichkeit, wie ich IPS so konfigurieren kann, dass es bei einem Timeout zur CCU nicht gleich komplett "einschläft" oder gibt es einen Trick, die CCU generell auf Verfügbarkeit zu prüfen und den Socket entsprechend zu steuern?

    Danke Euch
    Golo

  2. #2
    Registriert seit
    Mar 2012
    Ort
    Schwanewede-Beckedorf
    Beiträge
    410

    Vielleicht kannst du es mit dem Modul "Watchdog" lösen. so überwache ich die MQTT-Verbindung zwischen meinem Symcon Haupt - und Testsystem.
    HP Proliant Gen 8 mit Windows Server 2012 R2 Essentials mit IPS 5.5, 4x Siemens LOGO! zur Haussteuerung und Alarmerfassung, Shelly 2,5, (Raspberry PI3B+ mit IPS 5.5) Testsystem Desktop Ubuntu 20.04 mit IPS 5.5, HomeMatic CCU2 mit div. Sensoren und Aktoren zur Heizungssteuerung. Solarwatt Facade System mit Steca Umrichter an IP-Symcon

  3. #3
    Registriert seit
    Jan 2016
    Ort
    Hannover
    Beiträge
    43

    Hallo Senior,

    danke für den Tipp! Soweit ich es gesehen habe, überwacht der Watchdog ja nur das Alter einer Variablen, oder?

    Ich habe etwas gestöbert und den Befehl Sys_Ping gefunden, der mir hilft. Daraus habe ich dann gleich mal ein kleines "allgemeines Monitoring" geschrieben, was mir verschiedene Geräte überwachen und alarmieren kann. Das Script einfach in einen leeren Ordner legen und einmal ausführen - ist aber "alpha", wer Fehler findet, darf sie mir gerne schicken :-)

    PHP-Code:
    <?php

    // Konfig ----------------------------------------------------------------------------------------

    $archiveID 52555// In welchem Archiv soll der Online-Verlauf gespeichert werden?
    $checkActiveName "Aktiv"// Variablenname
    $checkScriptName "check"// Variablenname
    $alertEventName "alert"// Variablenname
    $onlineVariableName "Online"// Variablenname
    $intervalVariableName "Intervall"// Variablenname
    $timeoutVariableName "Timeout"// Variablenname
    $hostVariableName "Host"// Variablenname für IP-Adresse oder DNS Hostname
    $alertWebFrontName "Alert-WebfrontID"// WebFront ID für Push-Alerts bei Statusänderung

    // Array mit allen zu überwachenden Hosts und deren Parametern
    $hosts = array(
        
    "Blackbox" => array(
            
    "Aktiv" => true,
            
    "Host" => "192.168.5.3",
            
    "Intervall" => 60,
            
    "Timeout" => 1000,
            
    "Alert-WebfrontID" => 27413,
        ),
        
    "Delorean" => array(
            
    "Aktiv" => true,
            
    "Host" => "192.168.5.4",
            
    "Intervall" => 60,
            
    "Timeout" => 1000,
            
    "Alert-WebfrontID" => 27413,
        ),
        
    "CCU Home" => array(
            
    "Aktiv" => true,
            
    "Host" => "192.168.5.55",
            
    "Intervall" => 10,
            
    "Timeout" => 1000,
            
    "Alert-WebfrontID" => 27413,
        ),
        
    "CCU Beatbox" => array(
            
    "Aktiv" => true,
            
    "Host" => "192.168.7.3",
            
    "Intervall" => 30,
            
    "Timeout" => 3000,
            
    "Alert-WebfrontID" => 27413,
        ),
    );


    // Ab hier nichts mehr ändern --------------------------------------------------------------------

    $rootID IPS_GetParent($_IPS['SELF']);
    $hostNames array_keys($hosts);

    // Prüfen, ob Hosts (Dummy-Instanzen) existieren, die lauf Konfig-Array nicht da sein sollten
    $childrenIDs IPS_GetChildrenIDs($rootID);
    foreach (
    $childrenIDs as $childID) {
        
    $child IPS_GetObject($childID);
        if ((
    $child["ObjectType"] == 1) and (!in_array($child["ObjectName"], $hostNames))) {
            
    // Löschfunktion fehlt noch (rekursiv), nur Hinweis ausgeben
            
    print("Should delete ID ".$child["ObjectID"]." (".$child["ObjectName"].")\r\n");
        }
    }
    // Alle Hosts durchgehen
    foreach ($hosts as $hostname => $host) {
        
    $host[$onlineVariableName] = false// Variable für den Online-Status zusätzlich zur Konfiguration erzeugen
        // Prüfen ob Host schon existiert ist, ggf. erzeugen
        
    $hostID = @IPS_GetObjectIDByName($hostname$rootID);
        if (!
    $hostID) {
            
    $hostID IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
            
    IPS_SetParent($hostID$rootID);
            
    IPS_SetName($hostID$hostname);
        }
        
    // Prüfen, ob Variablen existieren, die lauf Konfig-Array nicht da sein sollten
        
    $variableNames array_keys($host);
        
    $childrenVariableIDs IPS_GetChildrenIDs($hostID);
        foreach (
    $childrenVariableIDs as $childVariableID) {
            
    $childVariable IPS_GetObject($childVariableID);
            if ((
    $childVariable["ObjectType"] == 2) and (!in_array($childVariable["ObjectName"], $variableNames))) {
                if (
    $childVariable["ObjectID"] != 0IPS_DeleteVariable($childVariable["ObjectID"]); // Überflüssige Variable löschen
            
    }
        }
        
    // Variablen anlegen und füllen
        
    foreach($host as $variableName => $value) {
            
    $variableID = @IPS_GetObjectIDByName($variableName$hostID);
            if (!
    $variableID) {
                if (
    is_integer($value)) $type 1;
                if (
    is_string($value)) $type 3;
                if (
    is_bool($value)) $type 0;
                if (
    is_double($value)) $type 2;
                
    $variableID IPS_CreateVariable($type);
                
    IPS_SetParent($variableID$hostID);
                
    IPS_SetName($variableID$variableName);
                
    // Aktivierung Archivierung der Online-Variable
                
    if ($variableName == $onlineVariableName) {
                    
    SetValue($variableIDfalse);
                    
    AC_SetLoggingStatus($archiveID$variableIDtrue);
                    
    IPS_ApplyChanges($archiveID);
                }
            }
            
    // Script der Online-Variable in jedem Fall neu anlegen/befüllen
            
    if ($variableName == $onlineVariableName) {
                
    // Check Script
                
    $scriptID = @IPS_GetObjectIDByName($checkScriptName$variableID);
                if (!
    $scriptID) {
                    
    $scriptID IPS_CreateScript(0);
                    
    IPS_SetParent($scriptID$variableID);
                    
    IPS_SetName($scriptID$checkScriptName);
                }
                
    IPS_SetScriptContent($scriptIDgenerateCheckScriptContent($hostname));
                
    IPS_SetScriptTimer($scriptID$host[$intervalVariableName]);
                
    IPS_SetEventActive(IPS_GetEventIDByName("ScriptTimer"$scriptID), $host[$checkActiveName]);
                
    // Alert Event
                
    $alertEventID = @IPS_GetObjectIDByName($alertEventName$variableID);
                if (!
    $alertEventID) {
                    
    $alertEventID IPS_CreateEvent(0);
                    
    IPS_SetParent($alertEventID$variableID);
                    
    IPS_SetName($alertEventID$alertEventName);
                    
    IPS_SetEventTrigger($alertEventID1$variableID);
                    
    IPS_SetEventActive($alertEventID1);
                }
                
    IPS_SetEventScript($alertEventIDgenerateAlertEventScriptContent($hostname));
            }
            else 
    SetValue($variableID$value);
        }
    }



    function 
    generateCheckScriptContent($hostName) {
        global 
    $hosts;
        global 
    $hostVariableName;
        global 
    $timeoutVariableName;
        
    $stringPing "Sys_Ping('".$hosts[$hostName][$hostVariableName]."',".$hosts[$hostName][$timeoutVariableName].")";
        
    $stringVariableID "IPS_GetParent(\$_IPS['SELF'])";
        
    $content "<? setValue(".$stringVariableID.",".$stringPing.");";
        return 
    $content;
    }

    function 
    generateAlertEventScriptContent($hostName) {
        global 
    $hosts;
        global 
    $alertWebFrontName;
        
    $stringStatus $hostName." ist jetzt '.(\$_IPS['VALUE'] ? 'online' : 'offline').'!";
        
    $content "WFC_PushNotification(".$hosts[$hostName][$alertWebFrontName].",'Monitoring','".$stringStatus."','trickling', 0);";
        return 
    $content;
    }
    Dazu dann noch an beliebiger Stelle manuell ein Event erstellt für die Abschaltung der CCU falls das Monitoring "offline" meldet. Auslöser ist die "online" Variable der CCU aus dem Monitoring, die ID ist die der I/O Instanz der CCU:

    PHP-Code:
    IPS_SetProperty(17296"Open"$_IPS['VALUE']);
    IPS_ApplyChanges(17296); 
    CU
    Golo

  4. #4
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    24,554

    Das "Blockieren" ist leider noch ein doofes Problem, welche wir aber zur IP-Symcon Version angehen wollen - dies ist jedoch eine eher größere Baustelle.

    paresy

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 22.11.16, 20:55
  2. Antworten: 5
    Letzter Beitrag: 27.04.15, 20:03
  3. Antworten: 14
    Letzter Beitrag: 22.10.12, 12:26
  4. Fehler: "Hauptthread war länger als 5 Sekunden blockiert"
    Von robi im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 0
    Letzter Beitrag: 12.02.12, 11:49
  5. Hauptthread war >5 Sekunden blockiert
    Von svrroot im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 10
    Letzter Beitrag: 07.09.10, 09:47