ich werfe mal diesen AllInOne-Lösungsvorschlag für die stateTransformation in den Raum
Code: Alles auswählen
JS:|var kurs =JSON.parse(input).executions;if(typeof kurs !== 'undefined'){parseFloat(kurs.toString().replace(",",".").replace('./.','0'))};
Code: Alles auswählen
JS:|var kurs =JSON.parse(input).executions;if(typeof kurs !== 'undefined'){parseFloat(kurs.toString().replace(",",".").replace('./.','0'))};
Ich kenn mich mit JS nicht aus, aber was passiert, wenn der JSON-String gar nicht vorhanden/ausgegeben wird ? Muss ich das im Thing-Channel setzen oder was mach mit der Variablen var. Ich kann mir's gerade nicht erklären
Code: Alles auswählen
Type number : executions "Executions" [ stateTransformation="JS:|var kurs =JSON.parse(input).executions;if(typeof kurs !== 'undefined'){parseFloat(kurs.toString().replace(",",".").replace('./.','0'))};" ]
Aktuell hab ich keine Probleme mehr.TomW80 hat geschrieben: ↑30. Jan 2024 17:56Ich teste und werde berichten...peter-pan hat geschrieben: ↑27. Jan 2024 00:11 ...das replace funktioniert normalerweise schon. Es kommt halt auf den Ausreisser an.
Ich habe die Idee von Udo nochmal aufgenommen und damit herum experimentiert.
...
Ich habe seither keine Probleme mehr. Vor allem habe ich die parseFloat Funktion wieder in das Script aufgenommen und die Channel-Beschreibung im Thing angepasst. Da habe JSONPATH und JS mit diesem Schnittmengensymbol ( ∩ ) aneinandergekettet:
... eigentlich klappt das Ganze ja, aber ich "bastle" immer noch etwas an den "things".
Code: Alles auswählen
{
"bid": 3.225,
"ask": 3.275,
"bidsize": 1000,
"asksize": 1000,
"delta": 0.0,
"stueck": 0,
"umsatz": 0,
"avg": "./.",
"last": "./.",
"high": "./.",
"low": "./.",
"close": 3.245
}
Code: Alles auswählen
Type number : execution "Executions" [ stateTransformation="DSL:|Integer.parseInt(transform('JSONPATH','$.executions',input).replace(',','.').replace('./.','0').replace('+',''))" ] // Test
// https://community.openhab.org/t/is-it-possible-to-combine-two-transformations/152550/6
Type number : executions "Executions" [ stateTransformation="JS:|var kurs =JSON.parse(input).executions;if(typeof kurs !== 'undefined'){parseInt(kurs.toString().replace(',','.').replace('./.','0'))};" ]
Code: Alles auswählen
Type number : executions2 "Executions" [ stateTransformation="JSONPATH:$.executions∩JS:comma2dot.js"]