Ich habe auch einen Kona 2024. Mich interessiert eigentlich nichts außer der Batteriewert. Habe die Kommunikation der Bluelink-Iphone-App mit Burp Suite mitgeschnitten und mit Hilfe von Chatgpt (habe gar keine Ahnung von Javaskript) ein Skript entwickelt, das mir alle 10 Minuten den Batteriewert in einen Datenpunkt schreibt. Ist kein Adapter, aber es tut was es soll. Vielleicht kann jemand damit was anfangen:
const axios = require('axios');
const clientId = 'YOUR_CLIENT_ID'; // Ersetze mit deiner Client ID
const refreshToken = 'YOUR_REFRESH_TOKEN'; // Ersetze mit deinem Refresh Token
const tokenUrl = 'https://YOUR_API_URL/api/v1/user/oauth2/token'; // Ersetze mit der API-URL für den Token
const vehicleId = 'YOUR_VEHICLE_ID'; // Ersetze mit deiner Fahrzeug-ID
const carStatusUrl = `https://YOUR_API_URL/api/v1/spa/vehicles/${vehicleId}/ccs2/carstatus/latest`; // Ersetze mit der API-URL für Fahrzeugstatus
const deviceId = 'YOUR_DEVICE_ID'; // Ersetze mit deiner Device ID
async function getAccessToken() {
try {
const response = await axios.post(tokenUrl, `client_id=${clientId}&grant_type=refresh_token&redirect_uri=https%3A//YOUR_API_URL/api/v1/user/oauth2/redirect&refresh_token=${refreshToken}`, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
'Authorization': 'Basic YOUR_AUTHORIZATION_KEY', // Ersetze mit deinem Base64-codierten Auth Key
}
});
await getCarStatus(response.data.access_token);
} catch (error) {
console.error('Error getting access token:', error.response ? error.response.data : error.message);
}
}
async function getCarStatus(accessToken) {
try {
const response = await axios.get(carStatusUrl, {
headers: {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': `Bearer ${accessToken}`,
'Clientid': 'YOUR_CLIENT_ID', // Gleiche Client ID wie oben
'Ccsp-Service-Id': clientId,
'Ccsp-Application-Id': 'YOUR_APPLICATION_ID', // Ersetze mit der Application ID
'Ccsp-Device-Id': deviceId,
'User-Agent': 'YOUR_USER_AGENT', // Ersetze mit deinem User-Agent
'Cache-Control': 'no-cache'
}
});
const batteryRatio = response.data.resMsg.state.Vehicle.Green.BatteryManagement.BatteryRemain.Ratio;
setState('Datenpunkte.0.Sonstiges.Kona-Batterie', { val: batteryRatio, ack: true });
} catch (error) {
console.error('Error fetching car status:', error.response ? error.response.data : error.message);
}
}
getAccessToken();
schedule('*/10 * * * *', getAccessToken);