Seite 1 von 1

Probleme mit JsonPath in Rule Datei

Verfasst: 16. Nov 2019 00:28
von Armin_123
Hallo,
möchte die Heimautomation über die Kombination Openhab 2 / Snips betreiben ( mit Raspberry 3)

In einer Regel erhalte ich mqtt Nachrichten von Snips AI welche ich über JSONPATH "bearbeiten" möchte
Ich versuche die Slots über den Slotnamen wie folgt zu extrahieren.

Code: Alles auswählen

var x = "{\"sessionId\":\"12fd7058-6550-4bc8-ac7e-29752f66ef51\",\"customData\":null,\"siteId\":\"default\",\"input\":\"rolladen büro runter\",\"asrTokens\":[[{\"value\":\"rolladen\",\"confidence\":0.7004744,\"rangeStart\":0,\"rangeEnd\":8,\"time\":{\"start\":0.0,\"end\":0.45}},{\"value\":\"büro\",\"confidence\":1.0,\"rangeStart\":9,\"rangeEnd\":13,\"time\":{\"start\":0.45,\"end\":1.05}},{\"value\":\"runter\",\"confidence\":1.0,\"rangeStart\":14,\"rangeEnd\":20,\"time\":{\"start\":1.05,\"end\":2.31}}]],\"asrConfidence\":0.88810456,\"intent\":{\"intentName\":\"Armin_123:Rollladensteuerung\",\"confidenceScore\":1.0},\"slots\":[{\"rawValue\":\"büro\",\"value\":{\"kind\":\"Custom\",\"value\":\"Büro\"},\"alternatives\":[],\"range\":{\"start\":9,\"end\":13},\"entity\":\"TYPE_ROOMS\",\"slotName\":\"Zimmer\",\"confidenceScore\":1.0},{\"rawValue\":\"runter\",\"value\":{\"kind\":\"Custom\",\"value\":\"Runter\"},\"alternatives\":[],\"range\":{\"start\":14,\"end\":20},\"entity\":\"TYPE_BLIND_COMMANDS\",\"slotName\":\"Aktion\",\"confidenceScore\":1.0}],\"alternatives\":[{\"intentName\":\"CrystalMethod:searchWikipedia\",\"confidenceScore\":0.053615358,\"slots\":[{\"rawValue\":\"runter\",\"value\":{\"kind\":\"Custom\",\"value\":\"runter\"},\"alternatives\":[],\"range\":{\"start\":14,\"end\":20},\"entity\":\"article\",\"slotName\":\"article_indicator\",\"confidenceScore\":1.0}]},{\"intentName\":\"domi:searchWeatherForecastCondition\",\"confidenceScore\":0.04479771,\"slots\":[]}]}"

var slotZimmer = transform("JSONPATH", "$..slots[?(@.slotName==\"Zimmer\")]",x)


leider funktioniert das ganze nicht. Die Variable "slotZimmer" enthält nach der Transformation immer die komplette Nachricht.
Wenn ich das ganze in den jsonpath online evaluator eingebe funktioniert es.


Hat jemand eine Idee?

Grüße Armin

Re: Probleme mit JsonPath in Rule Datei

Verfasst: 16. Nov 2019 13:06
von udo1toni
Was sollen denn die zwei Punkte nach dem $? Da gehört definitiv nur ein Punkt hin. Ob Du zum Testen das JSON so in die Variable bekommst, bin ich mir nicht sicher (das kannst Du aber bequem über ein logInfo("json","{}",x) rausfinden) Aber im Realbetrieb wirst Du dort ja vermutlich den Status eines String Items haben.
Die Anführungszeichen im slotName Parameter sind nicht notwendig, zumindest solange der Begriff keine Leerzeichen enthält.

JSONPATH kann meines Wissens kein JSON zurück geben, nur einen einzelnen Wert, aber versuche es trotzdem :)

Re: Probleme mit JsonPath in Rule Datei

Verfasst: 16. Nov 2019 14:12
von peter-pan
Probiers mal so:

Code: Alles auswählen

    var String x = "{\"sessionId\":\"12fd7058-6550-4bc8-ac7e-29752f66ef51\",\"customData\":null,\"siteId\":\"default\",\"input\":\"rolladen büro runter\",\"asrTokens\":[[{\"value\":\"rolladen\",\"confidence\":0.7004744,\"rangeStart\":0,\"rangeEnd\":8,\"time\":{\"start\":0.0,\"end\":0.45}},{\"value\":\"büro\",\"confidence\":1.0,\"rangeStart\":9,\"rangeEnd\":13,\"time\":{\"start\":0.45,\"end\":1.05}},{\"value\":\"runter\",\"confidence\":1.0,\"rangeStart\":14,\"rangeEnd\":20,\"time\":{\"start\":1.05,\"end\":2.31}}]],\"asrConfidence\":0.88810456,\"intent\":{\"intentName\":\"Armin_123:Rollladensteuerung\",\"confidenceScore\":1.0},\"slots\":[{\"rawValue\":\"büro\",\"value\":{\"kind\":\"Custom\",\"value\":\"Büro\"},\"alternatives\":[],\"range\":{\"start\":9,\"end\":13},\"entity\":\"TYPE_ROOMS\",\"slotName\":\"Zimmer\",\"confidenceScore\":1.0},{\"rawValue\":\"runter\",\"value\":{\"kind\":\"Custom\",\"value\":\"Runter\"},\"alternatives\":[],\"range\":{\"start\":14,\"end\":20},\"entity\":\"TYPE_BLIND_COMMANDS\",\"slotName\":\"Aktion\",\"confidenceScore\":1.0}],\"alternatives\":[{\"intentName\":\"CrystalMethod:searchWikipedia\",\"confidenceScore\":0.053615358,\"slots\":[{\"rawValue\":\"runter\",\"value\":{\"kind\":\"Custom\",\"value\":\"runter\"},\"alternatives\":[],\"range\":{\"start\":14,\"end\":20},\"entity\":\"article\",\"slotName\":\"article_indicator\",\"confidenceScore\":1.0}]},{\"intentName\":\"domi:searchWeatherForecastCondition\",\"confidenceScore\":0.04479771,\"slots\":[]}]}"
    var slotZimmer = transform("JSONPATH", "$..slots[*].slotName",x)
    logInfo("test json", "x ist {} ", slotZimmer)

Re: Probleme mit JsonPath in Rule Datei

Verfasst: 17. Nov 2019 08:42
von Armin_123
hallo,
danke für Eure Antworten.
Dans Problem waren die Anführungszeichen bei

Code: Alles auswählen

slotName =\"Zimmer\"
mit einfachen Anfürungszeichen funktioniert es.

Grüße

Armin