Hallo Leute,
vorneweg - DANKE für das Script, denn es hat mir in letzter Zeit sehr viel Geld erspart
Ich habe das Problem mit den Logos folgendermaßen gelöst, wobei ich gleich sagen muss, dass ich ein absoluter Beginner in Sachen javascript bin, aber vielleicht hilft es euch bzw. ihr bekommt dadurch Tipps:
Code:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// "Spritpreise_AT v.0.5" //
// e-control Spritpreise //
// ursprüngl. Script von steinejo_io vom //
// //
// Zwingend erforderlich sind der Parser Adapter und die URL aus der API. Links und Hilfe zum Erstellemn findet ihr im Folgenden Lnk: //
// https://forum.iobroker.net/topic/20314/skripten-des-e-control-spritpreisrechners
// Link Essling: https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.213813&longitude=16.486721&fuelType=DIE&includeClosed=true //
// Link Region: https://api.e-control.at/sprit/1.0/search/gas-stations/by-region?code=922&type=PB&fuelType=DIE&includeClosed=true
// Das manuelle Anlegen von Daenpunkten ist nicht mehr notwendig. erledigt das Script beim ersten Aufruf. //
// Auf das "E" Zeichen habe ich verzichtet, da es in VIS genz einfach an der jeweils gewünschten Stelle produzierbar ist. //
// //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
on({id: "parser.0.Spritpreisrechner"/*Spritpreisrechner*/, change: 'any'}, function(obj)
{
log("Start Spritvergleich");
var gasStation = JSON.parse(obj.state.val);
if (gasStation.length === 0) return;
//Aral=1, eni=2, Shell=3, OMV=4, avanti=5, bp=6, JET=7, Turmöl=8, Genol=9, AVIA=10, A1=11, DISKONT=12
var arrMarke = ['Aral', 'eni', 'Shell', 'OMV', 'avanti', 'bp', 'JET', 'Turmöl', 'Genol', 'AVIA', 'A1', 'DISKONT'];
var i = 0;
for (var i = 1; i <= 5; i++) {
//console.log(i);
//console.log("javascript.0.scriptDatenPunkte.Sprit_AT.name_"+i);
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".Name_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".Preis_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".PreisP_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".Strasse_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".PLZ_Ort_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".Logo_"+i, {type: "number", name: "Logo "+i, read: true, write: true});
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".Latitude_"+i, {type: "number", name: "Latitude "+i, read: true, write: true});
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".Longitude_"+i, {type: "number", name: "Longitude "+i, read: true, write: true});
createState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+i+".offen_"+i, {type: "boolean", name: "offen "+i, read: true, write: true});
}
var index = 0;
//for (index = 0; index < gasStation.length; ++index) {
for (index = 0; index <= 4; ++index) {
var arrname = gasStation[index].name.split(' ');
if (arrname.length > 0) {
var markenname = arrname[0];
}
else
{
var markenname = gasStation[index].name;
}
var station = gasStation[index].name;
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".Name_"+(index+1), markenname);
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".Preis_"+(index+1), (gasStation[index].prices[0].amount).toString().replace(".",","));
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".PreisP_"+(index+1), (gasStation[index].prices[0].amount).toString().replace(".","."));
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".Strasse_"+(index+1), (gasStation[index].location.address));
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".PLZ_Ort_"+(index+1), (gasStation[index].location.postalCode) + " " + (gasStation[index].location.city));
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".Latitude_"+(index+1), (gasStation[index].location.latitude));
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".Longitude_"+(index+1), (gasStation[index].location.longitude));
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".offen_"+(index+1), (gasStation[index].open));
//Aral=1, eni=2, Shell=3, OMV=4, avanti=5, bp=6, JET=7, Turmöl=8, Genol=9, AVIA=10, A1=11, DISKONT=12
var markennameklein=markenname.toLowerCase();
var x= 0;
for (x=0; x < arrMarke.length; x++) {
var arrMklein=arrMarke[x].toLowerCase();
//console.log("x=" + x + "/ Markennameklein =" + markennameklein + "/ Array =" + arrMklein);
if (arrMklein == markennameklein) {
setState("javascript.0.scriptDatenPunkte.Sprit_AT.Treffer_"+(index+1)+".Logo_"+(index+1), (x+1));
}
}
}
log("Ende Spritvergleich");
});
Dann die Logos der Tankstellen einfach mit nummern bezeichnen und am iobroker Server ablegen:
//Aral=1, eni=2, Shell=3, OMV=4, avanti=5, bp=6, JET=7, Turmöl=8, Genol=9, AVIA=10, A1=11, DISKONT=12
wie sieht es aus als View :
Nachdem wir 2 Autos haben (eines Diesel und eines Super) läuft das selbe script - nur mit einem Link zu den Superdaten nochmals -und davon hole ich mir dann die Daten zum anzeigen.
Hoffe es hilft euch - und guten Rutsch ins neue Jahr
lg
Klaus