ich möchte mich ein wenig in das Enocean Telegramm einarbeiten und bräuchte eure Unterstützung hinsichtlich der Zusammenführung des Telegramms, welches meistens in mehren Schritten reinkommt.
Grundsätzlich klappt das Schreiben in eine Variable (58090) auch. Auch werden das Daten ins Archiv geschrieben. Was mir nicht gelingt, ist einen vollständigen String draus zu machen. Beginn ist ja immer die 55…
Habe es in Skripte, PHP, SQL (Fragen) verschoben.
BTT: in Zeile 8 musst du prüfen ob das Paket komplett ist, wenn nein $data mit RegVar_SetBuffer im Buffer sichern und mit Return das Script verlassen.
Michael
Da ich das Protokoll nicht kenne, nein.
Vorgehen wäre (egal welches Protokoll)
Neue Daten an die vorhandenen aus dem Buffer anhängen (hast du schon gemacht).
Prüfen ob komplette Pakete enthalten sind, diese extrahieren (und verarbeiten).
Den eventuellen Rest wieder in den Buffer schieben.
Michael
Das Startzeichen allein reicht ja nicht. Dann kannst du ja immer erst wenn das nächste Paket kommt das vorherige verarbeiten.
Du musst schon die Längenfelder des Protokolls verarbeiten (am besten auch die Checksummen → hier gelb)
Rot ist in der Doku Data length und blau optional lenght.
Wären somit hier 10 Byte + 7 Byte + 2x 1 Byte für die beiden Checksummen + PaketType (01) + Startzeichen + 2 Bytes für das Data length Feld und 1 Byte für das optional lenght Feld = 24 Byte
Somit wäre ein mögliches Vorgehen:
Suche 0x55
alles davor ignorieren / wegschneiden (kann passieren wenn man mittendrin in ein Paket mit einsteigt und nur das Ende erwischt → z.B. beim starten vom Symcon)
Byte 2+3 mit unpack in ein Integer wandeln und als Data length nutzen.
Byte 4 mit ord() in ein Integer wandeln und als optional lenght nutzen
Beide Längenfelder und die 7 zusätzlichen Bytes addieren zu einer Paketlänge
Prüfen ob $data von 0x55 an so viele Bytes enthält → Paket komplett?
Wenn ja, dann das Teilstück rausschneiden und verarbeiten. Wenn Nein zu 9.
Prüfen ob es noch einen Rest String gibt und es direkt 0x55 weitergeht, wenn ja zu 3. springen (nächstes Paket verarbeiten), sonst weiter mit 9.
Rest in den Buffer schieben.
Michael
PS: habe mit jetzt nur den Header vom Protokoll angesehen, keine Ahnung wie man die CRC ausrechnet oder die Packet Type und eventuellen Subtelegramme korrekt verarbeitet
Getriggert wird das Script durch den Datenempfang.
Das sync/Startzeichen haben ich ja oben berücksichtigt, es nützt dir nix um zu wissen wann ein Paket komplett ist.
Sonst verarbeitest du immer das vorherige und nicht das aktuelle Paket.
Michael
PS: ob die 55 in den Nutzdaten maskiert werden muss, habe ich auch nicht geprüft. Einige Protokolle maskieren es dann z.b. mit einem zusätzlichen Zeichen.
ja, das ist mir klar. Ziel ist es aber doch, ein vollständiges Telegramm in einer Str-Variablen zu Speichen. Insofern weiß nicht wie ich den Cutter dazu verwenden soll/kann. Trennzeichen gibt es doch nicht… Arbeite mich halt erst in die Materie ein…
Es gibt auch keinen Grund, die Daten in eine String-Variable zu schreiben. Was hast du davon, wenn im Webfront 50000a0701eba5006e… steht? Du willst doch die eigentlichen Nutzdaten sehen?