IP Symcon 4.2 funktion IPS_GetSnapshotChanges() problem!

Hallo.
Habe nach dem Update von 3.4 auf 4.2 ein problem mit der funktion GetSnapshotChanges().
Ich habe LCN Komponeten

.

Mit GetSnapshotChanges(0) lese ich den aktellen TimeStamp aus (z.B 600).
Wenn ich jetzt GetSnapshotChanges(600) aufrufe bekomme ich alle Ereignisse seit dem TimeStamp 600.
Das funktioniert.
Verändere ich ein Relais funktioniert GetSnapshotChanges(600).
Verändere ich aber ein Binäreingang and bekomme ich von GetSnapshotChanges(600) nichts mehr zurück!!!

Hat sich etwas an der Funktion GetSnapshotChanges() geändert?
Danke.

BYE
Thomas

Veränderst oder aktualisierst du es nur? Damals gab es noch VM_CHANGED… ich glaube seit der 4.0 gibt es nur noch VM_UPDATE und einer der Daten ist das flag ob eine Änderung vorlag.

paresy

Hallo.

Ich verändere es, zur Zeit nur in IP Symcon über Simulation.
Muss so einiges auf IP Symcon 4.2 portieren und testen bevor es zum Kunden geht.
Bei den Relais funktioniert es und alle anderen LCN Werten (Temperatur/Ausgang) auch.

BYE
Thomas

Tipp: Schau dir das WebFront an und öffne den Entwicklermodus. Dort in der Konsole siehst du alle relevanten Änderungen der Variable… Wenn es dort auftaucht, muss es auch bei dir auftauchen. Ebenfalls: Wenn es in der Konsole auftaucht, dann kam es auch über den Rückkanal.

paresy

Hallo.

Ich arbeite nicht mit dem WebFront. Leider weiß ich auch nicht wie ich in den Entwicklermodus komme.
In IP Symcon verändere ich den Status des Binäreingang und in IP Symcon wird der Status auch geändert.

Nur wenn ich mit GetSnapshotChanges() diese Status Änderung auslesen will kommt von der Funktion nichts zurück.
Die funktion gibt erst wieder die Ereigniss nach der Status Änderung aus.
Beispiel:

  1. GetSnapshotChanges(600); => Bekomme alle Ereignisse
  2. Veränderung des Binäreingang
  3. GetSnapshotChanges(600); => Bekomme nichts zurück
  4. GetSnapshotChanges(650); => Bekomme alle Ereignisse
    Die Ereignisse vor der Veränderung (mit der Veränderung) sind weg.

Wie geschrieben bei Relais Ausgängen und anderen LCN Werten ist das Verhalten nicht zu beobachten.

BYE

Das ergibt keinen Sinn.

Wenn du bei 1. was zurück bekommst, bekommst du bei 3. auch was zurück. Nämlich mindestens die selben Elemente von 1. und noch mehr, falls mehr Änderungen passiert sind.

Sofern der Puffer (Default: 8192) Elemente nicht überläuft, haben zwei aufrufe mit identischem Parameter, mindestens den selben Inhalt ab der von dir angegebenen MessageID.

Bist du dir sicher, dass du dir die echten Daten direkt vom SnapshotChanges ansiehst und nicht irgendwie eine Funktion dazwischen hast, die da was verarbeitet/filtert?

paresy

Hallo.

Ja genau das ist das Problem!
Nach einer Änderung des LCN Binäreinganges kommt bei Punkt3 nichts mehr zurück (TimeStamp liegt vor der Veränderung).

  1. GetSnapshotChanges(TimeStamp); => Bekomme alle Ereignisse
    2. Veränderung des Binäreingang
  2. GetSnapshotChanges(TimeStamp); => Bekomme nichts zurück
  3. GetSnapshotChanges(TimeStamp+50); => Bekomme alle Ereignisse

Ich mache folgendes:
$TimeStamp =600;
$msg_json = GetSnapshotChanges($TimeStamp);
print_r($msg_json);

Habe Gestern nochmal einige Sachen getestet.

  1. Wenn ich eigene Variablen anlege bekomme ich nach Veränderung dieser Variable immer etwas von GetSnapshotChanges(TimeStamp); zurück. Funktioniert.
  2. Habe LCN Komponenten über LCN_PCHK angeschlossen.
  3. Relais, Target Tempertur und LCN Variablen physikalisch geändert GetSnapshotChanges(TimeStamp); funktioniert.

