Warnmeldung

Also ich suche jeden Tag nach Konstellationen um die Ursache zu finden.

Gestern waren nur 3 Warnmeldungen - dafür bekomme ich heute aller 15 Minuten eine Meldung.

Könnte man ein Script schreiben, welches über alle Skripte iteriert, dann den Update-Timestamp auslesen um wenigstens das Script hinter dem Ereignis zu finden?!?

Hat jemand sowas zur Hand?

Gruß Heiko

Also ich habe mir jetzt so ein kleines Skript geschrieben und doch das Meldungsverwaltungsscript scheint betroffen zu sein.
Jetzt habe ich einiges an Logging eingebaut und schaue mal ob ich damit weiterkomme!

So, irgendwie ist das ein Zombie-Ereignis?!?

Hier der Objektbaum:

Hier die Statusanzeige:

Und hier die Ausgabe des Ereignisses

09.06.2021, 11:17:19 | EVENT                | Array
(
    [EventID] => 29694
    [EventType] => 1
    [EventActive] => 1
    [EventLimit] => 0
    [EventConditions] => Array
        (
        )

    [TriggerType] => 0
    [TriggerVariableID] => 0
    [TriggerValue] => 
    [TriggerSubsequentExecution] => 1
    [CyclicDateType] => 1
    [CyclicDateValue] => 0
    [CyclicDateDay] => 0
    [CyclicDateDayValue] => 0
    [CyclicDateFrom] => Array
        (
            [Day] => 9
            [Month] => 6
            [Year] => 2021
        )

    [CyclicDateTo] => Array
        (
            [Day] => 0
            [Month] => 0
            [Year] => 0
        )

    [CyclicTimeType] => 0
    [CyclicTimeValue] => 0
    [CyclicTimeFrom] => Array
        (
            [Hour] => 11
            [Minute] => 17
            [Second] => 19
        )

    [CyclicTimeTo] => Array
        (
            [Hour] => 0
            [Minute] => 0
            [Second] => 0
        )

    [ScheduleActions] => Array
        (
        )

    [ScheduleGroups] => Array
        (
        )

    [EventScript] => 
    [EventActionID] => 
    [EventActionParameters] => Array
        (
        )

    [LastRun] => 1623230239
    [NextRun] => 0
)

Das verstehe Einer …

Genau, das Ereignis hat keine Aktion gesetzt, deswegen kommt die Meldung. Jetzt ist die Frage, wieso. Woher kommt das Ereignis?

Soo, ein Übeltäter ist definitiv das Meldungs-Skript :frowning:

Jetzt ist mir auch klar warum die Ereignisse nie auffindbar waren - es waren die RemoveMessage-Ereignisse die dann natürlich weg sind!

@Dr.Niels jetzt die Frage wie man die Action korrekt setzt, derzeit mach ich es so:

        if ($expires > time()) {
            $eid = IPS_CreateEvent(1); 
            IPS_SetParent($eid, $_IPS['SELF']); 
            IPS_SetName($eid, 'Remove Message #'.$number); 
            IPS_SetEventCyclic($eid, 1, 0, 0, 0, 0, 0); 
            if($expires == 0) {
                IPS_SetEventCyclicDateFrom($eid, 0, 0, 0); 
            } else {
                IPS_SetEventCyclicDateFrom($eid, (int)date('j',$expires), (int)date('n', $expires),  (int)date('Y', $expires));
            }
            IPS_SetEventCyclicDateTo($eid, 0, 0, 0);
            if($expires == 0) {
                IPS_SetEventCyclicTimeFrom($eid, 0, 0, 0);
            } else {
                IPS_SetEventCyclicTimeFrom($eid, (int)date("H", $expires), (int)date("i", $expires), (int)date("s", $expires));
            }
            IPS_SetEventCyclicTimeTo($eid, 0, 0, 0);
            IPS_SetEventActive($eid, true);
        }

Muss man das mit „IPS_SetEventAction“ machen - habe aber nur im Forum was kryptisches gefunden?!

Danke & Ciao
Heiko

PS: Dabei habe ich gleich noch ein Bug im Unwetter-Modul gefunden :frowning:

Ja, bei selbst erstellten Ereignissen musst du die Aktion setzen. Das machst du per
IPS_SetEventAction($eid, '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}', []);

Danke Niels, damit ist jetzt RUHE!

Ist die Anweisung auch Abwärtskompatibel, also auch vor 5.6?

Nein, wenn dein Skript auch rückwärtskompatibel sein soll, dann müsstest du das prüfen, beispielsweise

if (function_exists('IPS_SetEventAction')) {
	IPS_SetEventAction($eid, '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}', []);
}

Ahh danke, bin sowieso gerade dabei das alles zu konsolidieren und in meine „Scrikt-Bibliothek“ zu verlagern :wink:

Hab nämlich 10-15 Stellen gefunden wo ich sowas gemacht hatte!

