+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 14
  1. #1
    Registriert seit
    Jun 2008
    Beiträge
    22

    Standard Neue Rauchmelder - Überwachung der Funktion

    Hallo Zusammen,
    kurz: hat jemand von euch Profis eine Idee, wie ich mit IPS die regelmäßige Funkmeldung der neuen Rauchmelder überwachen kann, wenn diese an die CCU angelernt sind? Ich finde keine Variable, die regelmäßig eine Statusaktualisierung erhält.

    Langversion
    Wegen der Rauchmelder-Kontroll-Pflicht für Vermieter in NRW möchte ich gerne Homematic-Rauchmelder bei mir und in ein paar Mietswohnungen anbringen. Jetzt habe ich vorab ein paar alte und neue Melder besorgt und ein Script gebaut, dass im WebFront eine Übersicht generiert und Emails versendet bei Inaktivität eines Melders:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Rauchmelder.png 
Hits:	668 
Größe:	53.0 KB 
ID:	34764

    Dazu "krabble" ich durch den IPS-Baum und suche mir alle Rauchmelder und die zugehörigen -MAINTENANCE-Variablen zusammen und prüfe auf den Zeitstempel in den Variablen und liste die Inhalte auf. (Meyer = alte Melder, Markus = Neue Melder)
    Die alten Melder sollen sich laut ELV ca. alle 7 Tage melden, die neuen sogar täglich. In der Praxis ist es anders herum: Die alten Melder melden sich täglich in der Variable "UNREACH", die neuen überhaupt nicht. In IPS wird keine einzige Variable aktualisiert.
    Der neue Melder, der die Rauchmeldergruppe anführt, meldet zu dem kurioserweise nichts in den neuen Variablen (ERROR_SMOKE_CHAMBER, ...), die anderen neuen Melder ohne Rauchmeldergruppe haben zumindest einmal was dazu gemeldet.

    HM_Request_Status bringt mich auch nicht weiter, weil die Variable dann einen Current-Zeitstempel erhält, und nicht die Zeit, wann der letzte Funkbefehl empfangen wurde. Das mache ich nur für die RSSI-Werte, weil die ja ohnehin nie aktiv aktualisiert werden.

    Habt Ihr eine Idee, warum die Statusmeldungen der neuen Melder nicht in IPS ankommen?
    Geändert von Markus Arndt (03.07.16 um 14:24 Uhr)

  2. #2
    Registriert seit
    Jun 2008
    Beiträge
    22

    Standard Nachtrag

    Ein bekannter hat mal bei sich geschaut. Dort melden sich die neuen Rauchmelder tatsächlich täglich und die Variablen werden aktualisiert. Damit würde mein Script ja prima funktionieren.

    Wie kann ich rausbekommen, wo die Signale bei mir verloren gehen?

    Gibt es ein Logfile in der CCU, wo man z.B. prüfen kann, ob das Problem die Melder selbst, die Logikschicht in der CCU oder die Übertragung nach IPS betrifft?

  3. #3
    Registriert seit
    Jun 2011
    Ort
    Fessenheim, Schwaben, Bayern
    Beiträge
    599

    Hallo,

    ich kann Dir zwar nicht wirklich bei Deinem Problem weiter helfen, jedoch benutze ich die ALTE Version der Homematic Rauchmelder und suche schon länger eine Möglichkeit, die Melder regelmäßig auf Funktion zu prüfen.

    Würdest Du Dein Script hier im Forum oder per PN teilen. Oder wärst Du vielleicht sogar bereit und hast Lust, ein Modul zu "bauen" ???

    Würde mich sehr freuen ...

    Gruß Proxima
    Unlimited IP-Symcon 5.5 4859 benutzte Variablen
    Server: Windows Server 2016 Essentials auf Intel Xeon E3-1245v5; 32GB RAM; SSD für System; 12TB Daten-HDD's Hardware: HomeMatic (OCCU, RS485 & HMIP); 1-Wire; Sonos; IrTrans Ethernet; WMRS 200; Plugwise; UVR1611; Harmony Elite; Xiaomi Roborock S50; Echo Dots; Synology NAS DS-414 (externes BackUp)

  4. #4
    Registriert seit
    Jun 2011
    Beiträge
    534

    Wäre echt cool wenn du dein Script mal posten könntest ... dann können das auch andere testen so das wir ne Lösung für dein Problem finden :0)
    Professional

  5. #5
    Registriert seit
    Dec 2005
    Ort
    Köln
    Beiträge
    2,625

    Ich prüfe den Status wie folgt:

    PHP-Code:
    $fehlerzeit time()-259200;

    if(
    IPS_GetVariable(11111 /*[Sicherheit\Rauchmelder\Lici Rauchmelder Rauch\LOWBAT]*/)['VariableUpdated'] <= $fehlerzeitSMTP_SendMailEx(22222 /*[Tools\E-Mail senden (SMTP)]*/'peter@domain.de''Lici Rauchmelder Fehler!''Rauchmelder Alicia hat sich zu lange nicht mehr gemeldet.

    Letzes Update: ' 
    date('d.m.Y H:i'IPS_GetVariable(11111 /*[Sicherheit\Rauchmelder\Lici Rauchmelder Rauch\LOWBAT]*/)['VariableUpdated'])
    ); 
    Ich schaue dazu einfach nach, wann sich das letzte mal die Variable verändert hat. Ist diese länger als 3 Tage her bekomme ich eine Mail. Man könnte auch die State Variable nehmen.

    Erklärung:

    Die neuen Rauchmelder melden sich alle 24 Stunden, man kann den Status kontrollieren wenn man mit der Maus üben "letzte Aktualisierung" Feld geht.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS.png 
Hits:	359 
Größe:	78.6 KB 
ID:	34831
    Geändert von pleibling (07.07.16 um 19:33 Uhr)
    Hausautomations-BLOG

    --
    Hinweis: Wer einen Rechtschreibfehler findet, darf diesen behalten - da bin ich gar nicht so .

  6. #6
    Registriert seit
    Jun 2008
    Beiträge
    22

    Standard Script zur Überwachung von Rauchmeldern

    Hier mein Script (musste ich erst etwas überarbeiten, damit es einigermaßen Forumstauglich ist )
    Kann man vermutlich etwas effizienter lösen, hab aber im Grunde keine Ahnung von PHP ...
    Könnt ja mal probieren ob das bei euch funktioniert ...


    PHP-Code:
    <?
    // Script zum Ueberwachen von Rauchmeldern.
    // Stand 1.0.0 von Markus Arndt
    // *************************************************************************************
    // Das Script durchsucht den IPS-Baum nach Homematic-Instanzen.
    // Alle Vorkommen von Variablen mit bestimmten Namen (bei mir 'Rauchmelder')
    // werden untersucht. Die Rauchmelder sollten in einer Kategorie mit Namen
    // des jeweiligen Raums liegen, damit die Ausgaben des Scriptes Sinn machen.
    // Alle Melder mit laengerer Inaktivitaet werden in einer Mail aufgelistet.
    // *************************************************************************************
    // Variablen der unterschiedlichen Rauchmelder zum Verstaendnis:
    // Neue Melder:
    // ERROR_ALARM_TEST
    // ERROR_SMOKE_CHAMBER
    // INSTALL_TEST
    // LOWBAT
    // STATE

    // Alte Melder:
    // INSTALL_TEST
    // STATE
    //
    // CONFIG_PENDING
    // DUTYCYCLE
    // LOWBAT
    // RSSI_DEVICE
    // RSSI_PEER
    // STICKY_UNREACH
    // UNREACH

    // *************************************************************************************
    // Konfiguration

    // Zur Einrichtung folgenden Block ueberarbeiten
    // und Timer-Event, z.B. einmal am Tag hinzufuegen.
    $name_rauchmelder_beginnt_mit "Rauchmelder";
    $name_maintenance_endet_mit "-MAINTENANCE";
    $id_ergebnis_variable_html 28537// String Variable mit Anzeige-Typ '~html-box' fuer Anzeige im Webfront
    $id_smtp_instanz 15943// Ist diese ID <> 0, werden Mails ueber diese SMTP-Instanz versendet.
    $anzahl_tage_bis_warnung 5// Alle Melder > Tage werden in der Mail aufgelistet.

    // *************************************************************************************

    // Um die gefundenen Melder vor Ausgabe zu sortieren und Problem-Mails zusammen fassen zu koennen
    // werden die Werte in ein Array zwischengespeichert.
    $resultObj = array();
    $resultObjPos = -1;
    $resultMailObj = array();

    // Alle Homematic-Geraete anfordern und durchsuchen
    $homematicInstanceIds IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}");
    foreach(
    $homematicInstanceIds as $homematicInstanceId) {
        
    $homematicObject IPS_GetObject($homematicInstanceId);
        
    $nameObjekt $homematicObject["ObjectName"];
        if(
    startsWith($nameObjekt$name_rauchmelder_beginnt_mit) && !endsWith($nameObjekt$name_maintenance_endet_mit)) {
            
    $resultObjPos++;

            
    // Grunddaten des erkannten Rauchmelders in Array ablegen
            
    $resultObj[$resultObjPos][0] = IPS_GetLocation($homematicInstanceId);
            
    $resultObj[$resultObjPos][1] = $homematicInstanceId;
            
    $resultObj[$resultObjPos][2] = ""// LastUpdated
            
    $resultObj[$resultObjPos][3] = ""// Tage
            
    $resultObj[$resultObjPos][4] = ""// LastChanged
            
    $resultObj[$resultObjPos][5] = ""// ERROR_ALARM_TEST
            
    $resultObj[$resultObjPos][6] = ""// ERROR_SMOKE_CHAMBER

            // Alle Variablen unterhalb vom Rauchmelder durchlaufen ...
           
    $unterobjekteIds IPS_GetChildrenIDs($homematicInstanceId);
            foreach(
    $unterobjekteIds as $unterobjektId) {
                
    $nameUnterobjekt IPS_GetName($unterobjektId);
                
    $variable IPS_GetVariable($unterobjektId);

                
    // Letzte Aktualisierung, Tage seit Aktualisierung und Aenderung (= letzter Alarm) merken.
                
    if($nameUnterobjekt == "STATE") {
                    
    $resultObj[$resultObjPos][2] = getDateFromTimestamp($variable["VariableUpdated"]);
                    
    $tageNichtGemeldet getTageDifferenzFromTimestamp($variable["VariableUpdated"]);
                
    $resultObj[$resultObjPos][3] = $tageNichtGemeldet;
                    
    $resultObj[$resultObjPos][4] = getDateFromTimestamp($variable["VariableChanged"]);

                    
    // Wenn n Tage nicht mehr gemeldet, Problemtext fuer etwaige Mail merken.
                    
    if($tageNichtGemeldet $anzahl_tage_bis_warnung) {
                        
    array_push($resultMailObj, ("Die Rauchmelder-Instanz '" $resultObj[$resultObjPos][0] . "' hat sich seit " $tageNichtGemeldet " Tagen nicht mehr gemeldet."));
                    }
                }

                
    // Die neuen Melder liefern ggf. ein Problem mit der Rauchkammer.
                
    if($nameUnterobjekt == "ERROR_SMOKE_CHAMBER") {
                    if(
    $variable["VariableUpdated"] != 0) {
                       if(
    GetValueInteger($unterobjektId) != 0)
                          $
    $resultObj[$resultObjPos][6] = "FEHLER";
                      else
                          
    $resultObj[$resultObjPos][6] = "OK";
                    }
                }

                
    // Die neuen Melder liefern ggf. ein Problem, wenn der Selbsttest fehlschlug
                
    if($nameUnterobjekt == "ERROR_ALARM_TEST") {
                    if(
    $variable["VariableUpdated"] == 0) {
                      
    $htmlFehlerKammer "";
                    } else {
                       if(
    GetValueInteger($unterobjektId) != 0)
                          
    $resultObj[$resultObjPos][5] = "FEHLER";
                      else
                          
    $resultObj[$resultObjPos][5] = "OK";
                    }
                }

                
    // Maintenance im Array vorinitialisieren
                
    $resultObj[$resultObjPos][7] = ""// RSSI_DEVICE
                
    $resultObj[$resultObjPos][8] = ""// RSSI_PEER
                
    $resultObj[$resultObjPos][9] = ""// LOWBAT

                // Das Maintenance-Objekt zur ID beschaffen (muss genauso heissen wie die der eigentliche Melder + Zusatz im Konfigurationsteil)
                
    $maintenanceObjectId IPS_GetObjectIDByName(IPS_GetName($homematicInstanceId) . $name_maintenance_endet_mitIPS_GetParent($homematicInstanceId));
               
    $mainenanceUnterobjekteIds IPS_GetChildrenIDs ($maintenanceObjectId);
                foreach(
    $mainenanceUnterobjekteIds as $maintenanceUnterobjektId) {
                    
    $nameUnterobjekt IPS_GetName($maintenanceUnterobjektId);

                    
    // Funk-Qualitaet von CCU zum Geraet sichern
                    
    if($nameUnterobjekt == "RSSI_DEVICE") {
                       
    // State aus CCU abholen, da keine automatische aktualisierung
                        
    $erfolg HM_RequestStatus ($maintenanceObjectId"RSSI_DEVICE");
                        if(
    $erfolg) {
                            
    $wert GetValue($maintenanceUnterobjektId);
                            if (
    $wert == -65535)
                               
    $wert 0;
                            if (
    $wert != 0)
                                
    $resultObj[$resultObjPos][7] = $wert;
                        } else {
                       
    $resultObj[$resultObjPos][7] = "Fehler";
                    }
                    }

                    
    // Funk-Qualitaet von Geraet zur CCU sichern
                    
    if($nameUnterobjekt == "RSSI_PEER") {
                        
    $erfolg HM_RequestStatus ($maintenanceObjectId"RSSI_PEER");
                        if(
    $erfolg) {
                            
    $wert GetValue($maintenanceUnterobjektId);
                            if (
    $wert == -65535)
                               
    $wert 0;
                            if (
    $wert != 0)
                                
    $resultObj[$resultObjPos][8] = $wert;
                        } else {
                       
    $resultObj[$resultObjPos][8] = "Fehler";
                    }
                    }

                    
    // Batterie-Problem sichern
                    
    if($nameUnterobjekt == "LOWBAT") {
                        
    $erfolg HM_RequestStatus ($maintenanceObjectId"LOWBAT");
                        if(
    $erfolg) {
                            
    $wert GetValue($maintenanceUnterobjektId);
                            if (
    $wert) {
                                
    $resultObj[$resultObjPos][9] = "Leer!!";
                            } else {
                                
    $resultObj[$resultObjPos][9] = "OK";
                            }
                        } else {
                       
    $resultObj[$resultObjPos][9] = "Fehler";
                    }
                 }
                }
            }
        }
    }

    // Alle gefundenen Instanzen nach Namen sortieren
    sort($resultObj);

    // Antwort als HTML-Tabelle montieren
    $result "<u>Liste aller Rauchmelder (Stand " date("d.m.Y H:i") . "):</u><br><br>";
    $result .= "<table style='width: 100%'><thead><tr>";
    $result .= "   <td>Ort:</td>";
    $result .= "   <td>Melder-ID:</td>";
    $result .= "   <td>Letzte Aktualisierung (STATE):</td>";
    $result .= "   <td>Tage</td>";
    $result .= "   <td>Letzte Auslösung:</td>";
    $result .= "   <td>Test erfolgreich:</td>";
    $result .= "   <td>Rauchkammer:</td>";
    $result .= "   <td>Qualität CCU *):</td>";
    $result .= "   <td>Qualität Melder *):</td>";
    $result .= "   <td>Batterie:</td>";
    $result .= "</tr></thead><tbody>";
    for(
    $i 0$i count($resultObj); $i++) {
        
    $result .= "<tr>";
            
    $result .= "<tr>";
            for(
    $j 0$j count($resultObj[$i]); $j++) {
                
    $result .= "   <td>" $resultObj[$i][$j] . "</td>";
            }
            
    $result .= "</tr>";
        
    $result .= "</tr>";
    }
    $result .= "</tbody></table>";
    $result .= "<br>*) kleinerer db-Wert vor dem Minus = besserer Empfang";

    // HTML in Variable setzen fuer Anzeige in WebFront
    SetValueString($id_ergebnis_variable_html$result);

    // Mails versenden, wenn SMTP-Instanz verfuegbar
    if($id_smtp_instanz != && count($resultMailObj) > 0)
        
    sendMail($id_smtp_instanz$resultMailObj);

    // *************************************************************************************

    function sendMail($id_smtp_instanz_local$resultMailObj) {
        try {
           
    $mailtext "";
           foreach(
    $resultMailObj as $mailLine) {
                
    $mailtext .= $mailLine "\n";
            }
           
    SMTP_SendMail($id_smtp_instanz_local"Rauchmelder meldet sich nicht"$mailtext);
        } catch (
    Exception $e) {
           
    IPS_LogMessage("Rauchmelder aktualisieren""Exception bei Mailversand: " $e->getMessage() );
        }
    }

    function 
    getDateFromTimestamp($millis) {
        if(
    $millis == 0)
           return 
    "";
        
    $firstJan2000 mktime(1000111970);
        
    $millis += $firstJan2000;
        return 
    date("d.m.Y H:i:s"$millis);
    }

    function 
    getTageDifferenzFromTimestamp($millis) {
        
    $tage round((time() - $millis) / 86400);
        if(
    $tage 365)
           return 
    "";
        return 
    $tage;
    }

    function 
    startsWith($haystack$needle) {
        return 
    $needle === "" || strrpos($haystack$needle, -strlen($haystack)) !== false;
    }

    function 
    endsWith($haystack$needle) {
        return 
    $needle === "" || (($temp strlen($haystack) - strlen($needle)) >= && strpos($haystack$needle$temp) !== false);
    }
    ?>

  7. #7
    Registriert seit
    Jun 2011
    Beiträge
    534

    Cool :0) Danke dir ... werde das die Tage gleich mal ausprobieren!
    Professional

  8. #8
    Registriert seit
    Sep 2008
    Ort
    Staufenberg nr KS
    Beiträge
    2,085

    Warning: Objekt mit dem Namen HM-Sec-SD-2 NEQxxxxxxx:0-MAINTENANCE konnte nicht gefunden werden in C:\IP-Symcon\scripts\35544.ips.php on line 115
    Hallo Markus, habe mal dein Script installiert, bekomme aber immer die o.a. Fehlermeldung für alle RMs
    -MAINTENANCE gibt es bei keinem RM

    [EDIT] habs gefunden, ist im Kanal:0 [/EDIT]

    vg axel
    Geändert von Axel37 (08.12.16 um 11:03 Uhr) Grund: gefunden
    IP-Symcon Version: 5.5 ninja - unlim auf WIN7pro
    server:Shuttle XS35V4,HPSlate21,IPS-868,HM,HMip,FS20,piVCCU3,IPcams, FB 7590, TM-D710GE(GPS), Raspi3, Pioneer VSX, Libratone, MieleWCR870WPS, SamsungNZ64N7777

  9. #9
    Registriert seit
    Sep 2011
    Ort
    53639 Königswinter
    Beiträge
    1,418

    Hab auch grade meinen ersten Satz Rauchmelder bekommen und das Skript läuft einwandfrei.
    mws
    ---------------------------------------------------------------
    Wer Rechtschreibfehler findet darf sie behalten.
    ----------------o00o----'(_)'----o00o---------------------

  10. #10
    Registriert seit
    Jun 2014
    Beiträge
    127

    Hallo alle,
    habe mir das Script auch mal angelegt, bekomme aber auch immer diese Fehlermeldung:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	rauchmelder2.JPG 
Hits:	229 
Größe:	151.1 KB 
ID:	36799

    so sieht mein Objektbaum aus:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	rauchmelder1.JPG 
Hits:	229 
Größe:	159.3 KB 
ID:	36800
    Gruß
    Bernd


    IP-Symcon 5.5, Windows x64, 08.11.2020, 2ec4065585af

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 06.02.16, 18:54
  2. Neue Funktion: Module
    Von JPaeper im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 63
    Letzter Beitrag: 17.09.15, 12:37
  3. Antworten: 3
    Letzter Beitrag: 12.12.12, 11:06
  4. Überwachung der Aktualisierungszeit von Temperaturfühlern
    Von fromage im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 3
    Letzter Beitrag: 13.09.12, 16:47

Stichworte