E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)

Begonnen von mnl1234, 26 November 2020, 08:50:37

Vorheriges Thema - Nächstes Thema

Rewe2000

Hallo Christian,

danke für den Link, habe deine Antwort erst eben gelesen.

Bei dir läuft ja die Software in einem Container, aber eine Info könntest du mir eventuell trotzdem geben.
Verwendest du die API-Codabfrage für Europa (stampMode und stampFile?
Und da ich ganz unverschämt bin, welche npm und node Version verwendest du, ich habe aktuell npm 10.5.0 und node 21.7.3 im Einsatz, da kommen aber Warnungen beim Start.
Ich hatte diese API-Codes nie eingebunden und es hatte immer funktioniert (bisher). Auch ein Versuch mit den Codes hat jedoch nicht geklappt.
Dann kann ich mir aktuell sparen alles neu zu installieren und warte lieber die geänderte Version ab.

Gruß Reinhard
Fhem 6.4 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

ch.eick

Bin grad unterwegs.
Schau mal bei den Anfänger Fragen, da ist das Thema auch nochmal drin und meine Version.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Rewe2000

Hallo Christian,

ich bin jetzt einen Schritt weiter, ich bekomme unter Linux nun Daten vom Fahrzeug, muss aber mein Abfragescript noch anpassen, da sich anscheinend die gelieferten Werte deutlich von EV3 zum e-Niro unterscheiden.
Da ich keine Ahnung von einen js Script habe, werde ich versuchen mal OpenAI zu bemühen.

Was habe ich gemacht:
npm, node und bluelinky komplett deinstalliert und folgende Versionen installiert:
npm 11.5.1
node 24.5.0
Bluelinky 10.0.0

Wahrscheinlich hätte die neueste Version von Bluelinky alleine gereicht, aber was solls, dann habe ich von npm und node auch wieder aktuelle Versionen.
Ich verwende auch aktuell keine API-Codes für Europa und die Abfrage klappt (derzeit) noch.

Leider habe ich keine Ausgabe von "node kia.js" vom e-Niro der Daten mehr, um zu vergleichen was sich da im gelieferten Datenformat geändert hat, dies würde mir die Anpassung erheblich erleichtern.

Gruß Reinhard

Fhem 6.4 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Rewe2000

Hallo,

so nun läuft jetzt alles wieder bei mit, dank ChatGPT.
Die Datenstruktur von KIA für den EV3 ist jetzt ganz anders als für den e-Niro.

Ich hole aktuell alle Werte für die Fahrzeugverriegelung (Fenster, Türen, Schiebedach, Motorhaube und Kofferaum) ab und übergebe an Fhem nur ein Reading ob das Fahrzeug verriegelt ist.
Zusätzlich noch SOC, Reichweite, Kilometerstand und SOC der 12V Batterie, Ladestecker, Längen und Breitengrad des Fahrzeugs.

Das geänderte js-Script hierzu, falls es jemand gebrauchen kann:
const {BlueLinky} = require('bluelinky');
const MQTT = require("async-mqtt");

// Hilfsfunktionen

// Zahlenwerte sicher abfragen
function safeValue(value) {
  return (typeof value === "number" && !isNaN(value)) ? value : null;
}
// Ladestecker 0/1 in Textrückmeldung wandeln
function connectorToText(value) {
    if (value === 1) return "gesteckt";    // Ladestecker gesteckt
    if (value === 0) return "entfernt";    // Ladestecker entfernt
    return "unbekannt";            // falls null oder undefined
}

// Sammelstatus: Fahrzeug verschlossen und alle Öffnungen zu
function isCarLockedAndClosed(status) {
    const doors = [
        status?.Cabin?.Door?.Row1?.Driver,
        status?.Cabin?.Door?.Row1?.Passenger,
        status?.Cabin?.Door?.Row2?.Left,
        status?.Cabin?.Door?.Row2?.Right
    ];

    const windows = [
        status?.Cabin?.Window?.Row1?.Driver,
        status?.Cabin?.Window?.Row1?.Passenger,
        status?.Cabin?.Window?.Row2?.Left,
        status?.Cabin?.Window?.Row2?.Right
    ];

    // Bedingung: jede Tür locked==0 und open==0
    const allDoorsClosedAndLocked = doors.every(d => d?.Lock === 0 && d?.Open === 0);

    // Bedingung: alle Fenster zu
    const allWindowsClosed = windows.every(w => w?.Open === 0);

    // Motorhaube & Kofferraum zu & Schiebedach zu
    const hoodClosed = status?.Body?.Hood?.Open === 0;
    const trunkClosed = status?.Body?.Trunk?.Open === 0;
    const roofClosed = status?.Body?.Sunroof?.Glass?.Open === 0;

    return allDoorsClosedAndLocked && allWindowsClosed && hoodClosed && trunkClosed && roofClosed;
}

const client = new BlueLinky({
    username: '<username>', // Username der KIA-APP
    password: '<password>', // Passwort der KIA-APP
    brand: 'kia',
    region: 'EU',
    pin: '<PIN>',           // PIN KIA-APP
    language: 'de'
});

client.on('ready', async () => {
    const vehicle = client.getVehicle('<Fahrgestellnummer>'); // Fahrgestellnummer des Fahrzeugs
    try {
        const status = await vehicle.status({ parsed: false, refresh: true })

        // Einzelwerte mit Sicherheitsprüfung
        const odo = safeValue(status?.Drivetrain?.Odometer);                            // Kilometerstand
        const ran = safeValue(status?.Drivetrain?.FuelSystem?.DTE?.Total);                    // Reichweite
        const soc = safeValue(status?.Green?.BatteryManagement?.BatteryRemain?.Ratio);                 // Stat of Charge
        const typ = connectorToText(safeValue(status?.Green?.ChargingInformation?.ConnectorFastening?.State));    // Ladestecker
        const bat = safeValue(status?.Electronics?.Battery?.Level);                        // 12 V Batterie SOC
        const lat = safeValue(status?.Location?.GeoCoord?.Latitude);                        // Fahrzeugposition Breitengrad
        const lon = safeValue(status?.Location?.GeoCoord?.Longitude);                        // Fahrzeugposition Längengrad

        // Sammelstatus ermitteln
        const carLocked = isCarLockedAndClosed(status) ? "verschlossen" : "offen";

        console.log("Kilometerstand:", odo);
        console.log("Reichweite:", ran);
        console.log("SOC:", soc);
        console.log("Ladestecker:", typ);
        console.log("12V Batterie:", bat);
        console.log("Fahrzeug gesamt:", carLocked);
        console.log("Breitengrad", lat);
        console.log("Längengrad", lon);


        // Nur wenn es auch Werte gibt, erfolgt die Sendung  nach MQTT
        if (typeof odo === "number" && !isNaN(odo) && typeof soc === "number" && !isNaN(soc)) {
            const mqttClient = await MQTT.connectAsync("mqtt://127.0.0.1:1883", {
            username:"<username fhem>", // Username für Fhem
            password:"<passwort fhem>"  // Passwort für Fhem
        });

        console.log("Sending to MQTT server");

        const options = { retain:true, qos:1 };
        await mqttClient.publish(
            "BluelinkCarStatus/<Fahrgestellnummer>", // Fahrgestellnummer des Fahrzeugs
            JSON.stringify({
            Odometer: Math.round(odo),
            Range: ran,
            SOC: soc,
            chargingPlug: typ,
            Battery12V_SOC: bat,
            locked: carLocked,
            latitude: lat,
            longitude: lon
            }),
            options
        );

        await mqttClient.end();
        console.log("mqtt call Done");
        } else {
            console.warn("Nicht alle Werte verfügbar – nichts gesendet.");
        }
        } catch (err) {
            console.error(err.message, err.stack);
        }
});

client.on('error', async (err) => {
    console.error("Login-Fehler:", err);
});

Softwarevoraussetzung wie im Beitrag vorher geschrieben.

Sollte den Profis etwas auffallen, nehme ich gerne Verbesserungsvorschläge an.

Gruß Reinhard
Fhem 6.4 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Rewe2000

Hallo,

zu früh gefreut, seit 21.08.2025 09:00 Uhr kommt bei mir wieder der 401 Fehler bei der Abfrage, vermutlich hat KIA wieder etwas geändert.
Ich verwende die aktuelle Bluelinky Version 10.0.0

Klappt es bei euch aktuell noch?

Gruß Reinhard
Fhem 6.4 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

ch.eick

Bei mir geht selbst die Kia App nicht mehr. Bevor das nicht geht fange ich erst gar nicht mit dem bluelinky an.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Rewe2000

Hallo Christian,

danke für das Feedback, somit muss ich vermutlich wieder auf eine neue Bluelinky Version warten.
Bei mir gibt es keinerlei Probleme mit der Verbindung von der KIA APP zum EV3 (eben nochmals getestet).
Hast du das Infotainmentsystem schon mal resettet? Das hat bei meinem e-Niro in der Vergangenheit immer geholfen.


Gruß Reinhard
Fhem 6.4 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Rewe2000

Hallo Christian,

mir ist eben aufgefallen, als ich mich in meiner KIA-APP angemeldet habe, dass KIA da ein Captcha in die Anmeldung integriert hat.
Ggf. könnte dies zu dem Anmeldeproblem führen. Bin mir nicht sicher, ob für die API-Abfrage der gleiche Weg gewählt wird, wenn ja so wird es nicht so einfach werden, dies zu lösen.

Auf Github bei EVCC wird das gerade diskutiert.

Gruß Reinhard
Fhem 6.4 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky