JSON Abfrage in Node-blue

Hallo
hat jemand eine Idee wie man in Node-blue eine Json Abfrage baut und einige Werte aus der Tabelle in die dazu benannte Systemvariable schreibt?
Hintergrund ist ich brauche einige Werte von meinen Sonnenbatterie und ich denke das Smartha Team wir dazu kein Modul bauen.

Man kann die Batterie mit http://ip-der-batterie:8080/api/v1/status abfragen und man erhält eine JSON Tabelle.
sonnen_batterie_api

Hat jemand eine Idee wie man nun einige Werte in eine Systemvariable schreiben kann?

Hey @leika241265,

kein Problem, wuerde in etwa so aussehen:
FireShot Capture 1384 - Node-BLUE _ 192.168.111.71 - 192.168.111.71

Erklaerung:
Der interval Knoten erzeugt alle 60 Sekunden ein Event welches einen HTTP-Request Knoten ausfuehrt. Dieser ruft eine URL auf (in diesem Falle einen Dummy-Testserver) und gibt das Ergebniss direkt als geparstes JSON-Objekt wieder. So laesst sich im template Knoten direkt der gewuenschte Wert auslesen und ausgeben.

Download (843 Bytes)

– Micha

Hallo Micha,

Danke für die schnelle Hilfe. Klappt alles. Nun kann ich Daten auch hier weiterverwenden.

Nur noch eine kleine Frage zur Programmierung der template Knoten.

Kennst du eine gute Webseite zum Nachlesen der Programmierung? Ich möchte mich damit mehr befassen.

Im Moment habe ich das template mehrmals für jeder Abfragefeld einzeln erstellt und ich denke das kann man auch in einem template erstellen mit dem speichern in eine Systemvariable.
:+1:
_Volker

Hey @leika241265,

eine Doku zu Node-BLUE gibt es leider (noch) nicht. Die meisten Knoten haben allerdings eine kleine Doku direkt in Node-BLUE integriert.

Mehrere Templates direkt hinter den HTTP-Request Knoten zu packen ist kein Problem, hab ich auch schon so in der Art verwendet. Alternativ koenntest du mit einem function Knoten arbeiten, und so die entspr. Daten ueber mehrere Ausgaenge senden.

TIMTOWTDI wie ich als alter Perler gerne sage :joy:

– Micha

Ich habe etwas im www und im Homegear Forum gefunden.
Danke
Volker

2 „Gefällt mir“

Hallo,
mein Anwendungsfall mit vielen Newbie-Faragen wäre dieser hier: Dem ‚HomePilot‘ von Rademacher zur Rolladensteuerung kann ich mit /v4/devices die dort hinterlegten Geräte im JSON Format entlocken. Das sieht (gekürzt) etwa so aus:

devices: array[3]
0: object
…einiges gelöscht …
name: „Wohnzimmerfenster“
origin: „HomePilot“
properties: object
statusValid: true
statusesMap: object
Manuellbetrieb: 0
Position: 0
uid: „blabla“
visible: true
voiceControlledBy: „“
1: object
2: object
response: „get_visible_devices“

Wenn ich in der template Box das hinterlege:

{{#payload.devices}}
Position {{name}}: {{statusesMap.Position}}
{{/payload.devices}}

bekomme ich am Ende das heraus: „\0APosition Wohnzimmerfenster: 0 \0A\0APosition Flur EG: 0 \0A\0APosition Terrassent\C3\BCr: 0 \0A“, also Informationen zu allen 3 Geräten zusammen.

Meine Frage: Wie kann ich genau EINEN Wert zur Position von genau EINEM Gerät abfragen?
Wie müsste ich das mit einer function Box angehen?

Sorry, trotz vieler Recherchen stecke ich hier etwas fest. Danach habe ich bestimmt noch viel mehr Fragen, wenn es dann um die Steuerung der Rolläden geht :wink:

Vielen Dank
Wulf.

Hi da ist folgendes Problem Du hast noch ein object dazwischen, Du musst erst die Daten aus dem Object holen. Ich bin mir nicht sicher ob das direkt im Template geht (ich bin nicht so der Template Knoten nutzer ). Aber du kannst einfach einen Funktionsknoten davor setzen.
ZB:
Funktions Knoten:
$input =$msg[‚payload‘][0]; // wenn es Object 1 ist kommt ne 1 rein usw.
$msg[‚payload‘] =$input;
return $msg;

Oder gleich Verarbeiten:
$input =$msg[‚payload‘][0];
$text=„Position „+=$input[‚name‘]+“:“+$input[‚Position‘];
$msg[‚payload‘] =$text;
return $msg;

So in etwa sollte das gehen ;).

Gruß
Michael

1 „Gefällt mir“

Hallo Michael,

Vielen Dank! Ich habe die Idee verstanden, es sind aber tatsächlich sogar noch zwei Ebenen mehr dazwischen - so geht es jetzt mit dem function Knoten:

$input = $msg[‚payload‘][‚devices‘][0];
$data = $input[‚statusesMap‘];
$text = $input[‚name‘]." Position:".$data[‚Position‘];
$msg[‚payload‘] = $text;
return $msg;

Lieben Gruß
Wulf.

1 „Gefällt mir“

Sorry hatte ich nicht gesehen ;), bzw hm räusper das war Absicht damit es leichter zu verstehen ist :joy:.

Super das es funktioniert das ist doch das wichtigste :).

Gruß
Michael