Gruß Heiko

Mein Meldungs-Skript von dir ist ja total angepasst.
Ich kann leider nicht einfach das gesamte Skript austauschen.
Wo und was muss ich ändern, um diesen Fehler weg zu bekommen?

Das sollte einfach sein … such nach CreateEvent(1) … in der AddMessage.Funktion!

sieht jetzt nach zusätzlichen Optimierungen so aus:

        if ($expires > time()) {
            $eid = IPS_CreateEvent(1); 
            IPS_SetParent($eid, $_IPS['SELF']); 
            IPS_SetName($eid, 'Remove Message #'.$number); 
            IPS_SetEventCyclic($eid, 1, 0, 0, 0, 0, 0); 
            IPS_SetEventCyclicDateFrom($eid, (int)date('j',$expires), (int)date('n', $expires),  (int)date('Y', $expires));
            IPS_SetEventCyclicDateTo($eid, 0, 0, 0);
            IPS_SetEventCyclicTimeFrom($eid, (int)date("H", $expires), (int)date("i", $expires), (int)date("s", $expires));
            IPS_SetEventCyclicTimeTo($eid, 0, 0, 0);
            IPS_SetEventAction($eid, '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}', []);
            IPS_SetEventActive($eid, true);
        }

Einfach das „PS_SetEventAction($eid, ‚{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}‘, );“ hinzufügen!

Gruß Heiko

Leider habe ich den gleichen Fehler, plus zusätzliche eine neue Fehlermeldung

10.06.2021, 19:32:50 | ScriptEngine         | Result for Event 48498

Warning: Cannot auto-convert value for parameter VariableValue in /var/lib/symcon/scripts/38937.ips.php on line 139

@Loewenkoenig sprichst Du mich an?

So oder so solltest Du mehr Infos schreiben,

  • welches Script
  • was steht an der Zeile
    usw.

Ciao Heiko

Es handelt sich um dein Meldungs-Skript.
Ich hatte die von dir genannte Fehlermeldung und daher die Zeile IPS_SetEventAction($eid, ‚{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}‘, []); eingefügt.

Der Auszug sieht nun so aus:

if ($expires > time()) { 

            $eventID = IPS_CreateEvent(1); 

            IPS_SetParent($eventID, $_IPS['SELF']); 

            IPS_SetName($eventID, 'Remove Message #'.$number); 

            IPS_SetEventCyclic($eventID, 1, 0, 0, 0, 0, 0); 

            if($expires == 0) { 

               IPS_SetEventCyclicDateFrom($eventID, 0, 0, 0); 

            } else { 

               IPS_SetEventCyclicDateFrom($eventID, (int)date('j',$expires), (int)date('n', $expires),  (int)date('Y', $expires)); 

            } 

            IPS_SetEventCyclicDateTo($eventID, 0, 0, 0); 

            if($expires == 0) { 

                IPS_SetEventCyclicTimeFrom($eventID, 0, 0, 0); 

            } else { 

                IPS_SetEventCyclicTimeFrom($eventID, (int)date("H", $expires), (int)date("i", $expires), (int)date("s", $expires)); 

            } 

            IPS_SetEventCyclicTimeTo($eventID, 0, 0, 0);

            IPS_SetEventAction($eid, '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}', []); // NEUE ZEILE !!

            IPS_SetEventActive($eventID, true); 

        } 

        SetValueString($DataID, json_encode($data)); 

        SetValueInteger($LastNumberID, $number); 

        IPS_SemaphoreLeave($_IPS['SELF'].'DataUpdate'); 

        renderData($data);

Du musst natürlich auch die Variable für das Event anpassen, anscheinend heißt die bei Dir $eventID und nicht $eid!

Jetzt dürfte der Fehler weg sein.
Wie kann ich das deaktivieren, dass ich bei einem Ereignis immer eine gelbe Warnmeldung erhalte?

10.06.2021, 21:07:51 | ScriptEngine | Result for Event 37831

So wie immer…
Leerzeilen außerhalb der PHP Tags entfernen.
Oder, noch besser, den schließenden PHP Tag ganz weglassen.
Michael

1 „Gefällt mir“

Hat leider zu keinem Erfolg geführt.
Ich habe immer noch die Warnmeldungen.
Gibts noch einen anderen Grund für die Ausgabe? Eventuell ist dies im Skript so hinterlegt.
Habe aber nichts konkretes gefunden.

Alle Ausgaben von php sind Warnungen in Symcon und erzeugen, wenn das Script durch ein Ereignis gestartet wurde, eine gelbe Meldung.
Leerzeile vor dem ersten php-Tag?
Oder Echo, Print, var_dump im Script?
Michael

Genau das wars!
Ein einzelnes Leerzeichen - fast zu übersehen, aber aufgrund des gezielten Tipps habe ich nochmals kontrolliert.

Jetzt sind die ganzen Warnmeldungen weg - danke :pray: