Allgemeine Frage zum Ereignismodell von IP-Symcon

Hallo,

ich lese viele Information von unterschiedlichen Quellen (Pelletkessel Modbus, Wetterstation Seriell, AVR-Microcontroller Seriell, Wäremmengenzähler M-Bus Seriell, …) mit Ip-Symcon ein. Um eine entsprechende Reaktionszeit bei der Viualisierung zu erhalten erfolgt das einlesen oft im Sekundentakt.

Hierzu habe ich diverse Scripte die zyklisch (z.B. sekündlich, 10-sekündlich, minütlich, …) aufgerufen werden.

Bislang noch nicht verstanden habe ich wie diese Scripte die z.T. zur gleichen Zeit aufgerufen werden dann tatsächlich abgearbeitet/verschachtelt sind. Was passiert zum Bsp. wenn ein Script alle 10 Sekunden aufgerufen wird und 3 Sekunden Bearbeitungszeit hat mit einem parallelen Script das sekündlich aufgerufen wird und 0,3 Sekunden Bearbeitungszeit hat.

? laufen beide Scripte parallel
? wie sind dann die Prioritäten verteilt

Bei den Prioritäten wie gehen hierbei dann noch bei aktiver Verwaltungsconsole auf einem Client die Programmausführungszeiten (z…B. Meldungsanzeige, oder Onlineanzeige von IP-Symcon-Variablen) der Verwaltungsconsole mit ein.
Bei starker Systemauslastung ist mir schon aufgefallen dass in der Verwaltungsconsole die Onlineanzeige der Variablenaktualisierung (z.B. bei sekündlicher Aktualisierung) zeitlich „nachhinkt“ und dann später wieder aufholt.

Gibt es hierzu irgendwo Informationen.

Gruß
zkra

Skriptaufrufe werden auf 10 PHP-Threads verteilt. Was gerade wo läuft kannst Du sehen, wenn du in der Konsole auf „Ansicht hinzufügen“ gehst und „PHP Informationen“ hinzufügst. Die Threads haben alle gleiche Priorität und werden parallel ausgeführt. Wenn 10 Threads laufen und neue Befehle dazu kommen werden die in eine Warteschlange gepackt. Das ist dann im Log mit „Warteschlange füllt sich“ zu erkennen.

Die Konsole aktualisiert meine ich nicht immer sofort, da paresy so die Systemlast reduziert. WebFront fordert spätestens 200ms nach einem Datenblock den nächsten Datenblock an.

Hallo Horst,

besten Dank für diese Infos.

Das mit der Ansicht „PHP-Informationen“ und auch die Ansicht „Ereignis-Informationen“ waren mir bislang nicht bekannt.

Die PHP-Informationen fliegen ja rel. schnell über den Bildschirm, werden die auch irgendwo geloggt ?
Kann man programmtechnisch auch auf diese Informationen zugreifen z.B. Anzahl Aufrufe, oder max. Laufzeit ?

Da bei mir alle 10 Sek. etwas mehr zu tun ist, springt die Anzeige der Variablenaktualisierung die alle Sekunde aufgerufen wird in der Console alle 10 Sekunden um 2 Sekunden weiter, zwischen den 10 Sekunden erfolgt die Variablenaktualisierung sekündlich. Hier weiß ich nicht ob die Darstellung der Console verzögert und evtl. sogar gepuffert wird.

Auch bei der Meldungsausgabe mit Standardfilter (alles angehackt) über die Console ist ja viel zu tun.

Gruß
zkra

Skriptausführungen werden alle in die Log-Dateien unter /logs geschrieben mit Start und Ende. Die Konsolendaten werden gepuffert, da die Konsole sonst durch die vielen XML-Pakete schwächere Rechner in die Kniee treibt. Nach welchen Kriterien paresy das gemacht hat weiß ich jetzt nicht mehr. Müsste in den Bug-Reports zu 1-Wire nachzulesen sein.

Ein Ereignis basierter Trigger/Zeitliches Ereignis kann mehrfach zeitgleich laufen/werden ansonsten in die PHP Warteschleife eingereiht. (1 Ereignis -> alle 1 sek trigger, 3 sek laufzeit. Dann hast du immer ca. 3 Skripte parallel laufen)

Die Darstellung der Konsole ist losgelöst vom eigentlichen System. (Ansonsten würde eine langsame Internetleitung, die für eine Visu genutzt wird das ganze System aufhalten)

Du siehst in der Konsole die Veränderung mit der korrekten Zeit, aber evtl. ein paar Sekunden später. Je nachdem wie schnell der Server die Daten verarbeitet hat. Alle gesendeten Meldungen werden seriell abgearbeitet. Es gibt keine Priorisierung für irgendeine Meldung.

paresy

Hallo,

besten Dank für euere Informationen.

Wenn Asynchron auf die IP-Symcon Variablen zurgeriffen wird, z.B. das eine Ereignis schreibt gerade in die Variable, das andere Ereignis möchte gerade lesen, ist dann die Plausibilität des Lesevorganges gewährleistet ?

Es sollte ja dann nicht der Inhalt der z.B. erst halb aktualisierten Variablen (z.B. bei einer längeren Stringvariablen gelesen werden.

Gruß
zkra

Davor musst Du keine Angst haben. Du musst nur bei transaktionsähnlichen Skripten darauf achten, dass Du Dich um das Locking kümmerst. Dazu kannst Du Semaphoren benutzen (siehe IPS_SemaphoreEnter - IP-Symcon :: Automatisierungssoftware).