Coder Social home page Coder Social logo

Comments (17)

ppb1308 avatar ppb1308 commented on August 24, 2024 1

Hallo,
wäre es möglich zu jeder Option ein Objekt "cheapest" als Boolean anzulegen und dies auf true zu setzen nach der Abfrage, wenn diese Station die günstigste der selektierten Stationen ist?
Hintergrund: Ich möchte in der Vis die günstigste Station in einer anderen Farbe oder mit einem Badge im Tile darstellen, ich habe versucht das mittels binding in dem Metro String Tile im Feld Zustand ID zu realisieren, aber das geht leider irgendwie nicht. Daher wäre ein Boolean mit Kennzeichnung ob günstigste oder nicht toll.

from iobroker.tankerkoenig.

Pix--- avatar Pix--- commented on August 24, 2024 1

Hi, im Tankstellenfinder bekommt man diese Werte:

[ { "id": "XXXXXXX-XXXX-4867-XXXX-13999a44915c", "name": "SB-Markttankstelle XXX XXX Str.", "brand": "SB-Markttankstelle", "street": "XXXXX Str.", "house_number": "1 b", "post_code": XXXXX, "place": "XXXXXXX", "lat": XX.XXX, "lng": XX.XXXX, "isOpen": true } ]

Es wäre schön, wenn all diese Punkte als Datenpunkte vorhanden wären. Mich interessiert vor allem die Adresse. Denn dann könnte ich die billigste Tankstelle abfragen und würde die Adresse dazu direkt an mein Navigationsystem im Auto bekommen

Hallo, welchen Link meinst Du?

Dieser Link ist wohl gemeint.

https://creativecommons.tankerkoenig.de/TankstellenFinder/index.html

Ich kann gerade den Adapter nicht updaten. Aber ich kann dir ein Skript anbieten, das genau das tut, was du machst. Es holt, bei Änderung des niedrigsten Preises die Details ab.
Du musst axios in den Javascript Einstellungen als npm-Paket hinterlegen und dein persönlichen API oben im Skript eintragen. Es legt die Datenpunkte in der Javascript Instanz ab, dann kannst du sie weitervewenden.

/* test_spritcheapest_adresse

Skript meldet Adresse, wenn Cheapest im Tankerkoenig-Adapter sich ändert

Voraussetzung: axios ersetzt request

02.10.2021 von Pix erstellt

*/

const api = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"; // API des Users - Anonymisieren!

let logging = true; // (true;false) Logausgabe zentral schalten

if (logging) log("Skript " + name + " in der Javascript-Instanz " + instance + " gestartet");

const path = "Sprit.Tankerkoenig.billigsteTankstelle.Adresse.";
let idJSON =    path + "json";
// Objekte erstellen (mit Struktur)
createState(idJSON, {name: "Billigste Tankstelle - JSON"});

createState(path + "Name", {name: "Billigste Tankstelle - Name"});
createState(path + "Marke", {name: "Billigste Tankstelle - Marke"});
createState(path + "ID", {name: "Billigste Tankstelle - ID"});
createState(path + "Strasse", {name: "Billigste Tankstelle - Strasse"});
createState(path + "Hausnummer", {name: "Billigste Tankstelle - Hausnummer"});
createState(path + "PLZ", {name: "Billigste Tankstelle - PLZ"});
createState(path + "Ort", {name: "Billigste Tankstelle - Ort"});
createState(path + "GeoLaenge", {name: "Billigste Tankstelle - geografische Laenge", unit: "°"});
createState(path + "GeoBreite", {name: "Billigste Tankstelle - geografische Breite", unit: "°"});


async function loadDetails() {
    // StationID und API-Code aus Adapter auslesen und damit IP Abfragen
    let station_id = getState("tankerkoenig.0.stations.cheapest.diesel.station_id").val;

    let url = "https://creativecommons.tankerkoenig.de/json/detail.php?id=" + station_id + "&apikey=" + api;

    // @ts-ignore
    const axios = require("axios"); // In den Javascript Adapter Einstellungen hinterlegen

    try {
        let res = await axios.get(url);
        if (res.status == 200) {
            let result = res.data;
            let data = JSON.stringify(result, null, 2);
            setState(idJSON, data, function() {
                if (logging) log(data);
            });
            
            if (result) {
                if (logging) {
                    log("-------------- Spritpreise -----------");
                    log("Name:                     " + result.station.name); 
                    log("Marke:                    " + result.station.brand); 
                    log("ID:                       " + result.station.id); 
                    log("Strasse:                  " + result.station.street); 
                    log("Hausnummer:               " + (result.station.houseNumber === undefined) ? " " : result.station.houseNumber);
                    log("PLZ:                      " + result.station.postCode); 
                    log("Stadt:                    " + result.station.place); 
                    log("Geografische Breite:      " + result.station.lat + "°"); 
                    log("Geografische Länge:       " + result.station.lng + "°");  
                    log("--------------------------------------");                    
                }
                setState(path + "Name", result.station.name);
                setState(path + "Marke", result.station.brand);
                setState(path + "ID", result.station.id);
                setState(path + "Strasse", result.station.street);
                setState(path + "Hausnummer", (result.station.houseNumber === undefined) ? " " : result.station.houseNumber);
                setState(path + "PLZ", result.station.postCode);
                setState(path + "Ort", result.station.place);
                setState(path + "GeoBreite", result.station.lat);
                setState(path + "GeoLaenge", result.station.lng);

                log("Spritpreise eingelesen (billigste Tankstelle) - kein Fehler");
                
            }
        } else log("Spritpreise einlesen - Seitenfehler: " + res.statusText);
    } catch (err) {
        log("Try/Catch-Error " + err);
    }   // Ende request 
}

// Trigger-Datenpunkt
const idTrigger = "tankerkoenig.0.stations.cheapest.diesel.short";
// Bei Änderung Adresse nachladen
on(idTrigger, function(obj) {
    if (logging) log("Trigger ausgelöst, niedrigster Spritpreis geändert");
    loadDetails();
});
loadDetails(); // Bei Skriptstart

from iobroker.tankerkoenig.

Pix--- avatar Pix--- commented on August 24, 2024 1

Javascript Adapter Einstellungen öffnen /Instanzen/Javascript Schraubenschlüssel. Darin Zusätzlich npm-Module installieren. axios eintragen und speichern. Instanz wird neu gestartet. Kinderleicht.
axios npm modul

from iobroker.tankerkoenig.

Schweizer75 avatar Schweizer75 commented on August 24, 2024

Ich benötige zuhause nur Super und auf der Arbeit nur Diesel, eine möglichkeit zu wählen welche Benzin sorte ich abfragen möchte wäre nicht schlecht!

grüsse

from iobroker.tankerkoenig.

Pix--- avatar Pix--- commented on August 24, 2024

Es wird nicht die Sorte abgefragt, sondern die Station. Die Antwort ist dann die Liste der angebotenen Sorten mit Preisen und ob die Station geöffnet ist.
Der Adapter nimmt natürlich alle Infos auf, die geliefert werden.

Sent with GitHawk

from iobroker.tankerkoenig.

OLFDB avatar OLFDB commented on August 24, 2024

Ein Link zum Tankstellenfinder auf der Konfigurationsseite Adapterkonfiguration->Tankstellen wäre schön.

from iobroker.tankerkoenig.

Pix--- avatar Pix--- commented on August 24, 2024

Hallo, welchen Link meinst Du?

from iobroker.tankerkoenig.

m-s-b avatar m-s-b commented on August 24, 2024

@Pix---
Erstmal Danke für den Adapter, läuft schon längere Zeit zuverlässig. Hätte noch zwei Verbesserungswünsche:

  • "manueller Trigger" Eigentlich reicht mir für die Abfrage der Preise ein relativ langes Zeitintervall aus. Ich würde jedoch gerne bevor ich das Haus verlasse manuell die Preise abfragen lassen damit ich weiß ob ich zur günstigsten Tankstelle links oder rechts abbiegen muss...
  • "Nullen wenn geschlossen" Wäre es möglich, die Datenpunkte/Preise der Tankstelle auf 0 zu setzen wenn diese geschlossen ist? Die Information wird ja im Datenpunkt "status" dargestellt. Die Option vor dem Abruf auf 0 setzen liefert leider unschöne Ergebnisse beim aufzeichnen. Die Nullen über die Entprellzeit des SQL-Adapters rausfiltern funktioniert leider nicht zuverlässig.

from iobroker.tankerkoenig.

Pix--- avatar Pix--- commented on August 24, 2024

Hallo @ppb1308,
in nächster Zeit wird es kein Update geben, es sind Ferien und der Nachwuchs will beschäftigt werden :-D
Du kannst über die Bindings allerdings schon die heraushebende Darstellung der günstigsten Station realisieren. Ich verstehe richtig, du hast für jede Station ein Metro Tile?
Du kannst zB die Hintergrundfarbe über ein Binding ändern. Frag in dem Binding ab, ob der Preis von cheapest niedriger ist als der der aktuellen Station. Wenn ja, dann normale Darstellung. Wenn gleich (niedriger sollte eigentlich nicht möglich sein), dann ist es die Günstigste und bekommt eine andere Farbe. Das hat auch einen weiteren Vorteil: Es können mehrere Stationen mit gleich günstigem Preis markiert werden. Der Adapter führt nur eine günstigste auf, abhängig von der Listenposition in der Konfiguration.