4. Binäreingang verändert dann GetSnapshotChanges(TimeStamp); aufgerufen => kommt nichts zurück.
Erst wenn der TimeStamp > der Binären Veränderung ist bekomme ich etwas zürück (z.B. GetSnapshotChanges(TimeStamp+50):wink:

Liegt der TimeStamp vor der Veränderung des Binäreinganges kommt nichts zurück.
Liegt der TimeStamp nach der Veränderung des Binäreinganges bekomme ich alle Ereignisse ab dem TimeStamp.

Es sieht so aus als wenn eine Veränderung eines LCN Binäreingangs etwas in GetSnapshotChanges() kaputt macht.

Ich hoffe ich konnte es Verständlich erkären.

BYE
Thomas

Kannst du mir ein Beispiel bauen, womit ich das nachstellen kann?

Du hast mir jetzt nämlich drei mal das selbe erklärt, aber dem Problem sind wir bisher nicht näher gekommen.
Und: Da die Konsole alles korrekt anzeigt, machst du irgendetwas falsch. Ohne konkretem Beispiel glaube ich nicht, dass wir voran kommen.

Um noch mal aufs WebFront zu kommen. Im Chrome ist der Entwicklermodus mit F12 zu erreichen. Dort willst du mal schauen, ob deine VariablenID mit dem Wert auftaucht… Die Variable muss dafür im WebFront auch sichtbar sein!

paresy

Hallo.
Habe jetzt einige Test gemacht.
Ich verändere den Binäreingang 1 am LCN Module 15 id=37844;
Als erstes das mit dem WebFront, siehe Bild.


hier scheint es zu funktionieren.

Dann habe ich Dir eine Test Script programmiert, siehe Anhang.
TestScript.ips.txt (905 Bytes)
Hier gebe ich in einer while Schleife den Timestamp von GetSnapshotChanges(FirstTimeStamp) aus.
Wenn ich die Binärvariable geändert habe kommt nichts mehr
und im Output Fenster kommt eine Notice, siehe Bilder.

Hier das Log Fenster:

Hier das Output Fenster:

Ich hoffe mein Problem wird etwas verständlicher.
Mach ich bei der Abfrage etwas falsch?

BYE
Thomas

Probier mal das hier. Du willst in der Schleife die letzte TimeStamp für die nächste Anfrage nutzen. Ansonsten fragst du ja immer viel zu viel ab.


<?
  IPS_LogMessage ("TestScript.ips.php", "TestScript Start:");
  $changes = IPS_GetSnapshotChanges(0);
  $changes = json_decode ($changes);                  // Decode json msg
  $FirstTimeStamp = $changes[0]->TimeStamp;
  IPS_LogMessage ("TestScript.ips.php", "FirstTimeStamp:" . $FirstTimeStamp);
  $binval = GetValueBoolean (37844);
  $timestamp = null;
  
  while ($binval == 0)
  {
    IPS_Sleep(500);
	$changes = IPS_GetSnapshotChanges($FirstTimeStamp);
	$changes = json_decode ($changes); 
	$timestamp = $changes[sizeof($changes)-1]->TimeStamp;
	IPS_LogMessage ("TestScript.ips.php", "While timestamp:" . $timestamp);
    $binval = GetValueBoolean (37844);
  }
  $changes = IPS_GetSnapshotChanges($FirstTimeStamp);
  $changes = json_decode ($changes); 
  $timestamp = $changes[sizeof($changes)-1]->TimeStamp;
  IPS_LogMessage ("TestScript.ips.php", "End timestamp:" . $timestamp);
  print_r($timestamp);

?>

paresy

Hallo.
Habe soebend Dein Script getestet.

Leider das gleiche Verhalten:
Wenn ich die Binärvariable geändert habe kommt von der Funktion nichts mehr zurück
und im Output Fenster kommt eine Notice, siehe Bilder.

Hier das Log Fenster:

Hier das Output Fenster:

Diese Verhalten ist, wie schon erwähnt, nur bei LCN Binäreingängen zu sehen.

BYE
Thomas