+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 16
  1. #1
    Registriert seit
    Apr 2007
    Ort
    Lüneburg
    Beiträge
    3,395

    Standard Herausforderung im SendToParent

    Hallo Leute,

    im Splitter (ubergeordete Instanz) soll etwas so ankommen:
    Code:
    "DataPayload":"\u0001"}
    Wenn ich versuche mit $DataPayLoad = "\u0001"; und per SentToParent zum Splitter sende, sieht es am Splitter so aus:
    Code:
    "DataPayload":"\\u0001"}
    (zwei Backslash)

    Wie muss der String aussehen damit er korekt im Splitter ankommt? (also nur ein Backslash)

    Joachim
    IP-Symcon seit 12/2009, iPhoneApp seit 01/2011, IPSView seit 12/2014!
    3xSiemensLOGO0BA7+DM16, 1xInstar 3010PoE, 1xInstar 2905PoE, 1x1-WireHub mit DS2450 von Eservice-online, 15xDS1820, 1xDS2423, 1xDS2408

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,036

    Das ist kein String mit der Zeichenkette \u0001 sondern ein String bestehend aus dem Byte mit dem Wert 1.
    Also chr(1) oder "\x01".
    Den String mit utf8_encode encodieren.
    Den Rest erledigt json_encode für dich.
    Schau dir doch einfach andere Module an, welche mit Binären Daten arbeiten. (Xbee, Plugwise etc...).
    Aber.... Hatten wir das Thema nicht schon x-mal?
    Michael
    PS: ein aussagekräftiger Titel wie 'Probleme mit Json beim Datenaustausch' wären wünschenswert.
    Geändert von Nall-chan (11.08.18 um 13:04 Uhr)
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  3. #3
    Registriert seit
    Apr 2007
    Ort
    Lüneburg
    Beiträge
    3,395

    Hallo Michael,

    Du hast völlig recht - und das in mehrfacher Weise!
    - wir hatten das Thema utf8_encode schon mal - fand es aber nicht wieder und wie ich jetzt sehe auch nicht in diesem Kontext
    - das Thema ist so für \u0001 mit
    PHP-Code:
    $DataPayload utf8_encode(chr(1)); 
    richtig
    Hatte auch in meinen Modulen geschaut, war aber fälschlicherweise der Meinung die Funktion hat im Namen etwas mit "json"...

    Wie ist es den für \u0000?
    PHP-Code:
    $DataPayload utf8_encode(chr(0)); 
    funktioniert so leider nicht?

    Joachim
    IP-Symcon seit 12/2009, iPhoneApp seit 01/2011, IPSView seit 12/2014!
    3xSiemensLOGO0BA7+DM16, 1xInstar 3010PoE, 1xInstar 2905PoE, 1x1-WireHub mit DS2450 von Eservice-online, 15xDS1820, 1xDS2423, 1xDS2408

  4. #4
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,036

    Ohne Worte

    Name:  Zwischenablage01.png
