Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ideen für die Weiterentwicklung #22

Open
Pix--- opened this issue Nov 25, 2018 · 17 comments
Open

Ideen für die Weiterentwicklung #22

Pix--- opened this issue Nov 25, 2018 · 17 comments

Comments

@Pix---
Copy link
Collaborator

Pix--- commented Nov 25, 2018

Lose Ideensammlung für die Weiterentwicklung des Adapters:

  • zu jeder Station manuell auszufüllende Felder mit Geodaten zufügen. Die könnten später in VIS verwendet werden
  • o.g. Felder ggf. durch eine innerhalb der Einstellungen manuelle ausgelöste Abfrage der Tankerkönig detail.php mit weiteren Inforamtionen füllen, die über die standardmäßig vom Adapter genutzte Abfrage nicht kommen. Diese brauchen ja nur für die Einrichtung einmal vom tankerkönig- Server geladen werden.
  • zu jeder Station ein Feld für ein Logo
  • eine frei definierbare Pausenzeit, in der keine Abfragen gemacht werden
  • Zufallsgenerator für die Startminute zwischen 1 und 4 bei Adapterstart (schedule("1 * * * *")), um Häufungen der Abfragen beim Server abzufedern (läuft seit 2.0.0 mit eigenem Timer)
  • Ähnlich wie auf der Webseite von tankerkoenig.de auch die letzte Preisänderung mit Timestamp abspeichern (nicht in cheapest)
@Schweizer75
Copy link

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

@Pix---
Copy link
Collaborator Author

Pix--- commented Oct 4, 2019

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

@OLFDB
Copy link

OLFDB commented Mar 22, 2020

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

@Pix---
Copy link
Collaborator Author

Pix--- commented Mar 25, 2020

Hallo, welchen Link meinst Du?

@m-s-b
Copy link

m-s-b commented May 26, 2020

@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.

@ppb1308
Copy link

ppb1308 commented Jul 29, 2020

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.

@Pix---
Copy link
Collaborator Author

Pix--- commented Jul 29, 2020

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

@KrX3D
Copy link

KrX3D commented Oct 2, 2021

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

@Pix---
Copy link
Collaborator Author

Pix--- commented Oct 3, 2021

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

@KrX3D
Copy link

KrX3D commented Oct 3, 2021

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.

@Pix---
Copy link
Collaborator Author

Pix--- commented Oct 3, 2021

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

@KrX3D
Copy link

KrX3D commented Oct 13, 2021

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

@maximilianfh
Copy link

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...

@xXBJXx
Copy link
Contributor

xXBJXx commented Jan 9, 2023

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

@maximilianfh
Copy link

@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!

@MARTHossR
Copy link

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.

@xXBJXx
Copy link
Contributor

xXBJXx commented Jan 28, 2023

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants