Seite 2 von 4

Re: Aktienkurse

Verfasst: 9. Jan 2024 19:20
von udo1toni
Ich verstehe nicht, warum man das überhaupt mit einem Script macht.
Thing für einen Kurs:

Code: Alles auswählen

Thing http:url:DE000BASF111 "DE000BASF111" [
    baseURL="https://www.tradegate.de/refresh.php?isin=DE000BASF111",
    refresh=60
 ] {
    Channels:
    Type number : bid        "Bid"        [ stateTransformation="JSONPATH:$.bid" ]
    Type number : ask        "Ask"        [ stateTransformation="JSONPATH:$.ask" ]
    Type number : bidsize    "Bid Size"   [ stateTransformation="JSONPATH:$.bidsize" ]
    Type number : asksize    "Ask Size"   [ stateTransformation="JSONPATH:$.asksize" ]
    Type number : delta      "Delta"      [ stateTransformation="JSONPATH:$.delta" ]
    Type number : stueck     "Stück"      [ stateTransformation="JSONPATH:$.stueck" ]
    Type number : umsatz     "Umsatz"     [ stateTransformation="JSONPATH:$.umsatz" ]
    Type number : avg        "AVG"        [ stateTransformation="JSONPATH:$.avg" ]
    Type number : executions "Executions" [ stateTransformation="JSONPATH:$.executions" ]
    Type number : last       "Last"       [ stateTransformation="JSONPATH:$.last" ]
    Type number : high       "High"       [ stateTransformation="JSONPATH:$.high" ]
    Type number : low        "Low"        [ stateTransformation="JSONPATH:$.low" ]
    Type number : close      "Close"      [ stateTransformation="JSONPATH:$.close" ]
}
Items für einen Kurs:

Code: Alles auswählen

Number   DE000BASF111Bid          "Bid"          {channel="http:url:DE000BASF111:bid"}
Number   DE000BASF111Ask          "Ask"          {channel="http:url:DE000BASF111:ask"}
Number   DE000BASF111Bidsize      "Bid size"     {channel="http:url:DE000BASF111:bidsize"}
Number   DE000BASF111Asksize      "Ask size"     {channel="http:url:DE000BASF111:asksize"}
Number   DE000BASF111Delta        "Delta"        {channel="http:url:DE000BASF111:delta"}
Number   DE000BASF111Stueck       "Stück"        {channel="http:url:DE000BASF111:stueck"}
Number   DE000BASF111Umsatz       "Umsatz"       {channel="http:url:DE000BASF111:umsatz"}
Number   DE000BASF111Avg          "Avg"          {channel="http:url:DE000BASF111:avg"}
Number   DE000BASF111Executions   "Executions"   {channel="http:url:DE000BASF111:executions"}
Number   DE000BASF111Last         "Last"         {channel="http:url:DE000BASF111:last"}
Number   DE000BASF111High         "High"         {channel="http:url:DE000BASF111:high"}
Number   DE000BASF111Low          "Low"          {channel="http:url:DE000BASF111:low"}
Number   DE000BASF111Close        "Close"        {channel="http:url:DE000BASF111:close"}
Ich hab keine Ahnung von Aktien,welche der werte interessant sind oder nicht :) ;am legt für jede Aktie ein Thing an, welches dann die Daten alle <refresh> Sekunden abruft.
Wenn nur einer der Werte interessiert, könnte man die baseURL auch um den Namen kürzen und diesen stattdessen über die stateExtension im Channel setzen, das sollte ebenfalls funktionieren, dann wäre das Thing halt für alle Aktienkurse und pro Wert ein Channel, in der gewählten Form kann man halt die unterschiedlichen Eigenschaften immer mit den identischen Channelnamen abgreifen.

Ansonsten: Der korrekte JSONPath lautet $.bid, es braucht hier weder eckige Klammern noch sollte man das $-Zeichen unterschlagen, welches für den Ursprung steht.

Re: Aktienkurse

Verfasst: 9. Jan 2024 23:55
von TomW80
Hallo udotoni,

geht so leider auch nicht, da erhalte ich den Fehler:
2024-01-09 23:53:56.845 [WARN ] [.transform.SingleValueTransformation] - Transformation service JSONPATH for pattern $.bid not found!

Re: Aktienkurse

Verfasst: 10. Jan 2024 00:32
von udo1toni
Dann hast Du JSONPATH nicht installiert.

Re: Aktienkurse

Verfasst: 10. Jan 2024 09:24
von TomW80
:roll:
Ja, nach der Installation geht es nun. Danke

Re: Aktienkurse

Verfasst: 10. Jan 2024 12:05
von peter-pan
Hab das grad mal installiert, wie von Udo beschrieben und funktioniert auf Anhieb. Allerdings hab ich den Refresh auf "3600" gesetzt. Einmal pro Stunde reicht mir "dicke". Bin ja kein Trader. :lol: ;)

Re: Aktienkurse

Verfasst: 15. Jan 2024 17:26
von TomW80
Habt Ihr auch das Problem dass bei euch der Kurs gelegentlich einen falschen Wert annimmt?
Aktienkurs.png

Re: Aktienkurse

Verfasst: 16. Jan 2024 10:39
von guinnes
TomW80 hat geschrieben: 15. Jan 2024 17:26 Habt Ihr auch das Problem dass bei euch der Kurs gelegentlich einen falschen Wert annimmt?
Ja. Von daher macht das übertragen der Werte über eine Rule Sinn, da kann man das abfangen

Re: Aktienkurse

Verfasst: 16. Jan 2024 13:35
von peter-pan
Das Phänomen habe ich gerade auch bei mir bemerkt. Da hatte das Item den Wert 360 statt 3.60.

Bei der Auflösung des Json-Strings habe ich dann gesehen, dass dieser den Wert 3,60 enthielt.

Code: Alles auswählen

avg	3.5155
executions	141
last	3.535
high	"3,60"
low	3.475
close	3.64
Es müsste halt geprüft werden, ob hier ein Komma drin ist und dann ggf. in einen Punkt umgewandelt werden. Das geht vielleicht auch ohne Rule. Ich weiss im Moment nur (noch) nicht wie :? :oops: . :roll:
Jemand eine Idee, bevor ich selber drauf komme ? :idea: ;)

Re: Aktienkurse

Verfasst: 16. Jan 2024 14:17
von udo1toni
Direkt wird das etwas schwierig, mit einer Script Transformation ist es aber kein Ding. Ich mache das hier jetzt mit DSL, weil ich 's kann (ab OH4...)

Code: Alles auswählen

Type number : bid "Bid" [ stateTransformation='DSL:|transform("JSONPATH","$.bid",input).replace(",",".")' ]
Geht natürlich auch mit JavaScript usw, Vorteil der Inline Variante ist hier natürlich, dass man nur ein Script benötigt (wobei man inzwischen den JSON Path auch als Variable an ein per UID erreichbares Script übergeben könnte :)

Ich habe das jetzt nicht getestet :) falls es Probleme mit den einfachen Anführungszeichen gibt, wäre eine mögliche Alternative, die Anführungszeichen andersrum zu verwenden (äußere Anführungszeichen doppelt, innere Anführungszeichen einfach), oder zur Nor die inneren Anführungszeichen mit \ zu escapen, das macht es aber schwerer lesbar, weshalb ich hier darauf verzichte.

Re: Aktienkurse

Verfasst: 16. Jan 2024 18:07
von peter-pan
...ja, so habe ich das gedacht. Super 👍 👍
Kleine Ergänzung - Ein Anführungszeichen vor JSONPATH"

Code: Alles auswählen

so ...
Type number : high  "High" [ stateTransformation="DSL:|transform(\"JSONPATH\",\"$.high\",input).replace(\",\",\".\")" ]
oder so...
Type number : high  "High" [ stateTransformation="DSL:|transform('JSONPATH','$.high',input).replace(',','.')" ]