Hits: 153
Größe:  25.8 KB
    Michael

    Edit: Wir sind hier nicht in C. Ein Zeichen in PHP-Strings ist immer 8 Bit groß und PHP kann auch mit 0-Bytes in Strings umgehen (binary safe).
    Geändert von Nall-chan (11.08.18 um 17:32 Uhr)
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  5. #5
    Registriert seit
    Apr 2007
    Ort
    Lüneburg
    Beiträge
    3,395

    ...alles gut!

    Der Fehler lag an einer anderen Stelle!

    Super - funktioniert nun auch wie es soll...

    Was mache ich da gerade? Ich habe mich entschlossen, mein Produktivsystem völlig neu aufzusetzen.
    Die Art wie ich so manches damals gemacht habe lässt mich manchmal selbst erschrecken.
    Bei mir wird das Licht und einige andere Sachen über Siemens LOGO gesteuert. Mit den neuen Möglichkeiten versuche ich nun auch neue Wege zu gehen
    Jetzt ist das erste neue LOGO-Modul erst einmal prinzipiell lauffähig, werde meine Funktionssammlung jetzt so nach und nach in Module übertragen, sollte bei der Einrichtung dann deutlich mehr Struktur reinbringen und diese auch einfacher und schneller machen...

    Vielen Dank für die unterstützung - auch wenn es eine Wiederholung war!

    Joachim
    IP-Symcon seit 12/2009, iPhoneApp seit 01/2011, IPSView seit 12/2014!
    3xSiemensLOGO0BA7+DM16, 1xInstar 3010PoE, 1xInstar 2905PoE, 1x1-WireHub mit DS2450 von Eservice-online, 15xDS1820, 1xDS2423, 1xDS2408

  6. #6
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,036

    Zitat Zitat von JPaeper Beitrag anzeigen
    Vielen Dank für die unterstützung - auch wenn es eine Wiederholung war!

    Joachim
    Bitte... lernt man nicht durch Wiederholung?
    Was meinst du wohl wie oft ich selber in meinen Modulen abschaue

    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  7. #7
    Registriert seit
    Apr 2007
    Ort
    Lüneburg
    Beiträge
    3,395

    ...ich muss das Thema leider noch einmal beleben...

    Zur Testkonfiguration:
    - IPS-Instanz "Modbus-Device"
    - 16Bit Vorzeichenlos
    - eigener "Fake-Splitter" um die Ausgabe sichtbar zu machen

    Ausgabe des Fake-Splitters bei Sende-Werten in der Modbus-Device-Instanz:
    0 -> "Data":"\u0000\u0000"
    1 -> "Data":"\u0000\u0001"
    128 -> "Data":"\u0000€"
    255 -> "Data":"\u0000ÿ"
    512 -> "Data":"\u0002\u0000"

    Die Umsetzung mit chr() führt zu anderen Ergebnissen. Im Internet gibt es Skripte die Werte > 255 in mehrere Zeichen umsetzen, leider sehe meine Versuche mit denen im Ergebnis immer etwas anders aus...

    Joachim
    IP-Symcon seit 12/2009, iPhoneApp seit 01/2011, IPSView seit 12/2014!
    3xSiemensLOGO0BA7+DM16, 1xInstar 3010PoE, 1xInstar 2905PoE, 1x1-WireHub mit DS2450 von Eservice-online, 15xDS1820, 1xDS2423, 1xDS2408

  8. #8
    Registriert seit
    Apr 2007
    Ort
    Lüneburg
    Beiträge
    3,395

    ...mg mir denn zumindest jemand die Logik dahinter erläutern?
    IP-Symcon seit 12/2009, iPhoneApp seit 01/2011, IPSView seit 12/2014!
    3xSiemensLOGO0BA7+DM16, 1xInstar 3010PoE, 1xInstar 2905PoE, 1x1-WireHub mit DS2450 von Eservice-online, 15xDS1820, 1xDS2423, 1xDS2408

  9. #9
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,036

    Vergiss es.
    Benutzte Json_decode und utf8_decode und du hast die Rowdaten.
    IPS nutzt (vermutlich) RapidJson, PHP nutzt das nicht.
    Die Implementierung ist leicht unterschiedlich, was mir bisher aber nur bei SetXxxFilter aufgefallen ist.
    Ansonsten frisst IPS auch das JSON aus PHP und umgekehrt.
    Wenn du wissen willst, warum nicht alle Zeichen mit \u maskiert werden, schau hier; weil PHP kann das auch:
    PHP: json_encode - Manual
    Musst dafür die Option JSON_UNESCAPED_UNICODE setzen.
    Für mehr als ein Byte zu int/float nimmst du unpack.
    https://www.php.net/manual/de/function.unpack.php
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  10. #10
    Registriert seit
    Apr 2007
    Ort
    Lüneburg
    Beiträge
    3,395

    Vielen Dank erst einmal für Deine Antwort!

    Nun, eigentlich möchte ich ja nur wissen wie ich in meiner eigenen ModBusDevice-Instanz etwas "verpacken" muss, damit es im IPS-ModBus-Splitter so ankommt, wie vom "IPS-Eigenen-Device-Modul".

    Ich habe in meinem SentToParent die Option JSON_UNESCAPED_UNICODE gesetzt, aber ohne den Integerwert in irgendeiner Weise zu "manipulieren" - es kommt jetzt nur der Wert ansich an (ohne jegliche Formatierung).
    IP-Symcon seit 12/2009, iPhoneApp seit 01/2011, IPSView seit 12/2014!
    3xSiemensLOGO0BA7+DM16, 1xInstar 3010PoE, 1xInstar 2905PoE, 1x1-WireHub mit DS2450 von Eservice-online, 15xDS1820, 1xDS2423, 1xDS2408