Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Frage: function array zurückgeben, bzw. request(

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Frage: function array zurückgeben, bzw. request(

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
20 Beiträge 7 Kommentatoren 5.0k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ruhr70R Offline
    ruhr70R Offline
    ruhr70
    schrieb am zuletzt editiert von
    #1

    Ach ja, ich häng mal wieder an einem einfachem Problem.

    Die Funktion kursLesen() soll ein Array nach einem request() zurückgeben.

    Nun wird diese Funktion von einer anderen Funktion leseAktienkurse () aufgerufen.

    In dem Log in kursLesen() stehen alle gewünschten Aktienkurse. In dem Log der 2. Funktion steht immer nur ein leerer Eintrag, je abgefragte Aktie.

    Das Return in der ersten Funktion ist in diversen Versuchen nun nach unten gewandert. Vorher gab es immer ein undefined.

    Mir ist nicht ganz klar, wo das Problem liegt. An der Art und Weise, wie request() arbeitet oder an meinem Verständnis, wie ich ein Array aus einer Funktion zurückgebe.

    Ein kurzer Tipp wäre nett ;-)

    `function kursLesen (aktie) {
        var arr = [];
        var url = "http://de.finance.yahoo.com/d/quotes.csv?s=" + aktie + "&f=snl1t1p2x";
        request(url, function (err, state, body){
            if (body) {
                //body.replace(/\n|\r/g, "");
                body = body.substring(0,body.length-2);                             // Zeilenumbruch am Ende entfernen
                body = body + "," + '"' + formatDate(new Date(),dateFormat) + '"' ; // und den String um das aktuelle Abfragedatum ergänzen
                arr = body.split(",");
                log("Aktie: " + arr,"info");    
            } else {
                log("Keine Aktienkurse gelesen");  
            }
        });
        return arr;
    }
    
    function leseAktienkurse () {
        var aktie = [];
        for (i = 0; i < aktien.length; i++) {
            aktie = kursLesen(aktien[i]);
            log(aktie);
        }
    }` 
    
    Anbei noch, wie das Ergebnis im Log aussieht:
    
    `~~[code]~~javascript-0	2015-07-24 21:22:45	info	script.js.Aktienkurse: Aktie: "XXX",N/A,N/A,N/A,N/A,N/,"2015.07.24 21:22"
    javascript-0	2015-07-24 21:22:45	info	script.js.Aktienkurse: Aktie: "^GDAXI","DAX",11347.45,"5:45pm","-1.43%","GER,"2015.07.24 21:22"
    javascript-0	2015-07-24 21:22:45	info	script.js.Aktienkurse: Aktie: "DAI.DE","DAIMLER N",81.89,"5:35pm","-2.19%","GER,"2015.07.24 21:22"
    javascript-0	2015-07-24 21:22:45	info	script.js.Aktienkurse: Aktie: "DTE.DE","DEUTSCHE TELEKOM N",16.85,"5:35pm","-0.53%","GER,"2015.07.24 21:22"
    javascript-0	2015-07-24 21:22:45	info	script.js.Aktienkurse: Aktie: "AAPL","Apple Inc.",124.565,"3:07pm","-0.475%","NMS,"2015.07.24 21:22"
    javascript-0	2015-07-24 21:22:45	info	script.js.Aktienkurse: Aktie: "DTE.F","DEUTSCHE TELEKOM N",16.800,"7:39pm","-0.297%","FRA,"2015.07.24 21:22"
    javascript-0	2015-07-24 21:22:45	info	script.js.Aktienkurse: Aktie: "APC.DE","APPLE",114.15,"5:35pm","-1.13%","GER,"2015.07.24 21:22"
    javascript-0	2015-07-24 21:22:44	info	script.js.Aktienkurse: registered 1 subscription and 1 schedule
    javascript-0	2015-07-24 21:22:44	info	script.js.Aktienkurse:
    javascript-0	2015-07-24 21:22:44	info	script.js.Aktienkurse:
    javascript-0	2015-07-24 21:22:44	info	script.js.Aktienkurse:
    javascript-0	2015-07-24 21:22:44	info	script.js.Aktienkurse:
    javascript-0	2015-07-24 21:22:44	info	script.js.Aktienkurse:
    javascript-0	2015-07-24 21:22:44	info	script.js.Aktienkurse:
    javascript-0	2015-07-24 21:22:44	info	script.js.Aktienkurse:
    javascript-0	2015-07-24 21:22:44	info	Start javascript script.js.Aktienkurse
    [/code]`[/i]
    

    Adapter: Fritzbox, Unify Circuit
    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

    1 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2
      `function kursLesen (aktie, callback) {
          var arr = [];
          var url = "http://de.finance.yahoo.com/d/quotes.csv?s=" + aktie + "&f=snl1t1p2x";
          request(url, function (err, state, body){
              if (body) {
                  //body.replace(/\n|\r/g, "");
                  body = body.substring(0,body.length-2);                             // Zeilenumbruch am Ende entfernen
                  body = body + "," + '"' + formatDate(new Date(), dateFormat) + '"' ; // und den String um das aktuelle Abfragedatum ergänzen
                  arr = body.split(",");
                  log("Aktie: " + arr,"info");    
      			callback(null, aktie, arr);
              } else {
                  log("Keine Aktienkurse gelesen", "error");  
      			callback("Keine Aktienkurse gelesen", aktie);
              }
          });
      }
      
      function leseAktienkurse () {
          for (i = 0; i < aktien.length; i++) {
              kursLesen(aktien[i], function (err, arr, aktie) {
      				if (aktie) {
      					log(JSON.stringify(aktie));
      				}
      			}
      		});
          }
      }`
      request gibt einen Antwort asynchron.[/i]
      
      1 Antwort Letzte Antwort
      0
      • ruhr70R Offline
        ruhr70R Offline
        ruhr70
        schrieb am zuletzt editiert von
        #3

        Danke!

        Asynchron, … das macht mich noch fertig:-)

        Gesendet von iPhone mit Tapatalk

        Adapter: Fritzbox, Unify Circuit
        Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

        1 Antwort Letzte Antwort
        0
        • ruhr70R Offline
          ruhr70R Offline
          ruhr70
          schrieb am zuletzt editiert von
          #4

          Bei der 2. Funktion leseAktienkurse() schreibt der Editor von ioBroker/Scripte folgende Warnung:

          "don' t make functions within a loop"

          Darf ich das ignorieren?

          Adapter: Fritzbox, Unify Circuit
          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

          1 Antwort Letzte Antwort
          0
          • BluefoxB Offline
            BluefoxB Offline
            Bluefox
            schrieb am zuletzt editiert von
            #5

            @ruhr70:

            Bei der 2. Funktion leseAktienkurse() schreibt der Editor von ioBroker/Scripte folgende Warnung:

            "don' t make functions within a loop"

            Darf ich das ignorieren? `
            Das ist eine Empfehlung. Wenn man das nicht versteht, dann ist das sichere Fehlerquelle. Es sollte so aussehen:

            `function leseAktienkursEnde(err, arr, aktie) {
                  if (aktie) {
                      log(JSON.stringify(aktie));
                  }
            }
            function leseAktienkurse () {
                for (i = 0; i < aktien.length; i++) {
                    kursLesen(aktien[i], leseAktienkursEnde);
                }
            }`
            
            Ich verstehe was ich mache. Ich erlaube mir das zu ignorieren  :lol:[/i]
            
            1 Antwort Letzte Antwort
            0
            • ruhr70R Offline
              ruhr70R Offline
              ruhr70
              schrieb am zuletzt editiert von
              #6

              OK, ich gehöre definitv zu denen, die das nicht verstehen :? :lol:

              Die Warnung ist weg. Das Konstrukt verstehe ich allerdings noch nicht wirklich (mit dem Thema Callback muss ich mich noch beschäftigen).

              Im weiterem Verlauf des Scriptes wird mich ann das Thema "asynchron" wahrscheinlich auch wieder einholen, wenn ich die Funktion leseAktienkurse() aufrufe oder?

              Und dann muss ich mir auch noch folgendes anschauen:

              das Array mit den abgefragten Aktienkursen sieht ja wie folgt aus:

               "DAI.DE","DAIMLER N",81.89,"5:35pm","-2.19%","GER,"2015.07.26 08:10"
              
              

              Warum macht denn

              log(JSON.stringify(aktie));
              

              Folgendes daraus?

              ["\"DAI.DE\"","\"DAIMLER N\"","81.89","\"5:35pm\"","\"-2.19%\"","\"GER","\"2015.07.26 08:10\""]
              
              

              Das " ist wahrscheinlich, um Anführungszeichen darzustellen. Das JSON Format müsste doch auch ohne diese "Ergänzung" gültig sein oder?

              Adapter: Fritzbox, Unify Circuit
              Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

              1 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #7

                Hochkomma gehört zu String. Deswegen es ist "escaped" (So heißt es, wenn \ vorne steht).

                Du brauchst eigentlich Hochkomma nicht, deswegen kannst du dann die Entfernen und es wird wie erwartet aussehen:

                for (var a = 0; a < aktie.length; a++) {
                    aktie[a] = aktie[a].replace(/"/g, ''); // oder aktie[a].substring(1, aktie[a].length - 1);
                }
                log(JSON.stringify(aktie));
                
                
                1 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  pix
                  schrieb am zuletzt editiert von
                  #8

                  Hallo,

                  ich mir mal das Aktienskript hier raus genommen :-D

                  ich brauche eigentlich nicht mein Depot mit der Haussteuerung zu beobachten, aber für die Anzeige in VIS sind manche Werte doch ganz nett.

                  Zuerst hatte ich Bluefox' Skript mit einem Wert (AAPL) genutzt. Das läuft immer noch wunderbar. Jetzt habe ich aber doch Blut geleckt,wollte mehr sehen und habe mir die Schnipsel von oben zusammengebaut. Derzeit speichere ich aber nur den DAX und dessen Tendenz in jeweils einer Variable. Ich habe den Eindruck, das mache ich recht umständlich.

                  `// ########### Kurse abfragen (mehrere Aktien im Array (Test)) ###############
                  createState('Aktien.DAX', {val: 0, ack: true, name: 'Deutscher Aktien Index DAX'/*, unit: 'Punkte'*/});
                  createState('Aktien.DAX.Tendenz', {val: 0, ack: true, name: 'DAX Tendenz', unit: '%'});
                  
                  var aktien = ["AAPL","^GDAXI","PSM.DE","ALV.DE"]; // Apple, Dax, ProSieben, Allianz weitere (https://de.finance.yahoo.com/q/cp?s=%5EGDAXI)
                  
                  function KursEinlesen (aktie, callback) {
                      var arr = [];
                      var url = "http://de.finance.yahoo.com/d/quotes.csv?s=" + aktie + "&f=snl1t1p2x";
                      request(url, function (err, state, body){
                          if (body) {
                              //body.replace(/\n|\r/g, "");
                              body = body.substring(0,body.length-2);                             // Zeilenumbruch am Ende entfernen
                              body = body + "," + '"' + formatDate(new Date()/*, dateFormat*/) + '"' ; // und den String um das aktuelle Abfragedatum ergänzen
                              arr = body.split(",");
                              log("Aktie: " + arr,"info");    
                           callback(null, aktie, arr);
                          } else {
                              log("Keine Aktienkurse gelesen", "error");  
                           callback("Keine Aktienkurse gelesen", aktie);
                          }
                      });
                  }
                  
                  function leseAktienkursEnde(err, arr, aktie) {
                      if (aktie) {
                          for (var a = 0; a < aktie.length; a++) {
                             aktie[a] = aktie[a].replace(/"/g, ''); // oder aktie[a].substring(1, aktie[a].length - 1);
                          }
                          // log(JSON.stringify(aktie));
                          // eingeschoben: Dax rausfiltern und speichern
                          if (aktie.toString().match('DAX')) { // wenn der Wert DAX enthält
                              var dax = aktie.toString().split(","); // dann Teilen
                              setState('javascript.0.Aktien.DAX', dax[2]); // Wert nach drittem Komma abspeichern
                              setState('javascript.0.Aktien.DAX.Tendenz', dax[4].slice(0,dax[4].indexOf('%')) ); // Pos 0- Prozentzeichen
                              log('Dax ' + dax[2] + ' [' + dax[4] + '] gespeichert');
                          } else {
                              // log('Aktie/Index eingelesen, aber nicht gespeichert');
                          }
                  
                      }
                  }
                  
                  function leseAktienkurse () {
                      for (i = 0; i < aktien.length; i++) {
                          KursEinlesen(aktien[i], leseAktienkursEnde);
                      }
                  }
                  
                  leseAktienkurse(); // weiter unten auch per Cron` 
                  
                  In VIS siehts so aus
                  
                  >! ~~[spoiler]~~ ![261_bildschirmfoto_2015-07-30_um_20.23.12.jpg](/assets/uploads/files/261_bildschirmfoto_2015-07-30_um_20.23.12.jpg) [/spoiler]
                  
                  Wie macht ihr das?
                  
                  Und zweitens: wo ist _~~[i]~~dateFormat[/i]_ definiert? 
                  
                  Gruß
                  
                  Pix[/i]
                  

                  ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                  1 Antwort Letzte Antwort
                  0
                  • ruhr70R Offline
                    ruhr70R Offline
                    ruhr70
                    schrieb am zuletzt editiert von
                    #9

                    Hi Pix,

                    dateFormat ist nur eine Variable am Anfang des Scripts, mit dem Das Ausgabeformat des Datums definiert wird, so wie es die Adaper-Funktion formatDate() verlangt.

                    Das ganze Script hier:

                    ! ```
                    // Aktienkurse bei Yahoo Finance abfragen // // ! createState('aktienkurse.kursApple', 0, {name: "Aktienkurs Apple in Dollar", unit: '/r>}); createState('aktienkurse.kursDaimler', 0, {name: "Aktienkurs Daimler in EUR", unit: '€'}); //createState('aktienkurse.kursApple', 0); ! createState('aktienkurse.kursTrigger', false); // auf true (z.B. über VIS), Kurse werden direkt aktualisiert ! // Konfiguation: // ----------------------------------------------------------------------------- // gewünschte Aktien in Yahoo Notation (DAI.DE - Daimler Xetra) als String mit Komma getrennt ! var aktien = ["AAPL","APC.DE","DAI.DE","DTE.DE","DTE.F","^GDAXI","XXX"]; ! var aktienCron; //aktienCron = '0 * * * *'; // Aktualisiere die Aktienkurse einmal in der Stunde aktienCron = '*/10 * * * *'; // Aktualisiere die Aktienkurse alle 10 Minuten ! var dateFormat = "JJJJ.MM.TT SS:mm"; // Datumsformat, wann die Kurse abgefragt wurden ! // Datenfelder, die über Yahoo abgefragt werden // -------------------------------------------- // // eine Bescreibung der möglichen Datenfelder findet man unter: // http://brusdeylins.info/tips_and_tricks/yahoo-finance-api/ // http://www.jarloo.com/yahoo_finance/ // // snl1t1p2x // // s Symbol // n Name // l1 Last Trade (Price Only) // t1 Last Trade Time // p2 Change in Percent // x Stock Exchange ! // Variablen im Script // ------------------- var request = require('request'); ! /* function kursLesen (aktie) { var arr = []; var url = "http://de.finance.yahoo.com/d/quotes.csv?s=" + aktie + "&f=snl1t1p2x"; request(url, function (err, state, body){ if (body) { //body.replace(/\n|\r/g, ""); body = body.substring(0,body.length-2); // Zeilenumbruch am Ende entfernen body = body + "," + '"' + formatDate(new Date(),dateFormat) + '"' ; // und den String um das aktuelle Abfragedatum ergänzen arr = body.split(","); log("Aktie: " + arr,"info"); } else { log("Keine Aktienkurse gelesen"); } }); return arr; } ! function leseAktienkurse () { var aktie = []; for (i = 0; i < aktien.length; i++) { aktie = kursLesen(aktien[i]); log(aktie); } } */ ! function kursLesen (aktie, callback) { var arr = []; var url = "http://de.finance.yahoo.com/d/quotes.csv?s=" + aktie + "&f=snl1t1p2x"; request(url, function (err, state, body){ if (body) { //body.replace(/\n|\r/g, ""); body = body.substring(0,body.length-2); // Zeilenumbruch am Ende entfernen body = body + "," + '"' + formatDate(new Date(), dateFormat) + '"' ; // und den String um das aktuelle Abfragedatum ergänzen arr = body.split(","); log("Aktie: " + arr,"info"); callback(null, aktie, arr); } else { log("Keine Aktienkurse gelesen", "error"); callback("Keine Aktienkurse gelesen", aktie); } }); } ! function leseAktienkursEnde(err, arr, aktie) { if (aktie) { log(JSON.stringify(aktie)); } } function leseAktienkurse () { for (i = 0; i < aktien.length; i++) { kursLesen(aktien[i], leseAktienkursEnde); } } ! /* function leseAktienkurse () { for (i = 0; i < aktien.length; i++) { kursLesen(aktien[i], function (err, arr, aktie) { if (aktie) { log(JSON.stringify(aktie)); } }); } } */ ! // Aktienkurse regelmässig aktualisieren schedule(aktienCron, function () { leseAktienkurse(); }); ! // Aktienkurs über einen Trigger-Datenpunkt direkt abrufen (z.B. über VIS ausgelöst) on('javascript.0.aktienkurse.kursTrigger', function (obj) { // BF: Falls ein Kommando und trigger ist true (was eigentlich überflüssig ist). Es kann kein Kommando mit false kommen if (!obj.newState.ack && obj.newState.val) { leseAktienkurse(); // Kurse sofort lesen } }); ! // Start Script: ! leseAktienkurse();
                    ! Das ist im Prinzip nicht mehr, als Du schon erstellt hast.
                    ! Das pausiert gerade, da hue für mich Priorität hat.
                    ! Ich mag Metro zwar nicht so, aber Deine Viewausschnitte sind doch immer genial. Kannst Du die nicht mal auf der Onlineplattform zur Verfügung stellen. ;-)
                    ! Im Prinzip sind die Aktienkurse eine Spielerei. Aber es muss ja nicht immer VIS sein. Ich habe iene Lichtsäule mit mehren hue Birnen drin. Eine Idee wäre die Entwicklung des Dax oder einzelner Aktien darin mit roten und grünen Farben darzustellen. Man kommt heim und sieht für eine Minute die Entwicklung der Börse. Morgens zeigen die Lampen dann farbig an, was der Wetterbericht sagt, ob es regnet (starker Regen = Tiefblau) oder wie die Temperatur wird (von blau bis rot).
                    298_pic.jpg
                    298_pic2.jpg [/i][/i][/i]

                    Adapter: Fritzbox, Unify Circuit
                    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                    1 Antwort Letzte Antwort
                    0
                    • P Offline
                      P Offline
                      pix
                      schrieb am zuletzt editiert von
                      #10

                      @ruhr70:

                      Kannst Du die nicht mal auf der Onlineplattform zur Verfügung stellen. `

                      Meine ganzen Views mag ich noch nicht veröffentlichen, aber hier mal das Widget:
                      261_bildschirmfoto_2015-08-01_um_02.24.04.jpg

                      ! ````
                      [{"tpl":"tplMetroTileString","data":{"visibility-cond":"==","visibility-val":1,"bg_class_true":"bg-transparent","bg_class_false":"bg-transparent","icon_class_true":"","icon_class_false":"","badge_bg_class_true":"","badge_bg_class_false":"","icon_badge_true":"","icon_badge_false":"","brand_bg_class_true":"","brand_bg_class_false":"","name":"Dax","visibility-oid":"","content_prepend":"Dax ({javascript.0.Aktien.DAX.Tendenz.lc;date(hh:mm)} Uhr)

                      !   ","content_append":"","content_oid":"javascript.0.Aktien.DAX","label_prepend":"","label_append":" %","label_id":"javascript.0.Aktien.DAX.Tendenz","state_oid":"javascript.0.Aktien.DAX.Tendenz_boolean","icon_width":"60%","hover":false,"transform":false,"icon_false":"/vis.0/main/img/boerse_white.png","icon_true":"/vis.0/main/img/boerse_white.png","icon_height":"38","icon_top":"41","icon_left":"57"},"style":{"left":"591px","top":"581px","width":"137px","height":"137px","z-index":"15","font-family":"","color":"","background":"rgba({r:javascript.0.Aktien.DAX.Tendenz_rot;t:javascript.0.Aktien.DAX.Tendenz;tr2},{g:javascript.0.Aktien.DAX.Tendenz_gruen;t:javascript.0.Aktien.DAX.Tendenz;gt2},0, {javascript.0.Aktien.DAX.Tendenz;pow;sqrt;})","padding":"","margin-left":""},"widgetSet":"metro"}]

                      
                      Meine Idee, basierend auf Deiner Idee mit den Hue Farben, war so: Ist die Tendenz negativ, wird das Widget rot, bei positiv grün. Eigentlich kein Problem. Es sollte aber immer roter werden, je schlechter die Tendenz ist und ebenso grüner bei guter Tendenz (RGB 0,255,0 bei >1% Wachstum; RGB 255,0,0 bei <1% Verlust). Ich bastele noch daran. Auch wenn ich die Farben schließlich lieber in VIS festlege, fand ich für diese Anwendung ein Skript passender. Leider komme ich nicht so recht weiter.
                      
                      Ich brauche eine Formel, die die Tendenz (meist zwischen -1 und 1) in passende RGB Werte umwandelt. Ich nutze in VIS die Bindings (siehe Widget). Aus dem Trend, egal ob negativ oder positiv, eine Positivzahl zu machen, ist recht leicht (quadrieren, dann Wurzel). Aber dann je nach Ausgangssituation den roten ODER den grünen RGB Wert wachsen zu lassen hat mich überfordert.
                      
                      Im Skript gibts dazu derzeit also noch einen schlechten Workaround:
                      
                      

                      ...
                      createState('Aktien.DAX.Tendenz', {val: 0, ack: true, name: 'DAX Tendenz', unit: '%'});
                      createState('Aktien.DAX.Tendenz_rot');
                      createState('Aktien.DAX.Tendenz_gruen');
                      createState('Aktien.DAX.Tendenz_boolean', true); // false;true
                      ...

                      // Tendenz - Farbe vis VIS RGB festlegen
                      on( {
                      id: "javascript.0.Aktien.DAX.Tendenz",
                      change: "any"
                      }, function (data) {
                      if (data.newState.val < 0) {
                      setState('javascript.0.Aktien.DAX.Tendenz_gruen', 0);
                      setState('javascript.0.Aktien.DAX.Tendenz_rot', 255);
                      setState('javascript.0.Aktien.DAX.Tendenz_booelan', false);
                      } else {
                      setState('javascript.0.Aktien.DAX.Tendenz_gruen', 255);
                      setState('javascript.0.Aktien.DAX.Tendenz_rot', 0);
                      setState('javascript.0.Aktien.DAX.Tendenz_booelan', true);
                      }
                      });

                      
                      Vielleicht hat jemand, der gern an Formeln knobelt mal ne Idee.
                      
                      Gruß
                      
                      Pix

                      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                      1 Antwort Letzte Antwort
                      0
                      • BluefoxB Offline
                        BluefoxB Offline
                        Bluefox
                        schrieb am zuletzt editiert von
                        #11
                        function getColor(tendenz) {
                        	//tendenz von -1 zu 1
                        	var farbe;
                        
                        	if (tendenz > 0) {
                        		// green
                        		if (tendenz > 1) tendenz = 1;
                        
                        		// damit man überchaupt farbe sieht schieben wir tendenz von 0-1 Bereich auf 0.3-1 Bereich
                        		tendenz = tendenz * 0.7 + 0.3; 
                        
                        		farbe = Math.round(0xFF * tendenz) << 8; // RGB, wir brauchen GG von #RRGGBB
                                farbe = farbe.toString(16);
                                if (farbe.length < 4) farbe = '0' + farbe;
                                farbe = '#00' + farbe;
                        	} else {
                        		// Rot
                        		if (tendenz < -1) tendenz = -1;
                        		tendenz *= -1; // mach aus -0.7 ein 0.7
                        
                        		// damit man überchaupt farbe sieht schieben wir tendenz von 0-1 Bereich auf 0.3-1 Bereich
                        		tendenz = tendenz * 0.7 + 0.3; 
                        
                        		farbe = Math.round(255 * tendenz) << 16; // RGB, wir brauchen RR von 0xRRGGBB
                                farbe = farbe.toString(16);
                                if (farbe.length < 6) farbe = '0' + farbe;
                                farbe = '#' + farbe;
                        	}
                        	return farbe;
                        }
                        
                        function getTransparentColor(tendenz) {
                        	var farbe;
                           	if (tendenz > 0) {
                        		// green
                        		if (tendenz > 1) tendenz = 1;
                        
                        		// damit man überchaupt farbe sieht schieben wir tendenz von 0-1 Bereich auf 0.3-1 Bereich
                        		tendenz = tendenz * 0.7 + 0.3; 
                        
                                return 'rgba(0,255,0,' +  tendenz.toFixed(2) + ')';
                            } else {
                        		// Rot
                        		if (tendenz < -1) tendenz = -1;
                        		tendenz *= -1; // mach aus -0.7 ein 0.7
                        
                        		// damit man überchaupt farbe sieht schieben wir tendenz von 0-1 Bereich auf 0.3-1 Bereich
                        		tendenz = tendenz * 0.7 + 0.3;
                        
                                return 'rgba(255,0,0,' + tendenz.toFixed(2) + ')';
                            }
                        }
                        
                        log(getTransparentColor(0.5));
                        
                        1 Antwort Letzte Antwort
                        0
                        • P Offline
                          P Offline
                          pix
                          schrieb am zuletzt editiert von
                          #12

                          Hallo Bluefox,

                          das funktioniert hervorragend. Genauso hatte ich mir das vorgestellt.

                          Folgende Objekte werden erstellt:

                          DAX (Dax in Punkten)

                          DAX.Tendenz (Tendenz in Prozent)

                          DAX.Tendenz.Farbe (Farbe rot/grün je nach Tendenzrichtung und Ausschlag)

                          DAX.Tendenz.Transparenz (Farbe rot/grün + Transparenz je nach Tendenzrichtung und Ausschlag)

                          DAX.Tendenz.boolean (Zustand je Tendenzrichtung (negativ/positiv), nur nötig für ZustandID in Metro Tile String Widget [zB true = Bulle anzeigen, false = Bär])
                          261_bildschirmfoto_2015-08-01_um_10.29.33.jpg

                          Vielen Dank dafür! :D

                          Gruß

                          Pix

                          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                          1 Antwort Letzte Antwort
                          0
                          • H Offline
                            H Offline
                            hofi77
                            schrieb am zuletzt editiert von
                            #13

                            Hallo!

                            Ich suche ebenfalls na einer Möglichkeit einige Kurse abzurufen.

                            Diese Script von pix (Danke :-) )gefällt mir absolut:

                            `// ########### Kurse abfragen (mehrere Aktien im Array (Test)) ###############
                            createState('Aktien.DAX', {val: 0, ack: true, name: 'Deutscher Aktien Index DAX'/*, unit: 'Punkte'*/});
                            createState('Aktien.DAX.Tendenz', {val: 0, ack: true, name: 'DAX Tendenz', unit: '%'});
                            
                            var aktien = ["AAPL","^GDAXI","PSM.DE","ALV.DE"]; // Apple, Dax, ProSieben, Allianz weitere (https://de.finance.yahoo.com/q/cp?s=%5EGDAXI)
                            
                            function KursEinlesen (aktie, callback) {
                                var arr = [];
                                var url = "http://de.finance.yahoo.com/d/quotes.csv?s=" + aktie + "&f=snl1t1p2x";
                                request(url, function (err, state, body){
                                    if (body) {
                                        //body.replace(/\n|\r/g, "");
                                        body = body.substring(0,body.length-2);                             // Zeilenumbruch am Ende entfernen
                                        body = body + "," + '"' + formatDate(new Date()/*, dateFormat*/) + '"' ; // und den String um das aktuelle Abfragedatum ergänzen
                                        arr = body.split(",");
                                        log("Aktie: " + arr,"info");    
                                     callback(null, aktie, arr);
                                    } else {
                                        log("Keine Aktienkurse gelesen", "error");  
                                     callback("Keine Aktienkurse gelesen", aktie);
                                    }
                                });
                            }
                            
                            function leseAktienkursEnde(err, arr, aktie) {
                                if (aktie) {
                                    for (var a = 0; a < aktie.length; a++) {
                                       aktie[a] = aktie[a].replace(/"/g, ''); // oder aktie[a].substring(1, aktie[a].length - 1);
                                    }
                                    // log(JSON.stringify(aktie));
                                    // eingeschoben: Dax rausfiltern und speichern
                                    if (aktie.toString().match('DAX')) { // wenn der Wert DAX enthält
                                        var dax = aktie.toString().split(","); // dann Teilen
                                        setState('javascript.0.Aktien.DAX', dax[2]); // Wert nach drittem Komma abspeichern
                                        setState('javascript.0.Aktien.DAX.Tendenz', dax[4].slice(0,dax[4].indexOf('%')) ); // Pos 0- Prozentzeichen
                                        log('Dax ' + dax[2] + ' [' + dax[4] + '] gespeichert');
                                    } else {
                                        // log('Aktie/Index eingelesen, aber nicht gespeichert');
                                    }
                            
                                }
                            }
                            
                            function leseAktienkurse () {
                                for (i = 0; i < aktien.length; i++) {
                                    KursEinlesen(aktien[i], leseAktienkursEnde);
                                }
                            }
                            
                            leseAktienkurse(); // weiter unten auch per Cron`
                            
                            nur schaffe ich es nicht, dass es mir die Kurse jede Minute aktualisiert.
                            
                            Kann mir da bitte jemand Helfen?
                            
                            DANKE!
                            
                            lg
                            
                            Manuel[/i]
                            

                            LG

                            Manuel

                            1 Antwort Letzte Antwort
                            0
                            • AlCalzoneA Offline
                              AlCalzoneA Offline
                              AlCalzone
                              Developer
                              schrieb am zuletzt editiert von
                              #14

                              @hofi77:

                              leseAktienkurse(); // weiter unten auch per Cron
                              

                              nur schaffe ich es nicht, dass es mir die Kurse jede Minute aktualisiert. `
                              Ich sehe bei dir keinen Code der das tun würde. Nur den Kommentar, dass es weiter unten kommt. Hast du alles kopiert?

                              Ansonsten müsste am Ende noch ein

                              schedule("* * * * *", leseAktienkurse);
                              

                              kommen, um jede Minute zu triggern.

                              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                              1 Antwort Letzte Antwort
                              0
                              • H Offline
                                H Offline
                                hofi77
                                schrieb am zuletzt editiert von
                                #15

                                leider ist

                                leseAktienkurse(); // weiter unten auch per Cron
                                

                                das letzte was da steht. Da ich mich mit Scripten nicht so auskenne, dachte ich mir ich frag gleich mal nach bevor ich hier herumdocktere.

                                Danke AlCalzone so klappts :-)

                                Jedoch erscheint nur der DAX mit der Tendenz in den Objekten (Die Aktien sehe ich nirgends). Kannst du mir sagen warum?

                                Das LOG sieht so aus:

                                14:25:31.176	[info]	javascript.0 script.js.BOERSE: Aktie: "AHLA.DE","ALIBABA GR.HLDG SP.ADR 1",148.95,"2:09pm","-0.60%","GER,"14.09.2017"
                                14:25:31.178	[info]	javascript.0 script.js.BOERSE: Aktie: "AAPL","Apple Inc.",159.65,"4:15pm","-0.75%","NMS,"14.09.2017"
                                14:25:31.184	[info]	javascript.0 script.js.BOERSE: Aktie: "^GDAXI","DAX",12520.54,"2:10pm","-0.26%","GER,"14.09.2017"
                                14:25:31.184	[info]	javascript.0 script.js.BOERSE: Dax 12520.54 [-0.26%] gespeichert
                                

                                Danke für deine Hilfe :-)

                                LG

                                Manuel

                                1 Antwort Letzte Antwort
                                0
                                • AlCalzoneA Offline
                                  AlCalzoneA Offline
                                  AlCalzone
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #16

                                  @hofi77:

                                  Jedoch erscheint nur der DAX mit der Tendenz in den Objekten (Die Aktien sehe ich nirgends). Kannst du mir sagen warum? `
                                  Weil das genau so im Skript steht ;)

                                  createState('Aktien.DAX', {val: 0, ack: true, name: 'Deutscher Aktien Index DAX'/*, unit: 'Punkte'*/});
                                  createState('Aktien.DAX.Tendenz', {val: 0, ack: true, name: 'DAX Tendenz', unit: '%'});
                                  
                                  ...
                                  
                                  // eingeschoben: Dax rausfiltern und speichern
                                          if (aktie.toString().match('DAX')) { // wenn der Wert DAX enthält
                                              var dax = aktie.toString().split(","); // dann Teilen
                                              setState('javascript.0.Aktien.DAX', dax[2]); // Wert nach drittem Komma abspeichern
                                              setState('javascript.0.Aktien.DAX.Tendenz', dax[4].slice(0,dax[4].indexOf('%')) ); // Pos 0- Prozentzeichen
                                              log('Dax ' + dax[2] + ' [' + dax[4] + '] gespeichert');
                                          }
                                  

                                  Das kann man natürlich etwas verallgemeinern, aber da hab ich gerade leider keine Zeit für.

                                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                  1 Antwort Letzte Antwort
                                  0
                                  • B Offline
                                    B Offline
                                    brokowsky
                                    schrieb am zuletzt editiert von
                                    #17

                                    Hallo Zusammen, leider funktioniert seit einigen Tagen das Script zur Abfrage von Aktienkursen über Yahoo nicht mehr. Das Script meldet Fehler, der darauf hindeutet, dass über die Url http://de.finance.yahoo.com/d/quotes.csv?s=xxxxx keine Abfrage mehr möglich ist, anscheinend ist der Dienst eingestellt worden. Kann das jemand bestätigen und kennt jemand eine Alternative, wo/wie ich Aktien - und Währungskurse einlesen kann?

                                    Danke und Gruß

                                    Ed

                                    1 Antwort Letzte Antwort
                                    0
                                    • H Offline
                                      H Offline
                                      hofi77
                                      schrieb am zuletzt editiert von
                                      #18

                                      Hallo!

                                      Kann das absolut bestätigen. Anscheinend verbieten dass ihre „therms of services“. Sowas steht zumindest in der Fehlermeldung.

                                      Suche auch nach einer alternative :-(

                                      Lg

                                      Manuel

                                      LG

                                      Manuel

                                      1 Antwort Letzte Antwort
                                      0
                                      • P Offline
                                        P Offline
                                        pix
                                        schrieb am zuletzt editiert von
                                        #19

                                        Hier gehts mit dem Parser Adapter

                                        http://forum.iobroker.net/viewtopic.php … 107#p95532

                                        Allerdings für den Dax-Wert. Einzelne Aktienwerte muss man sich dann selbst nach der Anleitung rausfischen. Falls man den Parser-Adapter schon für andere Dinge verwendet, empfehle ich, ein weitere Instanz nur für die Aktienkurse zu installieren.

                                        Gruß

                                        Pix

                                        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                        1 Antwort Letzte Antwort
                                        0
                                        • HomoranH Nicht stören
                                          HomoranH Nicht stören
                                          Homoran
                                          Global Moderator Administrators
                                          schrieb am zuletzt editiert von
                                          #20

                                          @hofi77:

                                          Kann das absolut bestätigen. Anscheinend verbieten dass ihre „therms of services“. Sowas steht zumindest in der Fehlermeldung. `

                                          @Fehlermeldung:

                                          It has come to our attention that this service is being used in violation of the Yahoo Terms of Service. As such, the service is being discontinued. For all future markets and equities data research, please refer to finance.yahoo.com. `

                                          @Terms:

                                          You agree to not use the Yahoo Services to:

                                          upload, post, email, transmit, or otherwise make available any Content that is unlawful, harmful, threatening, abusive, harassing, tortious, defamatory, vulgar, obscene, libelous, invasive of another's privacy, hateful, or racially, ethnically, or otherwise objectionable;

                                          harm minors in any way;

                                          impersonate any person or entity, including, but not limited to, a Yahoo official, forum leader, guide or host, or falsely state or otherwise misrepresent your affiliation with a person or entity;

                                          forge headers or otherwise manipulate identifiers in order to disguise the origin of any Content transmitted through the Yahoo Service;

                                          upload, post, email, transmit, or otherwise make available any Content that you do not have a right to make available under any law or under contractual or fiduciary relationships (such as inside information, proprietary and confidential information learned or disclosed as part of employment relationships or under nondisclosure agreements);

                                          upload, post, email, transmit or otherwise make available any Content that infringes any patent, trademark, trade secret, copyright or other proprietary rights ("Rights") of any party;

                                          upload, post, email, transmit, or otherwise make available any unsolicited or unauthorized advertising, promotional materials, "junk mail," "spam," "chain letters," "pyramid schemes," or any other form of solicitation, except in those areas (such as shopping) that are designated for such purpose (please read our complete Spam Policy);

                                          upload, post, email, transmit, or otherwise make available any material that contains software viruses or any other computer code, files or programs designed to interrupt, destroy or limit the functionality of any computer software or hardware or telecommunications equipment;

                                          disrupt the normal flow of dialogue, cause a screen to "scroll" faster than other users of the Yahoo Services are able to type, or otherwise act in a manner that negatively affects other users' ability to engage in real time exchanges;

                                          interfere with or disrupt the Yahoo Services or servers or networks connected to the Yahoo Services, or disobey any requirements, procedures, policies or regulations of networks connected to the Yahoo Services, including using any device, software or routine to bypass our robot exclusion headers;

                                          intentionally or unintentionally violate any applicable local, state, national or international law, including, but not limited to, regulations promulgated by the U.S. Securities and Exchange Commission, any rules of any national or other securities exchange, including, without limitation, the New York Stock Exchange, the American Stock Exchange, or the NASDAQ, and any regulations having the force of law;

                                          provide material support or resources (or to conceal or disguise the nature, location, source, or ownership of material support or resources) to any organization(s) designated by the United States government as a foreign terrorist organization pursuant to section 219 of the Immigration and Nationality Act;

                                          "stalk" or otherwise harass another; and/or

                                          collect or store personal data about other users in connection with the prohibited conduct and activities set forth in paragraphs 6.1 through 6.13 above. `

                                          Habe beim querlesen da jetzt nichts gefunden, außer dem Markierten, aber z.B. beim Kachelmannwetter steht explizit, dass ein maschinelles auslesen verboten ist.

                                          Bevor man anfängt Seiten automatisiert zu parsen sollte man auf jeden Fall zuerst die Terms lesen und noch besser den Betreiber fragen.

                                          Gruß

                                          Rainer

                                          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          333

                                          Online

                                          32.5k

                                          Benutzer

                                          81.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe