« Zurück zu Produkt

Dokumentation

IPS_GetSnapshotChanges

 string IPS_GetSnapshotChanges (int $LetzterZeitstempel) 

Parameterliste

LetzterZeitstempel

Nummer der letzten bekannten Nachricht (timestamp aus dem Snapshot bzw. TimeStamp der zuletzt erhaltenen Nachricht)

Rückgabewert

Ein JSON-kodiertes Array mit allen Nachrichten nach LetzterZeitstempel in aufsteigender Reihenfolge. Über die JSON-RPC Schnittstelle wird es direkt als Array geliefert.

Beschreibung

Warning

Diese Funktion ist nur für den internen Gebrauch vorgesehen und kann sich jederzeit ohne Ankündigung ändern oder entfallen.

Warning

Es ist geplant, diese Funktion zukünftig zu entfernen, sobald die alten iOS/Android Apps nicht mehr im Einsatz sind und IPSView auf WebSockets umgestellt hat. Änderungen sollten stattdessen über die WebSocket Schnittstelle empfangen werden, siehe Datenaustausch.

Die Funktion liefert alle Nachrichten, die nach der Nachricht mit der Nummer LetzterZeitstempel aufgetreten sind. Clients, die sich mit IPS_GetSnapshot initialisiert haben, können so durch regelmäßige Abfrage ihren Stand aktuell halten, siehe Snapshots.

IP-Symcon speichert dazu die letzten Nachrichten in einem Ringpuffer. Jede Nachricht erhält eine fortlaufende Nummer (TimeStamp). Trotz des Namens ist dies kein Zeitpunkt, sondern ein Zähler, der bei jedem Start von IP-Symcon neu beginnt. Die Größe des Ringpuffers wird über den Spezialschalter "MessageRingBufferSize" festgelegt (Standard: 8192 Nachrichten).

Jeder Eintrag des Arrays enthält folgende Felder:

Feld Typ Beschreibung
TimeStamp integer Fortlaufende Nummer der Nachricht
SenderID integer ID des Objekts, das die Nachricht gesendet hat (0 für den Kernel)
Message integer ID der Nachricht, siehe Nachrichten
Data array Daten der Nachricht. Aufbau und Anzahl hängen von der jeweiligen Nachricht ab

Ist LetzterZeitstempel gleich der Nummer der aktuellsten Nachricht, liefert die Funktion ein leeres Array. Ist LetzterZeitstempel 0, liefert sie nur die aktuellste Nachricht.

Folgende Fehler sind möglich:

  • Ist LetzterZeitstempel größer als die Nummer der aktuellsten Nachricht, schlägt die Funktion mit "Requests into the future are not possible" fehl.
  • Liegt LetzterZeitstempel mehr Nachrichten zurück, als der Ringpuffer fassen kann, schlägt sie mit "Request range is bigger than message buffer" fehl.
  • Wurden angeforderte Nachrichten im Ringpuffer bereits überschrieben, schlägt sie mit "Invalid request. Check timestamp" bzw. "Invalid timestamp requested ..." fehl.
  • Ist der Spezialschalter "DebugDisableSnapshotChanges" aktiv, schlägt sie mit "This function is disabled for debugging purposes!" fehl.

In diesen Fällen, und nach einem Neustart von IP-Symcon, muss der Client den Snapshot neu laden.

Beispiel

// Snapshot laden und die Nummer der letzten enthaltenen Nachricht merken
$snapshot = json_decode(IPS_GetSnapshot(), true);
$lastTimestamp = $snapshot['timestamp'];

// ... später: alle seitdem aufgetretenen Nachrichten abrufen
$changes = json_decode(IPS_GetSnapshotChanges($lastTimestamp), true);
foreach ($changes as $message) {
    printf("#%d: Sender %d, Nachricht %d, Daten %s\n", $message['TimeStamp'], $message['SenderID'], $message['Message'], json_encode($message['Data']));
    $lastTimestamp = $message['TimeStamp'];
}

/* liefert z.B.:
#991: Sender 0, Nachricht 10202, Daten ["Kernel","*** IPS READY",1790081169]
*/
Haben Sie noch Fragen?