Für Javascript in ioBroker mal schnell was mit Hilfe der allseits bekannten Suchmaschine zusammengebastelt. VIN und TOKEN müssen natürlich ersetzt werden. Nutzung auf Eigene Gefahr!
Es kommen Daten an. Und in den headers steht auch was Brauchbares: {"ratelimit-limit":"20","ratelimit-remaining":"17","ratelimit-reset":"2880"...
Evtl. kann man mit den möglichen 3 Tokens und 3 versetzten schedules dann ja minütlich den Status abholen...
Code
const url = 'https://public.api.connect.skoda-auto.cz/api/v1/vehicles/VIN';
const options = {
headers: {
'X-API-Key': 'TOKEN'
},
timeout: 2000
// responseType: 'text'
};
const targetPathHeader = 'javascript.0.enyaq.api.header';
const targetPathData = 'javascript.0.enyaq.api.data';
// Funktion zum rekursiven Erstellen und Befüllen der Datenpunkte
function jsonToStates(path, obj) {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
let currentPath = path + '.' + key;
let val = obj[key];
if (typeof val === 'object' && val !== null && !Array.isArray(val)) {
// Wenn es ein verschachteltes Objekt ist, tiefer gehen
jsonToStates(currentPath, val);
} else {
// Arrays für ioBroker in Strings umwandeln oder als JSON speichern
if (Array.isArray(val)) {
val = JSON.stringify(val);
}
// Datenpunkt erstellen (falls nicht vorhanden) und Wert schreiben
createState(currentPath, val, {
read: true,
write: true,
name: key,
type: typeof val
}, () => {
setState(currentPath, val, true);
});
}
}
}
}
function pollAndStoreData() {
httpGet(url, options, async (err, response) => {
if(err) {
console.log('Error: ' + err);
return;
}
if (response.statusCode) {
console.log('Status-Code: ' + response.statusCode);
} else {
console.log("No Status-Code");
}
if (response.headers) {
console.log('response.headers: ' + JSON.stringify(response.headers));
let headers = response.headers;
if (typeof headers === 'string') { // Falls die API reinen Text liefert, zuerst in ein Objekt umwandeln
try {
headers = JSON.parse(headers);
} catch (e) {
log('Fehler beim Parsen des JSON: ' + e, 'warn');
return;
}
}
jsonToStates(targetPathHeader, headers); // JSON-Struktur in ioBroker-Objekte schreiben
} else {
console.log("No headers");
}
if (response.data) {
console.log('response.data: ' + JSON.stringify(response.data));
let data = response.data;
if (typeof data === 'string') { // Falls die API reinen Text liefert, zuerst in ein Objekt umwandeln
try {
data = JSON.parse(data);
} catch (e) {
log('Fehler beim Parsen des JSON: ' + e, 'warn');
return;
}
}
jsonToStates(targetPathData, data); // JSON-Struktur in ioBroker-Objekte schreiben
} else {
console.log("No data");
}
});
}
schedule('{"time":{"start":"00:00","end":"23:59","mode":"minutes","interval":6},"period":{"days":1}}', function(){
pollAndStoreData();
});
Alles anzeigen
Edit hat noch mal nachgerechnet und 2 Zahlen korrigiert.