[Modul] NoTrigger (Variablenüberwachung) - Überwachen von IPS-Variablen auf ausbleibende Aktualisierung oder Veränderung

Funktionsumfang

Überwachen von IPS-Variablen auf keine Aktualisierung oder Veränderung.
Grundidee war festzustellen ob bestimme (Status)Variablen nicht regelmäßig aktualisiert werden,
um dann entsprechend hierauf reagieren zu können.

Beispiele:
Homematic-Rauchmelder
Alle paar (5?) Tage senden diese ihren Status an die CCU/Lan-Adapter. Sollte ein Melder dies nicht mehr machen, sollte eine eMail versendet werden.

EM1000 / CUL
Alle 5 Minuten werden die Datensätze von den Geräten gesendet, sollte dies nicht mehr passieren, soll die I/O Instanz einmal geschlossen und neu geöffnet werden.

Daten von einem Gerät im Netzwerk per Push oder Poll
Alle 10 Sekunden kommen Daten von [beliebiges Netzwerkgerät] rein. Im Fehlerfall soll ein Script das Gerät per Telnet neu starten.

eMail-Abfrage
Alle 5 Minuten soll IPS eMails prüfen. Ändert sich der Zeitstempel der Variable ‚Last message‘ 15min lang nicht, wird eine Meldung auf dem Webfront ausgegeben.

1Wire / ModBus
Alle 10 Sek werden Werte gelesen. Ändern ein Sensor sich 60 Sekunden lang nicht, ist er entweder abgeklemmt oder defekt => Meldung per eMail.

Erinnerung Lüften
Einmal am Tag müssen drei Fenster zum Lüften geöffnet werden, nach 36h wird eine Meldung erzeugt das noch nicht gelüftet wurde.

etc…

Die Funktion besteht im wesentlichen darin festzustellen ob sich eine / mehrere Variable(n) ändert bzw. aktualisiert.
Sollte Dies nach Ablauf der konfigurierten Intervall-Zeit nicht erfolgen, wird ein eingestelltes Ziel-Skript gestartet bzw. eine Statusvariable gesetzt.

Über das vom Benutzer selber zu erzeugende Ziel-Skript können dann weitere Maßnahmen und Steuerungen erfolgen (WFC_Notification / eMail / Steckdose aus & einschalten etc.).

Enthaltende Instanzen

  • Variablenüberwachung (single)
    Überwachung einer einzigen Variable
  • Variablenüberwachung (group)
    Überwachung vieler Variablen, welche per Link unterhalb der Variablenüberwachung-Instanz angelegt werden müssen.
    Installation & Konfiguration
    Sind in der Dokumentation beschrieben.
    IPS 4.1:
    GitHub - Nall-chan/IPSNoTrigger: IPS Modul
https://github.com/Nall-chan/IPSNoTrigger

IPS 3.x Version ist hier:
[Modul] NoTrigger - Überwachen von IPS-Variablen auf Aktualisierung oder Veränderung.

Screenshots (IPS3)

Michael

Die Portierung auf IPS4.1 ist online.
Michael

Hallo
Vielen Dank fuer das Modul aber ich habe im Moment folgendes Problem.
Testweise eine Gruppenueberwachung erstellt mit nur einem Eintrag.
Ein Temperaturfuehler ID 30239. Hat einwandfrei funktioniert.
Danach Link entfernt und neue Links hinzugefuegt fuer meine PIRI-Ueberwachung.
Es wird aber immer noch der alte Link ueberwacht und keine von den neuen.
Debugausgabe:

TXT: 19.11.2016 11:08:58.00 |     Message:SenderID | 30239
TXT: 19.11.2016 11:08:58.00 |      Message:Message | 10603
TXT: 19.11.2016 11:08:58.00 |       Message:Data:0 | 23,600000000000001
TXT: 19.11.2016 11:08:58.00 |       Message:Data:1 | False
TXT: 19.11.2016 11:08:58.00 |       Message:Data:2 | 23,600000000000001
TXT: 19.11.2016 11:08:58.00 |       Message:Data:3 | 1479550138
TXT: 19.11.2016 11:08:58.00 | GetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:1:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:30239;s:6:"LinkId";i:24548;s:5:"Alert";b:1;}}}
TXT: 19.11.2016 11:08:58.00 | SetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:1:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:30239;s:6:"LinkId";i:24548;s:5:"Alert";b:0;}}}
TXT: 19.11.2016 11:08:58.00 |     GetBuffer Alerts | i:1;
TXT: 19.11.2016 11:08:58.00 |     SetBuffer Alerts | i:0;
TXT: 19.11.2016 11:08:58.00 |     GetBuffer Alerts | i:0;
TXT: 19.11.2016 11:08:58.00 | GetBuffer ActiveVarID | i:0;
TXT: 19.11.2016 11:08:58.00 | SetBuffer ActiveVarID | i:0;
TXT: 19.11.2016 11:08:58.00 | GetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:1:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:30239;s:6:"LinkId";i:24548;s:5:"Alert";b:0;}}}
TXT: 19.11.2016 11:08:58.00 | SetBuffer ActiveVarID | i:30239;
TXT: 19.11.2016 11:08:58.00 | SetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:1:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:30239;s:6:"LinkId";i:24548;s:5:"Alert";b:0;}}}
TXT: 19.11.2016 11:08:58.00 | GetBuffer ActiveVarID | i:30239;
TXT: 19.11.2016 11:09:58.00 |     GetBuffer Alerts | i:0;
TXT: 19.11.2016 11:09:58.00 | GetBuffer ActiveVarID | i:30239;
TXT: 19.11.2016 11:09:58.00 | GetBuffer ActiveVarID | i:30239;
TXT: 19.11.2016 11:09:58.00 |     GetBuffer Alerts | i:0;
TXT: 19.11.2016 11:09:58.00 |     SetBuffer Alerts | i:1;
TXT: 19.11.2016 11:09:58.00 | GetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:1:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:30239;s:6:"LinkId";i:24548;s:5:"Alert";b:0;}}}
TXT: 19.11.2016 11:09:58.00 | GetBuffer ActiveVarID | i:30239;
TXT: 19.11.2016 11:09:58.00 | SetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:1:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:30239;s:6:"LinkId";i:24548;s:5:"Alert";b:1;}}}
TXT: 19.11.2016 11:09:58.00 | SetBuffer ActiveVarID | i:0;
TXT: 19.11.2016 11:09:58.00 | GetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:1:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:30239;s:6:"LinkId";i:24548;s:5:"Alert";b:1;}}}
TXT: 19.11.2016 11:09:58.00 | SetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:1:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:30239;s:6:"LinkId";i:24548;s:5:"Alert";b:1;}}}
TXT: 19.11.2016 11:09:58.00 | GetBuffer ActiveVarID | i:0;

Link von Variable 30239 ist nicht mehr unter dem Modul und die LinkID 24548 existiert gar nicht mehr.

Danke für die Rückmeldung, schaue ich mir daheim mal in Ruhe an.
Kannst du bitte mal prüfen ob es nach einem Neustart die richtigen Links nutzt?
Michael

Neustart hat funktioniert. Danach sieht das Log so aus

TXT: 19.11.2016 11:51:29.00 | GetBuffer NoTriggerVarList | O:17:"TNoTriggerVarList":1:{s:5:"Items";a:11:{i:0;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:10794;s:6:"LinkId";i:11518;s:5:"Alert";b:1;}i:1;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:46713;s:6:"LinkId";i:11353;s:5:"Alert";b:1;}i:2;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:32941;s:6:"LinkId";i:19394;s:5:"Alert";b:1;}i:3;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:37200;s:6:"LinkId";i:11615;s:5:"Alert";b:1;}i:4;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:15436;s:6:"LinkId";i:16105;s:5:"Alert";b:1;}i:5;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:48316;s:6:"LinkId";i:34950;s:5:"Alert";b:1;}i:6;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:26121;s:6:"LinkId";i:26446;s:5:"Alert";b:1;}i:7;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:34371;s:6:"LinkId";i:20461;s:5:"Alert";b:1;}i:8;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:43059;s:6:"LinkId";i:11287;s:5:"Alert";b:1;}i:9;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:40004;s:6:"LinkId";i:59944;s:5:"Alert";b:1;}i:10;O:13:"TNoTriggerVar":3:{s:5:"VarId";i:40979;s:6:"LinkId";i:25948;s:5:"Alert";b:1;}}}

OK, danke dann weiss ich wo ich suchen muss.
Michael

Bugfix ist online… Das war ja mal ein :banghead: Fehler. War wohl einfach zu spät :smiley:

Michael

Hi,

gibt es für dieses Modul evtl. ein Beispiel für ein Ziel-Script, dass dann die fehlerhafte Variable ausgeben kann?
Ich möchte ca. 25 Variablen überwachen und im Webfront einen Fehler ausgeben. Hier wäre es aber gut, wenn gleich dabei stehen würde, welche Variable nicht mehr aktualisiert wird.

Gruß

Ist in der Doku enthalten.
IPSNoTrigger/README.md at master · Nall-chan/IPSNoTrigger · GitHub
Musst dann $_IPS[‚VARIABLE‘] auswerten.
Michael

Hallo Michael,

danke für die tolle Idee bzw. für die Bereitstellung des Moduls!
Genau DAS habe ich gesucht.

Ich habe ebenfalls ca. 20 verschiedene Variablen zum Überwachen, jedoch weiß ich leider nicht, wie hier das Skript aussehen soll. Ich würde gerne im Webfront sowie per PushNotification eine Meldung ausgeben.
Die Doku hab ich mir mehrfach durchgelesen, aber was für dich selbstverständlich klingt, ist für mich (noch) fremdsprache. Könntest du bitte ein Beispiel eines Skripts posten, dann finde ich mich sicher leichter zurecht.

Danke für deine - eure - Unterstützung.

Peter

Moin,

hier zwei Beispiele für die Verwendung von $_IPS[‚VARIABLE‘], was du dort machst, musst du schon selbser umsetzen.

Beispiel 1:

        switch ($_IPS['VARIABLE'])
        {
            case 12345: /* VARIABLE 12345 */
                if ($_IPS['VALUE'])    // Alarm wurde ausgelöst
                {
                    
                }
                else              // Ruhemeldung nach	Alarm
                {
                    
                }
                break;
            case 23456: /* VARIABLE 23456 */
                if ($_IPS['VALUE'])    // Alarm wurde ausgelöst
                {
                    
                }
                else              // Ruhemeldung nach	Alarm
                {
                    
                }
                break;
        }

Beispiel 2:


        if ($_IPS['VALUE'])    // Alarm wurde ausgelöst
        {
            echo 'Alarm von ' . IPS_GetName($_IPS['VARIABLE']);
        }
        else              // Ruhemeldung nach	Alarm
        {
            echo 'Alles OK von ' . IPS_GetName($_IPS['VARIABLE']);
        }

Links:
WFC_PushNotification — IP-Symcon :: Automatisierungssoftware
WFC_SendNotification — IP-Symcon :: Automatisierungssoftware

Michael

Super, danke! Das war der kleine Denkanstoß den ich gebraucht hab.

Wenn ich das Skript starte

<?

switch ($_IPS['VARIABLE'])
        {
            case 40496: /*[Variablenüberwachung (Group)\Temperatur]*/
                if ($_IPS['VALUE'])    // Alarm wurde ausgelöst
                {
                SNS_PlayFiles(39527 /*[Sonos\Sonos Wohnzimmer]*/,array ("//RASPBERRYPI/Pi-Share/Confirm.mp3"), 60);    
                }
                else              // Ruhemeldung nach Alarm
                {
                    
                }
                break;

            case 54703: /*[Variablenüberwachung (Group)\Temperatur]*/
                if ($_IPS['VALUE'])    // Alarm wurde ausgelöst
                {
                SNS_PlayFiles(39527 /*[Sonos\Sonos Wohnzimmer]*/,array ("//RASPBERRYPI/Pi-Share/Confirm.mp3"), 60);    
                }
                else              // Ruhemeldung nach Alarm
                {
                    
                }
                break;
        }  
		
?>

kommt der Fehler:
Notice: Undefined index: VARIABLE in /var/lib/symcon/scripts/27664.ips.php on line 3
:confused:

Logisch, das Script muss von der Instanz gestartet werden, manuell ausführen geht nicht.
Michael

Fehler gefunden!
Ich hab fälschlicherweise die ObjectID der Verlinkung als case verwendet.

Hallo,

hab mich seit längerem mal wieder intensiv mit meiner IP-Symcon beschäftigt. Hauptsächlich wegen neuer Rauchmelder die ich einbinden will.
Ich habe jetzt mal die Instanz „Variablenüberwachung(Group)“ hinzugefügt und eine Variable als Link darunter gelegt.
Aber jedesmal wenn ich die Instanz aktivieren will bekomme ich als Fehlermeldung „Keine Links angelegt!“.

was mache ich falsch?

War ein Fehler im Modul.

Update ist online, dann sollte es funktionieren :slight_smile:

Michael

Hallo Michael,

ich habe heute erst auf die aktuelle Version 4.4 upgedatet und auch den Rechner neu gestartet. sollte also alles frisch sein.
Im Debug erscheinen folgende Meldungen beim hinzufügen eines Links:

debug.PNG

ich hab mal ein kleines Script (in Abwandlung deiner private function GetAllTargets()) erstellt:

$Links = IPS_GetChildrenIDs(28593);
        foreach ($Links as $Link)
        {
            $Objekt = IPS_GetObject($Link);
            echo "Type: ", $Objekt['ObjectType'], "  ";
            echo "Name: ", $Objekt['ObjectName'], "\r";
            
            $Target = @IPS_GetObject(IPS_GetLink($Link)['TargetID']);
            if ($Target === false)
                continue;
            echo "TargetType: ", $Target['ObjectName'], "\r";

         //   if ($Target['ObjectType'] != otVariable)
         //       continue;
        }

Ergebnis ist folgendes:

Type: 2 Name: STATE
TargetType: IP-Symcon
Type: 6 Name: Status Rauchmelder
TargetType: STATE
Type: 3 Name: TestLink
TargetType: IP-Symcon
Type: 6 Name: ERROR_ALARM_TEST
TargetType: ERROR_ALARM_TEST
Type: 6 Name: Temperatur
TargetType: Temperatur
Type: 6 Name: Temperatur
TargetType: Temperatur

Bei den Targettypes scheint evtl. das Problem zu liegen, da erwartest du wohl was anderes (otVariable).
Ich hoffe du kannst mir weiterhelfen.

Gruß
Hubert

Die Korrektur von Michael ist aber erst 10 Minuten alt[emoji3]

Gesendet von iPad mit Tapatalk

Super, danke für die schnelle Hilfe, jetzt funktioniert’s! :slight_smile:

Schönes WE noch.

Gruß
Hubert