+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 29
  1. #1
    Registriert seit
    Aug 2009
    Ort
    Stuhr
    Beiträge
    251

    Standard Geräte und Kanäle

    Moin,

    das hinzufügen von Geräten war eigentlich recht einfach. Es werden automatisch die Standardkanäle des Devices genommen und Statusvariablen angelegt.

    Wie können jedoch "Trigger" auf andere Kanäle eines gerätes gesetzt werden?

    Beispielsweise hat ein Jalousieaktor: LEVEL und WORKING standardmäßig.

    Wie füge ich nun aber STICKY_UNREACH als Datenpunkt hinzu? Die Addresse dafür wäre ja: <DEVICEADR>:0.STICKY_UNREACH

    Viele Grüße
    Sascha

  2. #2
    Registriert seit
    Aug 2009
    Ort
    Stuhr
    Beiträge
    251

    Oder kann ich irgendwie per PHP-Script auf die Geräte zugreifen mit dem entsprechenden Datapoint zugreifen?

  3. #3
    Registriert seit
    Jul 2007
    Ort
    Moers
    Beiträge
    440

    Hi,

    ja Du kannst auch direkt die CCU ansprechen:

    PHP-Code:
    <?php

    function Post_Request ($sdata)
    {
     
    $start=time();
     
    $fp fsockopen ("192.168.178.99"8181$errno$errstr2);
    // $fp = fsockopen ("127.0.0.1", 8181, $errno, $errstr, 30);
     
     
    if (!$fp
         echo 
    "$errstr ($errno)<br />\n";
     else 
        {
        
    stream_set_blocking  $fp  ); // sicher gehen, dass der stream im non blocking Mode arbeitet
              
    $st "POST /tclrega.exe HTTP/1.1\r\n";
              
    $st $st "Content-type: application/x-www-form-urlencoded\r\n";
              
    $st $st "Content-Length: "strlen($sdata) ."\r\n";
              
    $st $st "Connection: Close\r\n\r\n";
              
          
    fputs($fp,$st.$sdata); 
          
    $st "";
          
    $t fgets($fp,500);
          
    $st $st $t "\r\n";
          
           while (
    $t != "\r\n"
           {
            
    $t fgets($fp,500);
           }
          
    $t "";

          while (!
    feof($fp))
            {      
             
    $t .= fgets($fp,10000);
            }

        
    fclose($fp);
      }

    //  $xml = new SimpleXMLElement($t);
    //  return $xml->result; 



    ereg("<result>(.*)<\/result>",$t,$result);
    //print_r($result);


    return $result[1];

    }

    ?>
    Für 192.168.178.99 musst Du die IP-Adresse Deiner CCU angeben. Danach erfolgt der Aufruf per:

    PHP-Code:
    $befehl="var result = dom.GetObject('BidCos-RF.DEQ0010906:0.STICKY_UNREACH');"
    $result=Post_Request ($befehl); 
    in $result steht dann das Ergebnis. Aber bitte beachten, dass $result immer ein String ist! Du kannst so auch alle Geräte schalten, den Batteriestatus abfragen, Systemvariablen auslesen....

    Ich wünsche einen schönen Tag.

    Christoph.

  4. #4
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    23,740

    IP-Symcon zeigt nur Variablen an, die sich verändern. Sobald die CCU eine Veränderung an einem Datenpunkt sendet, wird diese auch in IP-Symcon angezeigt.

    paresy

  5. #5
    Registriert seit
    Jul 2007
    Ort
    Moers
    Beiträge
    440

    Hi,
    Zitat Zitat von paresy Beitrag anzeigen
    Sobald die CCU eine Veränderung an einem Datenpunkt sendet, wird diese auch in IP-Symcon angezeigt.
    Ja stimmt, wenn IPS aber gerade nicht aktiv ist, dann werden Änderungen beim nächsten IPS Start nicht angezeigt.

    Hierfür ist obiges Script geeignet um den Status später noch abfragen zu können. Die dazugehörige IPS Variable muss dann natürlich vom Script entsprechend dem zurückgelieferten Status gesetzt werden.

    Ach ja eine kleine Einschränkung habe ich noch. Wenn ständig die Statis abgefragt werden, kann das die CCU lahmlegen. Wer z. B. 120 Geräte pro Minute abfragt und das über Stunden, der wird seine CCU öfter neu starten müssen. Die Funktion muss also vorsichtig benutzt werden. Geräte, die ohnehin ständig Werte liefern sollten von der Abfrage ausgenommen werden.

    Ein weiterer Trick um die Abfragen zu minimieren besteht darin, mehrere Geräte gleichzeitig abzufragen. Hierzu müssen die Befehle einfach hintereinander gesetzt werden. Ein Aufruf reicht dann aus. Die Variablen müssen natürlich alle unterschiedlich benannt werden, dann kann man aus dem XML-Ergebnis alle Daten abfragen.

    Ich wünsche einen schönen Tag.

    Christoph.

  6. #6
    Registriert seit
    Jul 2008
    Ort
    Gutengermendorf, Deutschland
    Beiträge
    136

    Hallo!

    Für alle, die mehrere Geräte abfragen wollen hier mal meine Funktion, die aus obigem Script von Christoph entstanden ist. Die Funktion kann Verbindungsstatus oder Batteriestatus abfragen, und zwar mit einer Anfrage für ein oder mehrere Geräte mit nur einer Abfrage der CCU.
    Je nach Aufruf liefert die Funktion ein boolean oder ein Array of boolean.

    Das Script ist zwar nicht unbedingt optimal geschrieben, aber es funktioniert zuverlässig


    PHP-Code:
    /*******************************************************************************
        Holt div. Statuswerte für einen oder mehrere Aktoren mit einer
        kombinierten Anfrage von der CCU und liefert diese als String/Array
        an den Aufrufer zurück.

        $ccu      = IP- oder Hostadresse der CCU
        $function = 1 (für Batteriewarnung) ODER 2 (für Verbindungsstatus)
        $devices  = string mit Seriennummer (1 Gerät) oder
                        array mit Seriennummern (mehrere Geräte)
        $status   = Resultat(e) der Abfragen. Wenn ein Gerät abgefragt wurde dann
                        ist das Ergebnis ein boolean, welcher den entsprechenden Status
                        wiedergibt. Wenn eine mehrfachabfrage durchgeführt wurde dann
                        ist status ein Hash. Die Keys entsprechen den Geräte-ID's, die
                        Werte sind booleans die den entsprechenden Status signalisieren.
     *******************************************************************************/
    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;

    ____________________________________
    MfG Thorsten
    [HM mit RaspberryMatic, IPS V5 auf RasPi3 B+]

  7. #7
    Registriert seit
    Jul 2007
    Ort
    Moers
    Beiträge
    440

    Hi,

    nur zur Richtigstellung: Die Funktion ist von Alex (mehr weiß ich von ihm leider auch nicht). Der Code war bei dem PHP-Server für die CCU dabei.

    Ich wünsche einen schönen Tag.

    Christoph.

  8. #8
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,131

    Standard Script klappt gut!

    Hallo Thorsten,

    ich habe dein Script zur abfrage von "STICKY_UNREACH" und "LOWBAT" im Einsatz. Es funktioniert gut.

    Besten Dank dafür.

    Bis dann

    Martin


    PS: Für "STICKY_UNREACH" habe ich eine Zeile geändert in

    PHP-Code:
    $request .= "var $serial = dom.GetObject('BidCos-RF.$serial:0.STICKY_UNREACH').State();\r\n"

  9. #9
    Registriert seit
    Mar 2006
    Beiträge
    3,423

    Ich stell mich gerade biss'l blöd an mit dem Script von Thorsten...

    Wie erfolgt da die Abfrage?
    Ich habe mal zum Test versucht, den Batteriestatus verschiedener Devices abzufragen. Unteranderem habe ich gerade eine Fernbedienung, die niedrigen Batteriestand meldet, aber egal was, ich bekomme im "True" (1) als Echo.

    PHP-Code:
    $ccu '192.168.12.60';
    $function 1;
    $devices 'EEQ0005550';

    echo 
    GetDeviceStatus($ccu$function$devices, &$status); 
    Hier ist doch sicher etwas falsch
    Gruß nancilla

  10. #10
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,131

    Standard Ergebnis steht im Status

    Hallo nancilla

    Zitat Zitat von nancilla Beitrag anzeigen
    PHP-Code:
    $ccu '192.168.12.60';
    $function 1;
    $devices 'EEQ0005550';

    echo 
    GetDeviceStatus($ccu$function$devices, &$status); 
    Hier ist doch sicher etwas falsch
    Das Ergebnis steht in $status!!

    So sieht das bei mir aus

    PHP-Code:
    $ccu "192.168.2.100";
    $function 1;
    //Ergeschoss
    $devices[] = $SNR_UG_Rauchmelder;
    $devices[] = $SNR_Fur_UG_Schalter;
    $devices[] = $SNR_Wohnen_Fernbedienung;
    $devices[] = $SNR_Wohnen_Antrieb_Heizung_links;
    $devices[] = $SNR_Wohnen_Antrieb_Heizung_rechts;
    $devices[] = $SNR_Wohnen_Fenster_links;
    $devices[] = $SNR_Wohnen_Terrassentuer;
    $devices[] = $SNR_Wohnen_Thermostat_Set;

    //Obergeschoss
    $devices[] = $SNR_OG_Rauchmelder;
    $devices[] = $SNR_Flur_OG_Schalter;
    $devices[] = $SNR_Flur_OG_Schalter_TreppeDG;
    $devices[] = $SNR_Buero_Tuer_Schalter;
    $devices[] = $SNR_Buero_Fenster_Schalter;
    $devices[] = $SNR_Buero_Fenster;
    $devices[] = $SNR_Abstellraum_Schalter;
    $devices[] = $SNR_Schlafzimmer_Fenster;

    //Dachgeschoss
    $devices[] = $SNR_DG_Rauchmelder;
    $devices[] = $SNR_Dachboden_Schalter;
    $devices[] = $SNR_Heizungsraum_Schalter;

    GetDeviceStatus($ccu$function$devices, &$status);

    foreach(
    $status as $key => $value)
    {

        Switch(
    $key)
        {
            case 
    $SNR_UG_Rauchmelder:
                
    SetValue($id_LOWBAT_UG_Rauchmelder$value);
                break;
            case 
    $SNR_Fur_UG_Schalter:
                
    SetValue($id_LOWBAT_Fur_UG_Schalter$value);
                break;
            case 
    $SNR_Wohnen_Fernbedienung:
                
    SetValue($id_LOWBAT_Wohnen_Fernbedienung$value);
                break;
            case 
    $SNR_Wohnen_Antrieb_Heizung_links:
                
    SetValue($id_LOWBAT_Wohnen_Antrieb_Heizung_links$value);
                break;
            case 
    $SNR_Wohnen_Antrieb_Heizung_rechts:
                
    SetValue($id_LOWBAT_Wohnen_Antrieb_Heizung_rechts$value);
                break;
            case 
    $SNR_Wohnen_Fenster_links:
                
    SetValue($id_LOWBAT_Wohnen_Fenster_links$value);
                break;
            case 
    $SNR_Wohnen_Terrassentuer:
                
    SetValue($id_LOWBAT_Wohnen_Terrassentuer$value);
                break;
            case 
    $SNR_Wohnen_Thermostat_Set:
                
    SetValue($id_LOWBAT_Wohnen_Thermostat_Set$value);
                break;
                
            case 
    $SNR_OG_Rauchmelder:
                
    SetValue($id_LOWBAT_OG_Rauchmelder$value);
                break;
            case 
    $SNR_Flur_OG_Schalter:
                
    SetValue($id_LOWBAT_Flur_OG_Schalter$value);
                break;
            case 
    $SNR_Flur_OG_Schalter_TreppeDG:
                
    SetValue($id_LOWBAT_Flur_OG_Schalter_TreppeDG$value);
                break;
            case 
    $SNR_Buero_Tuer_Schalter:
                
    SetValue($id_LOWBAT_Buero_Tuer_Schalter$value);
                break;
            case 
    $SNR_Buero_Fenster_Schalter:
                
    SetValue($id_LOWBAT_Buero_Fenster_Schalter$value);
                break;
            case 
    $SNR_Buero_Fenster:
                
    SetValue($id_LOWBAT_Buero_Fenster$value);
                break;
            case 
    $SNR_Abstellraum_Schalter:
                
    SetValue($id_LOWBAT_Abstellraum_Schalter$value);
                break;
            case 
    $SNR_Schlafzimmer_Fenster:
                
    SetValue($id_LOWBAT_Schlafzimmer_Fenster$value);
                break;

            case 
    $SNR_DG_Rauchmelder:
                
    SetValue($id_LOWBAT_DG_Rauchmelder$value);
                break;
            case 
    $SNR_Dachboden_Schalter:
                
    SetValue($id_LOWBAT_Dachboden_Schalter$value);
                break;
            case 
    $SNR_Heizungsraum_Schalter:
                
    SetValue($id_LOWBAT_Heizungsraum_Schalter$value);

        } 


    Bis dann

    Martin

Ähnliche Themen

  1. SNMP Geräte auslesen am Beispiel einer APC USV
    Von sanman im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 8
    Letzter Beitrag: 03.06.13, 16:15
  2. FS20 TFK beide kanäle verwenden
    Von kpiep im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 12
    Letzter Beitrag: 02.07.11, 12:33
  3. Mehrere Geräte auf einer Taste
    Von coolice im Forum Allgemeine Diskussion
    Antworten: 15
    Letzter Beitrag: 01.08.06, 19:57