Comments (17)
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.
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.
Javascript Adapter Einstellungen öffnen /Instanzen/Javascript Schraubenschlüssel. Darin Zusätzlich npm-Module installieren. axios eintragen und speichern. Instanz wird neu gestartet. Kinderleicht.
from iobroker.tankerkoenig.
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.
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.
Ein Link zum Tankstellenfinder auf der Konfigurationsseite Adapterkonfiguration->Tankstellen wäre schön.
from iobroker.tankerkoenig.
Hallo, welchen Link meinst Du?
from iobroker.tankerkoenig.
@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.
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.
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.
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.
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.
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.
@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 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.
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.
@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)
- type error HOT 2
- [Bug]: error: TypeError: Cannot read properties of undefined HOT 5
- [Bug]: V3.3.0:Hausnummer wird nicht im Hausnummer-Feld eingetragen HOT 12
- [Bug]: axios HOT 1
- [Bug]: Wrong type “postCode” HOT 4
- [Feature]: Cheapest Station Boolean HOT 5
- error [ Adapter V:3.3.2 createObjects ] Error creating all states: TypeError: Cannot read property 'length' of undefined[Bug]: HOT 3
- [Bug]: Cheapest Station Boolean true even if not cheapest HOT 13
- [Bug]: [ Adapter V:3.3.2 createObjects ] Error creating all states: TypeError: Cannot read properties of null (reading 'length') HOT 9
- [Bug]: post code starting with 0 shown wrong HOT 3
- wrong object value tankerkoenig.0.stations.*.status resp. no updates for fuel prices until station shop opens, although 24/7 tank automate exists HOT 6
- Update stable version in repo from 3.1.0 to 3.3.5 HOT 1
- [Feature]: Preisdifferenz in Json Tabelle HOT 7
- Hoher Speicher Verbrauch HOT 7
- requestData axios response not ok HOT 3
- [Feature]: Grafana Dashboard link in Doku HOT 1
- Anzahl der Stationen erhöhen
- Abfragezeit von 10 auf 5Minuten ändern.[Feature]:
- [Feature]: Tankstelle geöffnet text ändern
- Update stable version in repo from 3.3.7 to 3.4.0 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from iobroker.tankerkoenig.