topic.txt 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. ////////////////////////////////////////////////////////////////////////////////////
  2. Allgemeines Topic-Format:
  3. <DeviceID>/<ShmID>/<Format>/<Command>/<VarPath>
  4. <DeviceID>: Kombination aus Device-Prefix (wird in der Config-Datei konfiguriert (default: "GfA")) und der MAC-Adresse der ersten Ethernetschnittstelle (falls vorhanden "eth0").
  5. <ShmID>: Kombination aus dem Prefix "SHM" und der UUID der SHM.
  6. (MAC-Adresse und UUID in Großbuchstaben).
  7. ////////////////////////////////////////////////////////////////////////////////////
  8. ////////////////////////////////////////////////////////////////////////////////////
  9. Topic zum Publishen von Variablen-Werten:
  10. <Format>: "BINLE" (binär little endian), "BINBE" (binär big endian), "JSON" oder "PBUF" (Protocol Buffers, nicht implementiert).
  11. <Command>: "VALUE".
  12. Beispiel:
  13. "VarioNet-6C:EC:EB:67:5B:13/SHM-F93A047F-D3D0-40E3-965D-08D17E393A19/JSON/VALUE/struct1/struct2/var3": Wert von "struct1.struct2.var3" im JSON-Format.
  14. "VarioNet-6C:EC:EB:67:5B:13/SHM-F93A047F-D3D0-40E3-965D-08D17E393A19/JSON/VALUE/struct1/array1/2": Wert von "struct1.array1[2]" im JSON-Format. ("array1" ist hier ein Array aus skalaren Werten.)
  15. "VarioNet-6C:EC:EB:67:5B:13/SHM-F93A047F-D3D0-40E3-965D-08D17E393A19/BINLE/VALUE/struct1/array2/0/var3": Wert von "struct1.array2[0].var3" im Binärformat (little endian). ("array2" ist hier ein Array aus Strukturen.)
  16. Das JSON-Format ist wie folgt definiert:
  17. {
  18. "path": "/<VarPath>",
  19. "index": <Index oder -1>,
  20. "name": "<VarName>",
  21. "value": <Scalar>
  22. }
  23. Beispiel:
  24. {
  25. "path": "/struct1/struct2/var3", // vollständiger Pfad
  26. "index": -1, // Variable ist kein Arrayelement
  27. "name": "var3", // Variablenname
  28. "value": 1.25 // Wert von "struct1.struct2.var3"
  29. }
  30. {
  31. "path": "/struct1/array1/2", // vollständiger Pfad
  32. "index": 2, // Index des Arrayelementes
  33. "name": "array1", // Variablenname (ohne Index)
  34. "value": "Hello world!" // Wert von "struct1.array1[2]", ("array1" ist in diesem Beispiel ein Array aus Strings)
  35. }
  36. {
  37. "path": "/struct1/array2/0/var3", // vollständiger Pfad
  38. "index": -1, // Variable ist kein Arrayelement
  39. "name": "var3", // Variablenname
  40. "value": 2563 // Wert von "struct1.array2[0].var3"
  41. }
  42. ////////////////////////////////////////////////////////////////////////////////////
  43. ////////////////////////////////////////////////////////////////////////////////////
  44. Topic zum Setzen von Variablen-Werten:
  45. <Format>: "BINLE" (little endian), "BINBE" (big endian), "JSON" oder "PBUF" (Protocol Buffers, nicht implementiert).
  46. <Command>: "SET".
  47. Beispiel:
  48. "VarioNet-6C:EC:EB:67:5B:13/SHM-F93A047F-D3D0-40E3-965D-08D17E393A19/JSON/SET/struct1/struct2/var3", Payload: {"value":14.5}: Setzt den Wert von "struct1.struct2.var3" im JSON-Format.
  49. "VarioNet-6C:EC:EB:67:5B:13/SHM-F93A047F-D3D0-40E3-965D-08D17E393A19/BINLE/SET/struct1/array2/1/var4", Payload: [binärer Wert]: Setzt den Wert von "struct1.array2[1].var4" im Binärformat (little endian).
  50. ////////////////////////////////////////////////////////////////////////////////////
  51. ////////////////////////////////////////////////////////////////////////////////////
  52. Topic-Format zum dynamischen Ein/Ausschalten des Publishing von Variablen und zum Setzen von Parametern.
  53. Das Topic enthält hier keine <Format> Komponente:
  54. <DeviceID>/<ShmID>/<Command>/<VarPath>
  55. <Command>: "CONTROL".
  56. Payload: JSON-Objekt:
  57. {
  58. "binLe": <boolean>, // Binär Little Endian ein/aus
  59. "binBe": <boolean>, // Binär Big Endian ein/aus
  60. "json": <boolean>, // JSON ein/aus
  61. "pBuf": <boolean>, // Protokol Buffers ein/aus (nicht implementiert)
  62. "qos": <number>, // Quality Of Service. 0-2. Nur Integer! Ungültige Werte werden auf den Bereich 0-2 korrigiert.
  63. "retained": <boolean>, // Retain ein/aus
  64. "delRetained" <boolean> // Retained Werte dieser Variablen im Broker löschen (siehe Anmerkung).
  65. }
  66. Anmerkung:
  67. Mit "retained" wird bestimmt, ob eine Variable als retained gepublished wird oder nicht. Sobald das einmal geschehen ist, behält der Broker eine Kopie des Wertes in seinem Cache, welcher jedem Client beim Abonnieren des Topics automatisch gesendet wird. Ein späteres Setzen von "retained" auf false hat zur Folge, dass weiter publishings des Wertes als nicht retained erfolgen. Trotzdem behält der Broker aber den letzten Wert, der als retained gepublished wurde weiter im Cache und versendet den Wert auch weiterhin an neue Clients! Um eine "retained"-Variable komplett aus dem Broker zu löschen, wurde "delRetained" eingeführt. Wird "delRetained" auf false gesetzt, hat es keine Auswirkung, "delRetained":true löscht retained Variablen aller Formate aus dem Brkoer, allerdings muss "retained" für diese Variable im selben oder bereits einem vorigen Aufruf auf false gesetzt worden sein.
  68. Beispiel:
  69. "VarioNet-64:31:50:47:BA:DF/SHM-F93A047F-D3D0-40E3-965D-08D17E393A19/CONTROL/struct1/struct2/var3", Payload: {"binLe":false, "json":true, "qos":1}:
  70. Schaltet das Publishing der Variablen "struct1.struct2.var3" im Binärformat Little Endian aus und von JSON ein. Setzt QOS auf 1. Alle anderen Parameter bleiben unverändert.