Pix

from iobroker.tankerkoenig.

KrX3D avatar KrX3D commented on August 24, 2024

Hi,
im Tankstellenfinder bekommt man diese Werte:

[ { "id": "XXXXXXX-XXXX-4867-XXXX-13999a44915c", "name": "SB-Markttankstelle XXX XXX Str.", "brand": "SB-Markttankstelle", "street": "XXXXX Str.", "house_number": "1 b", "post_code": XXXXX, "place": "XXXXXXX", "lat": XX.XXX, "lng": XX.XXXX, "isOpen": true } ]

Es wäre schön, wenn all diese Punkte als Datenpunkte vorhanden wären. Mich interessiert vor allem die Adresse. Denn dann könnte ich die billigste Tankstelle abfragen und würde die Adresse dazu direkt an mein Navigationsystem im Auto bekommen

Hallo, welchen Link meinst Du?

Dieser Link ist wohl gemeint.

https://creativecommons.tankerkoenig.de/TankstellenFinder/index.html

from iobroker.tankerkoenig.

KrX3D avatar KrX3D commented on August 24, 2024

cool, vielen danke werde ich mal ausprobieren.

Du musst axios in den Javascript Einstellungen als npm-Paket hinterlegen

Könntest du mir genauer erklären wie ich dies hinbekomme? Ich bin relativ neu mit all dem ganzen.

EDIT: hat sich erledigt. Funktioniert nun.

from iobroker.tankerkoenig.

KrX3D avatar KrX3D commented on August 24, 2024

Hi, noch ein kleiner Verbesserungsvorschlag.
Es wäre schön wenn bei jeder Tankstelle noch die Öffnungszeiten eingepflegt würden, bsp.:

"openingTimes": [ { "text": "Mo-Fr", "start": "07:00:00", "end": "19:00:00" }, { "text": "Samstag", "start": "08:00:00", "end": "17:00:00" }

Ich hatte dein Script auch ein wenig angepasst. Vielleicht hilft es ja irgendjemanden.

Eine Variable "fuel", um nicht mehrmals den ausgewählten Sprit im script ändern zu müssen.
Und es wird ein Datenpunkt "Adresse" mit der kompletten Adresse (inkl. <br*>) gesetzt. Macht die Darstellung in VIS einfacher.
Der Trigger wurde auch von short auf station_id umgestellt, da bei mir das Script nicht immer ausgeführt wurde, wenn sich der Spritpreis nicht geändert hat, jedoch sich die Billigste Tankstelle verändert hat.

`/* test_spritcheapest_adresse

Skript meldet Adresse, wenn Cheapest im Tankerkoenig-Adapter sich ändert

Voraussetzung: axios ersetzt request

02.10.2021 von Pix erstellt
10.10.2021 von KrX - Variable "fuel" um den Sprit auszuwählen - e5, e10, diesel
10.10.2021 von KrX - Datenpunkt "Adresse" wird mit der kompletten Adresse inkl
erstellt.
10.10.2021 von KrX - trigger wurde von short auf station_id umgestellt.
*/

const api = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"; // API des Users - Anonymisieren!

let logging = true; // (true;false) Logausgabe zentral schalten

if (logging) log("Skript " + name + " in der Javascript-Instanz " + instance + " gestartet");

const fuel = "e5"; // e5, e10, diesel
const path = "Tankerkoenig.billigsteTankstelle." + fuel + ".Adresse.";
let idJSON = path + "json";
// Objekte erstellen (mit Struktur)
createState(idJSON, {name: "Billigste Tankstelle - JSON"});

createState(path + "Name", {name: "Billigste Tankstelle - Name"});
createState(path + "Marke", {name: "Billigste Tankstelle - Marke"});
createState(path + "ID", {name: "Billigste Tankstelle - ID"});
createState(path + "Strasse", {name: "Billigste Tankstelle - Strasse"});
createState(path + "Hausnummer", {name: "Billigste Tankstelle - Hausnummer"});
createState(path + "PLZ", {name: "Billigste Tankstelle - PLZ"});
createState(path + "Ort", {name: "Billigste Tankstelle - Ort"});
createState(path + "GeoLaenge", {name: "Billigste Tankstelle - geografische Laenge", unit: "°"});
createState(path + "GeoBreite", {name: "Billigste Tankstelle - geografische Breite", unit: "°"});
createState(path + "Adresse", {name: "Billigste Tankstelle - Komplette Adresse"});

async function loadDetails() {
// StationID und API-Code aus Adapter auslesen und damit IP Abfragen
let station_id = getState("tankerkoenig.0.stations.cheapest." + fuel + ".station_id").val;
let url = "https://creativecommons.tankerkoenig.de/json/detail.php?id=" + station_id + "&apikey=" + api;

// @ts-ignore
const axios = require("axios"); // In den Javascript Adapter Einstellungen hinterlegen

try {
    let res = await axios.get(url);
    if (res.status == 200) {
        let result = res.data;
        let data = JSON.stringify(result, null, 2);
        setState(idJSON, data, function() {
            if (logging) log(data);
        });
        
        if (result) {
            if (logging) {
                log("-------------- Spritpreise -----------");
                log("Name:                     " + result.station.name); 
                log("Marke:                    " + result.station.brand); 
                log("ID:                       " + result.station.id); 
                log("Strasse:                  " + result.station.street); 
                log("Hausnummer:               " + (result.station.houseNumber === undefined) ? " " : result.station.houseNumber);
                log("PLZ:                      " + result.station.postCode); 
                log("Stadt:                    " + result.station.place); 
                log("Geografische Breite:      " + result.station.lat + "°"); 
                log("Geografische Länge:       " + result.station.lng + "°"); 
                log("Adresse           :       " + result.station.brand + "<br>" + result.station.street + " " + result.station.houseNumber + "<br>" + result.station.postCode + " " + result.station.place);  
                log("--------------------------------------");                    
            }
            setState(path + "Name", result.station.name);
            setState(path + "Marke", result.station.brand);
            setState(path + "ID", result.station.id);
            setState(path + "Strasse", result.station.street);
            setState(path + "Hausnummer", (result.station.houseNumber === undefined) ? " " : result.station.houseNumber);
            setState(path + "PLZ", result.station.postCode);
            setState(path + "Ort", result.station.place);
            setState(path + "GeoBreite", result.station.lat);
            setState(path + "GeoLaenge", result.station.lng);
            setState(path + "Adresse", " " + result.station.brand + "<br>" + result.station.street + " " + result.station.houseNumber + "<br>" + result.station.postCode + " " + result.station.place);
            
            log("Spritpreise eingelesen (billigste Tankstelle) - kein Fehler");
            
        }
    } else log("Spritpreise einlesen - Seitenfehler: " + res.statusText);
} catch (err) {
    log("Try/Catch-Error " + err);
}   // Ende request 

}

// Trigger-Datenpunkt
const idTrigger = "tankerkoenig.0.stations.cheapest." + fuel + ".station_id";
// Bei Änderung Adresse nachladen
on(idTrigger, function(obj) {
if (logging) log("Trigger ausgelöst, niedrigster Spritpreis geändert");
loadDetails();
});
loadDetails(); // Bei Skriptstart

from iobroker.tankerkoenig.

maximilianfh avatar maximilianfh commented on August 24, 2024

Hi, danke für den tollen Adapter!
Was mir noch fehlt ist die Anzeige von Super Plus, ich kann nur E5, E10 und Diesel sehen...

from iobroker.tankerkoenig.

xXBJXx avatar xXBJXx commented on August 24, 2024

@maximilianfh
Super Plus ist ein Premium Kraftstoff, diese wird nicht von der API angeboten, aus diesem Grund kann ich da auch nichts machen.

from iobroker.tankerkoenig.

maximilianfh avatar maximilianfh commented on August 24, 2024

@maximilianfh Super Plus ist ein Premium Kraftstoff, diese wird nicht von der API angeboten, aus diesem Grund kann ich da auch nichts machen.

Schade, da kann man nix machen... Vielen Dank für deine schnelle Antwort!

from iobroker.tankerkoenig.

MARTHossR avatar MARTHossR commented on August 24, 2024

Wäre schön, wenn der Name der Tankstelle im Adapter noch ein paar mehr Zeichen bekäme.
Wenn ich bspw. den Namen analog tankerkoenig.de verwenden möchte, schneidet es mir die letzten Zeichen ab.

Im folgenden Beispiel heißt die Tanke im Adapter dann nur "Honsel TS Reichensac"
{ "id": "c59e635e-9dfa-4d0a-84e9-baf6fa06fcc1", "name": "Honsel TS Reichensachsen", "brand": "Honsel", "street": "Landstrasse", "house_number": "121", "post_code": 37287, "place": "Wehretal - Reichensachsen", "lat": 51.15746307373, "lng": 10.000196456909, "isOpen": true }

Aber eigentlich ist das Jammern auf ganz hohem Niveau.
Der Adapter ist super.

from iobroker.tankerkoenig.

xXBJXx avatar xXBJXx commented on August 24, 2024

@MARTHossR
Ich kann das Feld maximal auf 34 Zeichen setzen, mehr passt in das Feld der Card nicht, wenn es noch mehr sein soll, muss ich die gesamte card überarbeiten.
Ich werde es im nächsten Release auf 34 Zeichen setzen.

from iobroker.tankerkoenig.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.