NEWS
Kontostand in VIS - Ideen dazu
-
Irgendwie scheint das bei mir mit der Nutzerkennung nicht richtig zu funktionieren:
https://www.comdirect.de/pbl/service/su … o?faqId=99 ` Leider kann ich dir da nicht weiter helfen, schlechte/keine Fehleberschreibung.
Das Script gibt dann einen Wert direkt aus den ich wo sehe? ` Im Log, ersetze "console.log" durch "setState" mit der Objekt ID in die du es schreiben willst.
Ich seh gerade das ich nicht das erste Konto sondern das zweite abgefragt hab, du musst folgenden Zeile verwenden:
// 4\. Kontoumsätze für das 1\. Konto(client.konten[0]) laden client.MsgGetSaldo(client.konten[0].sepa_data,function(error2,rMsg,data){
-
Ok, danke bisher für deine Hilfe.
Ich bekomme jetzt die Daten in einen Datenpunkt geschrieben.
Aber offensichtlich ist das die gesamte Buchungsübersicht (Kontoauszug) der letzten 90 Tage.
Ich denke jetzt muss ich noch tüfteln um den Kontostand alleine zu extrahieren.
Edit:
Sorry,
ich hatte noch Teile des alten scripts drin und nicht umgeschrieben.
Jetzt scheint es zu funktionieren.
-
So,
ich bekomme jetzt folgende Liste
{"desc":"Girokonto","cur":"EUR","saldo":{"soll_haben":"H","buchungsdatum":"2018-09-30T19:22:06.000Z","currency":"EUR","value":xxxx.11},"saldo_vorgemerkt":null,"credit_line":null,"avail_amount":null,"used_amount":null,"overdraft":null,"booking_date":null,"faelligkeit_date":null}
Jetzt geht es an die Auswertung.
Mir schwebt ein Button vor der beim Drücken das Script startet und dann den Wert aus "soll_haben" und "Value" anzeigt.
Hat jemand eine Idee zur weiteren Vorgehensweise?
Als Schalter für das Script kann ich ja vermutlich das Objekt unter "javascrip.0.scriptEnabled.XXXX"verwenden. Wenn ich das auf True oder False setze wird doch das Script geschaltet wenn ich das richtig verstehe, oder?
Bei der Tabelle brauche ich wirklich Hilfe, weil ich ehrlich gesagt noch nie mit einer JSON Tabelle gearbeitet habe. Wie wäre da das passende Vorgehen? Oder lässt sich das auch in einem Widget direkt darstellen?
Bitte verzeiht meine vielleicht blöden Fragen, aber ich habe das nie gelernt und bringe mir das seit längerem selber bei.
-
Bitte verzeiht meine vielleicht blöden Fragen, aber ich habe das nie gelernt und bringe mir das seit längerem selber bei. ` Kein Stress ich lerne das schon seit 3 Jahren in Eigenregie, das dauert einfach.
Wenn du mein Skript 1:1 übernommen hast solltest du direkt das Saldo, also den Kontostand bekommen.
s Schalter für das Script kann ich ja vermutlich das Objekt unter "javascrip.0.scriptEnabled.XXXX"verwenden. Wenn ich das auf True oder False setze wird doch das Script geschaltet wenn ich das richtig verstehe, oder? ` Vollkommen richtig.
Bei der Tabelle brauche ich wirklich Hilfe, weil ich ehrlich gesagt noch nie mit einer JSON Tabelle gearbeitet habe. Wie wäre da das passende Vorgehen? Oder lässt sich das auch in einem Widget direkt darstellen? ` Bei VIS kann ich dir nicht weiterhelfen, aber bei JSON schon.
let meinJSON = {"desc":"Girokonto","cur":"EUR","saldo":{"soll_haben":"H","buchungsdatum":"2018-09-30T19:22:06.000Z","currency":"EUR","value":xxxx.11},"saldo_vorgemerkt":null,"credit_line":null,"avail_amount":null,"used_amount":null,"overdraft":null,"booking_date":null,"faelligkeit_date":null}; log(meinJSON['desc']); //liefert den Wert von desc in diesem Fall Girokonto
EDIT: Ich hab damit angefangen das ganze in einen Adapter zu Gießen.
-
Danke
Du meinst dann so:
let meinJSON = {"desc":"Girokonto","cur":"EUR","saldo":{"soll_haben":"H","buchungsdatum":"2018-09-30T19:22:06.000Z","currency":"EUR","value":xxxx.11},"saldo_vorgemerkt":null,"credit_line":null,"avail_amount":null,"used_amount":null,"overdraft":null,"booking_date":null,"faelligkeit_date":null}; log(meinJSON['soll_haben']); log(meinJSON['value'])
Wie kann ich die Werte weiter verwenden?
In einen Datenpunkt schreiben?
Hast du da einen Ansatz wie das gehen würde?
Leider ist der ioBroker nicht das Einzige Projekt. Ich arbeite mich zeitgleich in Abisco ein.
So langsam werde ich zu alt für den Sch…
-
@Jey Cee:EDIT: Ich hab damit angefangen das ganze in einen Adapter zu Gießen. `
Oha! Das wäre ja eine perfekte Lösung.
-
Ob das eine Perfekte Lösung wird weiss ich nicht, aber es soll eine brauchbare werden.
Das ist meine Wochenaufgabe
Zu deinem Thema: Leg dir Objekte an und schreib dann die Werte mit setState dort rein, dann kannst du sie Global verwenden.
Gesendet von meinem m8 mit Tapatalk
-
Das Script sieht bisher so aus:
var FinTSClient = require("open-fin-ts-js-client"); var state = "javascript.0.Allgemein.Kontostand"/*Kontostand*/; var count = "javascript.0.Allgemein.KontoSumme"/*KontoSumme*/; var pre = "javascript.0.Allgemein.KontoS_H"/*KontoS_H*/; // 1\. Definition der Bankenliste - Echte URLs sind hier http://www.hbci-zka.de/institute/institut_auswahl.htm erhältlich. var bankenliste = { '20041155':{'blz':20041155,'url':"https://fints.comdirect.de/fints"}, "undefined":{'url':""} }; // 2\. FinTSClient anlegen // BLZ: xxxxxxxx // Kunden-ID/Benutzerkennung: xxxxxxxx // PIN: xxxxxxxx // Bankenliste siehe oben var client = new FinTSClient(xxxxxxxx,"xxxxxxxx","xxxxxxxx",bankenliste); // 3\. Verbindung aufbauen client.EstablishConnection(function(error){ if(error){ console.log("Fehler: "+error); }else{ console.log("Erfolgreich Verbunden"); // 4\. Kontoumsätze für das 1\. Konto(client.konten[0]) laden client.MsgGetSaldo(client.konten[0].sepa_data,function(error2,rMsg,data){ if(error){ console.log("Fehler beim laden der Umsätze: "+error2); }else{ // Alles gut // 4\. Umsätze darstellen setState(state,JSON.stringify(data)); setState(count,['value']) setState(pre ,['soll_haben']) // 5\. Verbindung beenden client.MsgEndDialog(function(error,recvMsg2){ // 6\. Secure Daten im Objekt aus dem Ram löschen client.closeSecure(); console.log("ENDE"); }); } }); } });
Allerdings werden die beiden Datenpunkte nicht gefüllt. Muss ich den noch irgendwie anders abgreifen?
-
Count und pre?
Da fehlt doch dein JSON.
data['value']
Gesendet von meinem m8 mit Tapatalk
-
Hi Jey Cee
Hab mal versucht Deine Änderung ins Script von Chaot einzufügen aber irgendwie klappt das nicht
var FinTSClient = require("open-fin-ts-js-client"); var state = "javascript.0.Allgemein.Kontostand"/*Kontostand*/; var count = "javascript.0.Allgemein.KontoSumme"/*KontoSumme*/; var pre = "javascript.0.Allgemein.KontoS_H"/*KontoS_H*/; // 1\. Definition der Bankenliste - Echte URLs sind hier http://www.hbci-zka.de/institute/institut_auswahl.htm erhältlich. var bankenliste = { '74261024':{'blz':74261024,'url':"https://hbci11.fiducia.de/cgi-bin/hbciservlet"}, "undefined":{'url':""} }; // 2\. FinTSClient anlegen // BLZ: xxxxxxxx // Kunden-ID/Benutzerkennung: xxxxxxxx // PIN: xxxxxxxx // Bankenliste siehe oben var client = new FinTSClient(xxxxxxxx,"xxxxxxxx","xxxxxxxx",bankenliste); // 3\. Verbindung aufbauen client.EstablishConnection(function(error){ if(error){ console.log("Fehler: "+error); }else{ console.log("Erfolgreich Verbunden"); // 4\. Kontoumsätze für das 1\. Konto(client.konten[0]) laden client.MsgGetSaldo(client.konten[0].sepa_data,function(error2,rMsg,data){ if(error){ console.log("Fehler beim laden der Umsätze: "+error2); }else{ // Alles gut // 4\. Umsätze darstellen setState(state,JSON.stringify(data)); setState(count,JSON.data['value']); setState(pre ,JSON.data['soll_haben']); // 5\. Verbindung beenden client.MsgEndDialog(function(error,recvMsg2){ // 6\. Secure Daten im Objekt aus dem Ram löschen client.closeSecure(); console.log("ENDE"); }); } }); } });
Da bekomme ich dann für die beiden Zeilen Fehler im Log.
Ich will eigentlich aus folgendem String ( erzeugt durch JSON.stringify(data) )
{"desc":"Kontokorrent","cur":"EUR","saldo":{"soll_haben":"H","buchungsdatum":null,"currency":"EUR","value":xxxxxxxx},"saldo_vorgemerkt":null,"credit_line":null,"avail_amount":null,"used_amount":null,"overdraft":null,"booking_date":null,"faelligkeit_date":null}
das soll_haben und value extrahieren und in einen Datenpunkt schreiben.
Kannst de mir da vielleicht weiterhelfen?
Gruß
Johnny
-
Wäre bedeutend einfacher zu helfen wenn du mir sagst welche Fehler angezeigt werden.
Gesendet von meinem m8 mit Tapatalk
-
Ich vermute mal das das extrahieren der Werte nicht klappt:
// 4\. Umsätze darstellen setState(state,JSON.stringify(data)); setState(stand,JSON.parse["value"]); setState(vorz ,JSON.parse["soll_haben"]);
Ich komme ehrlich gesagt auch nicht weiter, aber mit meiner Erkältung funktioniert das Hirn nicht so richtig.
-
Konnte es mittlerweile selber lösen
Hier mal mein Script
/* Script zum ermitteln Kontostand */ function CreateStates(){ createState('javascript.0.Allgemein.Kontostand-JSON', {read: true, write: true, name: 'GiroKonto - Kontostand JSON-String', desc: 'GiroKonto - Kontostand JSON-String'}); createState('javascript.0.Allgemein.KontoStand', {read: true, write: true, name: 'GiroKonto - Kontostand', desc: 'GiroKonto - Kontostand', unit: '€'}); createState('javascript.0.Allgemein.KontoS_H', {read: true, write: true, name: 'GiroKonto - Kontostand - Soll Haben', desc: 'GiroKonto - Kontostand - Soll Haben'}); } //CreateStates(); /* Zum erstmaligem Erstellen der Objekte auskommentieren */ var logging = false; /* logging aktivieren = true, deaktivieren = false */ var FinTSClient = require("open-fin-ts-js-client"); var state = "javascript.0.Allgemein.Kontostand-JSON"/*Kontostand im JSON-Format*/; var count = "javascript.0.Allgemein.KontoStand"/*Kontostand Summe*/; var pre = "javascript.0.Allgemein.KontoS_H"/*Kontostandvorzeichen Soll oder Haben*/; // 1\. Definition der Bankenliste - Echte URLs sind hier http://www.hbci-zka.de/institute/institut_auswahl.htm erhältlich. var bankenliste = { '74261024':{'blz':74261024,'url':"https://hbci11.fiducia.de/cgi-bin/hbciservlet"}, "undefined":{'url':""} }; // 2\. FinTSClient anlegen // BLZ: xxxxxxxx // Kunden-ID/Benutzerkennung: xxxxxxxx // PIN: xxxxxxxx // Bankenliste siehe oben var client = new FinTSClient(xxxxxxxx,"xxxxxxx","xxxxxxx",bankenliste); // 3\. Verbindung aufbauen client.EstablishConnection(function(error){ if(error){ if (logging) log("Fehler: "+error); }else{ if (logging) log("Erfolgreich Verbunden"); // 4\. Kontoumsätze für das 1\. Konto(client.konten[0]) laden client.MsgGetSaldo(client.konten[0].sepa_data,function(error2,rMsg,data){ if(error){ if (logging) log("Fehler beim laden der Umsätze: "+error2); }else{ // Alles gut // 4\. Umsätze darstellen var myJSON = JSON.stringify(data); var obj = JSON.parse(myJSON); var KtoS_H = obj.saldo.soll_haben; var KtoSumme = obj.saldo.value; if (logging) log('Kontostand: ' + KtoS_H + ' - '+ KtoSumme + ' € '); setState(state,myJSON); setState(count,KtoSumme); setState(pre,KtoS_H); // 5\. Verbindung beenden client.MsgEndDialog(function(error,recvMsg2){ // 6\. Secure Daten im Objekt aus dem Ram löschen client.closeSecure(); if (logging) log("ENDE"); }); } }); } });
Gruß
Johnny
-
Ganz herzlichen Dank.
So funktioniert bei mir das Script auch.
-
Das freut mich das es bei dir jetzt auch klappt.
Jetzt muss ich mal kucken wie ich es umbauen kann das ich 4 Konten abrufen kann.
Gruß Johnny
-
Hast du schon eine Idee das in Vis einzubauen?
Mein aktuelles Problem ist das Script an sich. Wenn ich das starte läuft es ja dauernd. Der Kontostand wird einmal abgefragt und dann sollte das Script wieder ausgehen.
Derzeit nutze ich ein On/Off Widget um das Script aus der VIS zu steuern.
Aber langfristig werde ich mir wohl eine schönere Lösung einfallen lassen müssen.
Wenn ich wieder fit bin werde ich mal das Basteln etwas intensivieren.
Zu mehreren Konten:
Ich hätte jetzt mal so spontan ab
// 2\. FinTSClient anlegen
den ganzen folgende Block wiederholt mit eben den Daten des nächsten Kontos.
Bei mehreren Banken sollte dann auch die Bankenliste erweitert werden.
Ich werde mal bei mir versuchen (drei Konten bei einer Bank) den Abruf
// 4\. Kontoumsätze für das 1\. Konto(client.konten[0]) laden client.MsgGetSaldo(client.konten[0].sepa_data,function(error2,rMsg,data){
auf das nächste Konto zu erweitern:
// 4\. Kontoumsätze für das 1\. Konto(client.konten[1]) laden client.MsgGetSaldo(client.konten[1].sepa_data,function(error2,rMsg,data){
-
Was du probieren könntest ist ein weiteres Objekt anlegen als Trigger der das Script aktiviert und nach dem Durchlauf lässt du das Script im Script deaktivieren.
Ich hoffe du verstehst was ich da meine. Oder ne on Funktion die auf das Trigger Objekt reagiert.
Bzgl mehrerer Konten gibt es in der API von open-fin-ts-js-client n Beispiel für async Abgleich.
Das könnte evtl was sein. Muss ich mal bei Gelegenheit testen
Gruß Johnny
-
dank Prinz Eisenherz habe ich die Abfrage auch etwas eleganter gelöst:
Ich habe einen Datenpunkt erstellt den ich aus VIS mit einem "Toggle" Button ansteuere.
Da bei meinem Script egal ist in welchem Zustand der Datenpunkt verbleibt reicht ein einfaches Umschalten.
Damit wird dann das eigentliche Abfragescript für ein paar Sekunden aktiv geschaltet und die Abfrage der Kontostände erfolgt.
on({id: 'javascript.0.Allgemein.Abfrage', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; for (var count = 0; count < 1; count++) { setState("javascript.0.scriptEnabled.Nachrichten.Kontostand"/*scriptEnabled.Nachrichten.Kontostand*/, true); } setStateDelayed("javascript.0.scriptEnabled.Nachrichten.Kontostand"/*scriptEnabled.Nachrichten.Kontostand*/, false, 10000, false); });
Die Abfrage der weiteren Konten bei der gleichen Bank funktioniert soweit. Ein weiteres Konto bei einer anderen Bank ist noch nicht integriert, aber das sehe ich als nicht so wichtig derzeit.
-
Auf Ideen kommt ihr.
Unser Besuch würde es sicherlich ganz amüsant finden, wenn er die Kontostände auf unserem Wand-Tablet ablesen könnte.
Aber mal ehrlich. Dafür gibt es die finanzblick App. Die hat überdies den Vorteil, dass man sehr einfach und schnell die entsprechenden Buchungsvorgänge in das WISO Sparbuch für die Steuererklärung eingebunden bekommt.
Aber gut, jeder, wie er mag.
Bis dann,
Thorsten
-
Naja mein Gedanke war nicht den Kontostand auf dem Tablet anzuzeigen.
Ich erfasse den Heizölstand, Frage den durchschnittlichen Tages Preis ab und hab ein Konto wo nur das Geld fürs Heizöl liegt.
Damit wollte ich die mögliche Menge Heizöl ermitteln die ich bestellen kann.
Gesendet von meinem m8 mit Tapatalk