WLANThermo-nano / WLANThermo_ESP82XX_Software

GNU General Public License v3.0
32 stars 13 forks source link

/data json erweitern #108

Open ChrisKoh83 opened 4 years ago

ChrisKoh83 commented 4 years ago

Wäre es möglich das json so um zu bauen das die Kanal Namen als eigene Objekte vorhanden sind? z.B.:

    "system": {
        "time": "1585592837",
        "unit": "C",
        "soc": 63,
        "charge": false,
        "rssi": -79,
        "online": 2
    },
    "channels": [{
                "channe1": [{
                    "name": "Kanal 1",
                    "typ": 0,
                    "temp": 999.00,
                    "min": 0.00,
                    "max": 55.00,
                    "alarm": 3,
                    "color": "#0C4C88"
                }],
                "channel2": [{
                    "name": "Kanal 2",
                    "typ": 0,
                    "temp": 999.00,
                    "min": 0.00,
                    "max": 55.00,
                    "alarm": 3,
                    "color": "#22B14C"
                }]
    }],
    "pitmaster": {
                "type": ["off", "manual", "auto"],
                    "pm": [{
                        "id": 0,
                        "channel": 1,
                        "pid": 0,
                        "value": 0,
                        "set": 0.00,
                        "typ": "off",
                        "set_color": "#ff0000",
                        "value_color": "#000000"
                    }]
                }
            }
Phantomias2006 commented 4 years ago

Hi, kannst du uns erklären warum du das gerne hättest? BG

ChrisKoh83 commented 4 years ago

Hi, ich versuche das json weiter zu verarbeiten und habe dabei das Problem das es eben die Werte "name, number .." dann mehrfach gibt nun nur nach Ihrem Value unterscheidbar sind.

Phantomias2006 commented 4 years ago

Also grundsätzlich kann es angepasst werden wobei das für mich eigentlich keine Option ist. Diese Struktur zieht sich durch alle Dienste wie ein roter faden (WebUI,Cloud,Server usw.) In welcher Programmiersprache willst du das Json verarbeiten? Vl zeigst uns du mal deinen Code. Eventuell können wir anders helfen. BG

sochs commented 4 years ago

Also das wird dahingehend schwierig, da sich damit die Struktur des JSON ändert und somit alle Schnittstellen angepasst werden müssten, da die bisherigen die Struktur dann nicht mehr lesen können. Das JSON Array sieht glaube ich zudem nicht vor, dass die einzelnen Objekte einen "Namen" bekommen. Das müssten dann eher identische Objekte in einem Objekt werden.

Wo genau verarbeitest du das JSON?

ChrisKoh83 commented 4 years ago

Danke für die schnellen Antworten von euch! Das habe ich schon "befürchtet" das dies sich auf nachfolgende Systeme auswirken könnte.

Ich versuche gerade die Werte (json) in Splunk einzulesen. Das geht mit einen HTTP Event Collector der automatisch die json Struktur in Felder und Werte aufschlüsselt.

Nun ist es ja so das unter Channels ja mehrere Array ohne Namen stehen. Diese Arrays haben ja wieder Objekte mit Values.

Leider sieht das dann so aus:

image

Bildschirmfoto 2020-03-30 um 21 31 21

curl -k "http://192.168.200.2:8088/services/collector" -H "Authorization: Splunk XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX" -d '{"sourcetype": "_json", "event": {"system":{"time":"1585592006","unit":"C","soc":65,"charge":false,"rssi":31,"online":0},"channel":[{"number":1,"name":"Kanal 1","typ":0,"temp":999.00,"min":0.00,"max":55.00,"alarm":3,"color":"#0C4C88"},{"number":2,"name":"Kanal 2","typ":0,"temp":999.00,"min":0.00,"max":55.00,"alarm":3,"color":"#22B14C"},{"number":3,"name":"Kanal 3","typ":0,"temp":999.00,"min":10.00,"max":74.00,"alarm":3,"color":"#EF562D"},{"number":4,"name":"Kanal 4","typ":0,"temp":999.00,"min":10.00,"max":35.00,"alarm":0,"color":"#FFC100"},{"number":5,"name":"Kanal 5","typ":0,"temp":999.00,"min":10.00,"max":35.00,"alarm":0,"color":"#A349A4"},{"number":6,"name":"Grill","typ":0,"temp":18.00,"min":10.00,"max":300.00,"alarm":0,"color":"#804000"},{"number":7,"name":"Kanal 7","typ":0,"temp":999.00,"min":10.00,"max":35.00,"alarm":0,"color":"#5587A2"},{"number":8,"name":"Kanal 8","typ":0,"temp":999.00,"min":10.00,"max":350.00,"alarm":0,"color":"#5C7148"}],"pitmaster":{"type":["off","manual","auto"],"pm":[{"id":0,"channel":1,"pid":0,"value":0,"set":0.00,"typ":"off","set_color":"#ff0000","value_color":"#000000"}]}}}'

Phantomias2006 commented 4 years ago

Kannst du manuell mappen oder macht das Splunk automatisch? Normalerweise würde das in etwa so aussehen: json.channel[0].name (mit 0 greifst du auf das erste Element zu)

ChrisKoh83 commented 4 years ago

Das Mapping geschieht automatisch. So hatte ich es eigentlich auch verstanden. Aber da muss ich mich noch mal weiter einlesen.

Phantomias2006 commented 4 years ago

Vl hilft dir das, kann ich nur schwer beurteilen da ich splunk nicht kenne... https://answers.splunk.com/answers/338341/breaking-large-json-array-from-rest-input-into-eve.html