Einbinden externer Live-Daten

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

majesticc89

Mitglied
8 Mai 2017
92
0
6
30
Zu der Frage "mit oder ohne Klammern" habe ein ein Fiddle gemacht:
Es tritt genau das ein, was zu erwarten ist: Mit Klammern funktioniert es ein Mal, weil die Funktion gleich aufgerufen wird, wenn der Timer mit setInterval angelegt wird. Übergeben wird hier nicht die Funktion bzw. deren Referenz sondern deren Rückgabewert der undefiniert ist, weil es in der Funktion keine return-Anweisung gibt.
Bei dem Fiddle funktioniert bei mir nichts :) Aber ich glaube ich weiß auf du hinaus möchtest, macht auch irgendwie Sinn, dass nicht die Funktion an sich übergeben wird.
Ich habe jetzt einmal alles übernommen und es funktioniert super. Auch habe ich mit async/await etwas komplett neues kennen gelernt, kannte ich überhaupt nicht. Ich danke euch beiden und hoffen den Rest packe ich selber. Ist jetzt einfach noch viel gecode unter anderem CSS Gestaltung.
 

majesticc89

Mitglied
8 Mai 2017
92
0
6
30
Ich verstehe es einfach nicht, egal was ich versuche. Ich habe alles identisch wie mit der anderen Funktion gemacht (So wie ihr es empfohlen habt). Aber es funktioniert nicht.
--> JSFIDDLE <--

var dayrevenue = (hash.valueAsNumber * 86400 * reward.valueAsNumber)/(4294967296 * diff.valueAsNumber);
Hier liegt der Fehler. Durch testen weiß ich auch das es an "reward.valueAsNumber und diff.valueAsNumber" liegt.

Ich hole wie in der anderen Funktion die Daten via getElemenetbyID und ordne ihnen eine var zu. Wieso kann ich mit dieser Var nicht dann nicht weiter rechnen?
 
Zuletzt bearbeitet:

Sempervivum

Senior HTML'ler
18 Oktober 2016
1.615
314
83
67
Mir ist das so zu kompliziert. Ich empfehle, zunächst diesen Code zu vereinfachen: Du verwendest für jede Währung einen eigenen API-Call obwohl bei jedem die selbe API abgefragt wird. Ändere das zunächst mal so:
Code:
apiCall = async () => {
  let res = await fetch('https://blockchain.info/ticker');
  let data = await res.json();
  document.getElementById("exchangecalc").value = data.USD['15m'];
  document.getElementById("btcusd").innerText = data.USD['15m'];
  document.getElementById("btceur").innerText = data.EUR['15m'];
  document.getElementById("btcgbp").innerText = data.GBP['15m'];
  // usw.
};

setInterval(apiCall, 1000);
 
  • Like
Reactions: majesticc89

majesticc89

Mitglied
8 Mai 2017
92
0
6
30
Mir ist das so zu kompliziert. Ich empfehle, zunächst diesen Code zu vereinfachen: Du verwendest für jede Währung einen eigenen API-Call obwohl bei jedem die selbe API abgefragt wird. Ändere das zunächst mal so:
Code:
apiCall = async () => {
  let res = await fetch('https://blockchain.info/ticker');
  let data = await res.json();
  document.getElementById("exchangecalc").value = data.USD['15m'];
  document.getElementById("btcusd").innerText = data.USD['15m'];
  document.getElementById("btceur").innerText = data.EUR['15m'];
  document.getElementById("btcgbp").innerText = data.GBP['15m'];
  // usw.
};

setInterval(apiCall, 1000);
Sollte ich einmal unterschiedliche setIntervall Zeiten einstellen wollen, muss ich dann doch einzelne APICalls erstellen. Der Code klappt ja nur, wenn alle synchron abgefragt werden sollen. Oder? (werde ich nicht machen, geht mir aber um das Grundverständniss)
 

majesticc89

Mitglied
8 Mai 2017
92
0
6
30
Ich habe den APICall abgeändert.
--> JSFIDDLE <--
habe weiter mit den var gespielt aber egal was ich versuche, irgendwo steckt der Wurm drin. Es funktioniert wie erwähnt alles, bis ich die hash & diff var einfüge. Irgendwie scheint es, dass ich die ".value", die via API auf die ID gelegt ist, gar nicht erst hole bzw falsch. Aber ich verstehe nicht wo.
Auch sollte der Dollar Preis bei Energy in BTC umgerechnet werden.
<Betrag> / actuellem BTC Kurs. Das klappt auch nicht, selbes Problem...
 

Sempervivum

Senior HTML'ler
18 Oktober 2016
1.615
314
83
67
Ich sehe in der Funktion revenue zwei Fehler:
Code:
        function revenue() {
            var hash = document.getElementById("hashcalc"),
                diff = document.getElementById("difficulty"),
                reward = document.getElementById("blockreward");
            var dayrevenue = (hash.valueAsNumber * 86400 * reward.valueAsNumber) / (4294967296 * diff.valueAsNumber);

            dayrevenue = dayrevenue.toFixed(2);
            document.getElementById("revday").value = dayrevenue;

        }
reward und diff sind keine Eingabefelder, daher funktioniert valueAsNumber hier nicht. Verwende z. B. parseFloat().
 

majesticc89

Mitglied
8 Mai 2017
92
0
6
30
Wenn ich parsefloat verwende:


function revenue() {
var hash = document.getElementById("hashcalc"),
diff = document.getElementById("difficulty"),
reward = document.getElementById("blockreward");
var dayrevenue = (hash.valueAsNumber * 86400 * parseFloat(reward.value) )/(4294967296 * parseFloat(reward.value) );

dayrevenue = dayrevenue.toFixed(2);
document.getElementById("revday").value = dayrevenue;

}


löst es das Problem auch nicht. Nach wie vor wird mir nichts angezeigt
 
Zuletzt bearbeitet:

majesticc89

Mitglied
8 Mai 2017
92
0
6
30
Du wendest parseFloat falsch an, so ist es richtig: parseFloat(reward.innerText)
das habe ich mit "value" und mit "innerhtml" und "innerText" ausprobiert.
var dayrevenue = (hash.valueAsNumber * 86400 * parseFloat(reward.innerText) )/(4294967296 * parseFloat(diff.innerText)); funktioniert immer noch nicht.
var dayrevenue = (hash.valueAsNumber * 86400); hingegen wird berechnet

**** UPDATE: Funktioniert doch! Lag daran, dass es nur bei viele Nachkommastellen angezeigt wird. Formatierung falsch. Danke sehr.
 
Zuletzt bearbeitet:

Sempervivum

Senior HTML'ler
18 Oktober 2016
1.615
314
83
67
Ich hatte es mit innerText getestet, aber mit innerHTML funktioniert es auch, jedoch nur, wenn Du das "HTML" darin groß schreibstg.
 

majesticc89

Mitglied
8 Mai 2017
92
0
6
30
Letzte Frage:
Der Rechner funktioniert soweit wie er soll.
--> HIER: JSFIDDLE <--

Wie bekomme ich es den hin, dass sobald der "Net Profit" ins Negative geht, die "Fee" bei 0 bleibt und nicht auch ins Negative geht (dazu einfach die Energy Consumption höher als die Hashrate stellen).
 

Sempervivum

Senior HTML'ler
18 Oktober 2016
1.615
314
83
67
Einfach abfragen, ob der Wert kleiner als Null ist und wenn ja auf Null setzen:
Code:
        var dayfee  = parseFloat(dnet.innerText) * ( fee.valueAsNumber / 100 );
        if (dayfee < 0) dayfee = 0;
 
Werbung:

Latest posts