+ Antworten
Seite 2 von 2 ErsteErste 1 2
Ergebnis 11 bis 15 von 15
  1. #11
    Registriert seit
    Nov 2008
    Beiträge
    105

    Du hattest doch geschrieben das das script bei dir im2 sekunden Takt getiggert wird. Lag das auch an den zwei Hellen?

    Ich es jetzt auf Minutentakt gestellt.
    Trotzdem werden Variablen bei Kommunikationsfehler nicht auf false gestellt.
    Im WebUI der HM war der Schaltaktor mit Kommunikationsstörung gelistet.

    Die Temperaturfühler z.B. sind alle auf Kommunikation false. ???

    Irgendwas stimmt da nicht...

    Hast du eine Ahnung?

  2. #12
    Registriert seit
    Mar 2006
    Beiträge
    3,421

    Zitat Zitat von haz.man Beitrag anzeigen
    Du hattest doch geschrieben das das script bei dir im2 sekunden Takt getiggert wird.
    Nö!
    Steht im Posting 5 dieses Threads ... "zyklisch ausgeführt(bei mir alle 2 Stunden)"
    Gruß nancilla

  3. #13
    Registriert seit
    Mar 2006
    Beiträge
    3,421

    Zitat Zitat von haz.man Beitrag anzeigen
    Irgendwas stimmt da nicht...

    Hast du eine Ahnung?
    Da fällt mir noch was wichtiges ein...
    Mein erstes Script passte schon, mit der "Erreichbarkeit", aber das ist natürlich ein eigenes Vraibalenprofil, was ich mal angelegt hatte, welches du natürlich nicht hast. Deshalb kam der Fehler
    So ist das eben, wenn man irgendwann mal ein Script geschrieben hat, was dann nur noch läuft und läuft und man sich nicht mehr weiter damit beschäftigt.

    Dazu mal Screenshots, dass du's einfacher hast. Kannst natürlich dem Profil einen Namen, nach deinem Belieben geben. Muss nur entsprechend mit dem im Script eingetragenen übereinstimmen.
    Wahrscheinlich liegts daran.

    Jetzt müsstest du die "Kommunikation"-Variablen wieder löschen.
    Machst du mit dem Script. Einfach "$create" auf 0 setzen und dann starten.
    Dann Variablen-Profil anlegen. "$create" wieder auf 1 setzen und Script neu starten.

    Also hier dann nochmals das Script:
    PHP-Code:
       <?
    /*
    *******************************************************************************************
    Auslesen der Erreichbarkeit von HM-Instanzen - Erstellen, Löschen, Umbenennen der Variablen
    *******************************************************************************************
    File     :  HM-CCU abfragen der Erreichbarkeit
    Trigger  :  zyklisch
    Interval :  stündlich
    */

    $ccu HM_GetHost(ID von CCU-Clientsocket);     // IP der Homematic-CCU über Clientsocket-ID abfragen
    $function 2;                                     // Funktion 2 = Abfrage der Erreichbarkeit

    $suname "Kommunikation";                       // Variablenname für STICKY-UNREACH
    $sualtname "Kommunikation";                 // Alternativer Variablenname für STICKY-UNREACH (beim UMBENENNEN)

    $create 1;                                       // ERSTELLEN [Variable 1=Anlegen(Beibehalten) / 0=Löschen]
    $rename 0;                                       // UMBENENNEN [1=JA / 0=NEIN]


    if (!$create)  $rename 0;                        // Wenn Löschen, dann nicht gleichzeitig Umbenennen


    // *******************************CCU abfragen - BEGINN**********************************
    function GetDeviceStatus($ccu$function$devices, &$status)
    {
    $singleresult false;

        
    // Check if $devices is an array or not
        
    if (is_string($devices))
        {
           
    $singleresult true;
            
    $devicelist = array($devices);
        }
        else
        {
           
    $devicelist $devices;
        }

        
    // Prepare array for status values
        
    $status array_flip($devicelist);

        
    // Build request for CCU
        
    $request "";
        foreach(
    $devicelist as $serial)
        {
           if (
    $function == 1)
           {
                
    $request .= "var $serial = dom.GetObject('BidCos-RF.$serial:0.LOWBAT').Value();\r\n";
            }
            else
            {
                
    $request .= "var $serial = dom.GetObject('BidCos-RF.$serial:0.UNREACH').State();\r\n";
            }
        }

        
    // Open socket for CCU-connection
        
    $fp fsockopen ($ccu8181$errno$errstr2);
        if (!
    $fp)
        {
            
    $status $errno "|" $errstr;
            return 
    false;
        }

        
    // Sending request to CCU
        
    stream_set_blocking($fp1); // sicher gehen, dass der stream im non blocking Mode arbeitet
        
    $st "POST /tclrega.exe HTTP/1.1\r\nContent-type: application/x-www-form-urlencoded\r\n" .
                
    "Content-Length: " strlen($request) . "\r\nConnection: Close\r\n\r\n";
        
    fputs($fp$st $request);

        
    // Receiving result from CCU
        
    $t "";
        
    $start false;
        while (!
    feof($fp))
        {
            
    $st fgets($fp);
            if (
    $start$t .= $st;
            if (
    $st == "\r\n"$start true;
        }
        
    fclose($fp);

        
    // Convert result to XML
        
    $xml = new SimpleXMLElement($t);

        
    // Walk through each key and copy status infos to result-array
       
    foreach($xml as $key => $value)
        {
           if (
    array_key_exists($key$status)) $status[$key] = (strtolower((string)$value) == "true");
        }
        if (
    $singleresult$status $status[$devices];
       return 
    true;
    }
    // *******************************CCU abfragen - ENDE**********************************



    $alleInstanzen IPS_GetInstanceListByModuleType(3);                     // alle I/O Instanzen suchen

    // Array ausgeben
    foreach($alleInstanzen AS $id)
       {
       
    $instanz IPS_GetInstance($id);
        
    $instanz $instanz['ModuleInfo'];
        
    $instanz $instanz['ModuleName'];
            if (
    $instanz == "HomeMatic Device")                            // Vergleich ob das Array den Instanz-Name ausgibt
            
    {
                if (
    $create)
                {
                
    $adresse HM_GetAddress($id);                                    // HM-Seriennummer ermitteln
                
    $devices substr($adresse,0,10);                                     // HM-Seriennummer ohne Sub-Adresse(:xx)
                    
    if ( (@!IPS_GetVariableIDByName($suname$id) ) > 0)     // Überprüfen ob Variable schon existiert, Ergebnis = NEIN
                    
    {
                    
    $newid IPS_CreateVariable(0);                                // Variable anlegen
                    
    IPS_SetVariableCustomProfile ($newid"Erreichbarkeit"); // Variablenprofil einstellen
                    
    IPS_SetName($newid$suname);                           // Name für Variable schreiben
                    
    IPS_SetParent($newid$id);                              // Unter Parent-ID verschieben
                    
    GetDeviceStatus($ccu$function$devices, &$status);    // Funktion - Abfrage der CCU
                    
    SetValueBoolean($newid$status);                        // Wert in Variable schreiben
                    
    }
                    else
                    {
                    
    $newid IPS_GetVariableIDByName($suname$id);         // Überprüfen ob Variable schon existiert, Ergebnis = JA
                        
    if ($rename)
                        {
                       
    IPS_SetName($newid$sualtname);                         // Name für Variable neu schreiben
                       
    }
                       else
                        {
                        
    GetDeviceStatus($ccu$function$devices, &$status);    // Funktion - Abfrage der CCU
                        
    SetValueBoolean($newid$status);                        // Wert in Variable schreiben
                        
    }
                    }
                }
                else
                {
                
    $newid IPS_GetVariableIDByName($suname$id);         // Überprüfen ob Variable existiert, Ergebnis = JA
                
    IPS_DeleteVariable($newid);                              // Variablen ($lbname) löschen
                
    }
             
    //echo "ID: $id    S-NR: $adresse   Erreichbarkeit(1=gestört): $status"."\r\n";                     // Instanzen kontrollieren
             //echo "$devices ID:$id  $varloc"."\r\n";
            
    }
        }
    ?>
    EDIT/
    Fehler lag an Zeile 53
    PHP-Code:
    $request .= "var $serial = dom.GetObject('BidCos-RF.$serial:0.STICKY_UNREACH').State();\r\n"
    funktionierte nicht mehr, obwohls einstmal tat.
    Habe die Zeile durch:
    PHP-Code:
    $request .= "var $serial = dom.GetObject('BidCos-RF.$serial:0.UNREACH').State();\r\n"
    ersetzt und durch Provokation überprüft. Sollte nun wieder funktionieren

    Gut, dass wir mal drüber "geredet" haben, sonst wäre mir der Fehler in Zukunft auch nicht gemeldet worden, wenn ich nicht auf die WebUI der CCU schaue.
    Geändert von nancilla (08.05.10 um 19:41 Uhr)
    Gruß nancilla

  4. #14
    Registriert seit
    Nov 2008
    Beiträge
    105

    Genial!
    Jetzt klappt alles.
    Ich kann garnicht genug Lob aussprechen!!!
    Diese Skript ist ein muss für jeden Homematic Besitzer!!!
    Echt feine Sache!

    Kann man auch den Batteriestatus mit diesem Skript abfragen?

  5. #15
    Registriert seit
    Mar 2006
    Beiträge
    3,421

    Zitat Zitat von haz.man Beitrag anzeigen
    Kann man auch den Batteriestatus mit diesem Skript abfragen?
    Jepp! Ist schon da... http://www.ip-symcon.de/forum/f53/hm...ariablen-9183/
    Gruß nancilla

Ähnliche Themen

  1. Funk Thermometer
    Von UVoigi im Forum Eaton Xcomfort
    Antworten: 3
    Letzter Beitrag: 04.09.07, 22:56
  2. FS20 Steckdose über IPS und Handsender steuern ?
    Von visionsurfer im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 10
    Letzter Beitrag: 11.12.06, 09:48
  3. Hochtemperatursensor per Funk?
    Von Eddi im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 6
    Letzter Beitrag: 02.05.06, 20:08
  4. FS20-Enhanced: Schaltzustände über Funk abfragen
    Von Crazy_Hardware im Forum Ideen & Anregungen
    Antworten: 1
    Letzter Beitrag: 16.06.05, 22:03