Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Node-red: Spritpreise einlesen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Node-red: Spritpreise einlesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      Hallo pix,

      habe das jetzt mal parallel zu meiner node-red variante eingesetzt. Dein Skript zeigte eine billigere Tankstelle bei mir in der Nähe nicht an.

      EDIT: Habe nachher mal die Lat Long optimiert (2. Stelle hinter dem Komma) Jetzt ist sie drin (?); wird mit dist=2, angegeben

      Die Liste unter States zeigt aber jede Menge Tankstellen außerhalb des eingestellten Radius an.

      Wird die zuerst erstellt und dann gefiltert?

      EDIT: Man sollte den thread auch vollständig lesen :oops:

      Besteht die Möglichkeit diesen Datenpunkt javascript.0.Sprit.billigste_Tankstelle.json als json Tabelle mit dem entsprechenden Widget anzuzeigen - ich hab es nicht geschafft

      Gruß

      Rainer

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo Rainer,
        @Homoran:

        Besteht die Möglichkeit diesen Datenpunkt javascript.0.Sprit.billigste_Tankstelle.json als json Tabelle mit dem entsprechenden Widget anzuzeigen - ich hab es nicht geschafft `

        JEIN!

        Als Tabelle ja, aber nicht im Tabellen Widget, das hab ich nicht hingekriegt. Hier als Tabelle. EInfach das hier in ein basic HTML Widget packen (bei mit alles in Javascript Instanz #2) {javascript.2.Sprit.billigste_Tankstelle.Tabelle} und dann dieses veränderte Sprit / billigste Tankstelle nehmen.

        `/* Spritpreis einlesen
        Quelle: Tankerkoenig mit API
        
        todo: gezielten Tankstellen (zweites Skript anlegen)
              Meldung (pushover/Email) bei Unterschreitung eines Preises (Optin)
        
        Unter Verwendung von Skripten von Bluefox und ruhr70
        erstellt: 24.08.2015 von pix
        26.08.2015 Instanz einsetzen (falls nicht auf javascript.2) mit Hilfe von paul54 http://forum.iobroker.org/viewtopic.php?f=21&t=1256&p=10368#p10356
        28.08.2015 Tabelle im HTML Format
        */
        
        var logging = false; // (true;false) Logausgabe zentral schalten, da 5minütlich ein Mehrzeiler geloggt wird.
        
        // Objekte erstellen (mit Struktur)
        createState('Sprit.billigste_Tankstelle.Tabelle', {name: 'Billigste Tankstelle - Tabelle'});
        createState('Sprit.billigste_Tankstelle.json', {name: 'Billigste Tankstelle - JSON'});
        createState('Sprit.billigste_Tankstelle.1.Name', {name: 'Billigste Tankstelle - Name'});
        createState('Sprit.billigste_Tankstelle.1.Marke', {name: 'Billigste Tankstelle - Marke'});
        createState('Sprit.billigste_Tankstelle.1.ID', {name: 'Billigste Tankstelle - ID'});
        createState('Sprit.billigste_Tankstelle.1.Adresse.Strasse', {name: 'Billigste Tankstelle - Strasse'});
        createState('Sprit.billigste_Tankstelle.1.Adresse.Hausnummer', {name: 'Billigste Tankstelle - Hausnummer'});
        createState('Sprit.billigste_Tankstelle.1.Adresse.PLZ', {name: 'Billigste Tankstelle - PLZ'});
        createState('Sprit.billigste_Tankstelle.1.Adresse.Ort', {name: 'Billigste Tankstelle - Ort'});
        createState('Sprit.billigste_Tankstelle.1.Adresse.Laenge', {name: 'Billigste Tankstelle - geografische Laenge', unit: '°'});
        createState('Sprit.billigste_Tankstelle.1.Adresse.Breite', {name: 'Billigste Tankstelle - geografische Breite', unit: '°'});
        createState('Sprit.billigste_Tankstelle.1.Adresse.Entfernung', {name: 'Billigste Tankstelle - Entfernung', unit: 'km'});
        createState('Sprit.billigste_Tankstelle.1.Diesel.Preis', {name: 'Billigste Tankstelle - Preis', unit: '€'});
        createState('Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz', {name: 'Billigste Tankstelle - Preis (gekürzt)', unit: '€'});
        createState('Sprit.billigste_Tankstelle.1.Diesel.Preis_dritte_Stelle', {name: 'Billigste Tankstelle - Preis (dritte Dezimalstelle)'});
        
        // Billigste Tankstelle
        // Parameter festlegen
        var breite, 
            laenge, 
            radius = '5',
            sortierung = 'price',
            typ = 'diesel',
            api = 'APIAPIAPIAPIAPI eintragen XXXXXXX';
        
        // Koordinaten aus Adaptereinstellungen übernehmen oder selbst festlegen
        // http://forum.iobroker.org/viewtopic.php?f=21&t=1256&p=10337#p10333
        // Javascript Instanz Nummer auslesen
        // http://forum.iobroker.org/viewtopic.php?f=21&t=1256&p=10368#p10356
        var dpID = getIdByName('Billigste Tankstelle - JSON');
        var teile = dpID.split('.');
        var geo = getObject('system.adapter.javascript.' + teile[1]);
        if (geo && geo.native) {
            breite = geo.native.latitude;
            laenge = geo.native.longitude;
            if (logging) log('Spritpreis - Geokoordinaten aus Javascript-Adapter gelesen');
        } else { // falls nicht in den Adaptereinstellungen festgelegt, manuelle Werte
            breite = '48';
            laenge = '11';
            if (logging) log('Spritpreis - Geokoordinaten manuell eingetragen');
        }
        
        var url = 'https://creativecommons.tankerkoenig.de/json/list.php?lat=' + breite + '&lng=' + laenge + '&rad=' + radius + '&sort=' + sortierung + '&type=' + typ + '&apikey=' + api; 
        
        // Daten einlesen
        var request = require('request');
        function billigste_Tankstelle() {
            request(url, function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    var result;
                    try{
                        result = JSON.parse(body);
                        var data = JSON.stringify(result, null, 2);
                        // if (logging) log(data);
                        setState('Sprit.billigste_Tankstelle.json', data);
                    } catch (e) {
                        log('Spritpreise einlesen - Parse Fehler: ' + e);
                    }    
                    if (result) {
                        if (logging) {
                            log('-------------- Spritpreise -----------');
                            log('Billigste Station im Radius von ' + radius + 'km');
                            log('Name:                     ' + result.stations[0].name); 
                            log('Marke:                    ' + result.stations[0].brand); 
                            log('ID:                       ' + result.stations[0].id); 
                            log('Strasse:                  ' + result.stations[0].street); 
                            log('Hausnummer:               ' + result.stations[0].houseNumber);
                            log('PLZ:                      ' + result.stations[0].postCode); 
                            log('Stadt:                    ' + result.stations[0].place); 
                            log('Geografische Breite:      ' + result.stations[0].lat + '°'); 
                            log('Geografische Länge:       ' + result.stations[0].lng + '°'); 
                            log('Entfernung:               ' + result.stations[0].dist + ' km'); 
                            log('Preis:                    ' + result.stations[0].price + ' €'); 
                            log('Preis (gekürzt):          ' + preis_kuerzen(result.stations[0].price) + ' €'); 
                            log('Preis (3\. Dezimalstelle): 0.' + preis_dritteStelle(result.stations[0].price) + ' Cent'); 
                            log('--------------------------------------');                    
                        }
                        setState('Sprit.billigste_Tankstelle.1.Name', result.stations[0].name);
                        setState('Sprit.billigste_Tankstelle.1.Marke', result.stations[0].brand);
                        setState('Sprit.billigste_Tankstelle.1.ID', result.stations[0].id);
                        setState('Sprit.billigste_Tankstelle.1.Adresse.Strasse', result.stations[0].street);
                        setState('Sprit.billigste_Tankstelle.1.Adresse.Hausnummer', result.stations[0].houseNumber);
                        setState('Sprit.billigste_Tankstelle.1.Adresse.PLZ', result.stations[0].houseNumber);
                        setState('Sprit.billigste_Tankstelle.1.Adresse.Ort', result.stations[0].place);
                        setState('Sprit.billigste_Tankstelle.1.Adresse.Breite', result.stations[0].lat);
                        setState('Sprit.billigste_Tankstelle.1.Adresse.Laenge', result.stations[0].lng);
                        setState('Sprit.billigste_Tankstelle.1.Adresse.Entfernung', result.stations[0].dist);
                        setState('Sprit.billigste_Tankstelle.1.Diesel.Preis', result.stations[0].price);
                        setState('Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz', preis_kuerzen(result.stations[0].price));
                        setState('Sprit.billigste_Tankstelle.1.Diesel.Preis_dritte_Stelle', preis_dritteStelle(result.stations[0].price));
        
                        log('Spritpreise eingelesen (billigste Tankstelle) - kein Fehler');
        
                        // Tabelle
                        var formatierungen = ''; // CSS Formatierungen der Tabelle 
                        var tabelle = formatierungen + ''; // ggf weitere Formatierungen
                        for(var i = 0; i < result.stations.length; i++) {
                            tabelle = tabelle + '';
                        }
                        tabelle = tabelle + '
        
        | Station | Straße | Preis |
        | --- | --- | --- |
        | ' + result.stations[i].brand + ' | ' + result.stations[i].street + ' | ' + result.stations[i].price + '€ |
        
        ';
                        setState("Sprit.billigste_Tankstelle.Tabelle", tabelle);
                        // if (logging) log(tabelle);
                    }
                } else {
                    log('Spritpreise einlesen - Fehler: ' + error);
                }
            });   // Ende request 
        }
        
        // Preis kürzen
        function preis_kuerzen(preis) {
            var rechenwert = preis * 100;   // 100facher Preis jetzt mit einer Nachkommastelle
            var rechenwert2 = preis * 1000; // 1000facher Preis ohne Nachkommastelle
            rechenwert = Math.floor(rechenwert);  // Nachkommastelle (.x) wird abgeschnitten
            rechenwert = rechenwert/100;          // es bleiben zwei Nachkommastellen
        
            return (rechenwert.toFixed(2)); // Preis mit 2 Nachkommastellen ausgeben (abgeschnitten)
        }
        
        // dritte Nachkommastelle einzeln ermitteln
        function preis_dritteStelle(preis) {
            var rechenwert = preis * 100;   // 100facher Preis jetzt mit einer Nachkommastelle
            var rechenwert2 = preis * 1000; // 1000facher Preis ohne Nachkommastelle
            rechenwert = Math.floor(rechenwert);  // Nachkommastelle (.x) wird abgeschnitten
            rechenwert = rechenwert/100;          // es bleiben zwei Nachkommastellen
        
            return (rechenwert2 - (rechenwert * 1000)); // Dritte Nachommastelle einzeln ermitteln
        }
        
        // Fall es sofort gewollt ist, die Preise zu aktualisieren
        createState('Sprit.aktualisieren', {name: 'Taster zum Aktualisieren'});
        on('javascript.2.Sprit.aktualisieren', function (obj) {
            // 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) {
                billigste_Tankstelle(); // Daten sofort einlesen
                log('Spritpreis einlesen - manuell gestartet');
            }
        });
        
        // Ausführung
        billigste_Tankstelle();
        schedule("*/15 * * * *", billigste_Tankstelle); // jede 15 Minuten` 
        
        Das erste Objekt,welches ganz oben erstellt wird ist "createState('Sprit.billigste_Tankstelle.Tabelle', {name: 'Billigste Tankstelle - Tabelle'});"
        
        Auch hier evtl. die Instanz einmal durchstarten nach dem Abspeichern des Skriptes.
        
        Wer CSS kann, kann die Variable _~~[i]~~formatierungen[/i]_ noch anpassen (Bisher nur Titelzeile links gerückt und fett).
        
        Kleine Variante: `~~[code]~~var formatierungen = ''; // CSS Formatierungen der Tabelle [/code]`
        
        Viel Spass
        
        und Gruß,
        
        Pix
        
        EDIT: Musste glatt nochmal anonymisieren, sorry für den Edit.
        
        EDIT II (18.9.2015, pix): wie auch anderen Stellen in diesem Thread erwähnt, empfehle ich die Nutzung des VIS CSS-Editors.
        
        **~~[b]~~EDIT (14.1.2016): Schedule auf 15min gestellt, da tankerkönig.de sonst evtl. überlastet wird.[/b]**[/i][/i][/i]
        
        1 Reply Last reply Reply Quote 0
        • S
          Sebbo last edited by

          Haha, das kleine + hab ich ja überhaupt nicht gesehen…

          Danke Rainer, Danke Pix... läuft...

          btw, wenn das "+" Symbol irgendwo oben wäre, dann hätte ich es warscheinlich gefunden. :lol: :lol:

          Gruß Sebbo

          1 Reply Last reply Reply Quote 0
          • S
            Sven2013 last edited by

            Hey Vielen Dank für die tollen Scripte 🙂

            Ich habe noch 2 Fragen dazu:

            1. Wie kann ich die Tabelle formatieren? Abstand zwischen den Zeilen / Dicke Überschrift

            2. Kann ich auch Benzinpreise einlesen statt Diesel? Denn wenn ich den Wert diesel in super oder super E5 ändere hängt sich das script nur auf.

            Vielen Dank schonmal….

            Gruß Sven

            1 Reply Last reply Reply Quote 0
            • S
              Sven2013 last edited by

              Hat hier keiner eine Idee zu meiner Frage oben?

              Zu dem Benzin statt Diesel habe ich gelesen muss die Id geändert werden, nur welche?Und wo genau?

              Oder habe ich das im falschen UnterForum gepostet?

              Ich würde mich über einen Tipp sehr freuen.

              Gesendet von iPhone mit Tapatalk

              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                Hallo Sven,

                bin aus dem Urlaub wieder da und helfe, wie versprochen, weiter :lol:
                @Sven2013:

                1. Wie kann ich die Tabelle formatieren? Abstand zwischen den Zeilen / Dicke Überschrift `
                Das ist hier angegeben:
                @pix:

                Kleine Variante:

                CODE: ALLES AUSWÄHLEN

                var formatierungen = ''; // CSS Formatierungen der Tabelle `
                Es sind CSS Formatierungen. Um das etwas besser zu bearbeiten kannst du auch im Widget Basic HTML die Formatierungen angeben:

                Damit gilt das für die ganze Seite. Deshalb empfehle ich die Verwendung von Klassen oder ID (hier zB "sprit") für die einzelnen Tabellen, damit verschiedene Tabellen auf der Seite nicht alle gleich formatiert werden.

                var formatierungen = ''; // CSS Formatierungen der Tabelle 
                                var tabelle = formatierungen + ''; // ggf weitere Formatierungen
                
                oder eben im Widget analog dazu zum Beispiel für __th__:
                 Du kannst für die Formatierung ein eigenes Widget anlegen oder die Formatierung mit in das Widget mit der Tablelle reinlegen, egal.
                
                ****EDIT 18.9.2015 (pix): Ich empfehle die Nutzung des CSS Editors in VIS****
                
                ~~@Sven2013:~~ 
                
                > 2\. Kann ich auch Benzinpreise einlesen statt Diesel? Denn wenn ich den Wert diesel in super oder super E5 ändere hängt sich das script nur auf. `  
                
                Ja, das geht natürlich, da Tankerkönig auch die E5 und E10 Preise mitliefert. Statt "Diesel" wird das Wort "E5" bzw. "E10" verwendet.
                
                Hier mal das angepasste Skript aus [http://forum.iobroker.org/posting.php?mode=reply&amp;f=32&amp;t=614&amp;sid=f0ea4d188cbc161ce50a5fa54d59275a#pr10482](http://forum.iobroker.org/posting.php?mode=reply&amp;f=32&amp;t=614&amp;sid=f0ea4d188cbc161ce50a5fa54d59275a#pr10482):
                

                /* Spritpreis einlesen
                Quelle: Tankerkoenig mit API

                todo: gezielten Tankstellen (zweites Skript anlegen)
                Meldung (pushover/Email) bei Unterschreitung eines Preises (Optin)

                Unter Verwendung von Skripten von Bluefox und ruhr70
                erstellt: 24.08.2015 von pix
                26.08.2015 Instanz einsetzen (falls nicht auf javascript.2) mit Hilfe von paul54 http://forum.iobroker.org/viewtopic.php?f=21&t=1256&p=10368#p10356
                28.08.2015 Tabelle im HTML Format
                13.09.2015 Anpassung für E5
                */

                var logging = false; // (true;false) Logausgabe zentral schalten, da 5minütlich ein Mehrzeiler geloggt wird.

                // Objekte erstellen (mit Struktur)
                createState('Sprit.billigste_Tankstelle.Tabelle', {name: 'Billigste Tankstelle - Tabelle'});
                createState('Sprit.billigste_Tankstelle.json', {name: 'Billigste Tankstelle - JSON'});
                createState('Sprit.billigste_Tankstelle.1.Name', {name: 'Billigste Tankstelle - Name'});
                createState('Sprit.billigste_Tankstelle.1.Marke', {name: 'Billigste Tankstelle - Marke'});
                createState('Sprit.billigste_Tankstelle.1.ID', {name: 'Billigste Tankstelle - ID'});
                createState('Sprit.billigste_Tankstelle.1.Adresse.Strasse', {name: 'Billigste Tankstelle - Strasse'});
                createState('Sprit.billigste_Tankstelle.1.Adresse.Hausnummer', {name: 'Billigste Tankstelle - Hausnummer'});
                createState('Sprit.billigste_Tankstelle.1.Adresse.PLZ', {name: 'Billigste Tankstelle - PLZ'});
                createState('Sprit.billigste_Tankstelle.1.Adresse.Ort', {name: 'Billigste Tankstelle - Ort'});
                createState('Sprit.billigste_Tankstelle.1.Adresse.Laenge', {name: 'Billigste Tankstelle - geografische Laenge', unit: '°'});
                createState('Sprit.billigste_Tankstelle.1.Adresse.Breite', {name: 'Billigste Tankstelle - geografische Breite', unit: '°'});
                createState('Sprit.billigste_Tankstelle.1.Adresse.Entfernung', {name: 'Billigste Tankstelle - Entfernung', unit: 'km'});
                createState('Sprit.billigste_Tankstelle.1.E5.Preis', {name: 'Billigste Tankstelle - Preis', unit: '€'});
                createState('Sprit.billigste_Tankstelle.1.E5.Preis_kurz', {name: 'Billigste Tankstelle - Preis (gekürzt)', unit: '€'});
                createState('Sprit.billigste_Tankstelle.1.E5.Preis_dritte_Stelle', {name: 'Billigste Tankstelle - Preis (dritte Dezimalstelle)'});

                // Billigste Tankstelle
                // Parameter festlegen
                var breite,
                laenge,
                radius = '5',
                sortierung = 'price',
                typ = 'e5', // <----------- e5 oder e10 oder diesel
                api = 'APIAPIAPIAPIAPI eintragen XXXXXXX';

                // Koordinaten aus Adaptereinstellungen übernehmen oder selbst festlegen
                // http://forum.iobroker.org/viewtopic.php?f=21&t=1256&p=10337#p10333
                // Javascript Instanz Nummer auslesen
                // http://forum.iobroker.org/viewtopic.php?f=21&t=1256&p=10368#p10356
                var dpID = getIdByName('Billigste Tankstelle - JSON');
                var teile = dpID.split('.');
                var geo = getObject('system.adapter.javascript.' + teile[1]);
                if (geo && geo.native) {
                breite = geo.native.latitude;
                laenge = geo.native.longitude;
                if (logging) log('Spritpreis - Geokoordinaten aus Javascript-Adapter gelesen');
                } else { // falls nicht in den Adaptereinstellungen festgelegt, manuelle Werte
                breite = '48';
                laenge = '11';
                if (logging) log('Spritpreis - Geokoordinaten manuell eingetragen');
                }

                var url = 'https://creativecommons.tankerkoenig.de/json/list.php?lat=' + breite + '&lng=' + laenge + '&rad=' + radius + '&sort=' + sortierung + '&type=' + typ + '&apikey=' + api;

                // Daten einlesen
                var request = require('request');
                function billigste_Tankstelle() {
                request(url, function (error, response, body) {
                if (!error && response.statusCode == 200) {
                var result;
                try{
                result = JSON.parse(body);
                var data = JSON.stringify(result, null, 2);
                // if (logging) log(data);
                setState('Sprit.billigste_Tankstelle.json', data);
                } catch (e) {
                log('Spritpreise einlesen - Parse Fehler: ' + e);
                }
                if (result) {
                if (logging) {
                log('-------------- Spritpreise -----------');
                log('Billigste Station im Radius von ' + radius + 'km');
                log('Name: ' + result.stations[0].name);
                log('Marke: ' + result.stations[0].brand);
                log('ID: ' + result.stations[0].id);
                log('Strasse: ' + result.stations[0].street);
                log('Hausnummer: ' + result.stations[0].houseNumber);
                log('PLZ: ' + result.stations[0].postCode);
                log('Stadt: ' + result.stations[0].place);
                log('Geografische Breite: ' + result.stations[0].lat + '°');
                log('Geografische Länge: ' + result.stations[0].lng + '°');
                log('Entfernung: ' + result.stations[0].dist + ' km');
                log('Preis: ' + result.stations[0].price + ' €');
                log('Preis (gekürzt): ' + preis_kuerzen(result.stations[0].price) + ' €');
                log('Preis (3. Dezimalstelle): 0.' + preis_dritteStelle(result.stations[0].price) + ' Cent');
                log('--------------------------------------');
                }
                setState('Sprit.billigste_Tankstelle.1.Name', result.stations[0].name);
                setState('Sprit.billigste_Tankstelle.1.Marke', result.stations[0].brand);
                setState('Sprit.billigste_Tankstelle.1.ID', result.stations[0].id);
                setState('Sprit.billigste_Tankstelle.1.Adresse.Strasse', result.stations[0].street);
                setState('Sprit.billigste_Tankstelle.1.Adresse.Hausnummer', result.stations[0].houseNumber);
                setState('Sprit.billigste_Tankstelle.1.Adresse.PLZ', result.stations[0].houseNumber);
                setState('Sprit.billigste_Tankstelle.1.Adresse.Ort', result.stations[0].place);
                setState('Sprit.billigste_Tankstelle.1.Adresse.Breite', result.stations[0].lat);
                setState('Sprit.billigste_Tankstelle.1.Adresse.Laenge', result.stations[0].lng);
                setState('Sprit.billigste_Tankstelle.1.Adresse.Entfernung', result.stations[0].dist);
                setState('Sprit.billigste_Tankstelle.1.E5.Preis', result.stations[0].price);
                setState('Sprit.billigste_Tankstelle.1.E5.Preis_kurz', preis_kuerzen(result.stations[0].price));
                setState('Sprit.billigste_Tankstelle.1.E5.Preis_dritte_Stelle', preis_dritteStelle(result.stations[0].price));

                            log('Spritpreise eingelesen (billigste Tankstelle) - kein Fehler');
                
                            // Tabelle
                            var formatierungen = ''; // CSS Formatierungen der Tabelle 
                            var tabelle = formatierungen + '
                
                
                | Station | Straße | Preis |
                | --- | --- | --- |
                
                `'; // ggf weitere Formatierungen
                                for(var i = 0; i < result.stations.length; i++) {
                                    tabelle = tabelle + '``';
                                }
                                tabelle = tabelle + '`
                
                | Station | Straße | Preis |
                | --- | --- | --- |
                | ' + result.stations[i].brand + ' | ' + result.stations[i].street + ' | ' + result.stations[i].price + '€ |
                
                `';
                                setState("Sprit.billigste_Tankstelle.Tabelle", tabelle);
                                // if (logging) log(tabelle);
                            }
                        } else {
                            log('Spritpreise einlesen - Fehler: ' + error);
                        }
                    });   // Ende request 
                }
                
                // Preis kürzen
                function preis_kuerzen(preis) {
                    var rechenwert = preis * 100;   // 100facher Preis jetzt mit einer Nachkommastelle
                    var rechenwert2 = preis * 1000; // 1000facher Preis ohne Nachkommastelle
                    rechenwert = Math.floor(rechenwert);  // Nachkommastelle (.x) wird abgeschnitten
                    rechenwert = rechenwert/100;          // es bleiben zwei Nachkommastellen
                
                    return (rechenwert.toFixed(2)); // Preis mit 2 Nachkommastellen ausgeben (abgeschnitten)
                }
                
                // dritte Nachkommastelle einzeln ermitteln
                function preis_dritteStelle(preis) {
                    var rechenwert = preis * 100;   // 100facher Preis jetzt mit einer Nachkommastelle
                    var rechenwert2 = preis * 1000; // 1000facher Preis ohne Nachkommastelle
                    rechenwert = Math.floor(rechenwert);  // Nachkommastelle (.x) wird abgeschnitten
                    rechenwert = rechenwert/100;          // es bleiben zwei Nachkommastellen
                
                    return (rechenwert2 - (rechenwert * 1000)); // Dritte Nachommastelle einzeln ermitteln
                }
                
                // Fall es sofort gewollt ist, die Preise zu aktualisieren
                createState('Sprit.aktualisieren', {name: 'Taster zum Aktualisieren'});
                on('javascript.2.Sprit.aktualisieren', function (obj) {
                    // 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) {
                        billigste_Tankstelle(); // Daten sofort einlesen
                        log('Spritpreis einlesen - manuell gestartet');
                    }
                });
                
                // Ausführung
                billigste_Tankstelle();
                schedule("*/15 * * * *", billigste_Tankstelle); // jede 15 Minuten` 
                
                Im oberen Teil werden die Objekte angelegt. Statt Diesel steht da E5 mittendrin.
                
                Weiter unten in der Konfiguration steht bei sort jetzt "e5" statt "diesel"
                
                und noch weiter unten in der Befüllung der Objekte natürlich wie oben statt ... .Diesel. ... jetzt E5
                
                **~~[b]~~Die Abfrage der billigsten Tankstelle über die API funktioniert nur pro Sorte[/b]**, also braucht es entweder drei Skripte oder das Ändern der Abfrage-URL. Ich empfehle die erste Variante, also für jede Spritsorte ein Skript anlegen und die entsprechenden Änderungen vornehmen.
                
                Gruß
                
                Pix
                
                **~~[b]~~EDIT (14.1.2016): Schedule auf 15min gestellt, da tankerkönig.de sonst evtl. überlastet wird.[/b]**[/i][/i][/i]
                
                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators last edited by

                  @pix:

                  Die Abfrage der billigsten Tankstelle über die API funktioniert nur pro Sorte, also braucht es entweder drei Skripte oder das Ändern der Abfrage-URL. Ich empfehle die erste Variante, also für jede Spritsorte ein Skript anlegen und die entsprechenden Änderungen vornehmen. `

                  Zuerste hatte ich ein weiteres Script mit anderem namen "billigstes_e5" angelegt. Darin habe ich nur das Wort "diesel" gegen "e5" getauscht. - klappt nicht 😞 im log steht nur "script stopped" Dann versucht alle möglichenVariablen im Skript anzupassen, ebenfalls ohne Erfolg. Ich habe sogar zwei verschiedene javascript instanzen angelegt, da ich davon ausging, dass die Variablennamen gleich bleiben.

                  Muss sonst noch etwas ausser in der Abfrage an den Tankerkönig das Wort Diesel gegen E5 zu tauschen, wie es in node-red geklappt hat.

                  Gruß

                  Rainer

                  1 Reply Last reply Reply Quote 0
                  • P
                    pix last edited by

                    Hallo,
                    @Homoran:

                    Muss sonst noch etwas ausser in der Abfrage an den Tankerkönig das Wort Diesel gegen E5 zu tauschen, wie es in node-red geklappt hat. `
                    theoretisch reicht es, das Wort "diesel" gegen das Wort "e5" [klein geschrieben] zu tauschen (im Bereich // Parameter festlegen). Dann werden die Werte auch in die Variablen/Objekte geschrieben. Nur das die Objekte eben zB "Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz" heißen und daher eine Anpassung des Namens sicher besser ist, wenn man den E5-Preis reinschreibt (btw: die "1" steht für billigste Tankstelle).

                    Die Tankerkönig API liefert bei der Abfrage der billigsten Tankstelle eine Liste der Tankstellen von billig nach teuer pro Spritsorte. Es kann schließlich sein, dass ARAL den billigsten DIESEL und ESSO den billigsten E5 anbietet. Mehrere Spritsorten bedeuten also mehrmaliges Abfragen. Dieses Abfragen kann man durch drei jeweils angepasste Skripte machen oder auch durch drei Abfragen in einem Skript.

                    Dieses Skript ist kein Adapter, sondern nur ein Skript, das ich für meine Bedürfnisse (Dieselpreis abfragen) geschrieben hab. Ich helfe aber gern, es anzupassen. 😛 Aber ich bin noch nicht so weit, es auf alle möglichen Anwendungsfälle einzustellen. Mir fallen da einige ein … :shock:

                    Gruß

                    Pix

                    1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators last edited by

                      Hallo pix,
                      @pix:

                      theoretisch reicht es, das Wort "diesel" gegen das Wort "e5" [klein geschrieben] zu tauschen (im Bereich // Parameter festlegen). `
                      so hatte ich es gemacht
                      @Homoran:

                      ein weiteres Script mit anderem namen "billigstes_e5" angelegt. Darin habe ich nur das Wort "diesel" gegen "e5" getauscht. `
                      Sicherheitshalber dann in einer zweiten Instanz des javascript Adapters.

                      Dann hätten die datenpunkte ja bis auf das js.1.Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz für e5 statt der js.0.Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz für echtes Diesel identisch angelegt werden müssen - oder?

                      Die Punkte wurden jedoch nicht angelegt.

                      @pix:

                      Dieses Skript ist kein Adapter, sondern nur ein Skript, das ich für meine Bedürfnisse (Dieselpreis abfragen) geschrieben hab. `
                      Klar!

                      Gruß

                      Rainer

                      1 Reply Last reply Reply Quote 0
                      • P
                        pix last edited by

                        @Homoran:

                        Hallo pix,
                        @pix:

                        theoretisch reicht es, das Wort "diesel" gegen das Wort "e5" [klein geschrieben] zu tauschen (im Bereich // Parameter festlegen). `
                        so hatte ich es gemacht
                        @Homoran:

                        ein weiteres Script mit anderem namen "billigstes_e5" angelegt. Darin habe ich nur das Wort "diesel" gegen "e5" getauscht. `
                        Sicherheitshalber dann in einer zweiten Instanz des javascript Adapters.

                        Dann hätten die datenpunkte ja bis auf das js.1.Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz für e5 statt der js.0.Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz für echtes Diesel identisch angelegt werden müssen - oder?

                        Die Punkte wurden jedoch nicht angelegt. `

                        Im Skript wird ja gar nicht auf die Instanz eingegangen. Die ist eigentlich egal (bis auf die eine Stelle unten: Sprit aktualisieren. Da steht im Skript noch Instanz javascript.2.Sprit.aktualisieren, wobei man das "javascript.2." auch weglassen kann, da ja das Objekt in diesem Skript angelegt wurde).

                        :idea: :lol:

                        Beim Schreiben der Zeilen hier drüber fällt mir was ein:

                        Wenn mit createState im Skript ein Objekt angelegt wird, kann das ja im gleichen Skript auch ohne die Instanz angesprochen werden. Wenn es allerdings in einem anderen Skript (egal ob gleiche oder fremde Instanz) angelegt wurde, muss der Adapter und die Instanznummer mit angegeben werden. Da diese ganze Latte von Objekte bereits im Diesel-Skript angelegt wurden

                        // Objekte erstellen (mit Struktur)
                        createState('Sprit.billigste_Tankstelle.Tabelle', {name: 'Billigste Tankstelle - Tabelle'});
                        createState('Sprit.billigste_Tankstelle.json', {name: 'Billigste Tankstelle - JSON'});
                        createState('Sprit.billigste_Tankstelle.1.Name', {name: 'Billigste Tankstelle - Name'});
                        createState('Sprit.billigste_Tankstelle.1.Marke', {name: 'Billigste Tankstelle - Marke'});
                        createState('Sprit.billigste_Tankstelle.1.ID', {name: 'Billigste Tankstelle - ID'});
                        createState('Sprit.billigste_Tankstelle.1.Adresse.Strasse', {name: 'Billigste Tankstelle - Strasse'});
                        createState('Sprit.billigste_Tankstelle.1.Adresse.Hausnummer', {name: 'Billigste Tankstelle - Hausnummer'});
                        createState('Sprit.billigste_Tankstelle.1.Adresse.PLZ', {name: 'Billigste Tankstelle - PLZ'});
                        createState('Sprit.billigste_Tankstelle.1.Adresse.Ort', {name: 'Billigste Tankstelle - Ort'});
                        createState('Sprit.billigste_Tankstelle.1.Adresse.Laenge', {name: 'Billigste Tankstelle - geografische Laenge', unit: '°'});
                        createState('Sprit.billigste_Tankstelle.1.Adresse.Breite', {name: 'Billigste Tankstelle - geografische Breite', unit: '°'});
                        createState('Sprit.billigste_Tankstelle.1.Adresse.Entfernung', {name: 'Billigste Tankstelle - Entfernung', unit: 'km'});
                        
                        

                        kann es sein sein, dass der Adapter muckt, wenn du die

                        • nochmal anlegen willst oder

                        • sie ohne die korrekte Adresse javascript.[Nummer].*** ansprechen willst.
                          Daher mein quck&dirty Tipp:

                        Das Diesel Skript löschen, alle Objekte Sprit.billigste_Tankstelle*** löschen

                        Die Instanz mit dem E5-Skript neu starten (es werden alle Objekte neu angelegt).

                        Wenn man beide Sorten will, dann muss man in einem Skript die Erstellung der o.g. Objekte entfernen.

                        Klappt das dann?

                        Gruß

                        Pix

                        1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators last edited by

                          Nicht, dass wir aneinander vorbeireden.

                          @pix:

                          Im Skript wird ja gar nicht auf die Instanz eingegangen. `
                          korrekt, aber ich ging davon aus, dass wenn die datenpunkte in einer Instanz bereits angelegt sind, es zu Problemen kommt.

                          Deswegen 2. Instanz angelegt, Skriptkopie darin gestartet ("e5" statt "diesel" - alles andere gleich) - werden dann nicht die Datenpunkte mit der anderen Instanznummer vornedran neu angelegt??

                          @pix:

                          kann es sein sein, dass der Adapter muckt, wenn du die

                          nochmal anlegen willst oder

                          sie ohne die korrekte Adresse javascript.[Nummer].*** ansprechen willst. `
                          ersteres hatte ich vermutet, zweites hatte ich als Lösung gesehen 😞

                          @pix:

                          Daher mein quck&dirty Tipp:

                          Das Diesel Skript löschen, alle Objekte Sprit.billigste_Tankstelle*** löschen

                          Die Instanz mit dem E5-Skript neu starten (es werden alle Objekte neu angelegt). `
                          Werde ich ausprobieren, wenn ich es halbwegs verstanden hab 😉

                          @pix:

                          Wenn man beide Sorten will, dann muss man in einem Skript die Erstellung der o.g. Objekte entfernen. `
                          …und damit hängst du mich dann wieder ab.

                          warum werden bei 2 identischen Skripts in 2 verschiedenen Instanzen nicht alle Datenpunkte doppelt (nur in dem jeweiligen Ordner der Instanz) angelegt??

                          @pix:

                          Klappt das dann? `
                          Ich werde berichten!

                          Danke

                          Rainer

                          1 Reply Last reply Reply Quote 0
                          • P
                            pix last edited by

                            @Homoran:

                            Nicht, dass wir aneinander vorbeireden.

                            …

                            warum werden bei 2 identischen Skripts in 2 verschiedenen Instanzen nicht alle Datenpunkte doppelt (nur in dem jeweiligen Ordner der Instanz) angelegt?? `
                            Du hast natürlich Recht: bei zwei Skripten in zwei Instanzen werden natürlich auch alle Objekte zweimal angelegt.

                            Kannst du mir mal dein Skript senden?

                            Pix

                            Gesendet von meinem iPhone mit Tapatalk

                            1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators last edited by

                              Ich glaub's nicht!

                              Ich hatte bereits alles gelöscht.

                              jetzt nochmal javascript.1 aktiviert, das Script aus javascript.0 rüberkopiert und "diesel" gegen "e5" ausgetauscht.

                              restart und die Werte sind da :!: :!:

                              Dann kann ich mich ja mal ans zerhacken des Scripts begeben und die Variablennamen ändern, …...

                              Danke und gute Nacht

                              Rainer

                              ... aber ich kapier's nicht

                              1 Reply Last reply Reply Quote 0
                              • S
                                Sven2013 last edited by

                                @pix:

                                Hallo Sven,

                                bin aus dem Urlaub wieder da und helfe, wie versprochen, weiter :lol:

                                Vielen Dank dafür. ich hoffe dein Urlaub war sonnig und erholsam…

                                @Sven2013:

                                1. Wie kann ich die Tabelle formatieren? Abstand zwischen den Zeilen / Dicke Überschrift `
                                Das ist hier angegeben:
                                @pix:

                                Kleine Variante:

                                CODE: ALLES AUSWÄHLEN

                                var formatierungen = ''; // CSS Formatierungen der Tabelle `
                                Es sind CSS Formatierungen. Um das etwas besser zu bearbeiten kannst du auch im Widget Basic HTML die Formatierungen angeben:

                                Das habe ich glaube ich verstanden. Ich habe den Code copiert und im widget beider Karteikarte CSS eingefügt. Jetzt habe ich eine Tabelle die jede zweite Zeile grau hinterlegt ist. Schonmal schicker als vorher. Kann ich hier auch die Spaltenbreiten ändern?

                                Damit gilt das für die ganze Seite. Deshalb empfehle ich die Verwendung von Klassen oder ID (hier zB "sprit") für die einzelnen Tabellen, damit verschiedene Tabellen auf der Seite nicht alle gleich formatiert werden.

                                var formatierungen = ''; // CSS Formatierungen der Tabelle 
                                                var tabelle = formatierungen + ''; // ggf weitere Formatierungen
                                
                                oder eben im Widget analog dazu zum Beispiel für __th__:
                                 Du kannst für die Formatierung ein eigenes Widget anlegen oder die Formatierung mit in das Widget mit der Tablelle reinlegen, egal.
                                
                                Die Beiden oberen Absätze habe ich nicht verstanden, kannst du mir nochmal erklären was ich damit anfangen kann?
                                
                                ~~@Sven2013:~~ 
                                
                                > 2\. Kann ich auch Benzinpreise einlesen statt Diesel? Denn wenn ich den Wert diesel in super oder super E5 ändere hängt sich das script nur auf. `  
                                
                                Ja, das geht natürlich, da Tankerkönig auch die E5 und E10 Preise mitliefert. Statt "Diesel" wird das Wort "E5" bzw. "E10" verwendet.
                                
                                Vielen Dank das klappt super!
                                
                                Gruß Sven
                                
                                | Station | Straße | Preis |
                                | --- | --- | --- |
                                
                                ```` ` 
                                1 Reply Last reply Reply Quote 0
                                • P
                                  pix last edited by

                                  @Sven2013:

                                  Das habe ich glaube ich verstanden. Ich habe den Code copiert und im widget beider Karteikarte CSS eingefügt. Jetzt habe ich eine Tabelle die jede zweite Zeile grau hinterlegt ist. Schonmal schicker als vorher. Kann ich hier auch die Spaltenbreiten ändern?

                                  Damit gilt das für die ganze Seite. Deshalb empfehle ich die Verwendung von Klassen oder ID (hier zB "sprit") für die einzelnen Tabellen, damit verschiedene Tabellen auf der Seite nicht alle gleich formatiert werden.

                                  CODE: ALLES AUSWÄHLEN

                                  var formatierungen = ''; // CSS Formatierungen der Tabelle

                                  var tabelle = formatierungen + ''; // ggf weitere Formatierungen

                                  oder eben im Widget analog dazu zum Beispiel für th:

                                  CODE: ALLES AUSWÄHLEN

                                  Du kannst für die Formatierung ein eigenes Widget anlegen oder die Formatierung mit in das Widget mit der Tablelle reinlegen, egal.

                                  Die Beiden oberen Absätze habe ich nicht verstanden, kannst du mir nochmal erklären was ich damit anfangen kann?

                                  Hallo Sven,

                                  vielen Dank, der Urlaub war sehr schön.

                                  Die CSS Fomatierungen kann mann entweder direkt im Skript mit einbauen (wobei man bei jeder Änderung ja das Skript neu starten müsste) oder in VIS unterbringen.

                                  Letzteres bringt einige Vorteile:

                                  Du kannst die Formatierung in Attribute innerhalb eines Basic HTML Widgets schreiben. Da jedes Widget aller Views beim Laden der Projekts mitgeladen wird, werden auch die Formatierungen auf alle Elemente des Projekts angewendet. Das muss einem klar sein, wenn man an mehreren Stellen zB HTML Tabellen oder Listen verwendet.

                                  Ob du ein eigenes Basic HTML Widget verwendest oder die Style-Anweisungen in das gleiche Widget wie das Binding schreibst, spielt also keine Rolle.

                                  EDIT 18.9.15 (pix): Ich empfehle die Nutzung des CSS Editors in VIS

                                  Für die doppelte Höhe einer Reihe/Zeile geht zB

                                  tr {
                                      line-height: 2em;
                                  }
                                  ````oder in diesem Falle
                                  
                                  

                                  #sprit tr {
                                  line-height: 2em;
                                  }

                                  
                                  Gruß
                                  
                                  Pix
                                  
                                  | Station | Straße | Preis |
                                  | --- | --- | --- | ` 
                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    Sven2013 last edited by

                                    Hallo Pix,

                                    vielen Dank für deine Erklärung. ich habe das soweit verstanden. Allerdings habe ich noch eine Frage:

                                    Wo binde ich die CSS Formatierung im Widget genau ein?

                                    Gruß Sven

                                    1 Reply Last reply Reply Quote 0
                                    • P
                                      pix last edited by

                                      @Sven2013:

                                      Wo binde ich die CSS Formatierung im Widget genau ein? `
                                      Hallo Sven,

                                      am besten im Basic HTML Widget. Hie ein Screenshot mit einer Beispiel-CSS-Anweisung: 261_bildschirmfoto_2015-09-17_um_02.01.43.jpg

                                      Gruß

                                      Pix

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        Sven2013 last edited by

                                        Hallo Pix,

                                        hab es hinbekommen :-)) Natürlich nur dank dir. 1000 Dank für deine Geduld.

                                        Gruss Sven

                                        1 Reply Last reply Reply Quote 0
                                        • F
                                          Fitti last edited by

                                          So, wollte auch das hier testen. Vorab - es geht nun, aber mit ein paar Startschwierigkeiten:

                                          API besorgt und eingetragen. Ist nun alles mittlerweile etwas unübersichtlich geworden. Ich habe Diesel, also habe ich das Skript aus http://forum.iobroker.org/viewtopic.php?f=32&t=614&p=11530&hilit=Spritpreise+einlesen#p10482 genommen.

                                          <u><size size="150">1.) Fehler:</size></u>

                                          Im logging kommt nach dem Start des Skriptes der Fehler:

                                          ! javascript-1 2015-09-18 18:07:49 error at script.js.Billigste_Tankstelle:48:18
                                          ! javascript-1 2015-09-18 18:07:49 error script.js.Billigste_Tankstelle: TypeError: Cannot call method 'split' of undefined

                                          Also scheint er Probleme beim Auslesen meiner Java-Instanz zu haben. Ich habe auch extra eine weitere angelegt - also java.1

                                          Der betroffene Code ist:

                                          var dpID = getIdByName('Billigste Tankstelle - JSON');
                                          var teile = dpID.split('.');
                                          

                                          Wenn ich nun in den Objekten schaue sehe ich die angelegten Variable:
                                          578_2015-09-18_1813.png

                                          Warum klappt das nicht beim allerersten mal? Bei einem Neustart des Skriptes ging es dann.

                                          <u><size size="150">2.) Fehler:</size></u>

                                          Starte ich nun noch einmal JS.1 und das Skript neu, kommen folgende Fehler:

                                          ! bananapi 2015-09-18 18:16:19 info host.bananapi Restart adapter system.adapter.javascript.1 because enabled
                                          ! bananapi 2015-09-18 18:16:19 error host.bananapi instance system.adapter.javascript.1 terminated with code 6 (uncaught exception)
                                          ! javascript.1 2015-09-18 18:16:19 error TypeError: Cannot read property '0' of undefined at Request._callback (script.js.Billigste_Tankstelle:82:71) at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modul
                                          ! javascript.1 2015-09-18 18:16:19 error uncaught exception: Cannot read property '0' of undefined
                                          ! javascript.1 2015-09-18 18:16:19 info javascript.1 script.js.Billigste_Tankstelle: Billigste Station im Radius von 5km
                                          ! javascript.1 2015-09-18 18:16:19 info javascript.1 script.js.Billigste_Tankstelle: –------------ Spritpreise -----------
                                          ! javascript.1 2015-09-18 18:16:19 info javascript.1 script.js.Billigste_Tankstelle: registered 1 subscription and 1 schedule
                                          ! javascript.1 2015-09-18 18:16:19 info javascript.1 script.js.Billigste_Tankstelle: Spritpreis - Geokoordinaten aus Javascript-Adapter gelesen
                                          ! javascript.1 2015-09-18 18:16:19 info javascript.1 Start javascript script.js.Billigste_Tankstelle
                                          ! javascript.1 2015-09-18 18:16:18 info javascript.1 received all objects
                                          ! javascript.1 2015-09-18 18:16:16 info javascript.1 received all states
                                          ! javascript.1 2015-09-18 18:16:11 info javascript.1 requesting all objects
                                          ! javascript.1 2015-09-18 18:16:11 info javascript.1 requesting all states
                                          ! javascript.1 2015-09-18 18:16:11 info javascript.1 starting. Version 0.5.7 in /opt/iobroker/node_modules/iobroker.javascript
                                          ! bananapi 2015-09-18 18:16:05 info host.bananapi instance system.adapter.javascript.1 started with pid 16610
                                          ! bananapi 2015-09-18 18:15:35 info host.bananapi Restart adapter system.adapter.javascript.1 because enabled
                                          ! bananapi 2015-09-18 18:15:35 error host.bananapi instance system.adapter.javascript.1 terminated with code 6 (uncaught exception)
                                          ! javascript.1 2015-09-18 18:15:35 error uncaught exception: Cannot read property '0' of undefined
                                          ! javascript.1 2015-09-18 18:15:35 info javascript.1 script.js.Billigste_Tankstelle: Billigste Station im Radius von 5km
                                          ! javascript.1 2015-09-18 18:15:35 info javascript.1 script.js.Billigste_Tankstelle: -------------- Spritpreise -----------
                                          ! javascript.1 2015-09-18 18:15:34 info javascript.1 script.js.Billigste_Tankstelle: registered 1 subscription and 1 schedule
                                          ! javascript.1 2015-09-18 18:15:34 info javascript.1 script.js.Billigste_Tankstelle: Spritpreis - Geokoordinaten aus Javascript-Adapter gelesen
                                          ! javascript.1 2015-09-18 18:15:34 info javascript.1 Start javascript script.js.Billigste_Tankstelle
                                          ! javascript.1 2015-09-18 18:15:33 info javascript.1 received all objects
                                          ! javascript.1 2015-09-18 18:15:30 info javascript.1 received all states
                                          ! javascript.1 2015-09-18 18:15:25 info javascript.1 requesting all objects
                                          ! javascript.1 2015-09-18 18:15:25 info javascript.1 requesting all states
                                          ! javascript.1 2015-09-18 18:15:25 info javascript.1 starting. Version 0.5.7 in /opt/iobroker/node_modules/iobroker.javascript

                                          Hier fehlten schlicht meine Koordinaten in der js.1.

                                          Der Code

                                          if (geo && geo.native) {
                                              breite = geo.native.latitude;
                                              laenge = geo.native.longitude;
                                              if (logging) log('Spritpreis - Geokoordinaten aus Javascript-Adapter gelesen');
                                          } else { // falls nicht in den Adaptereinstellungen festgelegt, manuelle Werte
                                              breite = '48';
                                              laenge = '11';
                                              if (logging) log('Spritpreis - Geokoordinaten manuell eingetragen');
                                          }
                                          

                                          scheint also nicht zu funktionieren - es wird nicht sauber die leeren Einträge abgefangen.

                                          <u>Eine Bitte vielleicht noch an pix:</u>

                                          Kannst Du nicht im ersten Posting die fertigen Scripte eintragen - bei über 100 Einträgen steigt man da kaum noch durch. :?

                                          Aber viel wichtiger: Danke für die coole Arbeit!

                                          So long,

                                          Fitti

                                          1 Reply Last reply Reply Quote 0
                                          • P
                                            pix last edited by

                                            @Fitti:

                                            Warum klappt das nicht beim allerersten mal? Bei einem Neustart des Skriptes ging es dann. `
                                            Wenn ich das wüsste, würde ich nicht jedes mal wieder ansagen, die Instanz neu zu starten. Also ist der 1. Fehler kein Fehler, mehr ein Stolperstein.
                                            @Sven2013:

                                            scheint also nicht zu funktionieren - es wird nicht sauber die leeren Einträge abgefangen. `
                                            Der Code funktioniert, aber nur, wenn die Daten in den Javascript Einstellungen hinterlegt sind. Deshalb habe ich den Code dahin geändert. Im alten Code wurden die Variablen noch manuell befüllt.
                                            @Fitti:

                                            Kannst Du nicht im ersten Posting die fertigen Scripte eintragen `
                                            Nee, das kann ich leider nicht. Denn

                                            • Das Ganze ist so gewachsen. Der erste Code wird veröffentlicht und von allen beteiligten Forumsmitglieder diskutiert, verbessert und in verschiedene Richtungen, nach verschiedenen Bedürfnissen verändert und meist verbessert.

                                            • Das ist kein Adapter mit Garantie. Es ist ein Skript, ein Vorschlag. Es gibt immer viele Wege. Mal macht es Sinn, den einen sauberen Weg zu gehen, mal geht man den schnellen und schmutzigen und mal benutzt man einfach ein Schnipsel, den man selbst noch nicht ganz kapiert.

                                            • Die Sammlung fertiger (funktionierender) Skripte liegt in der Doku. Solange ein Skript nicht ausreichend gut durchläuft, sollte es aber nicht dorthin. Das erzeugt mehr Verwirrung als Durchblick.

                                            @Fitti:

                                            Aber viel wichtiger: Danke für die coole Arbeit! `
                                            Das freut mich sehr. Danke.

                                            😛

                                            Gruß

                                            Pix

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.2k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            24
                                            125
                                            33975
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo