Also als erstes hab ich das Thema mal von dem Beitrag rund um das RPI-RF-MOD abgetrennt. Solch Thread Hijacking sollte man wirklich vermeiden damit man hier nicht über Äpfel diskutiert wenn Birnen gemeint sind...
gerald hat geschrieben: ↑22.12.2018, 10:46
ich habe noch einen weiteren Fehler in der letzten Beta bezüglich der JSON RPC API entdeckt. Bzw. ein Nutzer meiner App. Wie es scheint, wird das Backslash falsch interpretiert:
Das du das jetzt wahrnimmst hat wohl mit dieser Änderung in der neuesten ReGaHss Version zu tun (die auch teil der heute releasten 3.41.11.20181222 version ist):
Code: Alles auswählen
- fixed string backslash unescaping routines to correctly unescape double backslash uses and thus allow to define e.g. \t by using a \\t string which were not possible before (#514).
Mehr nachlesen kannst du dazu hier:
https://github.com/jens-maus/RaspberryMatic/issues/514
https://github.com/eq-3/occu/issues/82
Zusammenfassend lässt sich sagen das du wohl leider nicht drumherum kommen wirst entweder deine Backslash Verarbeitung umzustellen oder (und das wird auf längere Sicht hin das beste sein) ganz auf die Nutzung des Backslashes zur Trennung von Informationen zu verzichten und hierfür einen anderen Qualifier zu nutzen.
Hintergrund des ganze ist, das in früheren ReGaHss Versionen die Verarbeitung von backslashes schlichtweg falsch bzw. fehlerhaft war. Und du bist jetzt leider in deiner @Home App wohl einem vermeintlichen Feature auf den Leim gegangen das jedoch ein Bug darstellt. Denn schaut man sich einfach das von dir genannte Beispiel einmal an:
Unter alter ReGaHss (CCU2, etc.):
Unter neuer ReGaHss (Angefangen mit RaspberryMatic 3.41.20181222):
Sollte es eigentlich recht klar sein warum die "neue" korrigierte Ausgabe die richtige ist (d.h. ein "\\" in einem String sollte in ein einzelnes "\" gewandelt werden – was auch so in der offiziellen Dokumentation steht). Die alten ReGaHss Versionen haben hier eben kurzerhand das "\" komplett falsch verarbeitet wodurch z.B. das erzeugen des strings "\t" nicht möglich war was normalerweise mittels Anweisung "\\t" möglich gewesen sein sollte. Somit sind nun Strings wie z.B. folgende:
möglich und das ergibt unter der neuen/reparierten ReGa nun den String "A \t B C" wobei die Trennung zwischen B und C dann ein echter Tabulator (0x9) übernimmt. In der alten ReGa ist/war das eben nicht möglich da hier das doppelte Backslash falsch verarbeitet wurde und es kam hier der String "A \ B C" raus, was aber eben falsch war.
Für dich bzw. deine Anwendung ergibt sich nun eben folgende Möglichkeiten:
1. Du nutzt statt dem Backslash ein anderes Trennzeichen (z.B. eben den echten Tabulator) ode ähnliches.
2. Du stellst deine string Nutzungen auf die Nutzung von "super strings" um. D.h. du nutzt statt den doppelte Anführungszeichen " einfach das ^ Zeichen. Damit wird dann einfach das gesamte backslash escaping und sämtliche String Vorverarbeitung ausser kraft gesetzt. D.h. dein Beispiel würdest du jetzt einfach wie folgt formatieren:
Ich würde dir natürlich empfehlen Punkt 1 anzugehen und deine @Home app auf ein anderes Trennzeichen umzustellen da dies längerfristig bessere Erfolgschancen hat und die Lesbarkeit deines eigenen Codes aufrechterhalten sollte. Aber du kannst natürlich auch Lösungsansatz 2 Nutzung und alles auf Super-Skript Zeichen umstellen (welche es übrigens schon immer in der CCU2 oder älter gibt nur bis dato nicht bekannt war).
Welche Lösung du da jetzt nutzt bleibt natürlich dir überlassen, was allerdings nun mit meinen Ausführungen klar sein sollte ist, das es sich hier nicht um einen neuen Bug handelt, sondern du bisher leider eben ein vermeintliches Feature genutzt hast das allerdings ein Bug war und der nun repariert wurde und so auch früher oder später in der CCU3 Firmware dann landen wird. Ergo, solltest du deine @Home App entsprechend umstellen.