Re: Aktienkurse
Verfasst: 16. Jan 2024 22:42
Ups... Ich ergänze oben...
Code: Alles auswählen
(function(price){
var json = JSON.parse(price);
var retval = (json.high).replace(",",".");
return retval;
})(input)
Code: Alles auswählen
Type number : high "High" [ stateTransformation="JS:comma2dot.js" ]
==> /var/log/openhab/openhab.log <==
2024-01-23 11:44:30.477 [WARN ] [.transform.SingleValueTransformation] - Executing transformation ChannelStateTransformation{pattern='comma2dot.js', serviceName='JS'} failed: An error occurred while executing script. TypeError: json.high.replace is not a function in <eval> at line number 3
Code: Alles auswählen
Aktien-String ist [3.48, 3.485, 3000, 3000, 0.0, 0, 0, ./., ./., ./., ./., 3.495]
Code: Alles auswählen
// Aktienkurse
Thing http:url:DE0007164600 "SAP SE" [
baseURL="https://www.tradegate.de/refresh.php?isin=DE0007164600",
refresh=3600 ] {
Channels:
Type string : aktie "Alle Werte" [ stateTransformation="JSONPATH:$.*" ] // ganzer String - unbearbeitet
Type string : aktie1 "Alle Werte" [ stateTransformation="DSL:|transform(\"JSONPATH\",\"$.*\",input).replace('./.','0')" ] // ganzer String - gehübscht
Type number : bid "Bid" [ stateTransformation="DSL:|transform('JSONPATH','$.bid',input).replace(',','.').replace('./.','0')" ]
Type number : ask "Ask" [ stateTransformation="DSL:|transform('JSONPATH','$.ask',input).replace(',','.').replace('./.','0')" ]
Type number : bidsize "Bid Size" [ stateTransformation="DSL:|transform('JSONPATH','$.bidsize',input).replace(',','.').replace('./.','0')" ]
Type number : asksize "Ask Size" [ stateTransformation="DSL:|transform('JSONPATH','$.asksize',input).replace(',','.').replace('./.','0')" ]
Type number : delta "Delta" [ stateTransformation="DSL:|transform('JSONPATH','$.delta',input).replace(',','.').replace('./.','0')" ]
Type number : stueck "Stück" [ stateTransformation="DSL:|transform('JSONPATH','$.stueck',input).replace(',','.').replace('./.','0')" ]
Type number : umsatz "Umsatz" [ stateTransformation="DSL:|transform('JSONPATH','$.umsatz',input).replace(',','.').replace('./.','0')" ]
Type number : avg "AVG" [ stateTransformation="DSL:|transform('JSONPATH','$.avg',input).replace(',','.').replace('./.','0')" ]
Type number : executions "Executions" [ stateTransformation="DSL:|transform('JSONPATH','$.executions',input).replace(',','.').replace('./.','0')" ]
Type number : last "Last" [ stateTransformation="DSL:|transform('JSONPATH','$.last',input).replace(',','.').replace('./.','0')" ]
Type number : high "High" [ stateTransformation="DSL:|transform('JSONPATH','$.high',input).replace(',','.').replace('./.','0')" ]
Type number : low "Low" [ stateTransformation="DSL:|transform('JSONPATH','$.low',input).replace(',','.').replace('./.','0')" ]
Type number : close "Close" [ stateTransformation="DSL:|transform('JSONPATH','$.close',input).replace(',','.').replace('./.','0')" ]
}
// "DSL:|transform(\"JSONPATH\",\"$.executions\",input).replace(\",\",\".\")" ] // 1. Möglichkeit
// "DSL:|transform('JSONPATH','$.executions',input).replace(',','.')" ] // 2. Möglichkeit
Code: Alles auswählen
var retval = (json).replace(",",".").replace('./.','0');
Funktioniert, dankepeter-pan hat geschrieben: ↑23. Jan 2024 12:10 Die Fehlermeldung kann ich nicht so richtig interpretieren, aber hängt wohl mit json.high.replace zusammen. Hast du schon malprobiert ? (ohne Gewähr)Code: Alles auswählen
var retval = (json).replace(",",".").replace('./.','0');
...das replace funktioniert normalerweise schon. Es kommt halt auf den Ausreisser an.
Code: Alles auswählen
(function(i){
var retval = parseFloat(i.replace(",",".").replace('./.','0'));
return retval;
})(input)
Code: Alles auswählen
Thing http:url:kurs1 "Mercedes-Benz Group AG" [
baseURL="https://www.tradegate.de/refresh.php?isin=DE0007100000", // DE0007100000
refresh=3600 ] {
Channels:
Type number : bid2 "Bid" [ stateTransformation="JSONPATH:$.bid∩JS:comma2dot.js"]
Type number : ask2 "Ask" [ stateTransformation="JSONPATH:$.ask∩JS:comma2dot.js"]
Type number : bidsize2 "Bid Size" [ stateTransformation="JSONPATH:$.bidsize∩JS:comma2dot.js"]
Type number : asksize2 "Ask Size" [ stateTransformation="JSONPATH:$.asksize∩JS:comma2dot.js"]
Type number : delta2 "Delta" [ stateTransformation="JSONPATH:$.delta∩JS:comma2dot.js"]
Type number : stueck2 "Stück" [ stateTransformation="JSONPATH:$.stueck∩JS:comma2dot.js"]
Type number : umsatz2 "Umsatz" [ stateTransformation="JSONPATH:$.umsatz∩JS:comma2dot.js"]
Type number : avg2 "AVG" [ stateTransformation="JSONPATH:$.avg∩JS:comma2dot.js"]
Type number : executions2 "Executions" [ stateTransformation="JSONPATH:$.executions∩JS:comma2dot.js"]
Type number : last2 "Last" [ stateTransformation="JSONPATH:$.last∩JS:comma2dot.js"]
Type number : high2 "High" [ stateTransformation="JSONPATH:$.high∩JS:comma2dot.js"]
Type number : low2 "Low" [ stateTransformation="JSONPATH:$.low∩JS:comma2dot.js" ]
Type number : close2 "Close" [ stateTransformation="JSONPATH:$.close∩JS:comma2dot.js"]
}
Code: Alles auswählen
Number Kurs1_Bid "Angebot Preis" {channel="http:url:kurs1:bid2"}
Number Kurs1_Ask "Nachfrag Preis" {channel="http:url:kurs1:ask2"}
Number Kurs1_Bidsize "Angebot Menge" {channel="http:url:kurs1:bidsize2"}
Number Kurs1_Asksize "Nachfrage Menge" {channel="http:url:kurs1:asksize2"}
Number Kurs1_Delta "Delta" {channel="http:url:kurs1:delta2"}
Number Kurs1_Stueck "Stück" {channel="http:url:kurs1:stueck2"}
Number Kurs1_Umsatz "Umsatz" {channel="http:url:kurs1:umsatz2"}
Number Kurs1_Avg "Ø-Preis" {channel="http:url:kurs1:avg2"}
Number Kurs1_Executions "Executions" {channel="http:url:kurs1:executions2"}
Number Kurs1_Last "Letzter Preis" {channel="http:url:kurs1:last2"}
Number Kurs1_High "Höchster Preis" {channel="http:url:kurs1:high2"}
Number Kurs1_Low "Niedrigster Preis" {channel="http:url:kurs1:low2"}
Number Kurs1_Close "Schlusskurs" {channel="http:url:kurs1:close2"}
Code: Alles auswählen
"JSONPATH:$.close∩JS:comma2dot.js"
Ich 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:
Code: Alles auswählen
Executing transformation ChannelStateTransformation{pattern='$.executions', serviceName='JSONPATH'} failed: Invalid path '$.executions' in
Code: Alles auswählen
Type number : executions "Executions" [ stateTransformation="DSL:|transform('JSONPATH','$.executions',input).replace(',','.').replace('./.','0').replace('+','')" ]
und
Type number : executions2 "Executions" [ stateTransformation="JSONPATH:$.executions∩JS:comma2dot.js"]