Aktienkurse

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Harka
Beiträge: 308
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Aktienkurse

Beitrag von Harka »

Moin,
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'))};
Bin seit ein paar Tagen am mit der JS-Transformationen rumexperimentieren :geek:

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Aktienkurse

Beitrag von peter-pan »

Harka hat geschrieben: 1. Feb 2024 18:32 Bin seit ein paar Tagen am mit der JS-Transformationen rumexperimentieren :geek:
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 :oops: :?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Harka
Beiträge: 308
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Aktienkurse

Beitrag von Harka »

im Prinzip (ich selbst arbeite mit der UI)

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'))};" ]
JS:|JSON.parse(input).executions entspricht JSONPATH:$.executions. In dem Inlinescript wird der zurückgegebene Wert in der Variable zwischengespeichert und mit typeof auf Existenz geprüft bevor die Weiterverarbeitung beginnt.
Ich kann Dir NICHT sagen ob ALLE Eventualitäten abgefangen werden, aber ein Schreibfehler in executions führt zu keinem Log-Fehler. In den Foren konnte ich bisher nur wenig Infos zu dieser Vorgehensweise finden. Möglicher weise ja sogar aus gutem Grund? Probiere es ruhig mal aus und mal schauen ob noch jemand was bzgl. für/wider beiträgt.

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Aktienkurse

Beitrag von peter-pan »

Harka hat geschrieben: 1. Feb 2024 19:44 Probiere es ruhig mal aus
Mach ich. Danke
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

TomW80
Beiträge: 69
Registriert: 7. Mai 2021 19:11
Answers: 0

Re: Aktienkurse

Beitrag von TomW80 »

TomW80 hat geschrieben: 30. Jan 2024 17:56
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:
Ich teste und werde berichten...
Aktuell hab ich keine Probleme mehr.
Danke!

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Aktienkurse

Beitrag von peter-pan »

TomW80 hat geschrieben: 8. Feb 2024 19:41 Aktuell hab ich keine Probleme mehr.
... eigentlich klappt das Ganze ja, aber ich "bastle" immer noch etwas an den "things".
Grund: Das Abfangen einer Fehlermeldung, wenn das JSON-Objekt ($.executions) nicht im JSON-String vorhanden ist.

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
}
Ich habe zwar das Modell von @Harka im Einsatz, aber ich bin immer noch am Testen, ob das evtl. auch noch anders geht.

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'))};" ]
Das erste Thing (DSL) ist an einen Thread aus dem Internationalen Forum (von Udo) angelehnt, das ich heute gefunden habe. Das zweite Thing (JS) ist von Harka.
Ich verstehe aber in beiden Beispielen, den Code noch nicht so ganz. :oops: :?:
Da die Fehlermeldungen nur sehr selten auftreten, dauert das natürlich (bei mir) bis ich mir wieder ein entsprechendes Testszenario "ausgedacht" habe (Halbwissen :lol: ).
Eigentlich mach ich ja gar nichts in dieser Richtung, aber irgendwie hat es mich gepackt, das "Problemchen" mittels einer DSL-Inline-Rule zu lösen.
Vielleicht bin aber auch auf dem Holzweg.

Bei der Version mit den "verketteten" Funktionen scheint es zu klappen.

Code: Alles auswählen

Type number : executions2 "Executions"  [ stateTransformation="JSONPATH:$.executions∩JS:comma2dot.js"]
Sollte ich (oder wer anders) etwas herausfinden, werde ich mich wieder melden.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Antworten