JSON aus Philips TV auslesen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 51 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    JSON aus Philips TV auslesen

    Hallo Leute,

    ich weiß es gibt schon mehrere Threads zu diesem Thema, aber ich habe mehrere Wochen gesucht und gelesen
    und bin jetzt völlig verwirrt. Folgendes:
    Ich habe einen Philips Fernseher, der mir eine JSON Datei zur Verfügung stellt, wenn ich ihn lieb frage.
    Die JSON Datei gibt in diesem besonderen Testfall die Farben der Ambilightbeleuchtung aus,
    der Fernseher hat dabei 4 Sektoren: Links oben,Links unten,Rechts oben,Rechts unten.
    Allerdings sind bei anderen Fernsehern auch noch oben und unten Lichter angebracht, deren Strings bleiben in
    der JSON aber leer, da meiner diese nicht besitzt.
    Die JSON sieht so aus:
    Spoiler anzeigen

    Quellcode

    1. {
    2. "layer1": {
    3. "left": {
    4. "0": {
    5. "r": 0,
    6. "g": 9,
    7. "b": 247
    8. },
    9. "1": {
    10. "r": 19,
    11. "g": 19,
    12. "b": 19
    13. }
    14. },
    15. "top": {
    16. },
    17. "right": {
    18. "0": {
    19. "r": 136,
    20. "g": 83,
    21. "b": 255
    22. },
    23. "1": {
    24. "r": 77,
    25. "g": 61,
    26. "b": 108
    27. }
    28. },
    29. "bottom": {
    30. }
    31. }
    32. }


    Ich möchte nun die 4 Sektoren auslesen, das sind in dem Fall 12 Integers für die einzelnen Komplementärfarben.

    Später soll es auch möglich sein, die Farben zu ändern, davon habe ich noch garnichts gelesen.

    Danke schonmal,

    LWAG

    und verzeiht mir nochmals evtl Doppelposts, aber ich war leider komplett verwirrt von den verschiedenen Vorgehensweisen.
    JavaScriptSerializer mit einer eigenen Klasse für diesen Aufbau mit entsprechenden Properties verbinden und auslesen.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    lauwag schrieb:

    Ich möchte nun die 4 Sektoren auslesen
    Wie oft aus wieviel verschiedenen Dateien?
    Gugst Du hier, da kannst Du Dir aus dieser JSon-Datei eine C#-Klasse generieren lassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Wie oft aus wieviel verschiedenen Dateien?
    Gugst Du hier, da kannst Du Dir aus dieser JSon-Datei eine C#-Klasse generieren lassen.


    Also da der Fernseher dauerhaft Werte ausgibt, so schnell wie möglich, irgendwas zwischen 100ms und 500ms.
    Ich habe mir jetzt den Class Generator runtergeladen, online kam eine Fehlermeldung, der Code sei nicht gültig.

    Aber ich habe leider keine Ahnung wie ich nun vorgehen soll.

    lauwag schrieb:

    da der Fernseher dauerhaft Werte ausgibt
    in Blöcken einer JSon-Datei
    oder
    einzelne JSon-Strukturen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es geht zunächst nur um die r,g,b Werte.

    In dem Skript hier:
    Spoiler anzeigen

    Quellcode

    1. {
    2. "layer1": {
    3. "left": {
    4. "0": {
    5. "r": 28,
    6. "g": 17,
    7. "b": 149
    8. },
    9. "1": {
    10. "r": 92,
    11. "g": 31,
    12. "b": 0
    13. }
    14. },
    15. "top": {
    16. },
    17. "right": {
    18. "0": {
    19. "r": 19,
    20. "g": 14,
    21. "b": 12
    22. },
    23. "1": {
    24. "r": 28,
    25. "g": 7,
    26. "b": 4
    27. }
    28. },
    29. "bottom": {
    30. }
    31. }
    32. }

    ändern sich nur jeweils die "r","g","b" Werte, und das in den 4 Sektoren.
    Zunächst geht es NUR um dieses Skript, alles andere kommt später.
    Der Fernseher gibt alle Farben der Sektoren in diesem o.g. Skript aus.

    Danke

    lauwag
    Das ist nur ein Teil, oder? Denn so sieht meines Wissens kein kompletter JSON-String aus...
    Wohl doch net ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nafets3646“ ()

    lauwag schrieb:

    Also da der Fernseher dauerhaft Werte ausgibt

    lauwag schrieb:

    auf seinem Webserver ausgibt...
    Ja was denn nun?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich versteh dein unverständnis nicht ;)

    Der Fernseher gibt auf der URL (192.168.122.144:1925/1/ambilight/processed) foglendes aus:
    Spoiler anzeigen

    Quellcode

    1. {
    2. "layer1": {
    3. "left": {
    4. "0": {
    5. "r": 63,
    6. "g": 30,
    7. "b": 44
    8. },
    9. "1": {
    10. "r": 211,
    11. "g": 55,
    12. "b": 55
    13. }
    14. },
    15. "top": {
    16. },
    17. "right": {
    18. "0": {
    19. "r": 254,
    20. "g": 42,
    21. "b": 0
    22. },
    23. "1": {
    24. "r": 73,
    25. "g": 13,
    26. "b": 2
    27. }
    28. },
    29. "bottom": {
    30. }
    31. }
    32. }

    Ich möchte nun von den 4 Sektoren jeweils R,G und B auslesen, und da das
    Skript im Format JSON vorliegt, dachte ich ich muss das auslesen!

    Danke,

    lauwag
    In der Zeit, wo du über JSON diskutierst, hättest du diesen Text schon manuell ausgewertet...

    Eine Liste von Klasse "Layer", die 4 Propertys (left, right, bottom, up) von Klasse "Point" hat. Klasse "Point" hat 3 Integer-Propertys, r, g und b.
    Dann liest du die Datei zeilenweise ein, gehst du bei { immer eine Schicht rein (mach dir einen Schichtenzähler, der bei { eins hoch zählt und bei } eins runter). Und je nach Schicht befüllst du deine Propertys mit Werten, die nach : stehen. Aufwand max. halbe Stunde...

    lauwag schrieb:

    da das Skript im Format JSON vorliegt

    Mach es so, wie @WhitePage sagt. Zu Fuß.
    Bilder
    • JSon.png

      33,76 kB, 760×530, 191 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Über welche Programmierkenntnisse verfügst Du?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nur Grundkentnisse wie ihr sicher schon bemerkt habt.

    Ich habe das Programm jetzt soweit, dass es den Webserver ausliest,
    jetzt brauche ich nur den Wert an der Position 37-39 (etc.).
    Eine Möglichkeit ist die Chars einzeln auszulesen, das säh dann so aus:

    Quellcode

    1. Dim int_r as int = (char_37*100)+(char_38*10)+char_39


    Gibt es denn evtl noch andere Möglichkeiten, die direkt diese Zeilen auselen und
    in einen Integer konvertieren?
    Gutes Thema das du da anstößt.

    Ich habe jetzt für jedes "/,/{/}/: einen Zeilenumbruch eingefügt und diese Zeilen auslesen lassen,
    aber dann kommt der Fehler: Der Index liegt außerhalb des Array Bereiches.

    Was nun?

    Danke,
    lauwag

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „lauwag“ ()

    @lauwag Sieh Dir mal das an, Basis ist die Datei aus Deinem 1. Post:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim json() As String
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. json = IO.File.ReadAllLines("C:\Temp\JSon.dat")
    5. Dim r1 = getInteger(4)
    6. Dim g1 = getInteger(5)
    7. Dim b1 = getInteger(6)
    8. End Sub
    9. Private Function getInteger(number As Integer) As Integer
    10. Dim parts() = json(number).Split(":"c)
    11. Dim txt = parts(1).TrimEnd(","c)
    12. Return CInt(txt)
    13. End Function
    14. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Super, damit bin ich schon ein ganzes Stück weiter,

    aber ich muss noch die Datei herunterladen,
    die DownloadString Funktion hilft mir aber nicht, da diese keinen Array String ausgibt.

    Kann man da eine andere Funktion nutzen, da das Skript leider verschiedene Trennzeichen nutzt?