+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 27
  1. #1
    Registriert seit
    Nov 2006
    Ort
    nähe Salzburg
    Beiträge
    861

    Hallo,
    Mit welchem Befehl könnte ich ein Homematic-Gerät abfragen. Wenn ich überprüfen will ob der "STATE" Wert einer Instanz auch tatsächlich stimmt? Ich meins echt ernst. Ich weiß es nicht. Wenn ich den Drehgriffkontakt "drehe", wird der STATE Wert aktualisiert. Aber wenn IPS mal kurz ausfällt, stimmt der Status nach dem IPS wieder online ist, möglicher weise nicht mehr. Also würde ich gern zyklisch oder hi und da manuell, die Statis "forced" aktualisieren.

    Mit "HM_WriteValueBoolean" könnte man einen Switch schalten, nicht wahr? Aber ich finde keinen "HM_Read..." Befehl!
    Ich dachte HomeMatic ist Bidirectional

    Also gut, wenn ich länger keine Antwort erhalte, dann weiß ich daß die Lösung schon wo zu finden ist und ihr seid es satt alles 100 mal zu schreiben. *verständis zeig*. Also begab ich mich auf eine weitere Intensivsuche. Das Ergebnis war aber leider ernüchternd...

    Stimmt es so formuliert?: HomeMatic ist nur in Verbindung mit einer CCU wirklich Bidirektional. Denn für diese habe ich einige Scripte von ausgefuchsten IPS'lern gefunden, wie die CCU abfragbar wird.

    Stimmt es also auch, daß ich KEIN HM Device direkt abfragen kann? Also ohne CCU!
    Geändert von Ferengi-Master (01.08.10 um 00:10 Uhr)
    ...Gruß Hinti
    Hintis Homepage: http://hinti.at

  2. #2
    Registriert seit
    Jan 2010
    Ort
    Utrecht, Netherlands
    Beiträge
    73

    Standard A script to read all the CCU connected devices

    Hinti,

    A couple of months a go I found the following script on the forum. I think it was from Nancilla, but i can't find it back. The script works in IPS 2.2 version , I haven't tried it for the 2.3 version.

    PHP-Code:
    /*
    ************************************************** *****************************************
    Interpreting the presence of HM-bodies - creating, deleting, renaming the variables
    ************************************************** *****************************************
    File: HM-CCU query the reachability
    Trigger: cyclic
    Interval: every hour
    */

    $ccu HM_GetHost(55393 /*[HomeMatic Socket]*/);     // IP der Homematic-CCU über Clientsocket-ID abfragen
    $function 2;                                     // Funktion 2 = Abfrage der Erreichbarkeit
    echo $ccu;
    $suname "COMMUNICATION";                       // Variablenname für STICKY-UNREACH
    $sualtname "HM-COMMUNICATION";                 // Alternativer Variablenname für STICKY-UNREACH (beim UMBENENNEN)

    $create 0;                                       // 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.STICKY_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$suname); // 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";
            }
        } 
    It also checks the status of every connected HM device and it generates all the variables.

    Hope you can work something out with this . Have fun

    Regards,
    Robert
    I can read and speak it but can't write it...

  3. #3
    Registriert seit
    Nov 2008
    Beiträge
    96

    Hi!

    Folgender Fehler tritt mehrfach in dem CCU Log auf wenn dieses Script ausgeführt wird.

    local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: .....

    Weiß einer ob man das abstellen kann?

  4. #4
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    6,987

    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  5. #5
    Registriert seit
    Oct 2010
    Ort
    Reichelsheim - Beienheim
    Beiträge
    194

    Guckst du hier
    Gruß Tobias

    Homematic, IPS 2.3 auf Asus EEE PC 901

  6. #6
    Registriert seit
    Nov 2008
    Beiträge
    96

    Danke!

    Das Script ist nützlich für mich,

    aber in deinem Script wird nicht die Erreichbarkeit der Komponenten abgefragt sondern die Variablen.

    Ich möchte regelmäßig prüfen ob eine Kommunikationsstörung vorliegt.

  7. #7
    Registriert seit
    Oct 2010
    Ort
    Reichelsheim - Beienheim
    Beiträge
    194

    Moin,

    richtig, mein Skript aktualisiert alle HomematicVariablen in IPS (Hintis Problem war ja der Variablenstatus nach IPS Offline Zeit).

    Deine Frage ist eine ganz andere, aber auch hier ein Hinweis - wenn du den Kommunikationsstatus der Geräte prüfen willst: Dazu gibt es je Gerät im Kanal 0 der Homematic-Geräte die beiden Variablen STICKY_UNREACH und UNREACH. Wenn die auf TRUE stehen, war (STICKY_UNREACH) oder ist (UNREACH) die Gerätekommunikation gestört. Per Skript könntest du alle Variablen durchlaufen und so den Status prüfen.

    Gruß Tobias

    Homematic, IPS 2.3 auf Asus EEE PC 901

  8. #8
    Registriert seit
    Sep 2010
    Ort
    bei Limburg a.d. Lahn
    Beiträge
    79

    Hallo Tobias,
    ich bin auch noch Anfänger mit IPS und Homematic. Wie hast du denn die "Status" Variablen in IPS bekommen? Hast du für die HM-Geräte zwei Instanzen, einmal mit ADRESSE:1 und einmal mit ADRESSE:0 angelegt?
    Oder gehts das nur wenn man eine CCU hat? Ich habe "nur" den LAN Adapter.
    Geändert von RWN (12.12.10 um 16:08 Uhr)

  9. #9
    Registriert seit
    Aug 2005
    Ort
    Fürstenfeldbruck-Aich (Bayern)
    Beiträge
    4,035

    Nein, geht auch mit dem LAN-Adapter wenn ich mich recht erinnere.

    Per Homematic-Konfigurator bekommst Du aber nur die Instanzen ab :1 in IPS rein. Möchtest Du die :0 Instanzen haben mußt Du diese mit der HM-Geräte-ID:0 selbst anlegen.
    Geändert von wgreipl (12.12.10 um 17:17 Uhr)
    Gruß
    Werner

    Komponenten:: Homematic(CCU) 250DP, EATON-MOELLER, 1-Wire, WMRS200, 15" Touchdisplay
    Software::
    IPS V4.x, iMobile, WebFront, Logitech Media Server 7.8.x, SONOS
    Hardware:: IPS-Server: ESXi 6.x, Windows 10 Ent, 4 Kerne, 8GB RAM

  10. #10
    Registriert seit
    Oct 2010
    Ort
    Reichelsheim - Beienheim
    Beiträge
    194

    Hallo Marco,

    Werner hat es ja schon beantwortet, mit ADRESSE:0 bekommst du die Statusvariablen. Einfach eine Instanz mit Adresse:0 anlegen, die Variablen legen sich dann selbst an (zumindest bei der CCU).
    Gruß Tobias

    Homematic, IPS 2.3 auf Asus EEE PC 901

Ähnliche Themen

  1. FS20 Empfänger Status abfragen realisieren?
    Von Hinti im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 27
    Letzter Beitrag: 01.08.08, 06:02
  2. SetScriptTimer - derzeit aktiv, status abfragen?
    Von Hinti im Forum Allgemeine Diskussion
    Antworten: 1
    Letzter Beitrag: 30.10.07, 21:33
  3. Status Device z.B. FTDI D2XX abfragen
    Von U.d.o im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 10
    Letzter Beitrag: 05.10.07, 08:14
  4. Window Status abfragen vom FHT
    Von guyabano im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 2
    Letzter Beitrag: 24.12.05, 23:11
  5. Batterie Status abfragen
    Von wasserflo im Forum Allgemeine Diskussion
    Antworten: 3
    Letzter Beitrag: 23.07.05, 12:13