Zurück   IP-Symcon Community Forum > IP-Symcon Hardware > HomeMatic

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
  #1 (permalink)  
Alt 31.07.10, 07:14
Benutzerbild von Hinti
Senior Member
 
Registriert seit: Nov 2006
Ort: nähe Salzburg
Beiträge: 861
Question

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!
__________________
...Gruß Hinti
hi und da kann man von den Erfahrungen anderer profitieren, ohne selber erst in den dreck langen zu müssen...

Geändert von Ferengi-Master (01.08.10 um 01:10 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 01.08.10, 09:51
Member
 
Registriert seit: Jan 2010
Ort: Utrecht, Netherlands
Beiträge: 33
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...
Mit Zitat antworten
  #3 (permalink)  
Alt 26.11.10, 22:52
Member
 
Registriert seit: Nov 2008
Beiträge: 74
Standard

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?
Mit Zitat antworten
  #4 (permalink)  
Alt 26.11.10, 22:59
Benutzerbild von RWN
RWN RWN ist gerade online
Super Moderator
 
Registriert seit: Jan 2007
Ort: Nidda(Hessen)
Beiträge: 5,969
Standard

HM_RequestStatus: IP-Symcon :: Automatisierungssoftware

sollte sein, was Du suchst.
__________________
Gruß Rainer


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

Mit Zitat antworten
  #5 (permalink)  
Alt 27.11.10, 17:06
Senior Member
 
Registriert seit: Oct 2010
Ort: Reichelsheim - Beienheim
Beiträge: 193
Standard

Guckst du hier
__________________
Gruß Tobias

Homematic, IPS 2.3 auf Asus EEE PC 901
Mit Zitat antworten
  #6 (permalink)  
Alt 28.11.10, 20:57
Member
 
Registriert seit: Nov 2008
Beiträge: 74
Standard

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.
Mit Zitat antworten
  #7 (permalink)  
Alt 28.11.10, 22:33
Senior Member
 
Registriert seit: Oct 2010
Ort: Reichelsheim - Beienheim
Beiträge: 193
Standard

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.

Miniaturansicht angehängter Grafiken
unreach.png  
__________________
Gruß Tobias

Homematic, IPS 2.3 auf Asus EEE PC 901
Mit Zitat antworten
  #8 (permalink)  
Alt 12.12.10, 16:04
Member
 
Registriert seit: Sep 2010
Ort: bei Limburg a.d. Lahn
Beiträge: 39
Question

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)
Mit Zitat antworten
  #9 (permalink)  
Alt 12.12.10, 16:29
Benutzerbild von wgreipl
Moderator
 
Registriert seit: Aug 2005
Ort: Fürstenfeldbruck-Aich (Bayern)
Beiträge: 2,694
Standard

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.
__________________
Gruß
Werner

Homematic(CCU), EATON-MOELLER, 1-Wire, FS20, WMRS200, 15" Touchdisplay, ChromoFlexRCIII, LMS 7.7.x, WMRS200
IPS V2.5, iFrontMobil, WebFront, MySQLDUG-Tools, IPS-Server: i5-750, 8GB, SBS2008

Geändert von wgreipl (12.12.10 um 17:17 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 12.12.10, 16:50
Senior Member
 
Registriert seit: Oct 2010
Ort: Reichelsheim - Beienheim
Beiträge: 193
Standard

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
Mit Zitat antworten
Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
FS20 Empfänger Status abfragen realisieren? Hinti Sonstige Funkkomponenten / Wetterstationen 27 01.08.08 07:02
SetScriptTimer - derzeit aktiv, status abfragen? Hinti Allgemeine Diskussion 1 30.10.07 21:33
Status Device z.B. FTDI D2XX abfragen U.d.o Sonstige Funkkomponenten / Wetterstationen 10 05.10.07 09:14
Window Status abfragen vom FHT guyabano Anleitungen / Nützliche PHP Scripte 2 24.12.05 23:11
Batterie Status abfragen wasserflo Allgemeine Diskussion 3 23.07.05 13:13


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0