FHEM Forum

FHEM - Energiemanagement und Energieerzeugung => Solaranlagen => Thema gestartet von: mnl1234 am 26 November 2020, 08:50:37

Titel: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 26 November 2020, 08:50:37
Tag zusammen,

bin gespannt, ob ich die richtige Sektion erwischt habe für das Thema. Mit geht's zwar um das Thema E-Auto Laden, aber der Hintergrund ist die Nutzung von PV-Strom. Also schon irgendwie verwand mit Solaranlagen.

Frage: Gibt's schon eine Anbindung an Hyundai Bluelink? Ich hab in der Suche und bei Google leider nix gefunden.
Was ich gefunden habe ist Bluelinky (https://github.com/Hacksore/bluelinky/). Da hat jemand die API gesnifft und ein Node.js-Tool geschrieben.

Mein Setup:
Ich habe ein PV mit Kostal-Komponenten. Die habe ich schon im FHEM hübsch drin und sehe, was ich sehen muss: Erzeugung, Gesamtverbrauch, Direktverbrauch, Netzbezug, Einspeisung.
Außerdem habe ich eine Wallbox (Heidelberg home eco). Diese kann ich über ein Homematic-Device freigeben oder blocken. Blöderweise habe ich zu spät gecheckt, dass ich nicht nur gerne Laden Start/Stop entscheiden würde, sondern auch den Ladestrom an Hand des PV-Überschusses regeln würde. Schöner Mist.

Mein Ziel: Nun zieht bei uns demnächst ein Hyundai Kona ein, den ich gerne auch im FHEM hätte. Den Ladestrom kann man über die Bluelink-APp leider nicht anpassen. Aber zumindest den SOC auslesen. Dann weiß ich zumindest wie dringend geladen werden muss.

Kann mir bitte jemand helfen? Ich hab keine Idee, wie ich das Bluelinky in FHEM nutzbar machen kann.

Danke euch im Voraus!!!
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 26 November 2020, 08:59:38
Moin,

ich stehe vor dem gleichen Problem. Mein Kona kommt im Januar und bereite gerade auch schon das PV basierte Laden vor. Ich habe meinen SENEC Speicher, den Kostal Piko in FHEM und werde mir wohl den go-e Charger besorgen. Dafür gibt es auch schon ein FHEM Modul. Um Das Problem mit dem Bluelink zu lösen habe ich gerade "evvc" in meinen Docker Container aufgesetzt. https://github.com/andig/evcc
Die Werte sende ich von FHEM über MQTT_GENERIC_BRIDGE an evcc.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 26 November 2020, 09:19:52
Ich habe mir gerade mal das Projekt angeschaut das ist ja auch sehr cool da man dann sogar das Auto "fernsteuern" kann. Draußen ist es kalt und FHEM sagt dem Auto mach mal warm  8). Das versuche ich mal in NodeRed zu integrieren. Sieht vielversprechend aus.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 26 November 2020, 11:18:13
Zitat von: xerion am 26 November 2020, 09:19:52
Ich habe mir gerade mal das Projekt angeschaut das ist ja auch sehr cool da man dann sogar das Auto "fernsteuern" kann. Draußen ist es kalt und FHEM sagt dem Auto mach mal warm  8). Das versuche ich mal in NodeRed zu integrieren. Sieht vielversprechend aus.

Ja, das mit dem warm machen war auch meine Idee. In nem DoIF morgens in der Woche für 7:30 bei Außentemp < 3°C oder so ;-)
Warum ich das Auto entriegeln können muss darüber, aber der Ladestrom oder die Ladegrenze nicht anpassbar ist, erschließt sich mir leider nicht.

Wenn du mich bisschen auf die Reise mitnimmst und erklärst, wie das am Ende geht, wäre ich Dir sehr dankbar.  ;D

Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 26 November 2020, 11:28:01
Laut App soll man zumindest die Ladegrenze einstellen können. Aber wenn du PV orientiert laden möchtest mach es ja wenig sein, das über das Auto zu steuern das sollte deine Wallbox dann übernehmen und genau das kannst du mit evcc lösen und laut dem Wiki wird deine WB auch unterstützt.
Ich denke ich werde das PV orientierte laden mit evcc lösen und die Fernsteuerung mit dem Bluelinky. Beides wird dann per MQTT an FHEM angebunden.
Sobald ich Zeit gefunden habe das in NodeRed zu testen melde ich mich wieder. Momentan habe ich ja das Auto noch nicht darum wird ein realer Test sehr schwierig.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 26 November 2020, 15:35:21
Cool, der evcc hat sich auch den Code vom bluelinky geliehen. ;-)
Ne Anbindung an den Kostal Smart Meter bringt er mit.
Aber die Heidelberg home eco ist rotzdoof. Von alleine kann die gar nix. Nur an oder aus über einen potentialfreien Schaltkontakt.
Ansonsten hat die Heidelberg ein kleines Poti, um den Strom zu begrenzen. Da kommt man aber im Betrieb nicht ran. Hab schon überlegt nen kleinen Servo draufzusetzen oder das Poti auszulöten. Aber ist schon bisschen kribbelig, an ner neuen Box zumzulöten...

Das Schalten ansich hab ich schon über dem FHEM im Griff. Also bei >4KW Einspeisung schaltet er die Wallbox frei und bei 1kW Netzbezug wieder ab, um da mal eine kleine Hysterese zu haben. Zeitliche Puffer im DoIf bei ich noch ein, damit er nicht bei jedem Wölkchen togglet. Manuelles Überschreiben geht auch. Fehlt noch der Telegram-Dialog.
Das geht mit der 4kW-Grenze aber auch nur, wenn ich in der Box den Ladestrom auf minimal (= ~4kW) stelle. Wenn mehr Dampf vom Dach kommt, speißt er dann ein. Und wenn das Auto mal schneller laden soll ist das auch doof.

Mit dem go-e Charger haste da die bessere Wahl getroffen...👍
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 26 November 2020, 20:09:21
Kannst du nicht am besten eine eine neue WB kaufen, gerade mit der Förderung würdest du ja nichts verlieren.
Telegram kannst du auch über evcc lösen ich favorisiere aber lieber das über FHEM zu steuern.
Habe Bluelinky mehr oder weniger in NodeRed drin kann es nur nicht testen da ich keine VIN habe. Muss also auf das Auto warten, da einen Demo Zugang wie bei Siemens gibt es leider nicht.

Ja ich erhoffe mir auch viel vom go-e Charger. Gerade wenn man so Preis-/Leistung vergleicht. Habe den gerade bestellt kommt idealerweise passend zum Auto.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 04 Dezember 2020, 00:53:32
N'abend

Was das Auto betrifft bin ich schon einen Schritt weiter als ihr. Mein Kona steht seit dem 21.10.20 in der Garage  :D

Die Wallbox von Pulsares ist auch installiert und funktioniert soweit ganz gut. Über einen selbstgeschriebenen Python Service kann ich nun die Wallbox auch per PWM ansteuern und somit 1 phasig von 5-24 A in 1A Schritten die Ladeleistung steuern. Das geht nun auch schon mehr schlecht als recht aus FHEM heraus, aber so wirklich rund wird es wohl erst wenn ich über Bluelink die notwendigen Infos vom Kona bekomme. Evcc scheint ja da eventuell ein brauchbarer Ansatz zu sein. Ich scheitere aber im Moment daran meine Wallbox richtig zu konfigurieren. Also falls ihr was zum testen bzgl. Bluelink hättet, ich hätte die Hardware hier stehen. Zumindest die meiste Zeit  ;)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 04 Dezember 2020, 11:03:43
Zitat von: acw81 am 04 Dezember 2020, 00:53:32
N'abend

Was das Auto betrifft bin ich schon einen Schritt weiter als ihr. Mein Kona steht seit dem 21.10.20 in der Garage  :D

Die Wallbox von Pulsares ist auch installiert und funktioniert soweit ganz gut. Über einen selbstgeschriebenen Python Service kann ich nun die Wallbox auch per PWM ansteuern und somit 1 phasig von 5-24 A in 1A Schritten die Ladeleistung steuern. Das geht nun auch schon mehr schlecht als recht aus FHEM heraus, aber so wirklich rund wird es wohl erst wenn ich über Bluelink die notwendigen Infos vom Kona bekomme. Evcc scheint ja da eventuell ein brauchbarer Ansatz zu sein. Ich scheitere aber im Moment daran meine Wallbox richtig zu konfigurieren. Also falls ihr was zum testen bzgl. Bluelink hättet, ich hätte die Hardware hier stehen. Zumindest die meiste Zeit  ;)

Ich kann momentan nicht wirklich weiter unterstützen da mir noch Auto und Wallbox fehlen. Wenn ich Glück habe, bekomme ich beides noch dieses Jahr sonst erst im Januar.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 05 Dezember 2020, 17:50:34
Mit evcc bin ich nun einen Schritt weiter. Wechselrichter, EnergyMeter und Auto sind angebunden. Die Wallbox leider noch nicht so ganz. So wie es aussieht wird aber nur der SoC per evcc ausgelesen.

@xerion: hier wäre interessant was bluelinky so kann. Bin gerade dabei bluelinky unter NodeRed zum laufen zu bekommen
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 05 Dezember 2020, 20:03:05
Zitat von: acw81 am 05 Dezember 2020, 17:50:34
Mit evcc bin ich nun einen Schritt weiter. Wechselrichter, EnergyMeter und Auto sind angebunden. Die Wallbox leider noch nicht so ganz. So wie es aussieht wird aber nur der SoC per evcc ausgelesen.

@xerion: hier wäre interessant was bluelinky so kann. Bin gerade dabei bluelinky unter NodeRed zum laufen zu bekommen

Was bluelinky genau kann weis ich leider auch nicht da ich mein Auto noch nicht da ist und ich nicht alles testen kann. So wie ich es sehe kann man zumindest die Klima und Türen fernsteuern.
Ich  habe es so bei mir eingebunden. Das sind alle Möglichkeiten die bluelinky anbietet:



Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 06 Dezember 2020, 11:55:06
Wichtiger Hinweis an alle die versuchen per Bluelinky Daten von einem Hyundai abzugreifen!!!




Die Abfragen belasten die Hilfbatterie anscheinend ganz schön. Selbst wenn dies in 5 Minuten Intervallen erfolgt, kann dies dazu führen das die Hilfsbatterie soweit entladen wird das sich das Auto nicht mehr öffnen, starten oder laden lässt. Also Vorsicht beim Zugriff auf das Auto, bei mir musste der ADAC heute schon Starthilfe leisten  :-\

Für evcc ist deshalb ein redesign geplant:

https://github.com/andig/evcc/issues/505
(https://github.com/andig/evcc/issues/505)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 08 Dezember 2020, 08:07:48
Die Abfrage über Bluelinky funktioniert nun soweit. Anbei mal das was GetStatus und GetOdometer zurückliefert ...
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 08 Dezember 2020, 19:54:32
Zitat von: acw81 am 08 Dezember 2020, 08:07:48
Die Abfrage über Bluelinky funktioniert nun soweit. Anbei mal das was GetStatus und GetOdometer zurückliefert ...

Das sieht doch schon vielversprechend aus.  Aber warum steht bei batteryCharge12v 255? Das wäre doch die Hilfsbatterie oder irre ich mich da?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: rossi007 am 14 Dezember 2020, 15:10:16
Ich habe meinen Kona seit 3 Monaten und bin begeistert. Nach längeren Versuchen ist es auch gelungen, Bluelinky mit node als .js in der Konsole des Raspberry auszuführen. Die Antwort in der Raspberry-Buster-Konsole ist ähnlich wie bei acw81, sogar ausführlicher. Leider fehlt mir auch nach langem Suchen jeglicher Ansatz, wie ich dieses .js in FHEM einbinden oder direkt aus FHEM aufrufen könnte und wie die Antwort als Device mit Readings in FHEM zur weiteren Auswertung verfügbar gemacht werden könnte.
In FHEM funktioniert bereits vom Vorgängerfahrzeug her eine Einbindung der Ladesäule auf Basis des Phoenix-Moduls  EM-CP-PP-ETH, das über entsprechende Vorwahl und die aktuelle Produktion der PV-Anlage die Ladung des Fahrzeugs steuert. Hier wäre die Ergänzung von Fahrzeugdaten per Bluelink(y) sinnvoll, zudem eine Erkennung des zuhause angekommenen Fahrzeuges, z.B. per Bluetooth und automatische Protokollierung der gefahrenen Strecke, des Ladestandes - auch ohne Ankopplung zur Ladesäule. Dann noch eine Anzeige der Fahrzeugposition in einer Landkarte und zwei Knöpfe für Klimatisierung (Standheizung) und Öffnen/Schließen des Fahrzeuges und der Hyundai wäre ein perfektes Gerät im Smarthome ...
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 26 Dezember 2020, 11:13:08
Hat jemand schon seinen Kona über EVCC erfolgreich eingebunden? Irgenwie will das bei mir nicht hinhauen?
Wenn ja wie habt ihr vielleicht eure evcc.yaml?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 26 Dezember 2020, 12:58:47
Hast du denn Fehler im evcc Log?
Ich denke das diese Frage am besten im goeingelectric Forum aufgehoben ist, denn mit FHEM hat es ja nicht wirklich zu tun. Dort wird die bestimmt schneller einer an Antwort geben können oder halt auf der GitHub Seite von evcc.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 10 Januar 2021, 12:15:22
@rossi007: Ich würde dir NodeRed empfehlen. Darüber kannst du das ganze sehr einfach aus FHEM per MQTT triggern und auch in FHEM die Ergebnisse per MQTT einlesen. Am besten NodeRed in einem Docker Container auf dem Raspberry laufen lassen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 10 Januar 2021, 12:23:33
Zitat von: michisa86888 am 26 Dezember 2020, 11:13:08
Hat jemand schon seinen Kona über EVCC erfolgreich eingebunden? Irgenwie will das bei mir nicht hinhauen?
Wenn ja wie habt ihr vielleicht eure evcc.yaml?

Ja, siehe mein Post dazu. Ich habe es seither lieber mal sein lassen. Meine Konfiguration sah wie folgt aus (ist nur ein Auszug):



# vehicle definitions
# name can be freely chosen and is used as reference when assigning vehicle to loadpoint
# for examples see https://github.com/andig/evcc-config#vehicles
vehicles:

- name: kona
  type: hyundai
  title: Hyundai Kona # display name for UI
  capacity: 64 # kWh
  user: <E-mail Adresse>
  password: '<Passwort>'
  cache: 30m # cache API response

# loadpoint describes the charger, charge meter and connected vehicle
loadpoints:
- title: Garage # display name for UI
  charger: pulsares  #charger
  meters:
    #charge: charge # charge meter
  vehicle: kona


Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 13 Januar 2021, 08:11:45
Okay wunderbar,
werde ich mal versuchen, muss aber leider immer noch auf meine Ladestation warten (Keba P30c).

Noch eine Frage zu Bluelinky. Ich möchte z.B. auch mit FHEM mein Auto steuern. Also morgen Heizung einschalten bzw. auch mal Alexa sagen sie soll doch bitte Heizung anmachen. Ist das auch über EVCC (Mqtt) möglich oder wie habt ihr das gelöst. Kann ich Befehle von FHEM aus ans Auto schicken oder nur "lesen"?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 13 Januar 2021, 11:37:24
Über EVCC wird im Moment nur SoC ausgelesen. Ich habe das wie gesagt mit Bluelinky in NodeRed und MQTT In-/Output realisiert. Aktuell geht das die Abfrage des Status, Odometer; Location sowie das Auf- und Zuschließen des Autos. Das Starten und Stoppen, was du machen willst habe ich noch nicht implementiert da man dort noch Parameter übergeben muss. Sollte aber prinzipiell auch kein wirkliches Problem sein.


https://hacksore.github.io/bluelinky-docs/docs/api-reference
(https://hacksore.github.io/bluelinky-docs/docs/api-reference)

Hier mal noch mein aktuelles FHEM MQTT device


Internals:
   CFGFN     
   DEVICETOPIC mqttKona
   FUUID      5ffd91eb-f33f-4d64-844f-de76e572874d73a3
   IODev      MQTT_Broker
   LASTInputDev MQTT_Broker
   MQTT_Broker_MSGCNT 16
   MQTT_Broker_TIME 2021-01-12 20:52:15
   MSGCNT     16
   NAME       mqttKona
   NR         72808
   STATE      Kilometerstand: 1860.4 km <br>
Akku: 90 % <br>
Türen veriegelt: true <br>
Reichweite: 415 km <br>

   TYPE       MQTT2_DEVICE
   OLDREADINGS:
   READINGS:
     2021-01-12 14:13:32   location        {"latitude":4444.771244,"longitude":66666.180953,"altitude":0,"speed":{"unit":0,"value":0},"heading":0}
     2021-01-12 14:14:45   locationaltitude 1
     2021-01-12 14:14:45   locationheading 155
     2021-01-12 14:14:45   locationlatitude 4444.771244
     2021-01-12 14:14:45   locationlongitude 66666.180953
     2021-01-12 14:14:45   locationspeed_unit 0
     2021-01-12 14:14:45   locationspeed_value 0
     2021-01-12 17:59:59   odometer_unit   1
     2021-01-12 17:59:59   odometer_value  1860.4
     2021-01-12 20:52:02   state           getStatus
     2021-01-12 20:52:15   status_acc      false
     2021-01-12 20:52:15   status_airCtrlOn false
     2021-01-12 20:52:15   status_airTemp_hvacTempType 1
     2021-01-12 20:52:15   status_airTemp_unit 0
     2021-01-12 20:52:15   status_airTemp_value 0AH
     2021-01-12 20:52:15   status_battery_batSoc 75
     2021-01-12 20:52:15   status_battery_batState 0
     2021-01-12 20:52:15   status_defrost  false
     2021-01-12 20:52:15   status_doorLock true
     2021-01-12 20:52:15   status_doorOpen_backLeft 0
     2021-01-12 20:52:15   status_doorOpen_backRight 0
     2021-01-12 20:52:15   status_doorOpen_frontLeft 0
     2021-01-12 20:52:15   status_doorOpen_frontRight 0
     2021-01-12 20:52:15   status_engine   false
     2021-01-12 20:52:15   status_evStatus_batteryCharge false
     2021-01-12 20:52:15   status_evStatus_batteryPlugin 0
     2021-01-12 20:52:15   status_evStatus_batteryStatus 90
     2021-01-12 20:52:15   status_evStatus_drvDistance_1_rangeByFuel_evModeRange_unit 1
     2021-01-12 20:52:15   status_evStatus_drvDistance_1_rangeByFuel_evModeRange_value 415
     2021-01-12 20:52:15   status_evStatus_drvDistance_1_rangeByFuel_totalAvailableRange_unit 1
     2021-01-12 20:52:15   status_evStatus_drvDistance_1_rangeByFuel_totalAvailableRange_value 415
     2021-01-12 20:52:15   status_evStatus_drvDistance_1_type 2
     2021-01-12 20:52:15   status_evStatus_remainTime2_atc_unit 1
     2021-01-12 20:52:15   status_evStatus_remainTime2_atc_value 1
     2021-01-12 20:52:15   status_evStatus_remainTime2_etc1_unit 1
     2021-01-12 20:52:15   status_evStatus_remainTime2_etc1_value 61
     2021-01-12 20:52:15   status_evStatus_remainTime2_etc2_unit 1
     2021-01-12 20:52:15   status_evStatus_remainTime2_etc2_value 215
     2021-01-12 20:52:15   status_evStatus_remainTime2_etc3_unit 1
     2021-01-12 20:52:15   status_evStatus_remainTime2_etc3_value 65
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_ect_end_day 9
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_ect_end_time_time 1200
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_ect_end_time_timeSection 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_ect_start_day 9
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_ect_start_time_time 1200
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_ect_start_time_timeSection 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_offpeakPowerInfo_offPeakPowerFlag 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_offpeakPowerInfo_offPeakPowerTime1_endtime_time 1200
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_offpeakPowerInfo_offPeakPowerTime1_endtime_timeSection 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_offpeakPowerInfo_offPeakPowerTime1_starttime_time 1200
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_offpeakPowerInfo_offPeakPowerTime1_starttime_timeSection 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservChargeSet false
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservFatcSet_airCtrl 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservFatcSet_airTemp_hvacTempType 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservFatcSet_airTemp_unit 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservFatcSet_airTemp_value 10H
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservFatcSet_defrost true
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservFatcSet_heating1 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservInfo_day_1 5
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservInfo_time_time 0540
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservChargeInfo_reservChargeInfoDetail_reservInfo_time_timeSection 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reservFlag 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservChargeSet false
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservFatcSet_airCtrl 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservFatcSet_airTemp_hvacTempType 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservFatcSet_airTemp_unit 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservFatcSet_airTemp_value 10H
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservFatcSet_defrost true
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservFatcSet_heating1 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservInfo_day_1 2
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservInfo_time_time 0250
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_reserveChargeInfo2_reservChargeInfoDetail_reservInfo_time_timeSection 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_1_dte_rangeByFuel_evModeRange_unit 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_1_dte_rangeByFuel_evModeRange_value 462
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_1_dte_rangeByFuel_totalAvailableRange_unit 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_1_dte_rangeByFuel_totalAvailableRange_value 462
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_1_dte_type 2
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_1_plugType 0
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_1_targetSOClevel 100
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_2_dte_rangeByFuel_evModeRange_unit 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_2_dte_rangeByFuel_evModeRange_value 462
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_2_dte_rangeByFuel_totalAvailableRange_unit 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_2_dte_rangeByFuel_totalAvailableRange_value 462
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_2_dte_type 2
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_2_plugType 1
     2021-01-12 20:52:15   status_evStatus_reservChargeInfos_targetSOClist_2_targetSOClevel 100
     2021-01-12 20:52:15   status_hoodOpen false
     2021-01-12 20:52:15   status_ign3     true
     2021-01-12 20:52:15   status_sideBackWindowHeat 0
     2021-01-12 20:52:15   status_steerWheelHeat 0
     2021-01-12 20:52:15   status_time     20210112205214
     2021-01-12 20:52:15   status_tirePressureLamp_tirePressureLampAll 0
     2021-01-12 20:52:15   status_tirePressureLamp_tirePressureLampFL 0
     2021-01-12 20:52:15   status_tirePressureLamp_tirePressureLampFR 0
     2021-01-12 20:52:15   status_tirePressureLamp_tirePressureLampRL 0
     2021-01-12 20:52:15   status_tirePressureLamp_tirePressureLampRR 0
     2021-01-12 20:52:15   status_transCond true
     2021-01-12 20:52:15   status_trunkOpen false
Attributes:
   IODev      MQTT_Broker
   readingList bluelinky/air_conditioning.* air_conditioning
bluelinky/status:.* { json2nameValue($EVENT) }
bluelinky/doors.* doors
bluelinky/location.* { json2nameValue($EVENT, 'location_') }
bluelinky/odometer:.* { json2nameValue($EVENT, 'odometer_') }

   room       Garage
   setList    getOdometer cmnd/bluelinky/get_odometer 1
getStatus cmnd/bluelinky/get_status 1
getLocation cmnd/bluelinky/get_location 1
   stateFormat Kilometerstand: odometer_value km <br>
Akku: status_evStatus_batteryStatus % <br>
Türen veriegelt: status_doorLock <br>
Reichweite: status_evStatus_drvDistance_1_rangeByFuel_evModeRange_value km <br>




Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 13 Januar 2021, 16:00:19
Zitat von: acw81 am 13 Januar 2021, 11:37:24
Über EVCC wird im Moment nur SoC ausgelesen. Ich habe das wie gesagt mit Bluelinky in NodeRed und MQTT In-/Output realisiert.

Mega!
Kannst du den Node-Red-Flow irgendwie exportieren, damit man sehen kann, was du da drin genau machst? Ich würde das auch gerne anbinden bei mir.

Bin inzwischen soweit, dass ich ein bisschen Code zumindest per node auf der Konsole am Laufen hab. Aber die FHEM-Anbindung fehlt mir.

Grüße
Micha
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 13 Januar 2021, 16:58:25
Okay hier der Export (ich hoffe ich habe alle persönlichen Daten entfernt). Die müssen vor dem Import wieder eingetragen werden (sind mit <xxx> ersetzt worden). Ich habe den Flow und damit die FHEM Anbindung nochmal verändert (d.h. das FHEM listing von oben passt schon nicht mehr). Die Idee das so aufzubauen habe ich von hier, da ich vorher noch nichts mit NodeRed gemacht hatte.


https://community.home-assistant.io/t/integrating-hyundai-bluelink-but-working-with-curl/181511/19
(https://community.home-assistant.io/t/integrating-hyundai-bluelink-but-working-with-curl/181511/19)


[
  {
    "id": "f6f2187d.f17ca8",
    "type": "tab",
    "label": "Flow 1",
    "disabled": false,
    "info": ""
  },
  {
    "id": "57d6beca.e51cc",
    "type": "bluelinky",
    "username": "<Username>",
    "password": "<password>",
    "region": "EU",
    "pin": "<pin>",
    "vin": "<vin>"
  },
  {
    "id": "36dd9767.956ae8",
    "type": "mqtt-broker",
    "name": "mosquitto",
    "broker": "<IP>",
    "port": "1883",
    "clientid": "",
    "usetls": false,
    "compatmode": false,
    "keepalive": "60",
    "cleansession": true,
    "birthTopic": "",
    "birthQos": "0",
    "birthPayload": "",
    "closeTopic": "",
    "closeQos": "0",
    "closePayload": "",
    "willTopic": "",
    "willQos": "0",
    "willPayload": ""
  },
  {
    "id": "3cc11d24.ff01a2",
    "type": "comment",
    "z": "f6f2187d.f17ca8",
    "name": "WARNING: please check you have started this container with a volume that is mounted to /data\\n otherwise any flow changes are lost when you redeploy or upgrade the container\\n (e.g. upgrade to a more recent node-red docker image).\\n  If you are using named volumes you can ignore this warning.\\n Double click or see info side panel to learn how to start Node-RED in Docker to save your work",
    "info": "\nTo start docker with a bind mount volume (-v option), for example:\n\n```\ndocker run -it -p 1880:1880 -v /home/user/node_red_data:/data --name mynodered nodered/node-red\n```\n\nwhere `/home/user/node_red_data` is a directory on your host machine where you want to store your flows.\n\nIf you do not do this then you can experiment and redploy flows, but if you restart or upgrade the container the flows will be disconnected and lost. \n\nThey will still exist in a hidden data volume, which can be recovered using standard docker techniques, but that is much more complex than just starting with a named volume as described above.",
    "x": 350,
    "y": 80,
    "wires": [ ]
  },
  {
    "id": "4ae7cfad.ef2f9",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_status",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 130,
    "y": 280,
    "wires": [ [ "7151f9b3.64a868" ] ]
  },
  {
    "id": "80b490f1.a70b5",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/stop_ac",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 1000,
    "wires": [ [ "35e227cd.4f7fc8" ] ]
  },
  {
    "id": "2722c4a8.0a071c",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/start_ac",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 920,
    "wires": [ [ "a2f10779.7ad2c8" ] ]
  },
  {
    "id": "7151f9b3.64a868",
    "type": "car-status",
    "z": "f6f2187d.f17ca8",
    "name": "Get status",
    "dorefresh": true,
    "parsed": false,
    "bluelinky": "57d6beca.e51cc",
    "x": 410,
    "y": 200,
    "wires": [ [ "478f506c.59b44", "8c0e1278.48eeb", "1e89420e.7d352e", "3072f27c.87c05e", "f86a0cc1.73cb7", "3a80f56c.0836fa", "b0d6fbd7.64da38", "863a07ce.085bd8", "e7b544a.406a8b8", "49d564f1.3e30ac", "b2af16e1.8e9e48" ] ]
  },
  {
    "id": "a2f10779.7ad2c8",
    "type": "start-car",
    "z": "f6f2187d.f17ca8",
    "name": "Start car",
    "bluelinky": "57d6beca.e51cc",
    "x": 400,
    "y": 920,
    "wires": [ [ "478f506c.59b44" ] ],
    "inputLabels": [ "airTempvalue: 19.0" ],
    "info": "19"
  },
  {
    "id": "35e227cd.4f7fc8",
    "type": "stop-car",
    "z": "f6f2187d.f17ca8",
    "name": "Stop car",
    "bluelinky": "57d6beca.e51cc",
    "x": 400,
    "y": 1000,
    "wires": [ [ "478f506c.59b44" ] ]
  },
  {
    "id": "478f506c.59b44",
    "type": "debug",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 730,
    "y": 980,
    "wires": [ ]
  },
  {
    "id": "4a75fc2f.1e51e4",
    "type": "unlock-car",
    "z": "f6f2187d.f17ca8",
    "name": "Unlock car",
    "bluelinky": "57d6beca.e51cc",
    "x": 410,
    "y": 1080,
    "wires": [ [ "478f506c.59b44", "a10b38ae.94e5d8" ] ]
  },
  {
    "id": "2eef0961.a65396",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/unlock_car",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 130,
    "y": 1080,
    "wires": [ [ "4a75fc2f.1e51e4" ] ]
  },
  {
    "id": "250acff4.b367",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/lock_car",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 1160,
    "wires": [ [ "19c514c7.ca8aab" ] ]
  },
  {
    "id": "19c514c7.ca8aab",
    "type": "lock-car",
    "z": "f6f2187d.f17ca8",
    "name": "Lock car",
    "bluelinky": "57d6beca.e51cc",
    "x": 400,
    "y": 1160,
    "wires": [ [ "478f506c.59b44", "a10b38ae.94e5d8" ] ]
  },
  {
    "id": "cbdfadee.54f1c",
    "type": "car-location",
    "z": "f6f2187d.f17ca8",
    "name": "Get car location",
    "bluelinky": "57d6beca.e51cc",
    "x": 420,
    "y": 1240,
    "wires": [ [ "2e394950.ce9296", "478f506c.59b44" ] ]
  },
  {
    "id": "421c6f20.cb61f",
    "type": "car-odometer",
    "z": "f6f2187d.f17ca8",
    "name": "Get car odometer",
    "bluelinky": "57d6beca.e51cc",
    "x": 450,
    "y": 780,
    "wires": [ [ "478f506c.59b44", "c85df5a1.7c67f8" ] ]
  },
  {
    "id": "ae4a76ba.d1b7e8",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_odometer",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 160,
    "y": 780,
    "wires": [ [ "421c6f20.cb61f" ] ]
  },
  {
    "id": "a10b38ae.94e5d8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/doors",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 740,
    "y": 1160,
    "wires": [ ]
  },
  {
    "id": "3493be44.5a6802",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/odometer",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 870,
    "y": 780,
    "wires": [ ]
  },
  {
    "id": "cc998b60.1f7408",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_location",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 140,
    "y": 1240,
    "wires": [ [ "cbdfadee.54f1c" ] ]
  },
  {
    "id": "2e394950.ce9296",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/location",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 750,
    "y": 1240,
    "wires": [ ]
  },
  {
    "id": "47d9808d.1454b",
    "type": "inject",
    "z": "f6f2187d.f17ca8",
    "name": "Every 2h",
    "props": [
      { "p": "payload" },
      {
        "p": "topic",
        "vt": "str"
      }
    ],
    "repeat": "7200",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 100,
    "y": 200,
    "wires": [ [ "7151f9b3.64a868" ] ]
  },
  {
    "id": "8c0e1278.48eeb",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "doorLock",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.doorLock",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 800,
    "y": 160,
    "wires": [ [ "4a2701d1.43ed1" ] ]
  },
  {
    "id": "4a2701d1.43ed1",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/doorLock",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1010,
    "y": 160,
    "wires": [ ]
  },
  {
    "id": "c85df5a1.7c67f8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "odometer",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.value",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 680,
    "y": 780,
    "wires": [ [ "3493be44.5a6802" ] ]
  },
  {
    "id": "f0bdbf6f.5a26c",
    "type": "inject",
    "z": "f6f2187d.f17ca8",
    "name": "Every 24h",
    "props": [
      { "p": "payload" },
      {
        "p": "topic",
        "vt": "str"
      }
    ],
    "repeat": "86400",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 110,
    "y": 720,
    "wires": [ [ "421c6f20.cb61f" ] ]
  },
  {
    "id": "1e89420e.7d352e",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "engine",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.engine",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 220,
    "wires": [ [ "aa799088.efbc5" ] ]
  },
  {
    "id": "aa799088.efbc5",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/engine",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 220,
    "wires": [ ]
  },
  {
    "id": "3072f27c.87c05e",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "airCtrlOn",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.airCtrlOn",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 800,
    "y": 280,
    "wires": [ [ "f5d01011.764f6" ] ]
  },
  {
    "id": "f5d01011.764f6",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/airCtrlOn",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1010,
    "y": 280,
    "wires": [ ]
  },
  {
    "id": "f86a0cc1.73cb7",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "trunkOpen",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.trunkOpen",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 340,
    "wires": [ [ "e603126b.6a562" ] ]
  },
  {
    "id": "e603126b.6a562",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/airCtrlOn",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1010,
    "y": 340,
    "wires": [ ]
  },
  {
    "id": "3a80f56c.0836fa",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "hoodOpen",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.hoodOpen",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 400,
    "wires": [ [ "5a7d883c.e56228" ] ]
  },
  {
    "id": "5a7d883c.e56228",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/hoodOpen",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1020,
    "y": 400,
    "wires": [ ]
  },
  {
    "id": "863a07ce.085bd8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "batteryStatus",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.batteryStatus",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 460,
    "wires": [ [ "b7ab78d8.2186c8" ] ]
  },
  {
    "id": "b7ab78d8.2186c8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/batteryStatus",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1020,
    "y": 460,
    "wires": [ ]
  },
  {
    "id": "49d564f1.3e30ac",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "defrost",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.defrost",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 640,
    "wires": [ [ "6309573b.8b5f08" ] ]
  },
  {
    "id": "6309573b.8b5f08",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/defrost",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 640,
    "wires": [ ]
  },
  {
    "id": "e7b544a.406a8b8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "acc",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.scc",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 580,
    "wires": [ [ "8b622bcc.94d9d8" ] ]
  },
  {
    "id": "8b622bcc.94d9d8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/acc",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 990,
    "y": 580,
    "wires": [ ]
  },
  {
    "id": "b0d6fbd7.64da38",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "batteryCharge",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.batteryCharge",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 820,
    "y": 520,
    "wires": [ [ "35d69904.5e8b16" ] ]
  },
  {
    "id": "35d69904.5e8b16",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/batteryCharge",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1030,
    "y": 520,
    "wires": [ ]
  },
  {
    "id": "b2af16e1.8e9e48",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "range",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.drvDistance[0].rangeByFuel.evModeRange.value",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 700,
    "wires": [ [ "1e875e4.f7566a2" ] ]
  },
  {
    "id": "1e875e4.f7566a2",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/range",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 700,
    "wires": [ ]
  },
  {
    "id": "5e086d9b.4184b4",
    "type": "inject",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "props": [
      { "p": "payload" },
      {
        "p": "topic",
        "vt": "str"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "topic": "",
    "payload": "{\"airCtrl\": true, \"airTempvalue\": 19.0}",
    "payloadType": "json",
    "x": 100,
    "y": 860,
    "wires": [ [ "a2f10779.7ad2c8" ] ]
  }
]


Leider funktioniert das Starten der AC noch nicht. Kann mir hier eventuell jemand weiterhelfen. Da müsste ich doch auch mit einem Inject die Parameter übergeben können. Hat jemand eventuell ein Beispiel für mich?

Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 13 Januar 2021, 17:18:02
Zitat von: acw81 am 13 Januar 2021, 16:58:25
Okay hier der Export

Danke!
Ich hab parallel das hier gefunden: https://flows.nodered.org/node/node-red-contrib-bluelinky
Kennst du das?

Damit ich es richtig verstehe, bei dir ist der Flow:
1. Request vom FHEM an den MQTT
2. MQTT an Nodered
4. Verarbeitung in Nodered
5. Nodered and MQTT
6. MQTT an FHEM
Richtig?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 13 Januar 2021, 17:23:19
Zitat von: acw81 am 13 Januar 2021, 16:58:25
Leider funktioniert das Starten der AC noch nicht. Kann mir hier eventuell jemand weiterhelfen. Da müsste ich doch auch mit einem Inject die Parameter übergeben können. Hat jemand eventuell ein Beispiel für mich?

Das wäre ja die Funktion start() sein. Die braucht ein Objekt im Stile von


export interface VehicleClimateOptions {
  defrost: boolean;
  windscreenHeating: boolean;
  temperature: number;
  unit: string;
}


Also wenn du ein entsprechendes JSON mitsendet beim MQTT Request, sollte das gehen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 13 Januar 2021, 17:32:58
Zitat von: mnl1234 am 13 Januar 2021, 17:18:02
Danke!
Ich hab parallel das hier gefunden: https://flows.nodered.org/node/node-red-contrib-bluelinky
Kennst du das?

Damit ich es richtig verstehe, bei dir ist der Flow:
1. Request vom FHEM an den MQTT
2. MQTT an Nodered
4. Verarbeitung in Nodered
5. Nodered and MQTT
6. MQTT an FHEM
Richtig?

Genau, Punkt 2 bis 5 sind alle in dem exportierten Flow.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 13 Januar 2021, 17:45:43
Zitat von: mnl1234 am 13 Januar 2021, 17:23:19
Das wäre ja die Funktion start() sein. Die braucht ein Objekt im Stile von


export interface VehicleClimateOptions {
  defrost: boolean;
  windscreenHeating: boolean;
  temperature: number;
  unit: string;
}


Also wenn du ein entsprechendes JSON mitsendet beim MQTT Request, sollte das gehen.

In meinem Testscript gehts mit

{"defrost": false, "windscreenHeating": true, "temperature": 22.0 , "unit": "C"}

In dem nodered kommt er mit der Temp nicht klar.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 13 Januar 2021, 17:56:09
Zitat von: mnl1234 am 13 Januar 2021, 17:45:43
In meinem Testscript gehts mit

{"defrost": false, "windscreenHeating": true, "temperature": 22.0 , "unit": "C"}

In dem nodered kommt er mit der Temp nicht klar.

Danke, so funktioniert es bei mir in NodeRed. Zumindest wenn ich die msg.payload in NodeRed über ein Inject setze. Aus FHEM per MQTT muss ich mal schauen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 13 Januar 2021, 18:50:24
Okay, jetzt funktioniert alles. Hier nochmal der aktualisierte Flow.


[
  {
    "id": "f6f2187d.f17ca8",
    "type": "tab",
    "label": "Flow 1",
    "disabled": false,
    "info": ""
  },
  {
    "id": "3cc11d24.ff01a2",
    "type": "comment",
    "z": "f6f2187d.f17ca8",
    "name": "WARNING: please check you have started this container with a volume that is mounted to /data\\n otherwise any flow changes are lost when you redeploy or upgrade the container\\n (e.g. upgrade to a more recent node-red docker image).\\n  If you are using named volumes you can ignore this warning.\\n Double click or see info side panel to learn how to start Node-RED in Docker to save your work",
    "info": "\nTo start docker with a bind mount volume (-v option), for example:\n\n```\ndocker run -it -p 1880:1880 -v /home/user/node_red_data:/data --name mynodered nodered/node-red\n```\n\nwhere `/home/user/node_red_data` is a directory on your host machine where you want to store your flows.\n\nIf you do not do this then you can experiment and redploy flows, but if you restart or upgrade the container the flows will be disconnected and lost. \n\nThey will still exist in a hidden data volume, which can be recovered using standard docker techniques, but that is much more complex than just starting with a named volume as described above.",
    "x": 350,
    "y": 80,
    "wires": [ ]
  },
  {
    "id": "4ae7cfad.ef2f9",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_status",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 130,
    "y": 280,
    "wires": [ [ "7151f9b3.64a868" ] ]
  },
  {
    "id": "80b490f1.a70b5",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/stop_ac",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 1000,
    "wires": [ [ "35e227cd.4f7fc8" ] ]
  },
  {
    "id": "2722c4a8.0a071c",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/start_ac",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 920,
    "wires": [ [ "183e42b8.b4fc8d" ] ]
  },
  {
    "id": "7151f9b3.64a868",
    "type": "car-status",
    "z": "f6f2187d.f17ca8",
    "name": "Get status",
    "dorefresh": true,
    "parsed": false,
    "bluelinky": "57d6beca.e51cc",
    "x": 410,
    "y": 200,
    "wires": [ [ "478f506c.59b44", "8c0e1278.48eeb", "1e89420e.7d352e", "3072f27c.87c05e", "f86a0cc1.73cb7", "3a80f56c.0836fa", "b0d6fbd7.64da38", "863a07ce.085bd8", "e7b544a.406a8b8", "49d564f1.3e30ac", "b2af16e1.8e9e48" ] ]
  },
  {
    "id": "a2f10779.7ad2c8",
    "type": "start-car",
    "z": "f6f2187d.f17ca8",
    "name": "Start car",
    "bluelinky": "57d6beca.e51cc",
    "x": 460,
    "y": 920,
    "wires": [ [ "478f506c.59b44" ] ],
    "inputLabels": [ "airTempvalue: 19.0" ],
    "info": "19"
  },
  {
    "id": "35e227cd.4f7fc8",
    "type": "stop-car",
    "z": "f6f2187d.f17ca8",
    "name": "Stop car",
    "bluelinky": "57d6beca.e51cc",
    "x": 460,
    "y": 1000,
    "wires": [ [ "478f506c.59b44" ] ]
  },
  {
    "id": "478f506c.59b44",
    "type": "debug",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 770,
    "y": 920,
    "wires": [ ]
  },
  {
    "id": "4a75fc2f.1e51e4",
    "type": "unlock-car",
    "z": "f6f2187d.f17ca8",
    "name": "Unlock car",
    "bluelinky": "57d6beca.e51cc",
    "x": 470,
    "y": 1080,
    "wires": [ [ "478f506c.59b44", "a10b38ae.94e5d8" ] ]
  },
  {
    "id": "2eef0961.a65396",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/unlock_car",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 130,
    "y": 1080,
    "wires": [ [ "4a75fc2f.1e51e4" ] ]
  },
  {
    "id": "250acff4.b367",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/lock_car",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 1160,
    "wires": [ [ "19c514c7.ca8aab" ] ]
  },
  {
    "id": "19c514c7.ca8aab",
    "type": "lock-car",
    "z": "f6f2187d.f17ca8",
    "name": "Lock car",
    "bluelinky": "57d6beca.e51cc",
    "x": 460,
    "y": 1160,
    "wires": [ [ "478f506c.59b44", "a10b38ae.94e5d8" ] ]
  },
  {
    "id": "cbdfadee.54f1c",
    "type": "car-location",
    "z": "f6f2187d.f17ca8",
    "name": "Get car location",
    "bluelinky": "57d6beca.e51cc",
    "x": 480,
    "y": 1240,
    "wires": [ [ "2e394950.ce9296", "478f506c.59b44" ] ]
  },
  {
    "id": "421c6f20.cb61f",
    "type": "car-odometer",
    "z": "f6f2187d.f17ca8",
    "name": "Get car odometer",
    "bluelinky": "57d6beca.e51cc",
    "x": 450,
    "y": 780,
    "wires": [ [ "478f506c.59b44", "c85df5a1.7c67f8" ] ]
  },
  {
    "id": "ae4a76ba.d1b7e8",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_odometer",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 140,
    "y": 780,
    "wires": [ [ "421c6f20.cb61f" ] ]
  },
  {
    "id": "a10b38ae.94e5d8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/doors",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 740,
    "y": 1160,
    "wires": [ ]
  },
  {
    "id": "3493be44.5a6802",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/odometer",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 870,
    "y": 780,
    "wires": [ ]
  },
  {
    "id": "cc998b60.1f7408",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_location",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 140,
    "y": 1240,
    "wires": [ [ "cbdfadee.54f1c" ] ]
  },
  {
    "id": "2e394950.ce9296",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/location",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 750,
    "y": 1240,
    "wires": [ ]
  },
  {
    "id": "47d9808d.1454b",
    "type": "inject",
    "z": "f6f2187d.f17ca8",
    "name": "Every 12h",
    "props": [
      { "p": "payload" },
      {
        "p": "topic",
        "vt": "str"
      }
    ],
    "repeat": "43200",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 110,
    "y": 200,
    "wires": [ [ "7151f9b3.64a868" ] ]
  },
  {
    "id": "8c0e1278.48eeb",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "doorLock",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.doorLock",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 800,
    "y": 160,
    "wires": [ [ "4a2701d1.43ed1" ] ]
  },
  {
    "id": "4a2701d1.43ed1",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/doorLock",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1010,
    "y": 160,
    "wires": [ ]
  },
  {
    "id": "c85df5a1.7c67f8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "odometer",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.value",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 680,
    "y": 780,
    "wires": [ [ "3493be44.5a6802" ] ]
  },
  {
    "id": "f0bdbf6f.5a26c",
    "type": "inject",
    "z": "f6f2187d.f17ca8",
    "name": "Every 24h",
    "props": [
      { "p": "payload" },
      {
        "p": "topic",
        "vt": "str"
      }
    ],
    "repeat": "86400",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 110,
    "y": 720,
    "wires": [ [ "421c6f20.cb61f" ] ]
  },
  {
    "id": "1e89420e.7d352e",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "engine",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.engine",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 220,
    "wires": [ [ "aa799088.efbc5" ] ]
  },
  {
    "id": "aa799088.efbc5",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/engine",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 220,
    "wires": [ ]
  },
  {
    "id": "3072f27c.87c05e",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "airCtrlOn",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.airCtrlOn",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 800,
    "y": 280,
    "wires": [ [ "f5d01011.764f6" ] ]
  },
  {
    "id": "f5d01011.764f6",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/airCtrlOn",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1010,
    "y": 280,
    "wires": [ ]
  },
  {
    "id": "f86a0cc1.73cb7",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "trunkOpen",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.trunkOpen",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 340,
    "wires": [ [ "e603126b.6a562" ] ]
  },
  {
    "id": "e603126b.6a562",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/trunkOpen",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1020,
    "y": 340,
    "wires": [ ]
  },
  {
    "id": "3a80f56c.0836fa",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "hoodOpen",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.hoodOpen",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 400,
    "wires": [ [ "5a7d883c.e56228" ] ]
  },
  {
    "id": "5a7d883c.e56228",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/hoodOpen",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1020,
    "y": 400,
    "wires": [ ]
  },
  {
    "id": "863a07ce.085bd8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "batteryStatus",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.batteryStatus",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 460,
    "wires": [ [ "b7ab78d8.2186c8" ] ]
  },
  {
    "id": "b7ab78d8.2186c8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/batteryStatus",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1020,
    "y": 460,
    "wires": [ ]
  },
  {
    "id": "49d564f1.3e30ac",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "defrost",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.defrost",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 640,
    "wires": [ [ "6309573b.8b5f08" ] ]
  },
  {
    "id": "6309573b.8b5f08",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/defrost",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 640,
    "wires": [ ]
  },
  {
    "id": "e7b544a.406a8b8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "acc",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.scc",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 580,
    "wires": [ [ "8b622bcc.94d9d8" ] ]
  },
  {
    "id": "8b622bcc.94d9d8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/acc",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 990,
    "y": 580,
    "wires": [ ]
  },
  {
    "id": "b0d6fbd7.64da38",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "batteryCharge",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.batteryCharge",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 820,
    "y": 520,
    "wires": [ [ "35d69904.5e8b16" ] ]
  },
  {
    "id": "35d69904.5e8b16",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/batteryCharge",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1030,
    "y": 520,
    "wires": [ ]
  },
  {
    "id": "b2af16e1.8e9e48",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "range",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.drvDistance[0].rangeByFuel.evModeRange.value",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 700,
    "wires": [ [ "1e875e4.f7566a2" ] ]
  },
  {
    "id": "1e875e4.f7566a2",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/range",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 700,
    "wires": [ ]
  },
  {
    "id": "183e42b8.b4fc8d",
    "type": "json",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "property": "payload",
    "action": "",
    "pretty": false,
    "x": 310,
    "y": 920,
    "wires": [ [ "a2f10779.7ad2c8" ] ]
  },
  {
    "id": "36dd9767.956ae8",
    "type": "mqtt-broker",
    "name": "mosquitto",
    "broker": "<IP>",
    "port": "1883",
    "clientid": "",
    "usetls": false,
    "compatmode": false,
    "keepalive": "60",
    "cleansession": true,
    "birthTopic": "",
    "birthQos": "0",
    "birthPayload": "",
    "closeTopic": "",
    "closeQos": "0",
    "closePayload": "",
    "willTopic": "",
    "willQos": "0",
    "willPayload": ""
  },
  {
    "id": "57d6beca.e51cc",
    "type": "bluelinky",
    "username": "<Username>",
    "password": "<password>",
    "region": "EU",
    "pin": "<pin>",
    "vin": "<vin>"
  }
]
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 14 Januar 2021, 21:28:59
So. Die Nodes von https://flows.nodered.org/node/node-red-contrib-bluelinky können jetzt auch das Laden starten und stoppen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 14 Januar 2021, 21:30:40
Zitat von: mnl1234 am 14 Januar 2021, 21:28:59
So. Die Nodes von https://flows.nodered.org/node/node-red-contrib-bluelinky können jetzt auch das Laden starten und stoppen.

Mit welchen Nodes soll das gehen?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 14 Januar 2021, 21:57:11
Zitat von: xerion am 14 Januar 2021, 21:30:40
Mit welchen Nodes soll das gehen?

Mit Node-red, bluelinky und den Nodes von node-red-contrib-bluelinky.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 14 Januar 2021, 21:59:33
Zitat von: mnl1234 am 14 Januar 2021, 21:57:11
Mit Node-red, bluelinky und den Nodes von node-red-contrib-bluelinky.

Das habe ich schon verstanden. Darum die Frage mit welchen Nodes?
Beispiel der Nodes siehe Screenshot.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 14 Januar 2021, 22:22:23
Ach so  8)
Die Änderung wurde gerade erst eingecheckt. (https://github.com/SondreNjaastad/node-red-contrib-bluelinky)
Weiß nicht, wie lange es dauert bis das nächste Release gemacht wird. Soll wohl automatisch gehen.
Alternativ kann man ja den Code schon aus dem git holen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 18 Januar 2021, 08:38:33
Zitat von: mnl1234 am 14 Januar 2021, 22:22:23
Ach so  8)
Die Änderung wurde gerade erst eingecheckt. (https://github.com/SondreNjaastad/node-red-contrib-bluelinky)
Weiß nicht, wie lange es dauert bis das nächste Release gemacht wird. Soll wohl automatisch gehen.
Alternativ kann man ja den Code schon aus dem git holen.

Perfekt, dann kann ich das auch endlich sinvoll verwenden um komplett PV gesteuert laden zu können  8)

Die bisher bluelinky Anbindung ist bei mir bisher nämlich eher Spielerei.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 26 Januar 2021, 12:19:33
Okay, ist nun auch offiziell verfügbar. Ich werde es mal einbauen ...

https://flows.nodered.org/node/node-red-contrib-bluelinky (https://flows.nodered.org/node/node-red-contrib-bluelinky)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 28 Januar 2021, 18:08:02
So, habe jetzt komplett alles neu aufgesetzt. Also NodeRed Docker image mit bluelinky und dann meinen Flow importiert. Leider gibt es nun Probleme mit den Credentials und der Login geht schief  :(


---------------------------------------------------------------------
Die Datei mit den Datenflowberechtigungsnachweisen wird mit einem vom System generierten Schlüssel verschlüsselt.

Wenn der vom System generierte Schlüssel aus irgendeinem Grund verloren geht, werden Ihre Berechtigungsnachweise
Die Datei kann nicht wiederhergestellt werden. Sie müssen sie löschen und erneut eingeben.
Ihre Berechtigungsnachweise.

Sie sollten Ihren eigenen Schlüssel mit Hilfe der Option 'credentialSecret' in
Ihre Einstellungsdatei. Node-RED wird dann Ihre Berechtigungsnachweise erneut verschlüsseln.
Datei mit dem ausgewählten Schlüssel beim nächsten Deployen einer Änderung verwenden.
---------------------------------------------------------------------


Kann mir eventuell jemand von euch weiterhelfen? Hab schon etwas recherchiert, aber leider das Problem noch nicht beheben können.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 28 Januar 2021, 20:00:09
Zitat von: acw81 am 28 Januar 2021, 18:08:02
So, habe jetzt komplett alles neu aufgesetzt. Also NodeRed Docker image mit bluelinky und dann meinen Flow importiert. Leider gibt es nun Probleme mit den Credentials und der Login geht schief  :(


---------------------------------------------------------------------
Die Datei mit den Datenflowberechtigungsnachweisen wird mit einem vom System generierten Schlüssel verschlüsselt.

Wenn der vom System generierte Schlüssel aus irgendeinem Grund verloren geht, werden Ihre Berechtigungsnachweise
Die Datei kann nicht wiederhergestellt werden. Sie müssen sie löschen und erneut eingeben.
Ihre Berechtigungsnachweise.

Sie sollten Ihren eigenen Schlüssel mit Hilfe der Option 'credentialSecret' in
Ihre Einstellungsdatei. Node-RED wird dann Ihre Berechtigungsnachweise erneut verschlüsseln.
Datei mit dem ausgewählten Schlüssel beim nächsten Deployen einer Änderung verwenden.
---------------------------------------------------------------------


Kann mir eventuell jemand von euch weiterhelfen? Hab schon etwas recherchiert, aber leider das Problem noch nicht beheben können.

Nutz du noch den Bluelink Account oder hast du schon auf Hyundai Account umgestellt?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 29 Januar 2021, 08:29:08
Zitat von: xerion am 28 Januar 2021, 20:00:09
Nutz du noch den Bluelink Account oder hast du schon auf Hyundai Account umgestellt?

Klär mich mal auf. Ich habe damals bei Fahrzeugübergabe (10/20) direkt in der Bluelink App einen Account angelegt. Vermute mal das ich dann einen Bluelink Account habe. Hat sich da etwas geändert? Zugriff über die App funktioniert im Moment aber noch.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 29 Januar 2021, 08:37:25
Zitat von: acw81 am 28 Januar 2021, 18:08:02

Kann mir eventuell jemand von euch weiterhelfen? Hab schon etwas recherchiert, aber leider das Problem noch nicht beheben können.

Geht mal auf den Discord-Server von den Entwicklern (hoffe, der Link ist hier erlaubt: https://discord.gg/HwnG8sY )
Die Leute da haben das Thema kürzlich schonmal diskutiert und sollten Dir am zielführendsdenn helfen können. ;-)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 29 Januar 2021, 09:43:20
Zitat von: acw81 am 29 Januar 2021, 08:29:08
Klär mich mal auf. Ich habe damals bei Fahrzeugübergabe (10/20) direkt in der Bluelink App einen Account angelegt. Vermute mal das ich dann einen Bluelink Account habe. Hat sich da etwas geändert? Zugriff über die App funktioniert im Moment aber noch.

Ich hatte am Anfang auch den einfachen Bluelink Account. Nachdem ich mich aber erneut anmelden musste bekam ich eine Abfrage ob ich mit mit dem Bluelink oder Hyundai Account anmelde möchte. Ich habe darauf einen Hyundai Account erstellt und nutze diesen nun für die App. Diese Zugang schient nun auch Bluelinky zu nutzen, zumindest funktioniert es bei mir darüber.

Habe das vor längerer Zeit mal gefunden:
https://github.com/Hacksore/bluelinky/issues/89

Ich habe auch schon das starten/stoppen des Ladevorgangs über NodeRed testweise integriert. Ich finde es nicht so toll da mich die Zeit Verzögerung stört. Ich mache das alles über FHEM und EVCC. Ist für mich die praktikabelste Lösung. Bluelinky nutze ich nur für die Komfort Feature (Heizung/Klima, Statusabfragen usw.)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 29 Januar 2021, 10:33:53
Zitat von: xerion am 29 Januar 2021, 09:43:20
Ich hatte am Anfang auch den einfachen Bluelink Account. Nachdem ich mich aber erneut anmelden musste bekam ich eine Abfrage ob ich mit mit dem Bluelink oder Hyundai Account anmelde möchte. Ich habe darauf einen Hyundai Account erstellt und nutze diesen nun für die App. Diese Zugang schient nun auch Bluelinky zu nutzen, zumindest funktioniert es bei mir darüber.

Habe das vor längerer Zeit mal gefunden:
https://github.com/Hacksore/bluelinky/issues/89

Ich habe auch schon das starten/stoppen des Ladevorgangs über NodeRed testweise integriert. Ich finde es nicht so toll da mich die Zeit Verzögerung stört. Ich mache das alles über FHEM und EVCC. Ist für mich die praktikabelste Lösung. Bluelinky nutze ich nur für die Komfort Feature (Heizung/Klima, Statusabfragen usw.)

Ja, das scheint es gewesen zu sein. Danke
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 02 Februar 2021, 08:11:08
Also ich bekomme das mit dem Bluelink einfach nicht gebacken... Über EVCC nach wie vor erfolglos (ich vermute das liegt irgendwie am Bluelink Login / Hyundai Account)
Jetzt würde ich erstmal zum Test gerne direkt über Bluelinky gehen. Hab es mal auf meinem FHEM Pi gezogen und im Ordner (node_modules/bluelinky die config.json mit meinen Login daten erstellt.
Nun muss ich doch irgendwie mit
npm run build den Code ausführbar machen
Leider bekomme ich das nicht hin, -> Absouter Anfänger.
Könnte ihr mir da ein wenig helfen? Gerne auch per PN weil´s ja nicht direkt mit FHEM zu tun hat.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 02 Februar 2021, 08:30:10
Zitat von: michisa86888 am 02 Februar 2021, 08:11:08
Also ich bekomme das mit dem Bluelink einfach nicht gebacken... Über EVCC nach wie vor erfolglos (ich vermute das liegt irgendwie am Bluelink Login / Hyundai Account)
Jetzt würde ich erstmal zum Test gerne direkt über Bluelinky gehen. Hab es mal auf meinem FHEM Pi gezogen und im Ordner (node_modules/bluelinky die config.json mit meinen Login daten erstellt.
Nun muss ich doch irgendwie mit
npm run build den Code ausführbar machen
Leider bekomme ich das nicht hin, -> Absouter Anfänger.
Könnte ihr mir da ein wenig helfen? Gerne auch per PN weil´s ja nicht direkt mit FHEM zu tun hat.

Moin am besten NodeRed als Anfänger nutzen. Das hat eine grafische Oberfläche und man kann viel oer Drag und drop machen. Eine Beispielkonfiguration für NodeRed findest du weiter oben. Wie man NodeRed installiert ist im Netz zu finden.
Um den Fehler von EVCC zu erfahren wäre ein Log hilfreich.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 02 Februar 2021, 08:45:44
Okay schaue ich mir mal an...
Wo finde ich den dass EVCC log?

Hier mal das Log von Konsole:

[lp-1  ] WARN 2021/02/02 09:11:35 poll mode '{always 1m0s}' may deplete your bat                                                                                                                                                             tery or lead to API misuse. USE AT YOUR OWN RISK.
[lp-1  ] WARN 2021/02/02 09:11:35 poll interval '1m0s' is lower than 1h0m0s and                                                                                                                                                              may deplete your battery or lead to API misuse. USE AT YOUR OWN RISK.
[lp-1  ] ERROR 2021/02/02 09:11:36 charger error: recv timeout
[lp-1  ] INFO 2021/02/02 09:11:36 loadpoint 1:
[lp-1  ] INFO 2021/02/02 09:11:36   mode:      pv
[lp-1  ] INFO 2021/02/02 09:11:36   charger:   power ✓ energy ✓ currents ✓ timer                                                                                                                                                              —
[lp-1  ] INFO 2021/02/02 09:11:36   meters:    charge ✓
[lp-1  ] INFO 2021/02/02 09:11:36     charge:  power ✓ energy ✓ currents ✓
[lp-1  ] INFO 2021/02/02 09:11:36   vehicles:  ✓
[lp-1  ] INFO 2021/02/02 09:11:36     car 0:   finish — status — climate —
[lp-1  ] ERROR 2021/02/02 09:11:45 updating charge meter: recv timeout
[lp-1  ] ERROR 2021/02/02 09:11:46 charge rater error: recv timeout
[lp-1  ] ERROR 2021/02/02 09:11:47 charger error: recv timeout
[lp-1  ] ERROR 2021/02/02 09:11:51 updating charge meter: recv timeout



Werden nur Fehler von der Ladestadion angzeigt die noch nicht angeschlossen ist...
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 02 Februar 2021, 09:19:25
Zitat von: michisa86888 am 02 Februar 2021, 08:45:44
Okay schaue ich mir mal an...
Wo finde ich den dass EVCC log?

Wenn du EVCC über die Shell gestartet hast bekommst du das Log direkt auf der Console angezeigt.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 02 Februar 2021, 09:27:34
Zitat von: xerion am 02 Februar 2021, 09:19:25
Wenn du EVCC über die Shell gestartet hast bekommst du das Log direkt auf der Console angezeigt.
siehe Beitrag davor, hab den Editiert... Steht aber nichts von einem Fehler bezuglich des Konas drin.
Log config aktuell so:

log: error
levels:
  core: debug
  lp-1: debug
  lp-2: debug
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 02 Februar 2021, 11:19:58
Zitat von: michisa86888 am 02 Februar 2021, 09:27:34
siehe Beitrag davor, hab den Editiert... Steht aber nichts von einem Fehler bezuglich des Konas drin.
Log config aktuell so:

log: error
levels:
  core: debug
  lp-1: debug
  lp-2: debug


Wird denn die Web UI ohne Fehler angezeigt?
Zeige mal deine evcc.yaml (Wichtig User Daten löschen!)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 02 Februar 2021, 11:52:48
Hier meine evcc.yaml

uri: 192.168.178.27:7070 # uri for ui
interval: 10s # control cycle interval

# log settings
log: error
levels:
  core: debug
  lp-1: debug
  lp-2: debug


# meter definitions
# name can be freely chosen and is used as reference when assigning meters to site and loadpoints
# for examples see https://github.com/andig/evcc-config#meters
meters:
meters:
- name: grid
  type: default
  power: # power reading
    type: mqtt # use mqtt plugin
    topic: fronius/verbrauch # mqtt topic
    timeout: 20s # don't use older values
- name: pv
  type: default
  power: # power reading
    type: mqtt # use mqtt plugin
    topic: fronius/leistung # mqtt topic
    timeout: 20s # don't use older values
   
 
# charger definitions
# name can be freely chosen and is used as reference when assigning charger to vehicle
# for examples see https://github.com/andig/evcc-config#chargers
chargers:

- name: keba
  type: keba
  uri: 192.168.178.210:7090

# vehicle definitions
# name can be freely chosen and is used as reference when assigning vehicle to loadpoint
# for examples see https://github.com/andig/evcc-config#vehicles
vehicles:
- name: kona
  type: hyundai
  title: Hyundai Kona # display name for UI
  capacity: 39 # kWh
  user: testemail235@gmx.de # user
  password: $userpassword # password
  cache: 1m # cache API response
 
# site describes the EVU connection, PV and home battery
site:
  title: Home Ladestation # display name for UI
  meters:
    grid: grid # grid meter
    pv: pv # pv meter
    battery:  # battery meter
  prioritySoC: 60 # give home battery priority up to this soc (0 to disable)

# loadpoint describes the charger, charge meter and connected vehicle
loadpoints:
- title: Garage # display name for UI
  charger: keba # charger
  meters: #charge: charge # charge meter
  vehicle: kona
  # vehicles: # use if multiple vehicles allowed to charge on this loadpoint
  # - ID.3
  # - e-Up
  mode: pv
  soc:
    # polling defines usage of the vehicle APIs
    # Modifying the default settings it NOT recommended. It MAY deplete your vehicle's battery
    # or lead to vehicle manufacturer banning you from API use. USE AT YOUR OWN RISK.
    poll:
      # poll mode defines under which condition the vehicle API is called:
      #   charging: update vehicle ONLY when charging (this is the recommended default)
      #   connected: update vehicle when connected (not only charging), interval defines how often
      #   always: always update vehicle regardless of connection state, interval defines how often
      mode: always
      # poll interval defines how often the vehicle API may be polled if NOT charging
      interval: 1m
    min: 0 # immediately charge to 0% regardless of mode unless "off" (disabled)
    target: 100 # always charge to 100%
    estimate: false # set true to interpolate between api updates
    levels: # target soc levels for UI
    - 30
    - 50
    - 80
    - 100
  onDisconnect: # set defaults when vehicle disconnects
    mode: pv # switch back to pv mode
    targetSoC: 100 # charge to 100%
  phases: 1 # ev phases (default 3)
  enable: # pv mode enable behavior
    delay: 1m # threshold must be exceeded for this long
    threshold: 0 # minimum export power (W). If zero, export must exceed minimum charge power to enable
  disable: # pv mode disable behavior
    delay: 5m # threshold must be exceeded for this long
    threshold: 200 # maximum import power (W)
  guardduration: 5m # switch charger contactor not more often than this (default 10m)
  mincurrent: 6 # minimum charge current (default 6A)
  maxcurrent: 16 # maximum charge current (default 16A)

# mqtt message broker
mqtt:
   broker: localhost:1883
   topic: # root topic for publishing, set empty to disable
   user:
   password:

# influx database
influx:
  # url: http://localhost:8086
  # database: evcc
  # user:
  # password:

# push messages
messaging:
  events:
    start: # charge start event
      title: Charge started
      msg: Started charging in "${mode}" mode
    stop: # charge stop event
      title: Charge finished
      msg: Finished charging ${chargedEnergy:%.1fk}kWh in ${chargeDuration}.
    connect: # vehicle connect event
      title: Car connected
      msg: "Car connected at ${pvPower:%.1fk}kW PV"
    disconnect: # vehicle connected event
      title: Car disconnected
      msg: Car disconnected after ${connectedDuration}
  services:
  # - type: pushover
  #   app: # app id
  #   recipients:
  #   - # list of recipient ids
  # - type: telegram
  #   token: # bot id
  #   chats:
  #   - # list of chat ids
  # - type: email
  #   uri: smtp://<user>:<password>@<host>:<port>/?fromAddress=<from>&toAddresses=<to>


In der WebUI werden die gleichen beiden Meldungen angezeigt wie in der Konsole

In der App muss ich weiterhin die PIN eingeben sobald ich einen Befehl ans Auto senden will...hat es vielleicht damit was zu tun?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 02 Februar 2021, 15:03:58
Zitat von: michisa86888 am 02 Februar 2021, 11:52:48
Hier meine evcc.yaml

uri: 192.168.178.27:7070 # uri for ui
interval: 10s # control cycle interval

# log settings
log: error
levels:
  core: debug
  lp-1: debug
  lp-2: debug


# meter definitions
# name can be freely chosen and is used as reference when assigning meters to site and loadpoints
# for examples see https://github.com/andig/evcc-config#meters
meters:
meters:
- name: grid
  type: default
  power: # power reading
    type: mqtt # use mqtt plugin
    topic: fronius/verbrauch # mqtt topic
    timeout: 20s # don't use older values
- name: pv
  type: default
  power: # power reading
    type: mqtt # use mqtt plugin
    topic: fronius/leistung # mqtt topic
    timeout: 20s # don't use older values
   
 
# charger definitions
# name can be freely chosen and is used as reference when assigning charger to vehicle
# for examples see https://github.com/andig/evcc-config#chargers
chargers:

- name: keba
  type: keba
  uri: 192.168.178.210:7090

# vehicle definitions
# name can be freely chosen and is used as reference when assigning vehicle to loadpoint
# for examples see https://github.com/andig/evcc-config#vehicles
vehicles:
- name: kona
  type: hyundai
  title: Hyundai Kona # display name for UI
  capacity: 39 # kWh
  user: testemail235@gmx.de # user
  password: $userpassword # password
  cache: 1m # cache API response
 
# site describes the EVU connection, PV and home battery
site:
  title: Home Ladestation # display name for UI
  meters:
    grid: grid # grid meter
    pv: pv # pv meter
    battery:  # battery meter
  prioritySoC: 60 # give home battery priority up to this soc (0 to disable)

# loadpoint describes the charger, charge meter and connected vehicle
loadpoints:
- title: Garage # display name for UI
  charger: keba # charger
  meters: #charge: charge # charge meter
  vehicle: kona
  # vehicles: # use if multiple vehicles allowed to charge on this loadpoint
  # - ID.3
  # - e-Up
  mode: pv
  soc:
    # polling defines usage of the vehicle APIs
    # Modifying the default settings it NOT recommended. It MAY deplete your vehicle's battery
    # or lead to vehicle manufacturer banning you from API use. USE AT YOUR OWN RISK.
    poll:
      # poll mode defines under which condition the vehicle API is called:
      #   charging: update vehicle ONLY when charging (this is the recommended default)
      #   connected: update vehicle when connected (not only charging), interval defines how often
      #   always: always update vehicle regardless of connection state, interval defines how often
      mode: always
      # poll interval defines how often the vehicle API may be polled if NOT charging
      interval: 1m
    min: 0 # immediately charge to 0% regardless of mode unless "off" (disabled)
    target: 100 # always charge to 100%
    estimate: false # set true to interpolate between api updates
    levels: # target soc levels for UI
    - 30
    - 50
    - 80
    - 100
  onDisconnect: # set defaults when vehicle disconnects
    mode: pv # switch back to pv mode
    targetSoC: 100 # charge to 100%
  phases: 1 # ev phases (default 3)
  enable: # pv mode enable behavior
    delay: 1m # threshold must be exceeded for this long
    threshold: 0 # minimum export power (W). If zero, export must exceed minimum charge power to enable
  disable: # pv mode disable behavior
    delay: 5m # threshold must be exceeded for this long
    threshold: 200 # maximum import power (W)
  guardduration: 5m # switch charger contactor not more often than this (default 10m)
  mincurrent: 6 # minimum charge current (default 6A)
  maxcurrent: 16 # maximum charge current (default 16A)

# mqtt message broker
mqtt:
   broker: localhost:1883
   topic: # root topic for publishing, set empty to disable
   user:
   password:

# influx database
influx:
  # url: http://localhost:8086
  # database: evcc
  # user:
  # password:

# push messages
messaging:
  events:
    start: # charge start event
      title: Charge started
      msg: Started charging in "${mode}" mode
    stop: # charge stop event
      title: Charge finished
      msg: Finished charging ${chargedEnergy:%.1fk}kWh in ${chargeDuration}.
    connect: # vehicle connect event
      title: Car connected
      msg: "Car connected at ${pvPower:%.1fk}kW PV"
    disconnect: # vehicle connected event
      title: Car disconnected
      msg: Car disconnected after ${connectedDuration}
  services:
  # - type: pushover
  #   app: # app id
  #   recipients:
  #   - # list of recipient ids
  # - type: telegram
  #   token: # bot id
  #   chats:
  #   - # list of chat ids
  # - type: email
  #   uri: smtp://<user>:<password>@<host>:<port>/?fromAddress=<from>&toAddresses=<to>


In der WebUI werden die gleichen beiden Meldungen angezeigt wie in der Konsole

In der App muss ich weiterhin die PIN eingeben sobald ich einen Befehl ans Auto senden will...hat es vielleicht damit was zu tun?

Für die Abfrage von von Werten brauchst du keine PIN das geht ohne.

ZitatIn der WebUI werden die gleichen beiden Meldungen angezeigt wie in der Konsole
Welche sind das es wäre hilfreich wenn du das teilst was du siehst damit wir nicht raten müssen sonst stellst sich eine Hilfe sehr schwer da.

Die evvc.yaml kann so nicht funktionieren, da die Grundeinstellungen fehlen. Am besten nutze einen Editor der .yaml Daten unterstützt dann siehst du auch sofort welche Attribute bei dir z.b. doppelt sind und somit nicht funktionieren. Weitere Fragen zu EVCC entweder per PN oder versuchen auf github von EVCC zu erlesen.

Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 02 Februar 2021, 15:50:12
Zitat von: michisa86888 am 02 Februar 2021, 08:45:44
Hier mal das Log von Konsole:

[lp-1  ] WARN 2021/02/02 09:11:35 poll mode '{always 1m0s}' may deplete your bat                                                                                                                                                             tery or lead to API misuse. USE AT YOUR OWN RISK.
[lp-1  ] WARN 2021/02/02 09:11:35 poll interval '1m0s' is lower than 1h0m0s and                                                                                                                                                              may deplete your battery or lead to API misuse. USE AT YOUR OWN RISK.
[lp-1  ] ERROR 2021/02/02 09:11:36 charger error: recv timeout
[lp-1  ] INFO 2021/02/02 09:11:36 loadpoint 1:
[lp-1  ] INFO 2021/02/02 09:11:36   mode:      pv
[lp-1  ] INFO 2021/02/02 09:11:36   charger:   power ✓ energy ✓ currents ✓ timer                                                                                                                                                              —
[lp-1  ] INFO 2021/02/02 09:11:36   meters:    charge ✓
[lp-1  ] INFO 2021/02/02 09:11:36     charge:  power ✓ energy ✓ currents ✓
[lp-1  ] INFO 2021/02/02 09:11:36   vehicles:  ✓
[lp-1  ] INFO 2021/02/02 09:11:36     car 0:   finish — status — climate —
[lp-1  ] ERROR 2021/02/02 09:11:45 updating charge meter: recv timeout
[lp-1  ] ERROR 2021/02/02 09:11:46 charge rater error: recv timeout
[lp-1  ] ERROR 2021/02/02 09:11:47 charger error: recv timeout
[lp-1  ] ERROR 2021/02/02 09:11:51 updating charge meter: recv timeout



Log habe ich oben mal gepostet. Diese letzten 3 Error Meldungen werden auch in der WebUI angezeigt.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 02 Februar 2021, 15:54:08
Zitat von: michisa86888 am 02 Februar 2021, 15:50:12
Log habe ich oben mal gepostet. Diese letzten 3 Error Meldungen werden auch in der WebUI angezeigt.

Ja das passt auch zu der fehlerhaften evcc.yaml das sollte wie gesagt außerhalb vom FHEM Forum diskutiert werden das die Basics von EVCC sind und nichts mit FHEM zu tun hat.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 03 Februar 2021, 08:15:10
Okay, da nun das Problem mit EVCC gelöst wurde, vielen Dank hier noch an @xerion bin ich nun dabei den NodeRed - Flow per MQTT an FHEM anzubinden..

Zitat von: acw81 am 13 Januar 2021, 18:50:24
Okay, jetzt funktioniert alles. Hier nochmal der aktualisierte Flow.


[
  {
    "id": "f6f2187d.f17ca8",
    "type": "tab",
    "label": "Flow 1",
    "disabled": false,
    "info": ""
  },
  {
    "id": "3cc11d24.ff01a2",
    "type": "comment",
    "z": "f6f2187d.f17ca8",
    "name": "WARNING: please check you have started this container with a volume that is mounted to /data\\n otherwise any flow changes are lost when you redeploy or upgrade the container\\n (e.g. upgrade to a more recent node-red docker image).\\n  If you are using named volumes you can ignore this warning.\\n Double click or see info side panel to learn how to start Node-RED in Docker to save your work",
    "info": "\nTo start docker with a bind mount volume (-v option), for example:\n\n```\ndocker run -it -p 1880:1880 -v /home/user/node_red_data:/data --name mynodered nodered/node-red\n```\n\nwhere `/home/user/node_red_data` is a directory on your host machine where you want to store your flows.\n\nIf you do not do this then you can experiment and redploy flows, but if you restart or upgrade the container the flows will be disconnected and lost. \n\nThey will still exist in a hidden data volume, which can be recovered using standard docker techniques, but that is much more complex than just starting with a named volume as described above.",
    "x": 350,
    "y": 80,
    "wires": [ ]
  },
  {
    "id": "4ae7cfad.ef2f9",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_status",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 130,
    "y": 280,
    "wires": [ [ "7151f9b3.64a868" ] ]
  },
  {
    "id": "80b490f1.a70b5",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/stop_ac",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 1000,
    "wires": [ [ "35e227cd.4f7fc8" ] ]
  },
  {
    "id": "2722c4a8.0a071c",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/start_ac",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 920,
    "wires": [ [ "183e42b8.b4fc8d" ] ]
  },
  {
    "id": "7151f9b3.64a868",
    "type": "car-status",
    "z": "f6f2187d.f17ca8",
    "name": "Get status",
    "dorefresh": true,
    "parsed": false,
    "bluelinky": "57d6beca.e51cc",
    "x": 410,
    "y": 200,
    "wires": [ [ "478f506c.59b44", "8c0e1278.48eeb", "1e89420e.7d352e", "3072f27c.87c05e", "f86a0cc1.73cb7", "3a80f56c.0836fa", "b0d6fbd7.64da38", "863a07ce.085bd8", "e7b544a.406a8b8", "49d564f1.3e30ac", "b2af16e1.8e9e48" ] ]
  },
  {
    "id": "a2f10779.7ad2c8",
    "type": "start-car",
    "z": "f6f2187d.f17ca8",
    "name": "Start car",
    "bluelinky": "57d6beca.e51cc",
    "x": 460,
    "y": 920,
    "wires": [ [ "478f506c.59b44" ] ],
    "inputLabels": [ "airTempvalue: 19.0" ],
    "info": "19"
  },
  {
    "id": "35e227cd.4f7fc8",
    "type": "stop-car",
    "z": "f6f2187d.f17ca8",
    "name": "Stop car",
    "bluelinky": "57d6beca.e51cc",
    "x": 460,
    "y": 1000,
    "wires": [ [ "478f506c.59b44" ] ]
  },
  {
    "id": "478f506c.59b44",
    "type": "debug",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 770,
    "y": 920,
    "wires": [ ]
  },
  {
    "id": "4a75fc2f.1e51e4",
    "type": "unlock-car",
    "z": "f6f2187d.f17ca8",
    "name": "Unlock car",
    "bluelinky": "57d6beca.e51cc",
    "x": 470,
    "y": 1080,
    "wires": [ [ "478f506c.59b44", "a10b38ae.94e5d8" ] ]
  },
  {
    "id": "2eef0961.a65396",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/unlock_car",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 130,
    "y": 1080,
    "wires": [ [ "4a75fc2f.1e51e4" ] ]
  },
  {
    "id": "250acff4.b367",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/lock_car",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 120,
    "y": 1160,
    "wires": [ [ "19c514c7.ca8aab" ] ]
  },
  {
    "id": "19c514c7.ca8aab",
    "type": "lock-car",
    "z": "f6f2187d.f17ca8",
    "name": "Lock car",
    "bluelinky": "57d6beca.e51cc",
    "x": 460,
    "y": 1160,
    "wires": [ [ "478f506c.59b44", "a10b38ae.94e5d8" ] ]
  },
  {
    "id": "cbdfadee.54f1c",
    "type": "car-location",
    "z": "f6f2187d.f17ca8",
    "name": "Get car location",
    "bluelinky": "57d6beca.e51cc",
    "x": 480,
    "y": 1240,
    "wires": [ [ "2e394950.ce9296", "478f506c.59b44" ] ]
  },
  {
    "id": "421c6f20.cb61f",
    "type": "car-odometer",
    "z": "f6f2187d.f17ca8",
    "name": "Get car odometer",
    "bluelinky": "57d6beca.e51cc",
    "x": 450,
    "y": 780,
    "wires": [ [ "478f506c.59b44", "c85df5a1.7c67f8" ] ]
  },
  {
    "id": "ae4a76ba.d1b7e8",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_odometer",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 140,
    "y": 780,
    "wires": [ [ "421c6f20.cb61f" ] ]
  },
  {
    "id": "a10b38ae.94e5d8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/doors",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 740,
    "y": 1160,
    "wires": [ ]
  },
  {
    "id": "3493be44.5a6802",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/odometer",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 870,
    "y": 780,
    "wires": [ ]
  },
  {
    "id": "cc998b60.1f7408",
    "type": "mqtt in",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "cmnd/bluelinky/get_location",
    "qos": "2",
    "datatype": "auto",
    "broker": "36dd9767.956ae8",
    "x": 140,
    "y": 1240,
    "wires": [ [ "cbdfadee.54f1c" ] ]
  },
  {
    "id": "2e394950.ce9296",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/location",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 750,
    "y": 1240,
    "wires": [ ]
  },
  {
    "id": "47d9808d.1454b",
    "type": "inject",
    "z": "f6f2187d.f17ca8",
    "name": "Every 12h",
    "props": [
      { "p": "payload" },
      {
        "p": "topic",
        "vt": "str"
      }
    ],
    "repeat": "43200",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 110,
    "y": 200,
    "wires": [ [ "7151f9b3.64a868" ] ]
  },
  {
    "id": "8c0e1278.48eeb",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "doorLock",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.doorLock",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 800,
    "y": 160,
    "wires": [ [ "4a2701d1.43ed1" ] ]
  },
  {
    "id": "4a2701d1.43ed1",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/doorLock",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1010,
    "y": 160,
    "wires": [ ]
  },
  {
    "id": "c85df5a1.7c67f8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "odometer",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.value",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 680,
    "y": 780,
    "wires": [ [ "3493be44.5a6802" ] ]
  },
  {
    "id": "f0bdbf6f.5a26c",
    "type": "inject",
    "z": "f6f2187d.f17ca8",
    "name": "Every 24h",
    "props": [
      { "p": "payload" },
      {
        "p": "topic",
        "vt": "str"
      }
    ],
    "repeat": "86400",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 110,
    "y": 720,
    "wires": [ [ "421c6f20.cb61f" ] ]
  },
  {
    "id": "1e89420e.7d352e",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "engine",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.engine",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 220,
    "wires": [ [ "aa799088.efbc5" ] ]
  },
  {
    "id": "aa799088.efbc5",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/engine",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 220,
    "wires": [ ]
  },
  {
    "id": "3072f27c.87c05e",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "airCtrlOn",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.airCtrlOn",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 800,
    "y": 280,
    "wires": [ [ "f5d01011.764f6" ] ]
  },
  {
    "id": "f5d01011.764f6",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/airCtrlOn",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1010,
    "y": 280,
    "wires": [ ]
  },
  {
    "id": "f86a0cc1.73cb7",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "trunkOpen",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.trunkOpen",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 340,
    "wires": [ [ "e603126b.6a562" ] ]
  },
  {
    "id": "e603126b.6a562",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/trunkOpen",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1020,
    "y": 340,
    "wires": [ ]
  },
  {
    "id": "3a80f56c.0836fa",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "hoodOpen",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.hoodOpen",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 400,
    "wires": [ [ "5a7d883c.e56228" ] ]
  },
  {
    "id": "5a7d883c.e56228",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/hoodOpen",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1020,
    "y": 400,
    "wires": [ ]
  },
  {
    "id": "863a07ce.085bd8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "batteryStatus",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.batteryStatus",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 810,
    "y": 460,
    "wires": [ [ "b7ab78d8.2186c8" ] ]
  },
  {
    "id": "b7ab78d8.2186c8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/batteryStatus",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1020,
    "y": 460,
    "wires": [ ]
  },
  {
    "id": "49d564f1.3e30ac",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "defrost",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.defrost",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 640,
    "wires": [ [ "6309573b.8b5f08" ] ]
  },
  {
    "id": "6309573b.8b5f08",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/defrost",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 640,
    "wires": [ ]
  },
  {
    "id": "e7b544a.406a8b8",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "acc",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.scc",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 580,
    "wires": [ [ "8b622bcc.94d9d8" ] ]
  },
  {
    "id": "8b622bcc.94d9d8",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/acc",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 990,
    "y": 580,
    "wires": [ ]
  },
  {
    "id": "b0d6fbd7.64da38",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "batteryCharge",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.batteryCharge",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 820,
    "y": 520,
    "wires": [ [ "35d69904.5e8b16" ] ]
  },
  {
    "id": "35d69904.5e8b16",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/batteryCharge",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1030,
    "y": 520,
    "wires": [ ]
  },
  {
    "id": "b2af16e1.8e9e48",
    "type": "change",
    "z": "f6f2187d.f17ca8",
    "name": "range",
    "rules": [
      {
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "payload.status.evStatus.drvDistance[0].rangeByFuel.evModeRange.value",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 790,
    "y": 700,
    "wires": [ [ "1e875e4.f7566a2" ] ]
  },
  {
    "id": "1e875e4.f7566a2",
    "type": "mqtt out",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "topic": "bluelinky/range",
    "qos": "",
    "retain": "",
    "broker": "36dd9767.956ae8",
    "x": 1000,
    "y": 700,
    "wires": [ ]
  },
  {
    "id": "183e42b8.b4fc8d",
    "type": "json",
    "z": "f6f2187d.f17ca8",
    "name": "",
    "property": "payload",
    "action": "",
    "pretty": false,
    "x": 310,
    "y": 920,
    "wires": [ [ "a2f10779.7ad2c8" ] ]
  },
  {
    "id": "36dd9767.956ae8",
    "type": "mqtt-broker",
    "name": "mosquitto",
    "broker": "<IP>",
    "port": "1883",
    "clientid": "",
    "usetls": false,
    "compatmode": false,
    "keepalive": "60",
    "cleansession": true,
    "birthTopic": "",
    "birthQos": "0",
    "birthPayload": "",
    "closeTopic": "",
    "closeQos": "0",
    "closePayload": "",
    "willTopic": "",
    "willQos": "0",
    "willPayload": ""
  },
  {
    "id": "57d6beca.e51cc",
    "type": "bluelinky",
    "username": "<Username>",
    "password": "<password>",
    "region": "EU",
    "pin": "<pin>",
    "vin": "<vin>"
  }
]


Habe den Flow mit diesem Code konfiguriert. Die Verbindungen werden mir in NodeRed auch angezeigt. Mein FHEM MQTT2 Server müsste doch jetzt ein neues Device automatisch finden oder? Weil in FHEM taucht nichts auf
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 03 Februar 2021, 08:27:38
Zitat von: michisa86888 am 03 Februar 2021, 08:15:10
Okay, da nun das Problem mit EVCC gelöst wurde, vielen Dank hier noch an @xerion bin ich nun dabei den NodeRed - Flow per MQTT an FHEM anzubinden..

Habe den Flow mit diesem Code konfiguriert. Die Verbindungen werden mir in NodeRed auch angezeigt. Mein FHEM MQTT2 Server müsste doch jetzt ein neues Device automatisch finden oder? Weil in FHEM taucht nichts auf

Also ich hab mir das MQTT device selbst erstellt. Da es dafür kein Template gibt musst du sowieso das meiste selbst machen ;)

Hier mal meine Device Definition. Ist zwar nicht schön, funktioniert aber  ;D. Ist aber auch noch nicht ganz fertig wie du feststellen wirst. Verbesserungen gerne hier posten.


defmod mqttKona MQTT2_DEVICE
attr mqttKona IODev MQTT_Broker
attr mqttKona event-on-change-reading .*
attr mqttKona readingList bluelinky/odometer.* odometer\
bluelinky/doorLock.* doorLock\
bluelinky/range.* range\
bluelinky/batteryStatus.* batteryStatus\
bluelinky/odometer.* odometer\
bluelinky/batteryPlugin.* batteryPlugin\
bluelinky/batteryCharge.* batteryCharge\
bluelinky/engine.* engine\
bluelinky/hoodOpen.* hoodOpen\
bluelinky/trunkOpen.* trunkOpen\
bluelinky/airCtrlOn.* airCtrlOn\
bluelinky/batSoc.* batSoc
attr mqttKona room Garage
attr mqttKona setList getOdometer cmnd/bluelinky/get_odometer 1\
getStatus cmnd/bluelinky/get_status 1\
getLocation cmnd/bluelinky/get_location 1\
startAC:slider,17,0.5,27 cmnd/bluelinky/start_ac {"defrost":true,"windscreenHeating":true,"temperature":$EVTPART1,"unit":"C"}\
stopAC cmnd/bluelinky/stop_ac\
lockCar cmnd/bluelinky/lock_car\
unlockCar cmnd/bluelinky/unlock_car\
startCharging cmnd/bluelinky/start_charging\
stopCharging cmnd/bluelinky/stop_charging
attr mqttKona stateFormat Kilometerstand: odometer km <br>\
Akku: batteryStatus % <br>\
Türen veriegelt: doorLock <br>\
Reichweite: range km <br>\
Vollgeladen in: status_evStatus_remainTime2_atc_value min <br>\
<br>\
AC: Defrost=ac_defrost Windscreen=ac_windscreen <br>\

attr mqttKona webCmd ac_defrost:ac_windscreen


Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 03 Februar 2021, 10:34:25
Zitat von: acw81 am 03 Februar 2021, 08:27:38
Also ich hab mir das MQTT device selbst erstellt. Da es dafür kein Template gibt musst du sowieso das meiste selbst machen ;)

Hier mal meine Device Definition. Ist zwar nicht schön, funktioniert aber  ;D. Ist aber auch noch nicht ganz fertig wie du feststellen wirst. Verbesserungen gerne hier posten.


Habe ich mal so versucht, allerdings bekomme ich keine Readings rein. Die Topics müssten passen und in NodeRed zeigt mir auch verbunden an.
Wie kann ich in NodeRed schauen ob überhaupt Readings generiert werden?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 03 Februar 2021, 10:37:09
Ich nutze für anzeige der MQTT Topics "MQTT.fx" damit kannst du alle Nachrichten sehen und auch auf bestimmte filtern.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 03 Februar 2021, 10:40:17
Ich verwende den hier, damit kannst du auch Topics setzen

https://mqtt-explorer.com/ (https://mqtt-explorer.com/)

Gibt es für die gängigen Betriebsysteme und läuft unter Windoof auch in der portable Version

BTW, hast du FHEM MQTT device deinen Broker gesetzt?

Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 03 Februar 2021, 11:09:42
Zitat von: xerion am 03 Februar 2021, 10:37:09
Ich nutze für anzeige der MQTT Topics "MQTT.fx" damit kannst du alle Nachrichten sehen und auch auf bestimmte filtern.
Okay habe ich mal installiert und nach den Topics suchen lassen. Die topics vom NodeRed fehlen. In Node wird mir aber angezeigt verbunden. Und sobald ich meinen Broker ausschalte wird nicht verbunden angezeigt.

edit: scheint sich gelöst zu haben, von meiner openWB Installation waren noch 100erte Topics übrig... Die habe ich raus gelöscht und jetzt kommt das von NodeRed an
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 05 Februar 2021, 06:25:42
So, das ganze scheint noch nicht so richtig zu laufen. Ich habe den timestamp zum aktualisieren vom Fahrzeugstatus auf 2 Stunden gestellt. Jetzt bekomme ich alle 2 Stunden in FHEM ein neues MQTT Device und das "ältere" wird nicht aktualisiert. Das ganze auch nur wenn ich NodeRed im Browser geöffnet habe.

Die cmnd-Mqtt Kommandos funktionieren auch noch nicht. Ich bekomme wenn ich in FHEM die "Get"-Kommandos ausführe zwar im Debug-Fenster die aktuellen Werte - diese Werten aber nicht per Mqtt abgesetzt.
Die Kommandos zum öffnen der Türen, Klima starten funktionieren gar nicht.
Beim Slider-Start AC kommt im Debug_Fenster die Meldung:

Unexpected token \ in JSON at position 69
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 05 Februar 2021, 11:01:42
Zitat von: michisa86888 am 05 Februar 2021, 06:25:42
So, das ganze scheint noch nicht so richtig zu laufen. Ich habe den timestamp zum aktualisieren vom Fahrzeugstatus auf 2 Stunden gestellt. Jetzt bekomme ich alle 2 Stunden in FHEM ein neues MQTT Device und das "ältere" wird nicht aktualisiert. Das ganze auch nur wenn ich NodeRed im Browser geöffnet habe.

Die cmnd-Mqtt Kommandos funktionieren auch noch nicht. Ich bekomme wenn ich in FHEM die "Get"-Kommandos ausführe zwar im Debug-Fenster die aktuellen Werte - diese Werten aber nicht per Mqtt abgesetzt.
Die Kommandos zum öffnen der Türen, Klima starten funktionieren gar nicht.
Beim Slider-Start AC kommt im Debug_Fenster die Meldung:

Unexpected token \ in JSON at position 69


Ich denke du solltest für diese Frage ein extra Thread im Anfängerforum aufmachen. Das hat nicht wirklich mit dem Thema zu tun und sind MQTT Grundlagen. Am besten dort mal fragen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: Det20 am 22 Februar 2021, 12:55:49
Hallo,

anscheinend nutzt Hyundai/KIA die Gunst der Stunde und flutet den deutschen Markt; mein Kona kommt Ende der Woche, der Kia Sorento PHEV Mitte des Jahres. Tja, wenn man als großer Auto-Hersteller halt munter alles verschläft und trotzdem utopische Preise verlangt, sind andere halt schneller und pfiffiger. Wie dem auch sei bin ich wirklich mehr als interessiert an der Anbindung vom Kona. Könnte mir da ev jemand ein kleines How-To geben? Was muss ich installieren, was kann ich an Modulen testen? Mir geht es primär um die Klimaanlage, möchte die zeitgesteuert an- oder ausschalten. Außerdem, das Auto verriegeln, Frau vergisst das dauernd.

Frage am Rande: Muss sich der Kona für Heizung, wie der iOn oder Peugeot 2008, am Kabel befinden oder geht das mittlerweile auch ohne? Den Sinn habe ich wirklich noch nie verstanden. Klar, fahren ist wichtiger als Heizung, aber der Computer wird ja wohl die Heizung solange anschalten können, bis noch x kW in der Batterie sind.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 22 Februar 2021, 14:29:51
Zitat von: Det20 am 22 Februar 2021, 12:55:49
Frage am Rande: Muss sich der Kona für Heizung, wie der iOn oder Peugeot 2008, am Kabel befinden oder geht das mittlerweile auch ohne? Den Sinn habe ich wirklich noch nie verstanden. Klar, fahren ist wichtiger als Heizung, aber der Computer wird ja wohl die Heizung solange anschalten können, bis noch x kW in der Batterie sind.

Tag!
Das geht auch ohne das Auto angeschlossen zu haben. Sowohl programmiert also auch spontan.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 22 Februar 2021, 19:52:50
Moin zusammen,

wollte euch nur kurz informieren das momentan keine Anstrengungen bzgl. Buelinky zielführend sind. Hyundai hat heute Ihr Anmeldeverfahren umgestellt um 3rd Party Apps wie Bluelinky "auszusperren". Ich habe auch schon ein Ticket eröffnet aber das wird m.E. schwer bis gar nicht gehen.

https://github.com/Hacksore/bluelinky/issues/101#issue-813635047
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 22 Februar 2021, 20:14:40
Zitat von: xerion am 22 Februar 2021, 19:52:50
Moin zusammen,

wollte euch nur kurz informieren das momentan keine Anstrengungen bzgl. Buelinky zielführend sind. Hyundai hat heute Ihr Anmeldeverfahren umgestellt um 3rd Party Apps wie Bluelinky "auszusperren". Ich habe auch schon ein Ticket eröffnet aber das wird m.E. schwer bis gar nicht gehen.

https://github.com/Hacksore/bluelinky/issues/101#issue-813635047

Mal sehen. Ich lese im Discord mit und die Jungs (und Mädels?) sind schon dran. Wie erfolgreich das sein wird... Wir werden sehen.
In der Tat hat Hyundai heute Nacht die Türe ordentlich zugeknallt.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 23 Februar 2021, 12:12:49
Zitat von: mnl1234 am 22 Februar 2021, 20:14:40
Mal sehen. Ich lese im Discord mit und die Jungs (und Mädels?) sind schon dran. Wie erfolgreich das sein wird... Wir werden sehen.
In der Tat hat Hyundai heute Nacht die Türe ordentlich zugeknallt.

Ich finde das einfach nur dämlich und vllt. auch einen Grund beim nächsten E-Auto kein Hyundai zu kaufen. Die Welt braucht nicht mehr verschlossene Systeme sondern eher das Gegenteil. Wer das noch nicht verstanden hat wird mit dieser Strategie irgendwann untergehen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 09 März 2021, 21:29:31
Kleiner Statusbericht. Wenn man seine NodeRed Umgebung auf Kuvork umbaut funktioniert es wieder :-)
https://flows.nodered.org/node/node-red-contrib-kuvork
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: Det20 am 09 März 2021, 22:02:21
Bin ich der einzige, der das nicht rafft?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 09 März 2021, 22:11:32
Zitat von: Det20 am 09 März 2021, 22:02:21
Bin ich der einzige, der das nicht rafft?

Was "raffst" du denn nicht?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: Det20 am 09 März 2021, 22:12:41
Ich habe keine Ahnung, was NodeRed ist. Habe einen Rapberry und veratehe leider kein Wort seit 2 Seiten
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 09 März 2021, 22:16:03
Zitat von: Det20 am 09 März 2021, 22:12:41
Ich habe keine Ahnung, was NodeRed ist. Habe einen Rapberry und veratehe leider kein Wort seit 2 Seiten

Dann wäre es am besten das du dich erstmal anhand von ein paar Tutorials weiter bildest, denn das fehlende Grundwissen wird dann im FHEM Forum schwierig zu vermitteln bzw. gehört hier m.E. nach nicht hier hin. Einfach mal googeln gibt genügend Videos genauso habe ich es auch gelernt ;-)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 10 März 2021, 08:40:36
Zitat von: xerion am 09 März 2021, 21:29:31
Kleiner Statusbericht. Wenn man seine NodeRed Umgebung auf Kuvork umbaut funktioniert es wieder :-)
https://flows.nodered.org/node/node-red-contrib-kuvork

Ich habs mal in meine bestehende Umgebung installiert, aber der Login funktioniert nicht. Das nutzt doch den selben Node bluelinky, muss ich erst das bestehende node-red-contrib-bluelinky entfernen?


Update:
Okay, der remove von node-red-contrib-bluelinky hatte gefehlt. Also einfach

npm remove node-red-contrib-bluelinky
npm install node-red-contrib-kuvork

und der bestehende Flow sollte wieder funktionieren.


Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: rossi007 am 10 März 2021, 10:52:36
Also bei mir endet die Kuvork-Variante ebenfalls beim Login in einem Error.
Der Global Configuration Node : bluelinky hat übrigens noch ein extra Feld, in dem man die Marke des Fahrzeuges (Kia oder Hyundai) angeben kann/muß.
Dennoch erscheint bei jedem Aufruf-Knoten nach dem deploy eine rote Markierung mit dem Text "Error" - wie zuvor bei der Variante node-red-contrib-bluelinky
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 10 März 2021, 20:23:54
Ich habe als erstes die Flows exportiert und danach entfernt damit mit man Bluelinky auch komplett entfernen kann. Dann habe ich Kuvork installiert. Anschließend habe ich die gesicherten Flows wieder importiert und die bluelinky relevanten Nodes gegen die neuen ausgetauscht. Danach die Nodes mit dem Zugangsdaten verknüpft und neu deployt. Danach wurde die Verbindung problemlos hergestellt.

Hoffe das euch das etwas hilft.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 15 März 2021, 09:22:36
Zitat von: xerion am 10 März 2021, 20:23:54
Ich habe als erstes die Flows exportiert und danach entfernt damit mit man Bluelinky auch komplett entfernen kann. Dann habe ich kurvork installiert. Anschließend habe ich die gesicherten Flows wieder importiert und die bluelinky relevanten Nodes gegen die neuen ausgetauscht. Danach die Nodes mit dem Zugangsdaten verknüpft und neu deployt. Danach wurde die Verbindung problemlos hergestellt.

Hoffe das euch das etwas hilft.

Okay, bei mir hat es glücklicherweise wie gesagt ohne Änderungen an den Flows funktioniert.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 16 März 2021, 11:18:37
Mal eine andere Frage in die Runde. Also bei mir liefert das API von Hyundai sehr oft fehlerhafte Antworten (sowohl per Bluelinky als auch per Android App). Es sind dann mehrere Abfragen notwendig bis ich den richtigen Status bekomme. Gerade eben wurde mir anscheinend auch wieder der Akkustatus mit 0% zurückgemeldet. Habt ihr das auch? Das scheint ja ein direktes Problem bei Hyundai zu sein, oder?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 16 März 2021, 11:21:15
Ja das habe ich. Das scheint ein Bluelink/Hyundai Problem zu sein. Das war bei mir auch der Grund warum ich in EVCC nicht mehr auf Bluelinky setze, es kam dort zu oft 0 zurück und was dann für PV optimiertes laden schlecht ist. Ich nutze das jetzt über eine OBD2 Schnittstelle.
Für die Komfortfeature nutze ich Kuvork in NodeRed ->MQTT->Fhem. Das funktioniert sehr gut.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: Meiner.Einer am 21 März 2021, 16:50:13
Zitat von: michisa86888 am 05 Februar 2021, 06:25:42
...Jetzt bekomme ich alle 2 Stunden in FHEM ein neues MQTT Device und das "ältere" wird nicht aktualisiert....

Das hatte ich auch. Das liegt wohl an der Konfiguration der MQTT-Anbindung im NodeRED. Bei den Einstellungen des "mqtt-broker" gibt es den Wert "Client-ID". Da steht auch ein Hinweis "Leerer Wert für automatische Generierung"  ;)
Nachdem ich dort einen Namen vergeben habe nimmt er natürlich immer den und die Verbindug ist persistent.  8)

Keine Ahnung, ob das die optimale Lösung ist, aber es funkt.

Tschau

Ednil
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: Det20 am 17 Mai 2021, 12:41:18
Hallo zusammen,

nur noch wenige Tage, und mein Sorento PHEV trudelt ein. Gibt es inzwischen eine DAU-fähige Anleitung, wie ich den mit möglichst wenig Overhead auf FHEm anbinden kann? Bin bei Docker und co nicht zu Hause, NodeJS oder vergleichbar wäre mir da lieber.

Viele Grüße
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: gadget am 29 Mai 2021, 12:14:32
Schau mal hier https://forum.fhem.de/index.php?topic=118822.0 (https://forum.fhem.de/index.php?topic=118822.0). Bei mir lief das 7 Wochen problemlos, aber seit 3 Tagen bekomme ich Register request has failed with Error=PHONE_REGISTRATION_ERROR

Edit: Nach Aktualisierung von bluelinky klappt´s wieder. Sollte somit bei Neuinstallation kein Problem sein.

Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: acw81 am 14 Juni 2021, 10:43:37
Servus zusammen,

bei mir funktioniert mal wieder der Login nicht. Soweit ich das richtig im Discord Kanal verstanden habe, müsste ich meinen Zeitstempel aktualisieren oder am besten gleich eine ganze Liste mit Zeitstempeln generieren. Hat das von euch schon jemand gemacht und kann hier kurz beschreiben was zu tun ist?

Update 06.07.21

Nach Update auf Version 0.0.25 läuft alles wieder wie geschmiert :D Die neue Abfrage "get full status" liefert nun auch alle Infos und man muss nicht drei Abfragen starten. Das beschleunigt das Ganze ungemein.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 11 Oktober 2021, 20:27:45
Hey wie habt ihr die Setlist für den Klimastart eingestellt? Ich habe sie so aktuell

startAC:slider,17,0.5,27 cmnd/bluelinky/start_ac {"defrost":true,"windscreenHeating":true,"temperature":$EVTPART1,"unit":"0"}\


Aber die Klimaanlage startet immer nur mit 17C° egal welchen Wert ich am Slider einstelle?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 20 Oktober 2021, 14:32:13
Zitat von: michisa86888 am 11 Oktober 2021, 20:27:45
Hey wie habt ihr die Setlist für den Klimastart eingestellt? Ich habe sie so aktuell

startAC:slider,17,0.5,27 cmnd/bluelinky/start_ac {"defrost":true,"windscreenHeating":true,"temperature":$EVTPART1,"unit":"0"}\


Aber die Klimaanlage startet immer nur mit 17C° egal welchen Wert ich am Slider einstelle?

Bei mir funktioniert das hier ohne Probleme:
startTemp:slider,17,1,27 /bluelink/start_car {"defrost": false,"windscreenHeating": false,"temperature": "$EVTPART1","unit": "C"}
Was ich bei dir sehe, das die Hochkommas bei $EVTPART1 fehlen. Wäre somit nicht JSON konform.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 28 Oktober 2021, 10:25:16
Zitat von: xerion am 16 März 2021, 11:21:15
Ja das habe ich. Das scheint ein Bluelink/Hyundai Problem zu sein. Das war bei mir auch der Grund warum ich in EVCC nicht mehr auf Bluelinky setze, es kam dort zu oft 0 zurück und was dann für PV optimiertes laden schlecht ist. Ich nutze das jetzt über eine OBD2 Schnittstelle.
Für die Komfortfeature nutze ich Kuvork in NodeRed ->MQTT->Fhem. Das funktioniert sehr gut.
Hallo zusammen,
Kuvork ist eingestellt worden und verweist wieder auf BlueLinky
Zitat
This package has been deprecated
Author message: Deprecated. Use BlueLinky 7.0.0 or higher

Was mir jedoch noch im Verständnis fehlt ist das setzen der Komfortfunktionen über MQTT. Das Kia.js Skript scheint nur zu lesen und die Werte dann als json mit MQTT ins FHEM zu senden.
Habt Ihr da mal einen Link wie es weiter geht?

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 28 Oktober 2021, 13:26:03
Zitat von: ch.eick am 28 Oktober 2021, 10:25:16
Hallo zusammen,
Kuvork ist eingestellt worden und verweist wieder auf BlueLinky
Was mir jedoch noch im Verständnis fehlt ist das setzen der Komfortfunktionen über MQTT. Das Kia.js Skript scheint nur zu lesen und die Werte dann als json mit MQTT ins FHEM zu senden.
Habt Ihr da mal einen Link wie es weiter geht?

VG
   Christian

Ich nutze jetzt schon seit längeren (wieder) Bluelinky direkt in NodeRed. Dann baucht man sich auch keine Gedanken über MQTT Anbindung machen. Es gibt aber auch User die die Skripte direkt aus FHEM heraus aufrufen und dann per MQTT weiter verarbeiten, siehe https://forum.fhem.de/index.php/topic,118822.msg1180108.html#msg1180108
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 28 Oktober 2021, 13:50:05
Zitat von: xerion am 28 Oktober 2021, 13:26:03
Ich nutze jetzt schon seit längeren (wieder) Bluelinky direkt in NodeRed. Dann baucht man sich auch keine Gedanken über MQTT Anbindung machen. Es gibt aber auch User die die Skripte direkt aus FHEM heraus aufrufen und dann per MQTT weiter verarbeiten, siehe https://forum.fhem.de/index.php/topic,118822.msg1180108.html#msg1180108
Ich habe jetzt den node-red docker Container aktiv und bluelinky installiert. Ein Kia Flow zeigt verbunden und ready, nur kommt noch nichts im MQTT2 in FHEM an.
Dort habe ich auch volgendes Device erzeugt.

Besonderen Dank schon mal an @mnl1234 für die tolle Hilfe bisher.

Wie kann ich nun im node-red die Daten sehen und was wäre eventuell noch bei der MQTT2 Definition zu korrigieren?

VG
   Christian



Internals:
   CFGFN     
   DEVICETOPIC bluelinky
   FUUID      617a8641-f33f-61a8-0c9d-1b245d32117df1f8
   IODev      MQTT2_FHEM_Server
   NAME       WB_1_Kia_eNiro
   NR         24272
   STATE      <table>   <tr>   <td style='text-align:right'>Status:</td>   <td style='text-align:left'>unterwegs</td>   </tr>   <tr>   <td style='text-align:right'>Akku:</td>   <td style='text-align:left'> %</td>   </tr>   <tr>   <td style='text-align:right'>Reichweite:</td>   <td style='text-align:left'>450 km</td>   </tr>   <tr style='display:none;'>   <td style='text-align:right'>Ladedauer:</td>   <td style='text-align:left'> h</td>   </tr>   <tr>   <td style='text-align:right'>Ladegrenze AC:</td>   <td style='text-align:left'> %</td>   </tr>   <tr>   <td style='text-align:right'>Kilometerstand:</td>   <td style='text-align:left'>0 km</td>   </tr>   <tr>   <td style='text-align:right'>12V Batterie:</td>   <td style='text-align:left'> %</td>   </tr>   <tr>   <td style='text-align:right'>Aktivstatus:</td>   <td style='text-align:left'></td>   </tr>   <tr>   <td style='text-align:right'>Zeit:</td>   <td style='text-align:left'></td>   </tr>   </table>
   TYPE       MQTT2_DEVICE
   READINGS:
     2021-10-28 13:15:13   IODev           MQTT2_FHEM_Server
Attributes:
   DbLogExclude .*
   IODev      MQTT2_FHEM_Server
   alias      WB_1_Kia_eNiro
   autocreate 1
   devicetopic bluelinky
   group      PV Eigenverbrauch
   icon       car
   readingList $DEVICETOPIC/status:.* { json2nameValue($EVENT) }
$DEVICETOPIC/location.* { json2nameValue($EVENT) }
$DEVICETOPIC/odometer:.* { json2nameValue($EVENT) }
$DEVICETOPIC/req_received:.* req_received
$DEVICETOPIC/req_active:.* req_active
   room       MQTT2_DEVICE,Strom->Photovoltaik
   setList    getOdometer req/$DEVICETOPIC/get_odometer get_odometer
getStatus req/$DEVICETOPIC/get_status get_status
getLocation req/$DEVICETOPIC/get_location get_location
getAll req/$DEVICETOPIC/get_all get_all
startCharge req/$DEVICETOPIC/start_charging start_charging
stopCharge req/$DEVICETOPIC/stop_charging stop_charging
stopClimate req/$DEVICETOPIC/stop_climate stop_climate
startHeating req/$DEVICETOPIC/start_climate {"defrost": true, "windscreenHeating": true, "temperature": 22.0 , "unit": "C"}
startCooling req/$DEVICETOPIC/start_climate {"defrost": false, "windscreenHeating": false, "temperature": 22.0 , "unit": "C"}
   sortby     312
   stateFormat {my $charge = (ReadingsVal($name,"charging","false") eq "true");;   my $athome = (ReadingsVal($name,"atHomeStanding","false") eq "true");;   my $chargeathome = ($charge && $athome);;   my $connectedathome = ($athome && ReadingsVal($name,"connected","false") eq "true");;   sprintf("   <table>   <tr>   <td style='text-align:right'>Status:</td>   <td style='text-align:left'>%s</td>   </tr>   <tr>   <td style='text-align:right'>Akku:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Reichweite:</td>   <td style='text-align:left'>%s km</td>   </tr>   <tr style='%s'>   <td style='text-align:right'>Ladedauer:</td>   <td style='text-align:left'>%s h</td>   </tr>   <tr>   <td style='text-align:right'>Ladegrenze AC:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Kilometerstand:</td>   <td style='text-align:left'>%d km</td>   </tr>   <tr>   <td style='text-align:right'>12V Batterie:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Aktivstatus:</td>   <td style='text-align:left'>%s</td>   </tr>   <tr>   <td style='text-align:right'>Zeit:</td>   <td style='text-align:left'>%s</td>   </tr>   </table>   ",   ($chargeathome ? "läd zu Hause" : ($connectedathome ? "angeschlossen zu Hause" : ($athome ? "zu Hause" : ($charge ? "Läd auswärts" : "unterwegs")))),   ReadingsVal($name,"batSOC",""),   ReadingsVal($name,"range",""),   ($charge ? "" : "display:none;"),   ReadingsVal($name,"time2targetSOC",""),   ReadingsVal($name,"targetSOC",""),   ReadingsVal($name,"odometer_value",""),   ReadingsVal($name,"bat12v",""),   ReadingsVal($name,"req_active",""),   ReadingsTimestamp($name,"status_time","")   )   }
   userReadings atHomeStanding:location.* { ((abs(AttrVal("global","latitude",49.85) - ReadingsVal($NAME,"location_coord_lat",0)) <= 0.001) && (abs(AttrVal("global","longitude",8.49) - ReadingsVal($NAME,"location_coord_lon",0)) <= 0.001) && (ReadingsVal($NAME,"location_speed_value",1) == 0)) ? 'true' : 'false';; },
batSOC:status.* { ReadingsVal($NAME,"status_evStatus_batteryStatus",0);;},
connected:status.* { (ReadingsVal($NAME,"status_evStatus_batteryPlugin",0) != 0) ? 'true' : 'false';;},
charging:status.* { ReadingsVal($NAME,"status_evStatus_batteryCharge",'false');;},
targetSOC:status.* { ReadingsVal($NAME,"status_evStatus_reservChargeInfos_targetSOClist_2_targetSOClevel",0);;},
time2targetSOC:status.* { my $t = ReadingsVal($NAME,"status_evStatus_remainTime2_atc_value",1);; sprintf("%02d:%02d", $t/60%60, $t%60);},
range:status.* { ReadingsVal($NAME,"status_evStatus_drvDistance_1_rangeByFuel_totalAvailableRange_value",0);;},
bat12v:status.* { ReadingsVal($NAME,"status_battery_batSoc",0);;},
   webCmd     getAll:startCharge:stopCharge:startHeating:startCooling:stopClimate
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 28 Oktober 2021, 13:53:13
Wie sieht denn deine NodeRed Konfig aus , am besten teile mal ein Screenshot.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 28 Oktober 2021, 14:12:04
Zitat von: xerion am 28 Oktober 2021, 13:53:13
Wie sieht denn deine NodeRed Konfig aus , am besten teile mal ein Screenshot.
Wo finde ich die :-) Das läuft seit ca 2 Stunden und so ist auch mein Lernstand.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 28 Oktober 2021, 14:15:58
Der rechte Zweig wäre jetzt interessant gewesen ob dort überhaupt MQTT Outs definiert sind.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 28 Oktober 2021, 14:21:35
Zitat von: xerion am 28 Oktober 2021, 14:15:58
Der rechte Zweig wäre jetzt interessant gewesen ob dort überhaupt MQTT Outs definiert sind.
Ich habe den Flow verkleinert und neu angehängt.
Der ist von @mnl1234 und ich habe nur meine fahrzeugdaten, sowie mein MQTT2 eingetragen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 28 Oktober 2021, 14:46:11
Also sieh erstmal von hier nicht falsch aus. Ob überhaupt Daten kommen kannst du in der Debug Ausgabe sehen wenn du einen Request abgesendet hast.
siehe Screenshot.

Wenn das der Fall ist kannst du  mit MQTT-Explorer(https://www.microsoft.com/de-de/p/mqtt-explorer/9pp8sfm082wd?activetab=pivot:overviewtab)
mal schauen ob überhaupt Daten bei den Topics ankommen, wenn das auch der Fall musst du dich in der readingList umschauen ob dort alles richtig gesetzt ist.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 28 Oktober 2021, 14:52:57
Zitat von: xerion am 28 Oktober 2021, 14:46:11
Also sieh erstmal von hier nicht falsch aus. Ob überhaupt Daten kommen kannst du in der Debug Ausgabe sehen wenn du einen Request abgesendet hast.
siehe Screenshot.

Wenn das der Fall ist kannst du  mit MQTT-Explorer(https://www.microsoft.com/de-de/p/mqtt-explorer/9pp8sfm082wd?activetab=pivot:overviewtab)
mal schauen ob überhaupt Daten bei den Topics ankommen, wenn das auch der Fall musst du dich in der readingList umschauen ob dort alles richtig gesetzt ist.
Beim Debug kommt schon nichts.
Nach meiner Vorstellung läuft der Flow jetzt permanent im node-red , nachdem ich ihn "deployed" habe.
Da muss ich wohl erstmal einige tutorials suchen...

Die "node kia.js" Verbindung aus dem FHEM container liefert zumindest Daten ins MQTT, sodaß die generelle Konfiguration bei Kia und im MQTT2 ja schonmal klappen sollte.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 28 Oktober 2021, 15:02:29
Nein der Flow läuft nicht dauerhaft und wenn du nicht von Kia/Hyundai  gesperrt werden möchtest, solltest du das auch tunlichst vermeiden. ;-)
In deinem Screenshot siehst du auf der linken Seite die MQTT IN`s das sind quasi deine Schalter via MQTT um den jeweiligen Flow zu auszuführen.

Das sind Daten die in deinem fhem Device unter setList stehen die solltest du laut deinem list per webCmd ausführen können und dann solltest du Daten bekommen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 28 Oktober 2021, 15:50:53
Zitat von: xerion am 28 Oktober 2021, 15:02:29
Nein der Flow läuft nicht dauerhaft und wenn du nicht von Kia/Hyundai  gesperrt werden möchtest, solltest du das auch tunlichst vermeiden. ;-)
In deinem Screenshot siehst du auf der linken Seite die MQTT IN`s das sind quasi deine Schalter via MQTT um den jeweiligen Flow zu auszuführen.

Das sind Daten die in deinem fhem Device unter setList stehen die solltest du laut deinem list per webCmd ausführen können und dann solltest du Daten bekommen.

Hmmm... naja, der Flow ansich läuft in dem Sinne schon dauerhaft. Aber die Bluelinky-Funktionen müssen eben von außen getriggert werden, damit sie auch was tun.
Das geht bei mir entweder aus dem MQTT raus oder der Login-Knoten wird stündlich getriggert.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 28 Oktober 2021, 15:53:24
Zitat von: ch.eick am 28 Oktober 2021, 14:52:57
Beim Debug kommt schon nichts.
Nach meiner Vorstellung läuft der Flow jetzt permanent im node-red , nachdem ich ihn "deployed" habe.

Hast du denn das "Ready" unter den Bluelinky-Knoten?
Wenn ja kannst du ja mal einen Inject-Knoten reinziehen und mit z.B. Get_Status verbinden (siehe Bild) und dann manuell triggern über das Fähnchen links von "timestamp". Danach sollte was im Debugfenster kommen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 29 Oktober 2021, 08:53:52
Um das an der Stelle vielliecht noch abzuschließen und nicht in der Luft hängen zu lassen:

Es ist inzwischen gelöst. Im Grunde lief alles, so wie es sollte. :-)
Nun kommen die Trigger per MQTT vom FHEM, werden im Nodered via Bluelinky ans Auto geschickt und kommen dann via MQTT wieder zum FHEM zurück.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 29 Oktober 2021, 09:20:37
Zitat von: mnl1234 am 29 Oktober 2021, 08:53:52
Um das an der Stelle vielliecht noch abzuschließen und nicht in der Luft hängen zu lassen:

Es ist inzwischen gelöst. Im Grunde lief alles, so wie es sollte. :-)
Nun kommen die Trigger per MQTT vom FHEM, werden im Nodered via Bluelinky ans Auto geschickt und kommen dann via MQTT wieder zum FHEM zurück.
Ich muss jetzt nur noch weiter testen :-)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 29 Oktober 2021, 09:37:48
Zitat von: ch.eick am 29 Oktober 2021, 09:20:37
Ich muss jetzt nur noch weiter testen :-)

Bahalte deine 12V Batterie im Auge. Die leidet unter zu vielen Anfragen.
Und der Hyundai-Server lässt auch nur 200 Anfragen pro 24 Stunden zu. Zumindest ist das die Zahl, die ich so im Kopf habe.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 29 Oktober 2021, 09:57:53
Hallo zusammen,
ich habe mir mal Ideen durch den Kopf gehen lassen und finde den Ansatz mit dem node-red als Übersetzer sehr gut.
Im stateFormat von @mnl1234 ist aus dem Ergebnis ja schon eine kleine Bedienoberfläche hervorgegangen.
Da nun das triggern mit einem DOIF erfolgt und dort uiTable integriert ist könnte man das ganze noch etwas anhübschen. Dann agiert das MQTT2 Device als Schnittstelle und die Steuerung und Präsentation wird vom DOIF gemacht. Da gibt es dann Pull Down Menüs und Buttons, wie ich es bei meiner Batteriesteuerung umgesetzt habe.
Hier mal ein Screenshot als Muster.

Wenn ich mich da ran setze würde ich gerne Eure Top 10 der Automatismen haben, damit es für möglichst viele als Basis passt.

@mnl1234 hat sein DOIF bereits geliefert
@ch.eick
  - ich interessiere mich für das Aufheizen am Morgen, eventuell nach Verwendungskalender
  - eventuell würde ich meinen Haus Speicher noch gegen das Entladen schützen, da er im Winter
    gerade so durch die Nacht reicht und ansonsten sofort leer wäre
  - nach dem Muster zum Fremdladen aus dem userreading (Ortsüberprüfung) würde ich das Abfragen bei Kia
    auf ein Minimum reduzieren, was die 12V Batterie wohl schonen wird.

VG
    Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 29 Oktober 2021, 10:26:25
@ch.eick

könntest du evtl. deinen aktuellen NodeRedFlow hier einstellen?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 29 Oktober 2021, 10:28:31
Zitat von: michisa86888 am 29 Oktober 2021, 10:26:25
@ch.eick

könntest du evtl. deinen aktuellen NodeRedFlow hier einstellen?
Das würde ich gerne an @mnl1234 weiter reichen, ich bin komplett neu in dem Thema.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 29 Oktober 2021, 10:33:15
Zitat von: ch.eick am 29 Oktober 2021, 10:28:31
Das würde ich gerne an @mnl1234 weiter reichen, ich bin komplett neu in dem Thema.

Du kannst gerne den Flow hier posten, so wie ich ihn dir gestern geschickt habe. Komme igendwie an die Nachricht nicht mehr dran. Das war aber schon soweit anonymisiert, dass man es veröffentlichen kann.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 29 Oktober 2021, 10:49:25
Zitat von: mnl1234 am 29 Oktober 2021, 10:33:15
Du kannst gerne den Flow hier posten, so wie ich ihn dir gestern geschickt habe. Komme igendwie an die Nachricht nicht mehr dran. Das war aber schon soweit anonymisiert, dass man es veröffentlichen kann.
Here we are...


[
    {
        "id": "866c75dd.edd9a8",
        "type": "tab",
        "label": "Dein Flow Label z.b. Kona oder Kia e-Niro",
        "disabled": false,
        "info": ""
    },
    {
        "id": "91a345fa.5757a8",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_status",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 460,
        "y": 280,
        "wires": [
            [
                "15dfb508.c6497b",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "5ad085b9.05739c",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/start_climate",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 680,
        "wires": [
            [
                "b27d74de.38c808",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "15dfb508.c6497b",
        "type": "car-status",
        "z": "866c75dd.edd9a8",
        "name": "Get status",
        "dorefresh": true,
        "parsed": false,
        "bluelinky": "452a3304.58c8fc",
        "x": 830,
        "y": 280,
        "wires": [
            [
                "cccc9476.d56dd8",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "87abdd88.8ff4d",
        "type": "car-odometer",
        "z": "866c75dd.edd9a8",
        "name": "Get car odometer",
        "bluelinky": "452a3304.58c8fc",
        "x": 850,
        "y": 200,
        "wires": [
            [
                "40d2361c.579588",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "31100f9a.40008",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "locationWrapper",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"location\": msg.payload,\n        \"error\": false\n    };\n    \n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1460,
        "y": 120,
        "wires": [
            [
                "85a07155.a0f9f",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "bea1d927.0f3908",
        "type": "car-location",
        "z": "866c75dd.edd9a8",
        "name": "Get car location",
        "bluelinky": "452a3304.58c8fc",
        "x": 850,
        "y": 120,
        "wires": [
            [
                "31100f9a.40008",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "3c949d67.0d83b2",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_location",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 120,
        "wires": [
            [
                "bea1d927.0f3908",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "cccc9476.d56dd8",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "analyseStatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    let status = msg.payload;\n    status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);\n    try{\n    status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    } catch(e) {}\n\n    let time = status.evStatus.remainTime2.atc.value/60;\n    let result = { \n                 \"batSOC\": status.evStatus.batteryStatus,\n                 \"connected\": (status.evStatus.batteryPlugin !== 0),\n                 \"charging\": status.evStatus.batteryCharge,\n                 \"targetSOC\": status.evStatus.reservChargeInfos.targetSOClist[1].targetSOClevel,\n                 \"time2targetSOC\": (Math.floor(time) + \":\" + (\"0\" + Math.floor((time % 1)*60)).slice(-2)), // h:mm\n                 \"range\": status.evStatus.drvDistance[0].rangeByFuel.totalAvailableRange.value,\n                 \"bat12v\": status.battery.batSoc\n                };\n    \n    //msg.payload = result;\n    msg.payload = {\n        \"status\": status,\n        \"error\": false\n        \n    };\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1460,
        "y": 280,
        "wires": [
            [
                "3efceea0.c81b12",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "85a07155.a0f9f",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/location",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1870,
        "y": 120,
        "wires": []
    },
    {
        "id": "3efceea0.c81b12",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/status",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1860,
        "y": 280,
        "wires": []
    },
    {
        "id": "327104fc.71e1bc",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/odometer",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1870,
        "y": 200,
        "wires": []
    },
    {
        "id": "844a32f4.2e029",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/stop_climate",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 760,
        "wires": [
            [
                "7d3ae860.d8c9a8",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "57d91e50.7e96",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/start_charging",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 480,
        "y": 820,
        "wires": [
            [
                "6eebc52c.ee23dc",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "6029f0a0.b73e",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/stop_charging",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 880,
        "wires": [
            [
                "84a1ae.74912e5",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "c5ecf76c.e753c8",
        "type": "start-car",
        "z": "866c75dd.edd9a8",
        "name": "Start car",
        "bluelinky": "452a3304.58c8fc",
        "x": 1100,
        "y": 680,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "6eebc52c.ee23dc",
        "type": "start-charge",
        "z": "866c75dd.edd9a8",
        "name": "Start Charging",
        "bluelinky": "452a3304.58c8fc",
        "x": 1120,
        "y": 820,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "84a1ae.74912e5",
        "type": "stop-charge",
        "z": "866c75dd.edd9a8",
        "name": "Stop Charging",
        "bluelinky": "452a3304.58c8fc",
        "x": 1120,
        "y": 880,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "7d3ae860.d8c9a8",
        "type": "stop-car",
        "z": "866c75dd.edd9a8",
        "name": "Stop car",
        "bluelinky": "452a3304.58c8fc",
        "x": 1100,
        "y": 760,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "b27d74de.38c808",
        "type": "json",
        "z": "866c75dd.edd9a8",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": false,
        "x": 710,
        "y": 680,
        "wires": [
            [
                "c5ecf76c.e753c8",
                "33b1bc85.662694"
            ]
        ]
    },
    {
        "id": "45a6a8e6.2abfd8",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_odometer",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 200,
        "wires": [
            [
                "87abdd88.8ff4d",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "33b1bc85.662694",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 950,
        "y": 940,
        "wires": []
    },
    {
        "id": "ce62ba4f.d86548",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/req_received",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 880,
        "y": 600,
        "wires": []
    },
    {
        "id": "1babee6c.1c2982",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_all",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 450,
        "y": 400,
        "wires": [
            [
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2",
                "4375fbb9.00fb44"
            ]
        ]
    },
    {
        "id": "262df5dc.57916a",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1810,
        "y": 60,
        "wires": []
    },
    {
        "id": "811aa567.e89f98",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1450,
        "y": 1040,
        "wires": []
    },
    {
        "id": "3f82a275.5a0b6e",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 830,
        "y": 80,
        "wires": []
    },
    {
        "id": "24d5e0b.3aafc2",
        "type": "change",
        "z": "866c75dd.edd9a8",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "pending",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 790,
        "y": 1200,
        "wires": [
            [
                "4dd1ea4a.52f144",
                "fecad185.324f8"
            ]
        ]
    },
    {
        "id": "f487d6d6.a4d568",
        "type": "change",
        "z": "866c75dd.edd9a8",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "idle",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1770,
        "y": 500,
        "wires": [
            [
                "4dd1ea4a.52f144",
                "fecad185.324f8"
            ]
        ]
    },
    {
        "id": "4dd1ea4a.52f144",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/req_active",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 2290,
        "y": 1200,
        "wires": []
    },
    {
        "id": "fecad185.324f8",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 2270,
        "y": 1260,
        "wires": []
    },
    {
        "id": "40d2361c.579588",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "odometerWrapper",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    msg.payload = { \n        \"odometer\": msg.payload,\n        \"error\": false\n        };\n\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1470,
        "y": 200,
        "wires": [
            [
                "327104fc.71e1bc",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "226ed925.607bb6",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1150,
        "y": 80,
        "wires": []
    },
    {
        "id": "4375fbb9.00fb44",
        "type": "car-fullstatus",
        "z": "866c75dd.edd9a8",
        "name": "Get full status",
        "dorefresh": true,
        "bluelinky": "452a3304.58c8fc",
        "x": 930,
        "y": 360,
        "wires": [
            [
                "226ed925.607bb6",
                "69b6c4df.ea6bcc",
                "89681a97.9e24d8",
                "92dc3ff4.1d6e3"
            ]
        ]
    },
    {
        "id": "69b6c4df.ea6bcc",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "locationFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"location\": msg.payload.vehicleLocation,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1440,
        "y": 360,
        "wires": [
            [
                "85a07155.a0f9f",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "92dc3ff4.1d6e3",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "statusFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    let status = msg.payload.vehicleStatus;\n    try{\n        status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);\n        status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n        status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    } catch(e) {}\n\n    msg.payload = { \n        \"status\": status,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1440,
        "y": 480,
        "wires": [
            [
                "3efceea0.c81b12",
                "f487d6d6.a4d568",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "89681a97.9e24d8",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "odometerFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"odometer\": msg.payload.odometer,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1430,
        "y": 420,
        "wires": [
            [
                "327104fc.71e1bc",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "331e5860.907808",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1770,
        "y": 420,
        "wires": []
    },
    {
        "id": "aa4d220b.f7e19",
        "type": "set-chargetargets",
        "z": "866c75dd.edd9a8",
        "name": "Set charge targets",
        "bluelinky": "452a3304.58c8fc",
        "x": 1140,
        "y": 1060,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "4c03338d.2f15ec",
        "type": "login",
        "z": "866c75dd.edd9a8",
        "name": "Login",
        "bluelinky": "452a3304.58c8fc",
        "x": 1090,
        "y": 1120,
        "wires": [
            [
                "811aa567.e89f98"
            ]
        ]
    },
    {
        "id": "28b868f5.16cb48",
        "type": "inject",
        "z": "866c75dd.edd9a8",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "43200",
        "crontab": "",
        "once": true,
        "onceDelay": "12",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 890,
        "y": 1120,
        "wires": [
            [
                "4c03338d.2f15ec"
            ]
        ]
    },
    {
        "id": "db9ecdb5.a9683",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/set_chargetargets",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 490,
        "y": 1060,
        "wires": [
            [
                "aa4d220b.f7e19"
            ]
        ]
    },
    {
        "id": "bb13a99d.68b8f8",
        "type": "mqtt-broker",
        "name": "mqtt_Server",
        "broker": "127.0.0.1",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "452a3304.58c8fc",
        "type": "bluelinky",
        "username": "deinBluelinkUser",
        "password": "deinBluelinkPass",
        "region": "EU",
        "pin": "DeinePIN",
        "vin": "DeineVIN",
        "brand": "[hyundai|kia]"
    }
]
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 29 Oktober 2021, 11:41:23
Zitat von: ch.eick am 29 Oktober 2021, 10:49:25
Here we are...


Top! Danke Dir!

Kleine Erklärungen für alle "Erstimportierer":
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 29 Oktober 2021, 12:24:16
Hier mal meine Versionen Stand 28.10.2021:

node-red 2.1.3
bluelinky 0.0.27

Das kuvork linkt direkt auf bluelinky.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 29 Oktober 2021, 13:02:36
Zitat von: ch.eick am 29 Oktober 2021, 10:49:25
Here we are...


[
    {
        "id": "866c75dd.edd9a8",
        "type": "tab",
        "label": "Dein Flow Label z.b. Kona oder Kia e-Niro",
        "disabled": false,
        "info": ""
    },
    {
        "id": "91a345fa.5757a8",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_status",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 460,
        "y": 280,
        "wires": [
            [
                "15dfb508.c6497b",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "5ad085b9.05739c",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/start_climate",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 680,
        "wires": [
            [
                "b27d74de.38c808",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "15dfb508.c6497b",
        "type": "car-status",
        "z": "866c75dd.edd9a8",
        "name": "Get status",
        "dorefresh": true,
        "parsed": false,
        "bluelinky": "452a3304.58c8fc",
        "x": 830,
        "y": 280,
        "wires": [
            [
                "cccc9476.d56dd8",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "87abdd88.8ff4d",
        "type": "car-odometer",
        "z": "866c75dd.edd9a8",
        "name": "Get car odometer",
        "bluelinky": "452a3304.58c8fc",
        "x": 850,
        "y": 200,
        "wires": [
            [
                "40d2361c.579588",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "31100f9a.40008",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "locationWrapper",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"location\": msg.payload,\n        \"error\": false\n    };\n    \n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1460,
        "y": 120,
        "wires": [
            [
                "85a07155.a0f9f",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "bea1d927.0f3908",
        "type": "car-location",
        "z": "866c75dd.edd9a8",
        "name": "Get car location",
        "bluelinky": "452a3304.58c8fc",
        "x": 850,
        "y": 120,
        "wires": [
            [
                "31100f9a.40008",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "3c949d67.0d83b2",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_location",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 120,
        "wires": [
            [
                "bea1d927.0f3908",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "cccc9476.d56dd8",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "analyseStatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    let status = msg.payload;\n    status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);\n    try{\n    status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    } catch(e) {}\n\n    let time = status.evStatus.remainTime2.atc.value/60;\n    let result = { \n                 \"batSOC\": status.evStatus.batteryStatus,\n                 \"connected\": (status.evStatus.batteryPlugin !== 0),\n                 \"charging\": status.evStatus.batteryCharge,\n                 \"targetSOC\": status.evStatus.reservChargeInfos.targetSOClist[1].targetSOClevel,\n                 \"time2targetSOC\": (Math.floor(time) + \":\" + (\"0\" + Math.floor((time % 1)*60)).slice(-2)), // h:mm\n                 \"range\": status.evStatus.drvDistance[0].rangeByFuel.totalAvailableRange.value,\n                 \"bat12v\": status.battery.batSoc\n                };\n    \n    //msg.payload = result;\n    msg.payload = {\n        \"status\": status,\n        \"error\": false\n        \n    };\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1460,
        "y": 280,
        "wires": [
            [
                "3efceea0.c81b12",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "85a07155.a0f9f",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/location",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1870,
        "y": 120,
        "wires": []
    },
    {
        "id": "3efceea0.c81b12",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/status",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1860,
        "y": 280,
        "wires": []
    },
    {
        "id": "327104fc.71e1bc",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/odometer",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1870,
        "y": 200,
        "wires": []
    },
    {
        "id": "844a32f4.2e029",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/stop_climate",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 760,
        "wires": [
            [
                "7d3ae860.d8c9a8",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "57d91e50.7e96",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/start_charging",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 480,
        "y": 820,
        "wires": [
            [
                "6eebc52c.ee23dc",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "6029f0a0.b73e",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/stop_charging",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 880,
        "wires": [
            [
                "84a1ae.74912e5",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "c5ecf76c.e753c8",
        "type": "start-car",
        "z": "866c75dd.edd9a8",
        "name": "Start car",
        "bluelinky": "452a3304.58c8fc",
        "x": 1100,
        "y": 680,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "6eebc52c.ee23dc",
        "type": "start-charge",
        "z": "866c75dd.edd9a8",
        "name": "Start Charging",
        "bluelinky": "452a3304.58c8fc",
        "x": 1120,
        "y": 820,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "84a1ae.74912e5",
        "type": "stop-charge",
        "z": "866c75dd.edd9a8",
        "name": "Stop Charging",
        "bluelinky": "452a3304.58c8fc",
        "x": 1120,
        "y": 880,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "7d3ae860.d8c9a8",
        "type": "stop-car",
        "z": "866c75dd.edd9a8",
        "name": "Stop car",
        "bluelinky": "452a3304.58c8fc",
        "x": 1100,
        "y": 760,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "b27d74de.38c808",
        "type": "json",
        "z": "866c75dd.edd9a8",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": false,
        "x": 710,
        "y": 680,
        "wires": [
            [
                "c5ecf76c.e753c8",
                "33b1bc85.662694"
            ]
        ]
    },
    {
        "id": "45a6a8e6.2abfd8",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_odometer",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 470,
        "y": 200,
        "wires": [
            [
                "87abdd88.8ff4d",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "33b1bc85.662694",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 950,
        "y": 940,
        "wires": []
    },
    {
        "id": "ce62ba4f.d86548",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/req_received",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 880,
        "y": 600,
        "wires": []
    },
    {
        "id": "1babee6c.1c2982",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_all",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 450,
        "y": 400,
        "wires": [
            [
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2",
                "4375fbb9.00fb44"
            ]
        ]
    },
    {
        "id": "262df5dc.57916a",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1810,
        "y": 60,
        "wires": []
    },
    {
        "id": "811aa567.e89f98",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1450,
        "y": 1040,
        "wires": []
    },
    {
        "id": "3f82a275.5a0b6e",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 830,
        "y": 80,
        "wires": []
    },
    {
        "id": "24d5e0b.3aafc2",
        "type": "change",
        "z": "866c75dd.edd9a8",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "pending",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 790,
        "y": 1200,
        "wires": [
            [
                "4dd1ea4a.52f144",
                "fecad185.324f8"
            ]
        ]
    },
    {
        "id": "f487d6d6.a4d568",
        "type": "change",
        "z": "866c75dd.edd9a8",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "idle",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1770,
        "y": 500,
        "wires": [
            [
                "4dd1ea4a.52f144",
                "fecad185.324f8"
            ]
        ]
    },
    {
        "id": "4dd1ea4a.52f144",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/req_active",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 2290,
        "y": 1200,
        "wires": []
    },
    {
        "id": "fecad185.324f8",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 2270,
        "y": 1260,
        "wires": []
    },
    {
        "id": "40d2361c.579588",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "odometerWrapper",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    msg.payload = { \n        \"odometer\": msg.payload,\n        \"error\": false\n        };\n\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1470,
        "y": 200,
        "wires": [
            [
                "327104fc.71e1bc",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "226ed925.607bb6",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1150,
        "y": 80,
        "wires": []
    },
    {
        "id": "4375fbb9.00fb44",
        "type": "car-fullstatus",
        "z": "866c75dd.edd9a8",
        "name": "Get full status",
        "dorefresh": true,
        "bluelinky": "452a3304.58c8fc",
        "x": 930,
        "y": 360,
        "wires": [
            [
                "226ed925.607bb6",
                "69b6c4df.ea6bcc",
                "89681a97.9e24d8",
                "92dc3ff4.1d6e3"
            ]
        ]
    },
    {
        "id": "69b6c4df.ea6bcc",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "locationFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"location\": msg.payload.vehicleLocation,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1440,
        "y": 360,
        "wires": [
            [
                "85a07155.a0f9f",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "92dc3ff4.1d6e3",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "statusFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    let status = msg.payload.vehicleStatus;\n    try{\n        status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);\n        status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n        status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    } catch(e) {}\n\n    msg.payload = { \n        \"status\": status,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1440,
        "y": 480,
        "wires": [
            [
                "3efceea0.c81b12",
                "f487d6d6.a4d568",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "89681a97.9e24d8",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "odometerFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"odometer\": msg.payload.odometer,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1430,
        "y": 420,
        "wires": [
            [
                "327104fc.71e1bc",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "331e5860.907808",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1770,
        "y": 420,
        "wires": []
    },
    {
        "id": "aa4d220b.f7e19",
        "type": "set-chargetargets",
        "z": "866c75dd.edd9a8",
        "name": "Set charge targets",
        "bluelinky": "452a3304.58c8fc",
        "x": 1140,
        "y": 1060,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "4c03338d.2f15ec",
        "type": "login",
        "z": "866c75dd.edd9a8",
        "name": "Login",
        "bluelinky": "452a3304.58c8fc",
        "x": 1090,
        "y": 1120,
        "wires": [
            [
                "811aa567.e89f98"
            ]
        ]
    },
    {
        "id": "28b868f5.16cb48",
        "type": "inject",
        "z": "866c75dd.edd9a8",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "43200",
        "crontab": "",
        "once": true,
        "onceDelay": "12",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 890,
        "y": 1120,
        "wires": [
            [
                "4c03338d.2f15ec"
            ]
        ]
    },
    {
        "id": "db9ecdb5.a9683",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/set_chargetargets",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "x": 490,
        "y": 1060,
        "wires": [
            [
                "aa4d220b.f7e19"
            ]
        ]
    },
    {
        "id": "bb13a99d.68b8f8",
        "type": "mqtt-broker",
        "name": "mqtt_Server",
        "broker": "127.0.0.1",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "452a3304.58c8fc",
        "type": "bluelinky",
        "username": "deinBluelinkUser",
        "password": "deinBluelinkPass",
        "region": "EU",
        "pin": "DeinePIN",
        "vin": "DeineVIN",
        "brand": "[hyundai|kia]"
    }
]


Vielleicht wäre es noch gut der Vollständigkeitshalber auch noch das Aktuelle defmod des MQTT Device von FHEM zu posten, dann könnten Neulinge das direkt für den ersten Einsatz einrichten
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 29 Oktober 2021, 13:12:52
Zitat von: xerion am 29 Oktober 2021, 13:02:36
Vielleicht wäre es noch gut der Vollständigkeitshalber auch noch das Aktuelle defmod des MQTT Device von FHEM zu posten, dann könnten Neulinge das direkt für den ersten Einsatz einrichten
Und schon geht es weiter :-)

Das wäre mit MQTT2.
Der Ursprung ist auch von @mnl1234

defmod MQTT2_FHEM_Server MQTT2_SERVER 1883 global
attr MQTT2_FHEM_Server DbLogExclude .*
attr MQTT2_FHEM_Server alias MQTT2_FHEM_Server
attr MQTT2_FHEM_Server autocreate simple
attr MQTT2_FHEM_Server disable 0
attr MQTT2_FHEM_Server room MQTT2
attr MQTT2_FHEM_Server verbose 1



defmod WB_1_Kia_eNiro MQTT2_DEVICE
attr WB_1_Kia_eNiro DbLogExclude .*
attr WB_1_Kia_eNiro IODev MQTT2_FHEM_Server
attr WB_1_Kia_eNiro alias WB_1_Kia_eNiro
attr WB_1_Kia_eNiro autocreate 1
attr WB_1_Kia_eNiro devicetopic bluelinky
attr WB_1_Kia_eNiro group PV Eigenverbrauch
attr WB_1_Kia_eNiro icon car
attr WB_1_Kia_eNiro readingList $DEVICETOPIC/status:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/location.* { json2nameValue($EVENT) }\
$DEVICETOPIC/odometer:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/req_received:.* req_received\
$DEVICETOPIC/req_active:.* req_active
attr WB_1_Kia_eNiro room MQTT2_DEVICE,Strom->Photovoltaik
attr WB_1_Kia_eNiro setList getOdometer req/$DEVICETOPIC/get_odometer get_odometer\
getStatus req/$DEVICETOPIC/get_status get_status\
getLocation req/$DEVICETOPIC/get_location get_location\
getAll req/$DEVICETOPIC/get_all get_all\
startCharge req/$DEVICETOPIC/start_charging start_charging\
stopCharge req/$DEVICETOPIC/stop_charging stop_charging\
stopClimate req/$DEVICETOPIC/stop_climate stop_climate\
startHeating req/$DEVICETOPIC/start_climate {"defrost": true, "windscreenHeating": true, "temperature": 22.0 , "unit": "C"}\
startCooling req/$DEVICETOPIC/start_climate {"defrost": false, "windscreenHeating": false, "temperature": 22.0 , "unit": "C"}
attr WB_1_Kia_eNiro sortby 312
attr WB_1_Kia_eNiro stateFormat {my $charge = (ReadingsVal($name,"charging","false") eq "true");;;;   my $athome = (ReadingsVal($name,"atHomeStanding","false") eq "true");;;;   my $chargeathome = ($charge && $athome);;;;   my $connectedathome = ($athome && ReadingsVal($name,"connected","false") eq "true");;;;   sprintf("   <table>   <tr>   <td style='text-align:right'>Status:</td>   <td style='text-align:left'>%s</td>   </tr>   <tr>   <td style='text-align:right'>Akku:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Reichweite:</td>   <td style='text-align:left'>%s km</td>   </tr>   <tr style='%s'>   <td style='text-align:right'>Ladedauer:</td>   <td style='text-align:left'>%s h</td>   </tr>   <tr>   <td style='text-align:right'>Ladegrenze AC:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Kilometerstand:</td>   <td style='text-align:left'>%d km</td>   </tr>   <tr>   <td style='text-align:right'>12V Batterie:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Aktivstatus:</td>   <td style='text-align:left'>%s</td>   </tr>   <tr>   <td style='text-align:right'>Zeit:</td>   <td style='text-align:left'>%s</td>   </tr>   </table>   ",   ($chargeathome ? "läd zu Hause" : ($connectedathome ? "angeschlossen zu Hause" : ($athome ? "zu Hause" : ($charge ? "Läd auswärts" : "unterwegs")))),   ReadingsVal($name,"batSOC",""),   ReadingsVal($name,"range",""),   ($charge ? "" : "display:none;;"),   ReadingsVal($name,"time2targetSOC",""),   ReadingsVal($name,"targetSOC",""),   ReadingsVal($name,"odometer_value",""),   ReadingsVal($name,"bat12v",""),   ReadingsVal($name,"req_active",""),   ReadingsTimestamp($name,"status_time","")   )   }
attr WB_1_Kia_eNiro userReadings atHomeStanding:location.* { ((abs(AttrVal("global","latitude",49.85) - ReadingsVal($NAME,"location_coord_lat",0)) <= 0.001) && (abs(AttrVal("global","longitude",8.49) - ReadingsVal($NAME,"location_coord_lon",0)) <= 0.001) && (ReadingsVal($NAME,"location_speed_value",1) == 0)) ? 'true' : 'false';;;; },\
batSOC:status.* { ReadingsVal($NAME,"status_evStatus_batteryStatus",0);;;;},\
connected:status.* { (ReadingsVal($NAME,"status_evStatus_batteryPlugin",0) != 0) ? 'true' : 'false';;;;},\
charging:status.* { ReadingsVal($NAME,"status_evStatus_batteryCharge",'false');;;;},\
targetSOC:status.* { ReadingsVal($NAME,"status_evStatus_reservChargeInfos_targetSOClist_2_targetSOClevel",0);;;;},\
time2targetSOC:status.* { my $t = ReadingsVal($NAME,"status_evStatus_remainTime2_atc_value",1);;;; sprintf("%02d:%02d", $t/60%60, $t%60);;},\
range:status.* { ReadingsVal($NAME,"status_evStatus_drvDistance_1_rangeByFuel_totalAvailableRange_value",0);;;;},\
bat12v:status.* { ReadingsVal($NAME,"status_battery_batSoc",0);;;;},
attr WB_1_Kia_eNiro webCmd getAll:startCharge:stopCharge:startHeating:startCooling:stopClimate

setstate WB_1_Kia_eNiro    <table>   <tr>   <td style='text-align:right'>Status:</td>   <td style='text-align:left'>zu Hause</td>   </tr>   <tr>   <td style='text-align:right'>Akku:</td>   <td style='text-align:left'>88 %</td>   </tr>   <tr>   <td style='text-align:right'>Reichweite:</td>   <td style='text-align:left'>396 km</td>   </tr>   <tr style='display:none;;'>   <td style='text-align:right'>Ladedauer:</td>   <td style='text-align:left'>00:35 h</td>   </tr>   <tr>   <td style='text-align:right'>Ladegrenze AC:</td>   <td style='text-align:left'>100 %</td>   </tr>   <tr>   <td style='text-align:right'>Kilometerstand:</td>   <td style='text-align:left'>231 km</td>   </tr>   <tr>   <td style='text-align:right'>12V Batterie:</td>   <td style='text-align:left'>78 %</td>   </tr>   <tr>   <td style='text-align:right'>Aktivstatus:</td>   <td style='text-align:left'>idle</td>   </tr>   <tr>   <td style='text-align:right'>Zeit:</td>   <td style='text-align:left'>2021-10-29 12:31:03</td>   </tr>   </table>   


Wie bereits geschrieben sammle ich jetzt Erfahrungen und möchte das dann ins Wiki stellen.
Hast Du noch schöne DOIF steuerungs Beispiele?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 29 Oktober 2021, 13:25:16
Zitat von: ch.eick am 29 Oktober 2021, 13:12:52
Und schon geht es weiter :-)

Das wäre mit MQTT2.
Der Ursprung ist auch von @mnl1234

defmod WB_1_Kia_eNiro MQTT2_DEVICE
attr WB_1_Kia_eNiro DbLogExclude .*
attr WB_1_Kia_eNiro IODev MQTT2_FHEM_Server
attr WB_1_Kia_eNiro alias WB_1_Kia_eNiro
attr WB_1_Kia_eNiro autocreate 1
attr WB_1_Kia_eNiro devicetopic bluelinky
attr WB_1_Kia_eNiro group PV Eigenverbrauch
attr WB_1_Kia_eNiro icon car
attr WB_1_Kia_eNiro readingList $DEVICETOPIC/status:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/location.* { json2nameValue($EVENT) }\
$DEVICETOPIC/odometer:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/req_received:.* req_received\
$DEVICETOPIC/req_active:.* req_active
attr WB_1_Kia_eNiro room MQTT2_DEVICE,Strom->Photovoltaik
attr WB_1_Kia_eNiro setList getOdometer req/$DEVICETOPIC/get_odometer get_odometer\
getStatus req/$DEVICETOPIC/get_status get_status\
getLocation req/$DEVICETOPIC/get_location get_location\
getAll req/$DEVICETOPIC/get_all get_all\
startCharge req/$DEVICETOPIC/start_charging start_charging\
stopCharge req/$DEVICETOPIC/stop_charging stop_charging\
stopClimate req/$DEVICETOPIC/stop_climate stop_climate\
startHeating req/$DEVICETOPIC/start_climate {"defrost": true, "windscreenHeating": true, "temperature": 22.0 , "unit": "C"}\
startCooling req/$DEVICETOPIC/start_climate {"defrost": false, "windscreenHeating": false, "temperature": 22.0 , "unit": "C"}
attr WB_1_Kia_eNiro sortby 312
attr WB_1_Kia_eNiro stateFormat {my $charge = (ReadingsVal($name,"charging","false") eq "true");;;;   my $athome = (ReadingsVal($name,"atHomeStanding","false") eq "true");;;;   my $chargeathome = ($charge && $athome);;;;   my $connectedathome = ($athome && ReadingsVal($name,"connected","false") eq "true");;;;   sprintf("   <table>   <tr>   <td style='text-align:right'>Status:</td>   <td style='text-align:left'>%s</td>   </tr>   <tr>   <td style='text-align:right'>Akku:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Reichweite:</td>   <td style='text-align:left'>%s km</td>   </tr>   <tr style='%s'>   <td style='text-align:right'>Ladedauer:</td>   <td style='text-align:left'>%s h</td>   </tr>   <tr>   <td style='text-align:right'>Ladegrenze AC:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Kilometerstand:</td>   <td style='text-align:left'>%d km</td>   </tr>   <tr>   <td style='text-align:right'>12V Batterie:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Aktivstatus:</td>   <td style='text-align:left'>%s</td>   </tr>   <tr>   <td style='text-align:right'>Zeit:</td>   <td style='text-align:left'>%s</td>   </tr>   </table>   ",   ($chargeathome ? "läd zu Hause" : ($connectedathome ? "angeschlossen zu Hause" : ($athome ? "zu Hause" : ($charge ? "Läd auswärts" : "unterwegs")))),   ReadingsVal($name,"batSOC",""),   ReadingsVal($name,"range",""),   ($charge ? "" : "display:none;;"),   ReadingsVal($name,"time2targetSOC",""),   ReadingsVal($name,"targetSOC",""),   ReadingsVal($name,"odometer_value",""),   ReadingsVal($name,"bat12v",""),   ReadingsVal($name,"req_active",""),   ReadingsTimestamp($name,"status_time","")   )   }
attr WB_1_Kia_eNiro userReadings atHomeStanding:location.* { ((abs(AttrVal("global","latitude",49.85) - ReadingsVal($NAME,"location_coord_lat",0)) <= 0.001) && (abs(AttrVal("global","longitude",8.49) - ReadingsVal($NAME,"location_coord_lon",0)) <= 0.001) && (ReadingsVal($NAME,"location_speed_value",1) == 0)) ? 'true' : 'false';;;; },\
batSOC:status.* { ReadingsVal($NAME,"status_evStatus_batteryStatus",0);;;;},\
connected:status.* { (ReadingsVal($NAME,"status_evStatus_batteryPlugin",0) != 0) ? 'true' : 'false';;;;},\
charging:status.* { ReadingsVal($NAME,"status_evStatus_batteryCharge",'false');;;;},\
targetSOC:status.* { ReadingsVal($NAME,"status_evStatus_reservChargeInfos_targetSOClist_2_targetSOClevel",0);;;;},\
time2targetSOC:status.* { my $t = ReadingsVal($NAME,"status_evStatus_remainTime2_atc_value",1);;;; sprintf("%02d:%02d", $t/60%60, $t%60);;},\
range:status.* { ReadingsVal($NAME,"status_evStatus_drvDistance_1_rangeByFuel_totalAvailableRange_value",0);;;;},\
bat12v:status.* { ReadingsVal($NAME,"status_battery_batSoc",0);;;;},
attr WB_1_Kia_eNiro webCmd getAll:startCharge:stopCharge:startHeating:startCooling:stopClimate

setstate WB_1_Kia_eNiro    <table>   <tr>   <td style='text-align:right'>Status:</td>   <td style='text-align:left'>zu Hause</td>   </tr>   <tr>   <td style='text-align:right'>Akku:</td>   <td style='text-align:left'>88 %</td>   </tr>   <tr>   <td style='text-align:right'>Reichweite:</td>   <td style='text-align:left'>396 km</td>   </tr>   <tr style='display:none;;'>   <td style='text-align:right'>Ladedauer:</td>   <td style='text-align:left'>00:35 h</td>   </tr>   <tr>   <td style='text-align:right'>Ladegrenze AC:</td>   <td style='text-align:left'>100 %</td>   </tr>   <tr>   <td style='text-align:right'>Kilometerstand:</td>   <td style='text-align:left'>231 km</td>   </tr>   <tr>   <td style='text-align:right'>12V Batterie:</td>   <td style='text-align:left'>78 %</td>   </tr>   <tr>   <td style='text-align:right'>Aktivstatus:</td>   <td style='text-align:left'>idle</td>   </tr>   <tr>   <td style='text-align:right'>Zeit:</td>   <td style='text-align:left'>2021-10-29 12:31:03</td>   </tr>   </table>   


Wie bereits geschrieben sammle ich jetzt Erfahrungen und möchte das dann ins Wiki stellen.
Hast Du noch schöne DOIF steuerungs Beispiele?

Ich nutze Bluelinky für folgende Anwendungszwecke:

-Auslesen des Kilometerstandes beim Verbinden der Wallbox über DOIF
-Timer und Temperatur gesteuerte Klimatisierung über FUIP und DOIF
-Google Maps Position per WEBLINK
-SoC lese ich per OBD2 aus da es mir mit Bluelinky zu unstabil war, und wenn man PV Optimiert Zielladen möchte ist das mit dieser API leider zu träge.

Falls dort Interesse besteht kann ich das zur Verfügung stellen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 29 Oktober 2021, 13:41:28
Zitat von: xerion am 29 Oktober 2021, 13:25:16
Ich nutze Bluelinky für folgende Anwendungszwecke:

-Auslesen des Kilometerstandes beim Verbinden der Wallbox über DOIF
-Timer und Temperatur gesteuerte Klimatisierung über FUIP und DOIF
-Google Maps Position per WEBLINK
-SoC lese ich per OBD2 aus da es mir mit Bluelinky zu unstabil war, und wenn man PV Optimiert Zielladen möchte ist das mit dieser API leider zu träge.

Falls dort Interesse besteht kann ich das zur Verfügung stellen.
Ja bitte, ich habe gerade begonnen und würde mir das auch gerne ansehen.

Das mit dem Zielladen wollte ich in der Theorie anders lösen.
-  mit dem Kia Connect kann ich den Ziel Soc vorgeben
    somit kümmert sich das Auto darum und stoppt einfach das Laden, wenn der SOC erreicht ist

Ich habe eine openWB , wo das auch experimentell gehen soll, wenn jedoch das Fahrzeug das machen kann, mache ich lieber im Endverbraucher.

EDIT:
Hier schon mal ein kleiner Anfang mit uiTable im DOIF für die Kia/Hunday Steuerung.
In den nächsten Zeilen/Spalten kommt dann der Status und eine eventuelle Möglichkeit diesen direkt zu ändern.

Im Screenshot sieht man bereits das erste Kommando zur Status Abfrage. Die Zeitsteuerung ist bereits im DOIF abgebildet und kann hier als Auswahl aus dem Pull Down nochmals manuell aufgerufen werden.
Wie in meinem Speicher Steuerungs Screenshot wird dann der Accu Stand auch grafisch dargestellt werden.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 29 Oktober 2021, 15:46:40
Für den Timer nutze ich FUIP als grafische Oberfläche siehe Screenshot, das setzt dann einfach einen Timer im  "WeekdayTimer" Modul. Da ich beim Timer die Abfahrtzeit eingeben möchte nehme ich zeit und Datum als getrenntes Reading.
defmod TimerBluelink WeekdayTimer de de 12345|07:40|on
attr TimerBluelink alias TimerBluelink
attr TimerBluelink commandTemplate set $NAME  $EVENT
attr TimerBluelink disable 0
attr TimerBluelink room Auto
attr TimerBluelink userReadings Date {(substr(ReadingsVal("TimerBluelink","nextUpdate",""),0,10))},\
Time {(substr(ReadingsVal("TimerBluelink","nextUpdate",""),11,8))}


Der WeekdayTimer steuert dann ein DOIF welches die Readings Date und Time asuwertet:
defmod di_WeekdaytTimerBluelink DOIF ([([TimerBluelink:Time]-[00:15:00])] and $ymd eq [TimerBluelink:Date] and [TimerBluelink:disabled] eq 0)\
(set du_bluelink on-for-timer 1200 )\
DOELSE\

attr di_WeekdaytTimerBluelink alias di_WeekdaytTimerBluelink
attr di_WeekdaytTimerBluelink event-on-change-reading .*
attr di_WeekdaytTimerBluelink room Auto







Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 29 Oktober 2021, 15:56:47
Damit ich die Temperatur per Slider einstellen kann und unterscheiden kann ob mit oder ohne defrost habe ich das noch definiert:
startTemp:slider,17,1,27 /bluelink/start_car {"defrost": false,"windscreenHeating": false,"temperature": "$EVTPART1","unit": "C"}
startTemp_with_Defrost:slider,17,1,27 /bluelink/start_car_with_Defrost {"defrost": true,"windscreenHeating": true,"temperature": "$EVTPART1","unit": "C"}


Um die GPS Position in Google Maps anzeigen zu lassen nutze ich weblink:
defmod rr_Kona_map weblink htmlCode {\
'<ul style="width: 400px;; overflow: hidden;; height: 300px;;">\
<iframe name="rr_Kona_map" src="https://www.google.com/maps/embed/v1/place?key=xxxxxxxxxxxxxxxxxxxxxxx='\
.ReadingsVal('Bluelink','latitude','')\
.','\
.ReadingsVal('Bluelink','longitude','')\
.'&zoom=13" width="480" height="480" frameborder="0" style="border:0;; margin-top: -165px;; margin-left: -135px;;">\
</iframe>\
</ul>'\
}
attr rr_Kona_map alias Current Location
attr rr_Kona_map comment Auto-created by ROOMMATE module
attr rr_Kona_map group Kona
attr rr_Kona_map room Anwesenheit,Auto


Ich meinte das man dafür einen API Key bei Google Maps erzeugen musste, finde den Beitrag aber gerade nicht wieder.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 29 Oktober 2021, 16:09:35
Zitat von: xerion am 29 Oktober 2021, 15:46:40
Für den Timer nutze ich FUIP als grafische Oberfläche siehe Screenshot, das setzt dann einfach einen Timer im  "WeekdayTimer" Modul. Da ich beim Timer die Abfahrtzeit eingeben möchte nehme ich zeit und Datum als getrenntes Reading.

Der WeekdayTimer steuert dann ein DOIF welches die Readings Date und Time asuwertet:
Das ist auch sehr schön und man kann es ja parralel nutzen. Momentan bin ich nur an der Basis im FHEMWEB, da ja eigentlich alles automatischen laufen soll.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: michisa86888 am 30 Oktober 2021, 09:22:09
Zitat von: ch.eick am 29 Oktober 2021, 13:12:52
Und schon geht es weiter :-)

Das wäre mit MQTT2.
Der Ursprung ist auch von @mnl1234

defmod MQTT2_FHEM_Server MQTT2_SERVER 1883 global
attr MQTT2_FHEM_Server DbLogExclude .*
attr MQTT2_FHEM_Server alias MQTT2_FHEM_Server
attr MQTT2_FHEM_Server autocreate simple
attr MQTT2_FHEM_Server disable 0
attr MQTT2_FHEM_Server room MQTT2
attr MQTT2_FHEM_Server verbose 1



defmod WB_1_Kia_eNiro MQTT2_DEVICE
attr WB_1_Kia_eNiro DbLogExclude .*
attr WB_1_Kia_eNiro IODev MQTT2_FHEM_Server
attr WB_1_Kia_eNiro alias WB_1_Kia_eNiro
attr WB_1_Kia_eNiro autocreate 1
attr WB_1_Kia_eNiro devicetopic bluelinky
attr WB_1_Kia_eNiro group PV Eigenverbrauch
attr WB_1_Kia_eNiro icon car
attr WB_1_Kia_eNiro readingList $DEVICETOPIC/status:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/location.* { json2nameValue($EVENT) }\
$DEVICETOPIC/odometer:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/req_received:.* req_received\
$DEVICETOPIC/req_active:.* req_active
attr WB_1_Kia_eNiro room MQTT2_DEVICE,Strom->Photovoltaik
attr WB_1_Kia_eNiro setList getOdometer req/$DEVICETOPIC/get_odometer get_odometer\
getStatus req/$DEVICETOPIC/get_status get_status\
getLocation req/$DEVICETOPIC/get_location get_location\
getAll req/$DEVICETOPIC/get_all get_all\
startCharge req/$DEVICETOPIC/start_charging start_charging\
stopCharge req/$DEVICETOPIC/stop_charging stop_charging\
stopClimate req/$DEVICETOPIC/stop_climate stop_climate\
startHeating req/$DEVICETOPIC/start_climate {"defrost": true, "windscreenHeating": true, "temperature": 22.0 , "unit": "C"}\
startCooling req/$DEVICETOPIC/start_climate {"defrost": false, "windscreenHeating": false, "temperature": 22.0 , "unit": "C"}
attr WB_1_Kia_eNiro sortby 312
attr WB_1_Kia_eNiro stateFormat {my $charge = (ReadingsVal($name,"charging","false") eq "true");;;;   my $athome = (ReadingsVal($name,"atHomeStanding","false") eq "true");;;;   my $chargeathome = ($charge && $athome);;;;   my $connectedathome = ($athome && ReadingsVal($name,"connected","false") eq "true");;;;   sprintf("   <table>   <tr>   <td style='text-align:right'>Status:</td>   <td style='text-align:left'>%s</td>   </tr>   <tr>   <td style='text-align:right'>Akku:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Reichweite:</td>   <td style='text-align:left'>%s km</td>   </tr>   <tr style='%s'>   <td style='text-align:right'>Ladedauer:</td>   <td style='text-align:left'>%s h</td>   </tr>   <tr>   <td style='text-align:right'>Ladegrenze AC:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Kilometerstand:</td>   <td style='text-align:left'>%d km</td>   </tr>   <tr>   <td style='text-align:right'>12V Batterie:</td>   <td style='text-align:left'>%s %%</td>   </tr>   <tr>   <td style='text-align:right'>Aktivstatus:</td>   <td style='text-align:left'>%s</td>   </tr>   <tr>   <td style='text-align:right'>Zeit:</td>   <td style='text-align:left'>%s</td>   </tr>   </table>   ",   ($chargeathome ? "läd zu Hause" : ($connectedathome ? "angeschlossen zu Hause" : ($athome ? "zu Hause" : ($charge ? "Läd auswärts" : "unterwegs")))),   ReadingsVal($name,"batSOC",""),   ReadingsVal($name,"range",""),   ($charge ? "" : "display:none;;"),   ReadingsVal($name,"time2targetSOC",""),   ReadingsVal($name,"targetSOC",""),   ReadingsVal($name,"odometer_value",""),   ReadingsVal($name,"bat12v",""),   ReadingsVal($name,"req_active",""),   ReadingsTimestamp($name,"status_time","")   )   }
attr WB_1_Kia_eNiro userReadings atHomeStanding:location.* { ((abs(AttrVal("global","latitude",49.85) - ReadingsVal($NAME,"location_coord_lat",0)) <= 0.001) && (abs(AttrVal("global","longitude",8.49) - ReadingsVal($NAME,"location_coord_lon",0)) <= 0.001) && (ReadingsVal($NAME,"location_speed_value",1) == 0)) ? 'true' : 'false';;;; },\
batSOC:status.* { ReadingsVal($NAME,"status_evStatus_batteryStatus",0);;;;},\
connected:status.* { (ReadingsVal($NAME,"status_evStatus_batteryPlugin",0) != 0) ? 'true' : 'false';;;;},\
charging:status.* { ReadingsVal($NAME,"status_evStatus_batteryCharge",'false');;;;},\
targetSOC:status.* { ReadingsVal($NAME,"status_evStatus_reservChargeInfos_targetSOClist_2_targetSOClevel",0);;;;},\
time2targetSOC:status.* { my $t = ReadingsVal($NAME,"status_evStatus_remainTime2_atc_value",1);;;; sprintf("%02d:%02d", $t/60%60, $t%60);;},\
range:status.* { ReadingsVal($NAME,"status_evStatus_drvDistance_1_rangeByFuel_totalAvailableRange_value",0);;;;},\
bat12v:status.* { ReadingsVal($NAME,"status_battery_batSoc",0);;;;},
attr WB_1_Kia_eNiro webCmd getAll:startCharge:stopCharge:startHeating:startCooling:stopClimate

setstate WB_1_Kia_eNiro    <table>   <tr>   <td style='text-align:right'>Status:</td>   <td style='text-align:left'>zu Hause</td>   </tr>   <tr>   <td style='text-align:right'>Akku:</td>   <td style='text-align:left'>88 %</td>   </tr>   <tr>   <td style='text-align:right'>Reichweite:</td>   <td style='text-align:left'>396 km</td>   </tr>   <tr style='display:none;;'>   <td style='text-align:right'>Ladedauer:</td>   <td style='text-align:left'>00:35 h</td>   </tr>   <tr>   <td style='text-align:right'>Ladegrenze AC:</td>   <td style='text-align:left'>100 %</td>   </tr>   <tr>   <td style='text-align:right'>Kilometerstand:</td>   <td style='text-align:left'>231 km</td>   </tr>   <tr>   <td style='text-align:right'>12V Batterie:</td>   <td style='text-align:left'>78 %</td>   </tr>   <tr>   <td style='text-align:right'>Aktivstatus:</td>   <td style='text-align:left'>idle</td>   </tr>   <tr>   <td style='text-align:right'>Zeit:</td>   <td style='text-align:left'>2021-10-29 12:31:03</td>   </tr>   </table>   


Wie bereits geschrieben sammle ich jetzt Erfahrungen und möchte das dann ins Wiki stellen.
Hast Du noch schöne DOIF steuerungs Beispiele?

Vielen Dank erst einmal.
Bekomme beim einfügen der readinglist folgender Fehler

WB_1_Kia_eNiro: bad reading name {json2nameValue($EVENT) }\ (contains not A-Za-z/\d_\.- or is too long)


Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 30 Oktober 2021, 09:30:40
Zitat von: michisa86888 am 30 Oktober 2021, 09:22:09
Vielen Dank erst einmal.
Bekomme beim einfügen der readinglist folgender Fehler

WB_1_Kia_eNiro: bad reading name {json2nameValue($EVENT) }\ (contains not A-Za-z/\d_\.- or is too long)


Ich gehe davon aus dass du es nicht über Raw Definition import hast denn dort werden die "/" automatisch entfernt. Wenn du es händisch einfügst musst du es richtig formatieren.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 31 Oktober 2021, 11:07:46
Zitat von: xerion am 29 Oktober 2021, 13:25:16
Ich nutze Bluelinky für folgende Anwendungszwecke:

-Auslesen des Kilometerstandes beim Verbinden der Wallbox über DOIF
Okay, das wird automatisch jede Stunde aktualisiert, wenn das Fahrzeug nicht zuhause ist und alle 15 Minuten, wenn es geladen wird.
Sollte die 12V Batterie unter 40% Ladezustand haben wird diese Abfrage gestoppt, dann wird man ja eh längere zeit nicht gefahren sein.

Zitat
-Timer und Temperatur gesteuerte Klimatisierung über FUIP und DOIF

Damit ich die Temperatur per Slider einstellen kann und unterscheiden kann ob mit oder ohne defrost habe ich das noch definiert:

startTemp:slider,17,1,27 /bluelink/start_car {"defrost": false,"windscreenHeating": false,"temperature": "$EVTPART1","unit": "C"}
startTemp_with_Defrost:slider,17,1,27 /bluelink/start_car_with_Defrost {"defrost": true,"windscreenHeating": true,"temperature": "$EVTPART1","unit": "C"}

Das versuche ich dann auch ins FHEMWEG uiTable zu bringen.

Zitat
-Google Maps Position per WEBLINK
Das hast Du ja in einer readingGroup abgebildet und wäre somit unabhängig. Das stelle ich dann mal bei mir zurück.

Zitat
-SoC lese ich per OBD2 aus da es mir mit Bluelinky zu unstabil war, und wenn man PV Optimiert Zielladen möchte ist das mit dieser API leider zu träge.
Hier habe ich im openWB Forum noch etwas angefragt.
Eigentlich kann man über das Kia Connect einen Ziel SOC vorgeben, was diese Steuerung ins Auto verlagern würde. Damit muss man nicht dauernd den SOC abfragen und könnte einfach der WB sagen, sie soll nur PV-Leistung verwenden. Sobald das Auto den SOC erreicht hat würde es selber aufhören zu laden.
Bei weniger intelligenten WBs muss man sich dann nur noch mit der Ladeleistung beschäftigen, was hier nicht rein gehören würde.

Momentan platziere ich gerade die Status Informationen  im uiTable

Durch @mnl1234 ist ja bereits folgende SetList bereitgestellt worden

getOdometer req/$DEVICETOPIC/get_odometer get_odometer
getStatus req/$DEVICETOPIC/get_status get_status
getLocation req/$DEVICETOPIC/get_location get_location
getAll req/$DEVICETOPIC/get_all get_all
startCharge req/$DEVICETOPIC/start_charging start_charging
stopCharge req/$DEVICETOPIC/stop_charging stop_charging
stopClimate req/$DEVICETOPIC/stop_climate stop_climate
startHeating req/$DEVICETOPIC/start_climate {"defrost": true, "windscreenHeating": true, "temperature": 22.0 , "unit": "C"}
startCooling req/$DEVICETOPIC/start_climate {"defrost": false, "windscreenHeating": false, "temperature": 22.0 , "unit": "C"}


@mnl1234 ich habe noch das problem, dass das set_chargetargets im node-red Flow noch nicht so richtig funktioniert

FHEM:
setChargeTargetSoc req/$DEVICETOPIC/set_chargetargets {"fast": 80, "slow": 50}

node-red:
Ich habe von ein json Object in den Flow eingebaut und das debugging aktiviert.

31.10.2021, 10:50:21node: 33b1bc85.662694
req/bluelinky/set_chargetargets : msg.payload : Object
{ fast: 80, slow: 50 }
31.10.2021, 10:50:34node: 811aa567.e89f98
msg.payload : undefined                                       <<<<<<<<<<<< kannst Du mir da noch helfen?
undefined
31.10.2021, 10:50:34node: fecad185.324f8
msg.payload : string[4]
"idle"
31.10.2021, 10:58:00node: fecad185.324f8
req/bluelinky/get_all : msg.payload : string[7]
"pending"
31.10.2021, 10:58:23node: fecad185.324f8
msg.payload : string[4]
"idle"


Sollte ich generell noch etwas vergessen haben, so schickt mir bitte nochmal Eure Wünsche.

VG
  Christian

EDIT: Der zweite screenshot ist nur ein Draft, aber es geht voran.
Die Batteriestände werden farbig angezeigt.
Beim zweiten Pull Down Menü kann man jetzt die Klimatisierung steuern und mit einer select Liste die Temperatur vorwählen.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 01 November 2021, 14:23:58
Zitat von: ch.eick am 31 Oktober 2021, 11:07:46
[/code]

@mnl1234 ich habe noch das problem, dass das set_chargetargets im node-red Flow noch nicht so richtig funktioniert

FHEM:
setChargeTargetSoc req/$DEVICETOPIC/set_chargetargets {"fast": 80, "slow": 50}

node-red:
Ich habe von ein json Object in den Flow eingebaut und das debugging aktiviert.

31.10.2021, 10:50:21node: 33b1bc85.662694
req/bluelinky/set_chargetargets : msg.payload : Object
{ fast: 80, slow: 50 }
31.10.2021, 10:50:34node: 811aa567.e89f98
msg.payload : undefined                                       <<<<<<<<<<<< kannst Du mir da noch helfen?
undefined
31.10.2021, 10:50:34node: fecad185.324f8
msg.payload : string[4]
"idle"
31.10.2021, 10:58:00node: fecad185.324f8
req/bluelinky/get_all : msg.payload : string[7]
"pending"
31.10.2021, 10:58:23node: fecad185.324f8
msg.payload : string[4]
"idle"


Es sieht so aus als ob das JSON Objekt falsch formatiert ist, so funktioniert es:
{
    "fast": 100,
    "slow": 80
}


Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 01 November 2021, 15:08:10
Zitat von: xerion am 01 November 2021, 14:23:58
Es sieht so aus als ob das JSON Objekt falsch formatiert ist, so funktioniert es:
{
    "fast": 100,
    "slow": 80
}

Ja Danke, stimmt. Ich habe es jetzt auch bereits am laufen und noch einige Änderungen im node-red Flow.
Nach dem Test gebe ich bescheid.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 01 November 2021, 16:05:22
Zitat von: xerion am 29 Oktober 2021, 15:56:47
Damit ich die Temperatur per Slider einstellen kann und unterscheiden kann ob mit oder ohne defrost habe ich das noch definiert:
startTemp:slider,17,1,27 /bluelink/start_car {"defrost": false,"windscreenHeating": false,"temperature": "$EVTPART1","unit": "C"}
startTemp_with_Defrost:slider,17,1,27 /bluelink/start_car_with_Defrost {"defrost": true,"windscreenHeating": true,"temperature": "$EVTPART1","unit": "C"}

Bei welchem Attribut hast Du das denn eingebaut?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 01 November 2021, 16:12:47
Zitat von: ch.eick am 01 November 2021, 16:05:22
Bei welchem Attribut hast Du das denn eingebaut?
Das kommt unter setList rein.....
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 01 November 2021, 19:29:12
Hallo zusammen,
wie würde Euch dieses uiTable gefallen?
- Die ausführbaren Komandos befinden sich in den Pull Down Menüs.
- Variable Werte können aus select Listen gesetzt werden.
- Der kommunikations Status wird mit "idel" in grün oder "pending" in rot angegeben
- Der Status ist in der rechten Spalte

- In der Zeile Komfort wollte ich noch das Abschließen des Fahrzeuges abbilden und eine Warnung für den Reifendruck.

- Beim Accu fehlen noch die Ladezeiten, bis zum SOC

- Bei der Klimatisierung wäre dann noch die Lenkrad Heizung und die heizbare Heckscheibe, sowie die Zeiteinstellung für die Klimatisierung.

Habt Ihr noch Ideen, was fehlen würde, oder Vorschläge für eine andere Anordnung?

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 01 November 2021, 20:05:18
Ich denke das sieht doch für den Anfang sehr gut aus. Ideen und Wünsche kommen bestimmt noch wenn man es im Einsatz hat ;-)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 03 November 2021, 10:31:30
Update: 2022-01-12

Hallo zusammen,
ich möchte schon mal hier mein derzeitiges Ergebnis vorstellen.

Achtung, es ist noch in Bearbeitung!
Vielen Dank an alle, die bereits viel vorbereitet haben. Ich habe darauf aufgesetzt und versucht alles zu vereinen.

Voraussetzung:
node-red
   einen etwas geändertem Flow, da der set Teil noch nicht ganz ausgearbeitet war.
FHEM MQTT2
   einen Server Eintrag
   das Kia_eNiro_connect Device, hier tendiere ich noch zu einem generischen Namen z.B. einfach nur Kia_connect
FHEM DOIF Device mit uiTable


Falls nicht vorhanden:

node-red:

Im docker-compose.yml

  node-red:
    image: nodered/node-red:latest
    environment:
      - TZ=Europe/Berlin
    ports:
      - 1880:1880
    volumes:
      - ./node-red/data:/data

Das data Verzeichnis für node-red anlegen

mkdir ./node-red
mkdir ./node-red/data
ls -l
drwxr-xr-x  3 pi      pi           4096 Okt 28 11:46 node-red

node-red zum ersten mal starten, danach kann man auch portainer verwenden

docker-compose up -d

Anschließend kann man über Port 1880 das node-red aufrufen und den Import des Flow machen.
Die Persionalisierung kann man hierbei direkt im JSON File machen, oder später im node-red Flow.
Der Flow ist ein einfacher "Übersetzer" zwischen dem MQTT2 und der Kia Connect API im Internet.

[
    {
        "id": "866c75dd.edd9a8",
        "type": "tab",
        "label": "Kia Connect",
        "disabled": false,
        "info": ""
    },
    {
        "id": "bb13a99d.68b8f8",
        "type": "mqtt-broker",
        "name": "mqtt_Server",
        "broker": "<IP des mqtt-broker>",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "compatmode": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "sessionExpiry": ""
    },
    {
        "id": "452a3304.58c8fc",
        "type": "bluelinky",
        "username": "<KiaUser>",
        "password": "<KiaUserPasswort>",
        "region": "EU",
        "pin": "<EurePin>",
        "vin": "<EureVIN>",
        "brand": "[kia|hyundai>"
    },
    {
        "id": "91a345fa.5757a8",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_status",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 440,
        "y": 280,
        "wires": [
            [
                "15dfb508.c6497b",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "5ad085b9.05739c",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/start_climate",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 450,
        "y": 680,
        "wires": [
            [
                "b27d74de.38c808",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "15dfb508.c6497b",
        "type": "car-status",
        "z": "866c75dd.edd9a8",
        "name": "Get status",
        "dorefresh": true,
        "parsed": false,
        "bluelinky": "452a3304.58c8fc",
        "x": 830,
        "y": 280,
        "wires": [
            [
                "cccc9476.d56dd8",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "87abdd88.8ff4d",
        "type": "car-odometer",
        "z": "866c75dd.edd9a8",
        "name": "Get car odometer",
        "bluelinky": "452a3304.58c8fc",
        "x": 850,
        "y": 200,
        "wires": [
            [
                "40d2361c.579588",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "31100f9a.40008",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "locationWrapper",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"location\": msg.payload,\n        \"error\": false\n    };\n    \n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1350,
        "y": 120,
        "wires": [
            [
                "85a07155.a0f9f",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "bea1d927.0f3908",
        "type": "car-location",
        "z": "866c75dd.edd9a8",
        "name": "Get car location",
        "bluelinky": "452a3304.58c8fc",
        "x": 840,
        "y": 120,
        "wires": [
            [
                "31100f9a.40008",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "3c949d67.0d83b2",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_location",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "nl": false,
        "rap": false,
        "inputs": 0,
        "x": 450,
        "y": 120,
        "wires": [
            [
                "bea1d927.0f3908",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "cccc9476.d56dd8",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "analyseStatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    let status = msg.payload;\n    status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);\n    try{\n    status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    } catch(e) {}\n\n    let time = status.evStatus.remainTime2.atc.value/60;\n    let result = { \n                 \"batSOC\": status.evStatus.batteryStatus,\n                 \"connected\": (status.evStatus.batteryPlugin !== 0),\n                 \"charging\": status.evStatus.batteryCharge,\n                 \"targetSOC\": status.evStatus.reservChargeInfos.targetSOClist[1].targetSOClevel,\n                 \"time2targetSOC\": (Math.floor(time) + \":\" + (\"0\" + Math.floor((time % 1)*60)).slice(-2)), // h:mm\n                 \"range\": status.evStatus.drvDistance[0].rangeByFuel.totalAvailableRange.value,\n                 \"bat12v\": status.battery.batSoc\n                };\n    \n    //msg.payload = result;\n    msg.payload = {\n        \"status\": status,\n        \"error\": false\n        \n    };\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1340,
        "y": 280,
        "wires": [
            [
                "3efceea0.c81b12",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "85a07155.a0f9f",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/location",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1870,
        "y": 120,
        "wires": []
    },
    {
        "id": "3efceea0.c81b12",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/status",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1860,
        "y": 280,
        "wires": []
    },
    {
        "id": "327104fc.71e1bc",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/odometer",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1870,
        "y": 200,
        "wires": []
    },
    {
        "id": "844a32f4.2e029",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/stop_climate",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 450,
        "y": 760,
        "wires": [
            [
                "7d3ae860.d8c9a8",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "57d91e50.7e96",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/start_charging",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 460,
        "y": 820,
        "wires": [
            [
                "6eebc52c.ee23dc",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "6029f0a0.b73e",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/stop_charging",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "nl": false,
        "rap": false,
        "inputs": 0,
        "x": 460,
        "y": 880,
        "wires": [
            [
                "84a1ae.74912e5",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "c5ecf76c.e753c8",
        "type": "start-car",
        "z": "866c75dd.edd9a8",
        "name": "Start car",
        "bluelinky": "452a3304.58c8fc",
        "x": 1100,
        "y": 680,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "6eebc52c.ee23dc",
        "type": "start-charge",
        "z": "866c75dd.edd9a8",
        "name": "Start Charging",
        "bluelinky": "452a3304.58c8fc",
        "x": 1120,
        "y": 820,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "84a1ae.74912e5",
        "type": "stop-charge",
        "z": "866c75dd.edd9a8",
        "name": "Stop Charging",
        "bluelinky": "452a3304.58c8fc",
        "x": 1120,
        "y": 880,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "7d3ae860.d8c9a8",
        "type": "stop-car",
        "z": "866c75dd.edd9a8",
        "name": "Stop car",
        "bluelinky": "452a3304.58c8fc",
        "x": 1100,
        "y": 760,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "b27d74de.38c808",
        "type": "json",
        "z": "866c75dd.edd9a8",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": false,
        "x": 750,
        "y": 680,
        "wires": [
            [
                "c5ecf76c.e753c8",
                "33b1bc85.662694"
            ]
        ]
    },
    {
        "id": "45a6a8e6.2abfd8",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_odometer",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 460,
        "y": 200,
        "wires": [
            [
                "87abdd88.8ff4d",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "33b1bc85.662694",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 930,
        "y": 920,
        "wires": []
    },
    {
        "id": "ce62ba4f.d86548",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/req_received",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 860,
        "y": 480,
        "wires": []
    },
    {
        "id": "1babee6c.1c2982",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_all",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 430,
        "y": 360,
        "wires": [
            [
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2",
                "4375fbb9.00fb44"
            ]
        ]
    },
    {
        "id": "262df5dc.57916a",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1810,
        "y": 60,
        "wires": []
    },
    {
        "id": "811aa567.e89f98",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1410,
        "y": 1040,
        "wires": []
    },
    {
        "id": "3f82a275.5a0b6e",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 790,
        "y": 80,
        "wires": []
    },
    {
        "id": "24d5e0b.3aafc2",
        "type": "change",
        "z": "866c75dd.edd9a8",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "pending",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 810,
        "y": 1140,
        "wires": [
            [
                "4dd1ea4a.52f144",
                "fecad185.324f8"
            ]
        ]
    },
    {
        "id": "f487d6d6.a4d568",
        "type": "change",
        "z": "866c75dd.edd9a8",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "idle",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1810,
        "y": 1040,
        "wires": [
            [
                "4dd1ea4a.52f144",
                "fecad185.324f8"
            ]
        ]
    },
    {
        "id": "4dd1ea4a.52f144",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/req_active",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 2140,
        "y": 1100,
        "wires": []
    },
    {
        "id": "fecad185.324f8",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 2110,
        "y": 1160,
        "wires": []
    },
    {
        "id": "40d2361c.579588",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "odometerWrapper",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    msg.payload = { \n        \"odometer\": msg.payload,\n        \"error\": false\n        };\n\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1350,
        "y": 200,
        "wires": [
            [
                "327104fc.71e1bc",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "226ed925.607bb6",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1130,
        "y": 80,
        "wires": []
    },
    {
        "id": "4375fbb9.00fb44",
        "type": "car-fullstatus",
        "z": "866c75dd.edd9a8",
        "name": "Get full status",
        "dorefresh": true,
        "bluelinky": "452a3304.58c8fc",
        "x": 840,
        "y": 360,
        "wires": [
            [
                "226ed925.607bb6",
                "69b6c4df.ea6bcc",
                "89681a97.9e24d8",
                "92dc3ff4.1d6e3"
            ]
        ]
    },
    {
        "id": "69b6c4df.ea6bcc",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "locationFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"location\": msg.payload.vehicleLocation,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1360,
        "y": 360,
        "wires": [
            [
                "85a07155.a0f9f",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "92dc3ff4.1d6e3",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "statusFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    let status = msg.payload.vehicleStatus;\n    try{\n        status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);\n        status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n        status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    } catch(e) {}\n\n    msg.payload = { \n        \"status\": status,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1360,
        "y": 480,
        "wires": [
            [
                "3efceea0.c81b12",
                "f487d6d6.a4d568",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "89681a97.9e24d8",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "odometerFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"odometer\": msg.payload.odometer,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1370,
        "y": 420,
        "wires": [
            [
                "327104fc.71e1bc",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "331e5860.907808",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1810,
        "y": 360,
        "wires": []
    },
    {
        "id": "aa4d220b.f7e19",
        "type": "set-chargetargets",
        "z": "866c75dd.edd9a8",
        "name": "Set charge targets",
        "bluelinky": "452a3304.58c8fc",
        "x": 1130,
        "y": 960,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "4c03338d.2f15ec",
        "type": "login",
        "z": "866c75dd.edd9a8",
        "name": "Login",
        "bluelinky": "452a3304.58c8fc",
        "x": 1230,
        "y": 1040,
        "wires": [
            [
                "811aa567.e89f98"
            ]
        ]
    },
    {
        "id": "28b868f5.16cb48",
        "type": "inject",
        "z": "866c75dd.edd9a8",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "43200",
        "crontab": "",
        "once": true,
        "onceDelay": "12",
        "topic": "",
        "payloadType": "date",
        "x": 1090,
        "y": 1040,
        "wires": [
            [
                "4c03338d.2f15ec"
            ]
        ]
    },
    {
        "id": "db9ecdb5.a9683",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/set_chargetargets",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 470,
        "y": 960,
        "wires": [
            [
                "7064a8d53256b646",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "44155ad70c47b0dd",
        "type": "inject",
        "z": "866c75dd.edd9a8",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 240,
        "y": 320,
        "wires": [
            [
                "15dfb508.c6497b"
            ]
        ]
    },
    {
        "id": "7064a8d53256b646",
        "type": "json",
        "z": "866c75dd.edd9a8",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": false,
        "x": 750,
        "y": 960,
        "wires": [
            [
                "33b1bc85.662694",
                "aa4d220b.f7e19"
            ]
        ]
    }
]

Wenn der Flow geladen wurde und die persönlichen Anmeldeinformationen eingetragen wurden kann man das ganze bereits im node-red testen.
Dazu wurde im Flow ganz links ein Timestamp Objekt eingefügt, das dann die Status Abfrage startet.
Hier einfach auf das quadrat klicken, wodurch eine Meldung erscheint, das das ein inject ausgelöst wurde.
Wenn vorher die MQTT2 Verbindung korrekt eingerichtet wurde würde dann schon das Status Ergebnis ins FHEM übertragen werden.
Ansonsten kann man das Debugging an den msg.payload Objekten aktivieren und im debug Log sehen, wie der Ablauf ist.

MQTT2 falls nicht vorhanden

defmod MQTT2_FHEM_Server MQTT2_SERVER 1883 global
attr MQTT2_FHEM_Server DbLogExclude .*
attr MQTT2_FHEM_Server alias MQTT2_FHEM_Server
attr MQTT2_FHEM_Server autocreate simple
attr MQTT2_FHEM_Server disable 0
attr MQTT2_FHEM_Server room MQTT2
attr MQTT2_FHEM_Server verbose 1

MQTT2 Device, hier bitte im userreading noch Eure Geo Position eintragen, um das zu Hause anzuzeigen.

defmod Kia_connect MQTT2_DEVICE
attr Kia_connect DbLogExclude .*
attr Kia_connect DbLogInclude .*
attr Kia_connect IODev MQTT2_FHEM_Server
attr Kia_connect alias Kia_connect
attr Kia_connect autocreate 1
attr Kia_connect devicetopic bluelinky
attr Kia_connect group PV Eigenverbrauch-Steuerung
attr Kia_connect icon car
attr Kia_connect readingList $DEVICETOPIC/status:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/location.* { json2nameValue($EVENT) }\
$DEVICETOPIC/odometer:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/req_received:.* req_received\
$DEVICETOPIC/req_active:.* req_active
attr Kia_connect room MQTT2_DEVICE,Strom->Photovoltaik
attr Kia_connect setList getOdometer req/$DEVICETOPIC/get_odometer get_odometer\
getStatus req/$DEVICETOPIC/get_status get_status\
getLocation req/$DEVICETOPIC/get_location get_location\
getTripinfo req/$DEVICETOPIC/get_tripinfo\
getAll req/$DEVICETOPIC/get_all get_all\
setChargeTargetSoc req/$DEVICETOPIC/set_chargetargets\
startCharge req/$DEVICETOPIC/start_charging start_charging\
stopCharge req/$DEVICETOPIC/stop_charging stop_charging\
stopClimate req/$DEVICETOPIC/stop_climate stop_climate\
startClimate req/$DEVICETOPIC/start_climate
attr Kia_connect sortby 402
attr Kia_connect stateFormat req_active
attr Kia_connect userReadings atHomeStanding:location.* { ((abs(AttrVal("global","latitude",49.85) - ReadingsVal($NAME,"location_coord_lat",0)) <= 0.001) && (abs(AttrVal("global","longitude",8.49) - ReadingsVal($NAME,"location_coord_lon",0)) <= 0.001) && (ReadingsVal($NAME,"location_speed_value",1) == 0)) ? 'true' : 'false';;;; },\
batSOC:status.* { ReadingsVal($NAME,"status_evStatus_batteryStatus",0);;;;},\
connected:status.* { (ReadingsVal($NAME,"status_evStatus_batteryPlugin",0) != 0) ? 'true' : 'false';;;;},\
charging:status.* { ReadingsVal($NAME,"status_evStatus_batteryCharge",'false');;;;},\
targetSOC:status.* { ReadingsVal($NAME,"status_evStatus_reservChargeInfos_targetSOClist_2_targetSOClevel",0);;;;},\
time2targetSOC:status.* { my $t = ReadingsVal($NAME,"status_evStatus_remainTime2_atc_value",1);;;; sprintf("%02d:%02d", $t/60%60, $t%60);;},\
range:status.* { ReadingsVal($NAME,"status_evStatus_drvDistance_1_rangeByFuel_totalAvailableRange_value",0);;;;},\
bat12v:status.* { ReadingsVal($NAME,"status_battery_batSoc",0);;;;}


Das RAW zum DOIF kommt im nächsten Post, da ich mal wieder zuviel geschrieben habe.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 03 November 2021, 10:37:35
Update: 2022-01-12

Zitat von: ch.eick am 03 November 2021, 10:31:30
Das RAW zum DOIF kommt im nächsten Post, da ich mal wieder zuviel geschrieben habe.
Und hier ist es schon

Nun dann noch das DOIF mit dem uiTable für die Status Anzeige und die Steuerung über Pull Down Menüs.

- Status Abfrage
     Status jede Stunde zwischen 6 und 23 Uhr (12V min 40%)
     Status beim Laden alle 15 Minuten (12V min 40%)
     Anzeige des Kilometerzählers
     Status des Fahrzeuges zu Hause / unterwegs und beim Laden
     Fahrzeug Auf/Zu

- Klimatisierung über das Pull Down Menü
     unterschiedliche Temperaturen für Heizen und Kühlen
     Aktuelle Temperatur
     Heizen/Klima Ein/Aus
     Timer für zeitgesteuertes Klimatisieren
     Klimatisierung über "Abfall" Kalender

- Komfort
     Reifen Überwachung
     Türen / Motorhaube / Kofferraum Überwachung
     12V Batterie anzeige, wenn der Ladezustand kleiner 40% ist erfolgt keine weitere Status Abfrage

- ACCU Steuerung
    Setzen des Ziel SOC beim Standard Laden
    Start/Stop Laden
    Accu Stand und berechnete Restkilometer

- Für openWB integratin im uiTable
    Wählen des Lademodus
    Vorrang EV oder Bat
    Geschätzte Ladezeit
    Status Ladepunkt (Plug und Laden)
    Lade Status Phasen und Leistung   

Da die Abfrage beim Kia Connect sehr träge ist und teilweise fast 3 Minuten dauert ist eine Verriegelung implementiert.
Nur wenn der Zustand "idel" ist, können weitere Abfragen gestartet werden. Läuft z.B. die Status Abfrage kann man ein weiteres Kommando anstarten, es wird jedoch erst abgesetzt, wenn das vorherige Kommando fertig ist. Solange bleibt im Pull Down Menü das neue Kommando stehen.


defmod Kia_eNiro_PV DOIF ################################################################################################################\
## 1 Kia Connect Status Abfrage erfolgt mit MQTT2 ==> node-ret ==> Kia Connect\
##\
1_Status_getAll\
{if( !([$SELF:state] eq "off")                                         ## DOIF enabled\
     and [Kia_connect:req_active] eq "idle"\
     and\
     (  ([+00:15] and                                                  ## alle 15 Minuten\
         [Kia_connect:atHomeStanding] eq "true" and                    ##   wenn das Auto zuhause ist\
         [Kia_connect:charging]       eq "true" or                     ##   und es geladen wird\
         [:58] and [05:00-23:00]                                       ## ansonsten nur jede Stunde\
        ) and [Kia_connect:bat12v] > 40                                ## aber die 12V Batterie sollte noch genügend Ladung haben\
      or [$SELF:cmd_event]  eq "set_cmd_1"                             ## Das reagiert auf den Aufruf mit "set <Device> cmd_*"\
      or [$SELF:ui_command_1] eq "Status_getAll"                       ## Hier wird das uiTable select ausgewertet\
     )\
   ) {\
    if( [$SELF:ui_command_1] eq "Status_getAll" ) {                    ## Hier wurde manuell eingeschaltet\
      set_Reading("ui_command_before_1",[$SELF:ui_command_1]);;\
    }\
\
    fhem_set("Kia_connect getAll");;                                    ## beliebige Kommandos für diesen Block\
\
    set_Reading("ui_command_1","---");;                                 ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
                                                                       ## kann das Kommando nicht sofort wiederholt werden\
  }\
}\
\
2_Klima\
{if( !([$SELF:state] eq "off")                                         ## DOIF enabled\
     and [Kia_connect:req_active] eq "idle"\
     and\
     (   [$SELF:ui_command_2] eq "stopClimate"                         ## Hier wird das uiTable select ausgewertet\
      or [$SELF:ui_command_2] eq "startHeating"\
      or [$SELF:ui_command_2] eq "startCooling"\
     )\
   ) {\
    set_Reading("ui_command_before_2",[$SELF:ui_command_2]);;\
\
    if ([$SELF:ui_command_2] eq "startHeating") {\
      my $airTemp_value= [Kia_connect:status_airTemp_value_target_Winter];;\
      fhem_set('Kia_connect startClimate {"defrost": true, "windscreenHeating": true, "temperature": '.$airTemp_value.' , "unit": "C"}');;\
      if (AttrVal("$SELF","verbose",0) >= 0)\
         {Log 3, "$SELF 2_Klima       : startHeating"};;\
    }\
    if ([$SELF:ui_command_2] eq "startCooling") {\
      my $airTemp_value = [Kia_connect:status_airTemp_value_target_Summer];;\
      fhem_set('Kia_connect startClimate {"defrost": false, "windscreenHeating": false, "temperature": '.$airTemp_value.' , "unit": "C"}');;\
      if (AttrVal("$SELF","verbose",0) >= 0)\
         {Log 3, "$SELF 2_Klima       : startCooling"};;\
    }\
    if ([$SELF:ui_command_2] eq "stopClimate") {\
      fhem_set("Kia_connect ".[$SELF:ui_command_2]);;\
      if (AttrVal("$SELF","verbose",0) >= 0)\
         {Log 3, "$SELF 2_Klima       : stopClimate"};;\
    }\
    fhem_set("Abfall update");;\
\
    set_Reading("ui_command_2","---");;                                 ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
                                                                       ## kann das Kommando nicht sofort wiederholt werden\
  }\
}\
\
3_Laden\
{if( !([$SELF:state] eq "off")                                         ## DOIF enabled\
     and [Kia_connect:req_active] eq "idle"\
     and\
     (   [$SELF:ui_command_3] eq "setChargeTargetSoc"                  ## Hier wird das uiTable select ausgewertet\
      or [$SELF:ui_command_3] eq "startCharge"\
      or [$SELF:ui_command_3] eq "stopCharge"\
     )\
   ) {\
    set_Reading("ui_command_before_3",[$SELF:ui_command_3]);;\
\
    if ([$SELF:ui_command_3] eq "setChargeTargetSoc") {\
      my $targetSOClist_1_targetSOClevel = [Kia_connect:status_evStatus_reservChargeInfos_targetSOClist_1_targetSOClevel_target];;\
      my $targetSOClist_2_targetSOClevel = [Kia_connect:status_evStatus_reservChargeInfos_targetSOClist_2_targetSOClevel_target];;\
      fhem_set("Kia_connect setChargeTargetSoc {\"fast\": ".$targetSOClist_1_targetSOClevel.", \"slow\": ".$targetSOClist_2_targetSOClevel."}");;\
    } else {\
      fhem_set("Kia_connect ".[$SELF:ui_command_3]);;                   ## beliebige Kommandos für diesen Block\
    }\
\
    set_Reading("ui_command_3","---");;                                 ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
                                                                       ## kann das Kommando nicht sofort wiederholt werden\
  }\
}\
\
4_Klima_timer_heizen\
{if( !([$SELF:state] eq "off")                                         ## DOIF enabled\
     and\
     (\
       (    [[Abfall_Abfuhr:Kiaheizen_connect_time]]                   ## Prüfe den Kalender Eintrag\
        and [Abfall_Abfuhr:Kiaheizen_connect_date] eq $ymd             ##   ist es heute?\
       )\
       or\
       (    [$SELF:ui_timer_mode] eq "heizen"                          ## Timer zum Heizen aktiv?\
        and [[$SELF:ui_timer_Start]]                                   ##   ist es soweit?\
       )\
     )\
   ) {\
\
    if (AttrVal("$SELF","verbose",0) >= 0)\
       {Log 3, "$SELF 4_Klima_timer : startHeating"};;\
    set_Reading("ui_timer_mode","Aus");;                                ## Schalte die Timer Funktion ab\
    set_Reading("ui_command_2","startHeating");;                        ## Es soll geheizt werden\
    fhem_set("$SELF 2_Klima");;                                         ## Aktiviere das Heizen\
\
  }\
}\
\
5_Klima_timer_kuehlen\
{if( !([$SELF:state] eq "off")                                         ## DOIF enabled\
     and\
     (\
       (    [[Abfall_Abfuhr:Kiakuehlen_connect_time]]                  ## Prüfe den Kalender Eintrag\
        and [Abfall_Abfuhr:Kiakuehlen_connect_date] eq $ymd            ##   ist es heute?\
       )\
       or\
       (    [$SELF:ui_timer_mode] eq "kuehlen"                         ## Timer zum Kühler aktiv?\
        and [[$SELF:ui_timer_Start]]                                   ##   ist es soweit?\
       )\
     )\
   ) {\
\
    if (AttrVal("$SELF","verbose",0) >= 0)\
       {Log 3, "$SELF 4_Klima_timer : startCooling"};;\
    set_Reading("ui_timer_mode","Aus");;                                ## Schalte die Timer Funktion ab\
    set_Reading("ui_command_2","startCooling");;                        ## Es soll gekühlt werden\
    fhem_set("$SELF 2_Klima");;                                         ## Aktiviere das Kühlen\
\
  }\
}\
\
6_Auf_Zu\
{if( !([$SELF:state] eq "off")                                         ## DOIF enabled\
     and [Kia_connect:req_active] eq "idle"\
     and\
     (   [$SELF:ui_command_2] eq "car_lock"                            ## Hier wird das uiTable select ausgewertet\
      or [$SELF:ui_command_2] eq "car_unlock"\
     )\
   ) {\
    set_Reading("ui_command_before_2",[$SELF:ui_command_2]);;\
\
    fhem_set("Kia_connect ".[$SELF:ui_command_2]);;\
    if (AttrVal("$SELF","verbose",0) >= 0)\
       {Log 3, "$SELF 6_Auf_Zu      : ".[$SELF:ui_command_2]};;\
\
    set_Reading("ui_command_2","---");;                                 ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
                                                                       ## kann das Kommando nicht sofort wiederholt werden\
  }\
}\
\
7_WB_1_lp_1\
{if( !([$SELF:state] eq "off")                                         ## DOIF enabled\
     and\
     (   [$SELF:ui_command_4] eq "SofortLaden"                         ## Hier wird das uiTable select ausgewertet\
      or [$SELF:ui_command_4] eq "Min+PV"\
      or [$SELF:ui_command_4] eq "NurPV"\
      or [$SELF:ui_command_4] eq "Stop"\
      or [$SELF:ui_command_4] eq "Standby"\
      or [$SELF:ui_command_4] eq "Vorrang_EV"\
      or [$SELF:ui_command_4] eq "Vorrang_Bat"\
     )\
   ) {\
    set_Reading("ui_command_before_4",[$SELF:ui_command_4]);;\
\
    if ([$SELF:ui_command_4] eq "Vorrang_Bat" OR [$SELF:ui_command_4] eq "Vorrang_EV") {\
      if ([$SELF:ui_command_4] eq "Vorrang_EV") {\
        fhem_set("WB_1 priorityModeEVBattery 1");;\
      } else {\
        fhem_set("WB_1 priorityModeEVBattery 0");;\
      }\
      if (AttrVal("$SELF","verbose",0) >= 0)\
         {Log 3, "$SELF 7_WB_1_lp_1    : ".[$SELF:ui_command_4]};;\
    } else {\
      fhem_set("WB_1 Lademodus ".[$SELF:ui_command_4]);;\
      if (AttrVal("$SELF","verbose",0) >= 0)\
         {Log 3, "$SELF 7_WB_1_lp_1    : Lademodus ".[$SELF:ui_command_4]};;\
    }\
\
    set_Reading("ui_command_4","---");;                                 ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
                                                                       ## kann das Kommando nicht sofort wiederholt werden\
  }\
}\
\
8_Speicher_sperren\
{if( !([$SELF:state] eq "off")                                         ## DOIF enabled\
     and\
     (   [$SELF:ui_command_4]   eq "Hausspeicher_Sperren"              ## Hier wird das uiTable select ausgewertet\
      or [WB_1:lp_1_ChargeStat] eq "loading" and\
         [WB_1:lp_1_PlugStat]   eq "Plugged in"\
     )\
   ) {\
    set_Reading("ui_command_before_4",[$SELF:ui_command_4]);;\
\
    if([$SELF:WR_1_Speicher_1_ExternControl_smart_laden_before] eq "---") {\
\
      if([$SELF:SpeicherExternTrigger] eq "gesperrt" and\
         [WR_1_API:Battery_InternControl_MinHomeConsumption] eq "30000" ) {\
        set_Reading("WR_1_Speicher_1_ExternControl_smart_laden_before","aktiv");;\
        if (AttrVal("$SELF","verbose",0) >= 0)\
           {Log 3, "$SELF 8_Speicher_sperren : smart_laden_before aktiv"};;\
      } else {\
        set_Reading("WR_1_Speicher_1_ExternControl_smart_laden_before","inaktiv");;\
        if (AttrVal("$SELF","verbose",0) >= 0)\
           {Log 3, "$SELF 8_Speicher_sperren : smart_laden_before inaktiv"};;\
      }\
\
      fhem_set("WR_1_Speicher_1_ExternControl cmd_2");;\
      if (AttrVal("$SELF","verbose",0) >= 0)\
         {Log 3, "$SELF 8_Speicher_sperren : smart_Laden startet"};;\
    }\
\
    set_Reading("ui_command_4","---");;                                 ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten\
                                                                       ## kann das Kommando nicht sofort wiederholt werden\
  }\
}\
\
9_WB_1_Zaehler_Statistiken\
{if( !([$SELF:state] eq "off") and                                     ## DOIF enabled\
     [00:01]\
   ) {\
    fhem("setreading WB_1 lp_1_kWhCounter_init_Day ".[WB_1:lp_1_kWhCounter]);;\
    fhem("setreading WB_1 lp_2_kWhCounter_init_Day ".[WB_1:lp_2_kWhCounter]);;\
\
    if ($mday eq 1)\
     {\
      fhem("setreading WB_1 lp_1_kWhCounter_init_Month ".[WB_1:lp_1_kWhCounter]);;\
      fhem("setreading WB_1 lp_2_kWhCounter_init_Month ".[WB_1:lp_2_kWhCounter]);;\
\
      if ($yday eq 0)\
        {\
         fhem("setreading WB_1 lp_1_kWhCounter_init_Year ".[WB_1:lp_1_kWhCounter]);;\
         fhem("setreading WB_1 lp_2_kWhCounter_init_Year ".[WB_1:lp_2_kWhCounter]);;\
        }\
     }\
  }\
}
attr Kia_eNiro_PV DbLogExclude .*
attr Kia_eNiro_PV disable 0
attr Kia_eNiro_PV group PV Eigenverbrauch-Steuerung
attr Kia_eNiro_PV icon car
attr Kia_eNiro_PV room Strom->Photovoltaik
attr Kia_eNiro_PV sortby 401
attr Kia_eNiro_PV uiTable {\
package ui_Table;;\
##  $TR{0} = "style='color:yellow;;text-align:left;;font-weight:bold;;font-size:18px'";;                                                         ## Reihe 0 für Überschrift\
  $TABLE = "style='width:100%;;'";;\
\
  $TD{0..9}{0}     = "align='center' style='font-size:16px;;border-right-style:solid;;border-color:darkgreen;;border-right-width:2px;;width:26%'";;\
\
  $TD{0..9}{1} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:1px;;width:36%;;font-weight:bold;;'";;\
  $TD{0..9}{2..4} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:1px;;width:8%;;text-align:center;;'";;\
  $TD{0..9}{5} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:2px;;width:8%;;text-align:center;;'";;\
\
sub FUNC_batt {\
    my($val)=@_;;\
    my $ret="position:absolute;;left:".(90*$val/100)."px;;width:90px;;height:20px;;background:linear-gradient( to right,#F8F8E0 ".(90-(90*$val/100))."px,rgba(0,0,0,0) ".(90-(90*$val/100))."px);;";;\
    return $ret;;\
  }\
sub FUNC_Status {\
    my($value, $min, $colorMin,  $statusMin,  $colorMiddel, $statusMiddle, $max, $colorMax, $statusMax)=@_;;\
    my $ret = ($value < $min)? '<span style="color:'.$colorMin.'">'.$statusMin.'</span>' : ($value > $max)? '<span style="color:'.$colorMax.'">'.$statusMax.'</span>' : '<span style="color:'.$colorMiddel.'">'.$statusMiddle.'</span>';;\
    return $ret;;\
  }\
sub FUNC_Status_Laden {\
   my($car)=@_;;\
   my $charge = (::ReadingsVal($car,"charging","false") eq "true");;\
   my $athome = (::ReadingsVal($car,"atHomeStanding","false") eq "true");;\
   my $chargeathome = ($charge && $athome);;\
   my $connectedathome = ($athome && ::ReadingsVal($car,"connected","false") eq "true");;\
\
   my $ret = ($chargeathome ? "lädt zu Hause" : ($connectedathome ? "angeschlossen zu Hause" : ($athome ? "zu Hause" : ($charge ? "Lädt auswärts" : "unterwegs"))));;\
   return $ret;;\
  }\
sub FUNC_tire {\
   my($car)=@_;;\
   my $ret = '<span style="color:green">Reifendruck okay</span>';;\
\
   if (::ReadingsVal($car,"status_tirePressureLamp_tirePressureLampAll","1") != 0) {\
     my $VL = (::ReadingsVal($car,"status_tirePressureLamp_tirePressureLampFL","1") eq "0")?0:1;;\
     my $HL = (::ReadingsVal($car,"status_tirePressureLamp_tirePressureLampRL","1") eq "0")?0:1;;\
     my $VR = (::ReadingsVal($car,"status_tirePressureLamp_tirePressureLampFR","1") eq "0")?0:1;;\
     my $HR = (::ReadingsVal($car,"status_tirePressureLamp_tirePressureLampRR","1") eq "0")?0:1;;\
     $ret = '<span style="color:red">Reifen Störung<br>';;\
     if ($VL == 1){$ret.=' /VL'};;\
     if ($VR == 1){$ret.=' /VR'};;\
     if ($HL == 1){$ret.=' /HL'};;\
     if ($HR == 1){$ret.=' /HR'};;\
     $ret = $ret.'</span>';;\
   }\
   return $ret;;\
  }\
sub FUNC_door {\
   my($car)=@_;;\
   my $ret = '<span style="color:green">Türen okay<br></span>';;\
\
   if (::ReadingsVal($car,"status_doorLock","false") ne "true") {\
     my $VL = (::ReadingsVal($car,"status_doorOpen_frontLeft",1) == 0)?0:1;;\
     my $HL = (::ReadingsVal($car,"status_doorOpen_backLeft",1) == 0)?0:1;;\
     my $VR = (::ReadingsVal($car,"status_doorOpen_frontRight",1) == 0)?0:1;;\
     my $HR = (::ReadingsVal($car,"status_doorOpen_backRight",1) == 0)?0:1;;\
     $ret = '<span style="color:red">Tür offen<br>';;\
     if ($VL == 1){$ret.=' /VL'};;\
     if ($VR == 1){$ret.=' /VR'};;\
     if ($HL == 1){$ret.=' /HL'};;\
     if ($HR == 1){$ret.=' /HR'};;\
     $ret = $ret.'</span>';;\
   }\
   if (::ReadingsVal($car,"status_trunkOpen","true") eq "true") {\
     $ret.='<span style="color:red"> Kofferraum offen</span>';;\
   }\
   if (::ReadingsVal($car,"status_hoodOpen","true") eq "true") {\
     $ret.='<span style="color:red"> Motorhaube offen</span>';;\
   }\
   return $ret;;\
  }\
}\
\
"$SELF"|"Kommando ".::ReadingsTimestamp("Kia_connect","status_time","")."<dd>Auswahl / Kommunikation / Tacho / Info Status</dd>" | widget([$SELF:ui_command_1],"uzsuDropDown,---,Status_getAll,car_lock,car_unlock")|(([Kia_connect:req_active] eq "idle")?'<span style="color:green">idle</span>' : '<span style="color:red">'.[Kia_connect:req_active].'</span>') |::round([Kia_connect:odometer_value],0)." km"|FUNC_Status_Laden("Kia_connect")\
\
|"Accu<dd>Steuerung / Target Soc / Accu Status</dd>" |widget([$SELF:ui_command_3],"uzsuDropDown,---,setChargeTargetSoc,stopCharge,startCharge")|"Target SOC".widget([Kia_connect:status_evStatus_reservChargeInfos_targetSOClist_2_targetSOClevel_target],"selectnumbers,50,10,100,0,lin")." %"|""| FUNC_Status([Kia_connect:range],150,"red",[Kia_connect:range],"orange",[Kia_connect:range],250,"green",[Kia_connect:range])." km"."<div style='border-width:2px;;border-style:solid;;border-color:gray;;position:relative;;width:90px;;height:20px;;background:linear-gradient( to right, red 0px,yellow 30px,green 50px);;'>".STY(" ",FUNC_batt([Kia_connect:batSOC])).STY(::round([Kia_connect:batSOC],0)."%","font-size:16px;;position:absolute;;top:2px;;left:30px")."</div>"\
\
|"Komfort<dd>Timer / Klima / Reifen / Türen / Accu Status 12V</dd>" |widget([$SELF:ui_timer_mode],"uzsuDropDown,Aus,heizen,kuehlen").widget([$SELF:ui_timer_Start],"time")|\
((::ReadingsVal("Abfall_Abfuhr","Kiaheizen_days",0) != 0)?"Klimatisierung<br>".[Abfall_Abfuhr:Kiaheizen_connect_date]." ".[Abfall_Abfuhr:Kiaheizen_connect_time]:(([$SELF:ui_timer_mode] ne "Aus")?"Klimatisierung<br>".[$SELF:timer_04_c04]:""))|FUNC_tire("Kia_connect")."<br>".FUNC_door("Kia_connect")|\
"12 V<div style='border-width:2px;;border-style:solid;;border-color:gray;;position:relative;;width:90px;;height:20px;;background:linear-gradient( to right, red 0px,yellow 30px,green 50px);;'>".STY(" ",FUNC_batt([Kia_connect:bat12v])).STY(::round([Kia_connect:bat12v],0)."%","font-size:16px;;position:absolute;;top:2px;;left:30px")."</div>"\
\
|"<dd> Auswahl / Temperatur / Klima Status / Temperatur innen</dd>"| widget([$SELF:ui_command_2],"uzsuDropDown,---,stopClimate,startHeating,startCooling")|\
"Heat".widget([Kia_connect:status_airTemp_value_target_Winter],"selectnumbers,20,1,27,0,lin")."°C<br>Cool".widget([Kia_connect:status_airTemp_value_target_Sommer],"selectnumbers,16,1,25,0,lin")."°C"|(([Kia_connect:status_airCtrlOn] eq "true")?'<span style="color:red">Klima läuft</span>':'<span style="color:green">Klima aus</span>')."<br>".(([Kia_connect:status_defrost] eq "true")?'Defrost ein':'Defrost aus') |"Aktuell<br>".[Kia_connect:status_airTemp_value]."°C"\
\
|"WallBox (WB_1_lp1)<dd>Lademodus / Info Status / Ladezeit / Leistung</dd>"|[WB_1:ChargeMode]."<br>".widget([$SELF:ui_command_4],"uzsuDropDown,---,SofortLaden,Min+PV,NurPV,Stop,Standby,Vorrang_EV,Vorrang_Bat,Hausspeicher_Sperren")|[WB_1:lp_1_PlugStat]." ".[WB_1:lp_1_ChargeStat]|[WB_1:lp_1_TimeRemaining]|[WB_1:lp_1_countPhasesInUse]."P ".[WB_1:lp_1_AConfigured]."A<br>".[WB_1:lp_1_W]." W"

setstate Kia_eNiro_PV 2022-01-12 13:24:24 ui_command_1 ---
setstate Kia_eNiro_PV 2022-01-10 09:18:53 ui_command_2 ---
setstate Kia_eNiro_PV 2021-11-09 07:56:54 ui_command_3 ---
setstate Kia_eNiro_PV 2022-01-12 13:02:41 ui_command_4 ---
setstate Kia_eNiro_PV 2022-01-12 13:02:41 ui_command_before_4 ---
setstate Kia_eNiro_PV 2021-11-29 09:56:58 ui_timer_Start 10:30
setstate Kia_eNiro_PV 2021-12-02 07:00:00 ui_timer_mode Aus


VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 04 November 2021, 18:00:41
Hallo zusammen,
für die Zeitsteuerung zum Klimatisieren ist mir der Gedanke gekommen es mit dem "Abfall Kalender" umzusetzen.
Dort kann man ja die Leerungen pro Tonne vorwählen und bekommt diese dann schön sequentiell angezeigt.

Wenn man nun im Kalender einen Eintrag "Kia heizen" einträgt - das Datum und die Zeit sind ja impliziet - wird im "Abfall" Device eine Gruppe von readings erzeugt.
Hier die wichtigsten:

Kiaheizen_date 05.11.2021 09:15
Kiaheizen_days 1
Kiaheizen_weekday Freitag


Mein Gedanke wäre nun einfach den Schlüssel text z.B. "Kia heizen" variabel im DOIF uiTable definierbar zu machen und dann aus dem Kalender Device das Datum und die Uhrzeit als Trigger zu nutzen.
Im DOIF Device würde dann der nächte Termin für die Klimatisierung angezeigt werden und wenn dieser vorrüber ist kommt halt der nächste.

Die komplette Pflege wäre dann am Händy im Google Kalender mit allen Merkmalen, wie z.B. Wiederholungen mit unterschiedlichen Zyklen. Man kann dann natürlich auch einzelne Einträger wieder löschen oder verschieben. Wenn man das natürlich kurzfristig machen möchte wäre natürlich ein schnellerer Abfrage Rythmus erforderlich, oder z.B. vor dem Eintreffen des nächsten Termins eine Abfrage zur Überprüfung.

Zur Vermeidung von fehl Klimatisierungen könnte man im Kalender einen Alarm für 1 Stunde vorher setzen und vor dem Eintreffen des Zeitpunktes nochmals den Kalender überprüfen.

Dies wäre auch eine sehr gute Kopplung mit einem Arbeitskalender.

Wie das angezeigt werden könnte wäre im Screenshot zu sehen und ein Deaktivieren sollte natürlich auch möglich sein.
Es ließen sich natürlich jegliche anderen Funktionen mit zusätzlichen Schlüsselworten einrichten.

Über Anregungen würde ich mich sehr freuen.
    Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 05 November 2021, 11:21:35

Ich habe mal versucht die DEFS in einen neuem FHEM und NodeRed aufzusetzen.
Bei NodeRed fehlten die eckigen Klammern.
Das müsste eigentlich so lauten:
  [
  {
        "id": "866c75dd.edd9a8",
        "type": "tab",
        "label": "Kia Connect",
        "disabled": false,
        "info": ""
    },
    {
        "id": "bb13a99d.68b8f8",
        "type": "mqtt-broker",
        "name": "mqtt_Server",
        "broker": "<IP des mqtt-broker>",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "compatmode": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "sessionExpiry": ""
    },
    {
        "id": "452a3304.58c8fc",
        "type": "bluelinky",
        "username": "<KiaUser>",
        "password": "<KiaUserPasswort>",
        "region": "EU",
        "pin": "<EurePin>",
        "vin": "<EureVIN>",
        "brand": "[kia|hyundai>"
    },
    {
        "id": "91a345fa.5757a8",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_status",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 440,
        "y": 280,
        "wires": [
            [
                "15dfb508.c6497b",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "5ad085b9.05739c",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/start_climate",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 450,
        "y": 680,
        "wires": [
            [
                "b27d74de.38c808",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "15dfb508.c6497b",
        "type": "car-status",
        "z": "866c75dd.edd9a8",
        "name": "Get status",
        "dorefresh": true,
        "parsed": false,
        "bluelinky": "452a3304.58c8fc",
        "x": 830,
        "y": 280,
        "wires": [
            [
                "cccc9476.d56dd8",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "87abdd88.8ff4d",
        "type": "car-odometer",
        "z": "866c75dd.edd9a8",
        "name": "Get car odometer",
        "bluelinky": "452a3304.58c8fc",
        "x": 850,
        "y": 200,
        "wires": [
            [
                "40d2361c.579588",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "31100f9a.40008",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "locationWrapper",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"location\": msg.payload,\n        \"error\": false\n    };\n    \n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1350,
        "y": 120,
        "wires": [
            [
                "85a07155.a0f9f",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "bea1d927.0f3908",
        "type": "car-location",
        "z": "866c75dd.edd9a8",
        "name": "Get car location",
        "bluelinky": "452a3304.58c8fc",
        "x": 840,
        "y": 120,
        "wires": [
            [
                "31100f9a.40008",
                "226ed925.607bb6"
            ]
        ]
    },
    {
        "id": "3c949d67.0d83b2",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_location",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "nl": false,
        "rap": false,
        "inputs": 0,
        "x": 450,
        "y": 120,
        "wires": [
            [
                "bea1d927.0f3908",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "cccc9476.d56dd8",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "analyseStatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    let status = msg.payload;\n    status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);\n    try{\n    status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    } catch(e) {}\n\n    let time = status.evStatus.remainTime2.atc.value/60;\n    let result = { \n                 \"batSOC\": status.evStatus.batteryStatus,\n                 \"connected\": (status.evStatus.batteryPlugin !== 0),\n                 \"charging\": status.evStatus.batteryCharge,\n                 \"targetSOC\": status.evStatus.reservChargeInfos.targetSOClist[1].targetSOClevel,\n                 \"time2targetSOC\": (Math.floor(time) + \":\" + (\"0\" + Math.floor((time % 1)*60)).slice(-2)), // h:mm\n                 \"range\": status.evStatus.drvDistance[0].rangeByFuel.totalAvailableRange.value,\n                 \"bat12v\": status.battery.batSoc\n                };\n    \n    //msg.payload = result;\n    msg.payload = {\n        \"status\": status,\n        \"error\": false\n        \n    };\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1340,
        "y": 280,
        "wires": [
            [
                "3efceea0.c81b12",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "85a07155.a0f9f",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/location",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1870,
        "y": 120,
        "wires": []
    },
    {
        "id": "3efceea0.c81b12",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/status",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1860,
        "y": 280,
        "wires": []
    },
    {
        "id": "327104fc.71e1bc",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/odometer",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 1870,
        "y": 200,
        "wires": []
    },
    {
        "id": "844a32f4.2e029",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/stop_climate",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 450,
        "y": 760,
        "wires": [
            [
                "7d3ae860.d8c9a8",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "57d91e50.7e96",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/start_charging",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 460,
        "y": 820,
        "wires": [
            [
                "6eebc52c.ee23dc",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "6029f0a0.b73e",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/stop_charging",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "nl": false,
        "rap": false,
        "inputs": 0,
        "x": 460,
        "y": 880,
        "wires": [
            [
                "84a1ae.74912e5",
                "33b1bc85.662694",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "c5ecf76c.e753c8",
        "type": "start-car",
        "z": "866c75dd.edd9a8",
        "name": "Start car",
        "bluelinky": "452a3304.58c8fc",
        "x": 1100,
        "y": 680,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "6eebc52c.ee23dc",
        "type": "start-charge",
        "z": "866c75dd.edd9a8",
        "name": "Start Charging",
        "bluelinky": "452a3304.58c8fc",
        "x": 1120,
        "y": 820,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "84a1ae.74912e5",
        "type": "stop-charge",
        "z": "866c75dd.edd9a8",
        "name": "Stop Charging",
        "bluelinky": "452a3304.58c8fc",
        "x": 1120,
        "y": 880,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "7d3ae860.d8c9a8",
        "type": "stop-car",
        "z": "866c75dd.edd9a8",
        "name": "Stop car",
        "bluelinky": "452a3304.58c8fc",
        "x": 1100,
        "y": 760,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "b27d74de.38c808",
        "type": "json",
        "z": "866c75dd.edd9a8",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": false,
        "x": 750,
        "y": 680,
        "wires": [
            [
                "c5ecf76c.e753c8",
                "33b1bc85.662694"
            ]
        ]
    },
    {
        "id": "45a6a8e6.2abfd8",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_odometer",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 460,
        "y": 200,
        "wires": [
            [
                "87abdd88.8ff4d",
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "33b1bc85.662694",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 930,
        "y": 920,
        "wires": []
    },
    {
        "id": "ce62ba4f.d86548",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/req_received",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 860,
        "y": 480,
        "wires": []
    },
    {
        "id": "1babee6c.1c2982",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/get_all",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 430,
        "y": 360,
        "wires": [
            [
                "ce62ba4f.d86548",
                "3f82a275.5a0b6e",
                "24d5e0b.3aafc2",
                "4375fbb9.00fb44"
            ]
        ]
    },
    {
        "id": "262df5dc.57916a",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1810,
        "y": 60,
        "wires": []
    },
    {
        "id": "811aa567.e89f98",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1410,
        "y": 1040,
        "wires": []
    },
    {
        "id": "3f82a275.5a0b6e",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 790,
        "y": 80,
        "wires": []
    },
    {
        "id": "24d5e0b.3aafc2",
        "type": "change",
        "z": "866c75dd.edd9a8",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "pending",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 810,
        "y": 1140,
        "wires": [
            [
                "4dd1ea4a.52f144",
                "fecad185.324f8"
            ]
        ]
    },
    {
        "id": "f487d6d6.a4d568",
        "type": "change",
        "z": "866c75dd.edd9a8",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "idle",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1810,
        "y": 1040,
        "wires": [
            [
                "4dd1ea4a.52f144",
                "fecad185.324f8"
            ]
        ]
    },
    {
        "id": "4dd1ea4a.52f144",
        "type": "mqtt out",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "bluelinky/req_active",
        "qos": "",
        "retain": "",
        "broker": "bb13a99d.68b8f8",
        "x": 2140,
        "y": 1100,
        "wires": []
    },
    {
        "id": "fecad185.324f8",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 2110,
        "y": 1160,
        "wires": []
    },
    {
        "id": "40d2361c.579588",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "odometerWrapper",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    msg.payload = { \n        \"odometer\": msg.payload,\n        \"error\": false\n        };\n\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1350,
        "y": 200,
        "wires": [
            [
                "327104fc.71e1bc",
                "262df5dc.57916a",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "226ed925.607bb6",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1130,
        "y": 80,
        "wires": []
    },
    {
        "id": "4375fbb9.00fb44",
        "type": "car-fullstatus",
        "z": "866c75dd.edd9a8",
        "name": "Get full status",
        "dorefresh": true,
        "bluelinky": "452a3304.58c8fc",
        "x": 840,
        "y": 360,
        "wires": [
            [
                "226ed925.607bb6",
                "69b6c4df.ea6bcc",
                "89681a97.9e24d8",
                "92dc3ff4.1d6e3"
            ]
        ]
    },
    {
        "id": "69b6c4df.ea6bcc",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "locationFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"location\": msg.payload.vehicleLocation,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1360,
        "y": 360,
        "wires": [
            [
                "85a07155.a0f9f",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "92dc3ff4.1d6e3",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "statusFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n    let status = msg.payload.vehicleStatus;\n    try{\n        status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);\n        status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n        status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);\n    } catch(e) {}\n\n    msg.payload = { \n        \"status\": status,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1360,
        "y": 480,
        "wires": [
            [
                "3efceea0.c81b12",
                "f487d6d6.a4d568",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "89681a97.9e24d8",
        "type": "function",
        "z": "866c75dd.edd9a8",
        "name": "odometerFromFullstatus",
        "func": "if(msg.payload.hasOwnProperty(\"body\")) {\n    msg.payload = {\"error\":true};\n    return msg;\n}\nelse {\n\n    msg.payload = { \n        \"odometer\": msg.payload.odometer,\n        \"error\": false\n    };\n    \n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1370,
        "y": 420,
        "wires": [
            [
                "327104fc.71e1bc",
                "331e5860.907808"
            ]
        ]
    },
    {
        "id": "331e5860.907808",
        "type": "debug",
        "z": "866c75dd.edd9a8",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1810,
        "y": 360,
        "wires": []
    },
    {
        "id": "aa4d220b.f7e19",
        "type": "set-chargetargets",
        "z": "866c75dd.edd9a8",
        "name": "Set charge targets",
        "bluelinky": "452a3304.58c8fc",
        "x": 1130,
        "y": 960,
        "wires": [
            [
                "811aa567.e89f98",
                "f487d6d6.a4d568"
            ]
        ]
    },
    {
        "id": "4c03338d.2f15ec",
        "type": "login",
        "z": "866c75dd.edd9a8",
        "name": "Login",
        "bluelinky": "452a3304.58c8fc",
        "x": 1230,
        "y": 1040,
        "wires": [
            [
                "811aa567.e89f98"
            ]
        ]
    },
    {
        "id": "28b868f5.16cb48",
        "type": "inject",
        "z": "866c75dd.edd9a8",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "43200",
        "crontab": "",
        "once": true,
        "onceDelay": "12",
        "topic": "",
        "payloadType": "date",
        "x": 1090,
        "y": 1040,
        "wires": [
            [
                "4c03338d.2f15ec"
            ]
        ]
    },
    {
        "id": "db9ecdb5.a9683",
        "type": "mqtt in",
        "z": "866c75dd.edd9a8",
        "name": "",
        "topic": "req/bluelinky/set_chargetargets",
        "qos": "0",
        "datatype": "auto",
        "broker": "bb13a99d.68b8f8",
        "inputs": 0,
        "x": 470,
        "y": 960,
        "wires": [
            [
                "7064a8d53256b646",
                "ce62ba4f.d86548",
                "24d5e0b.3aafc2"
            ]
        ]
    },
    {
        "id": "44155ad70c47b0dd",
        "type": "inject",
        "z": "866c75dd.edd9a8",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 240,
        "y": 320,
        "wires": [
            [
                "15dfb508.c6497b"
            ]
        ]
    },
    {
        "id": "7064a8d53256b646",
        "type": "json",
        "z": "866c75dd.edd9a8",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": false,
        "x": 750,
        "y": 960,
        "wires": [
            [
                "33b1bc85.662694",
                "aa4d220b.f7e19"
            ]
        ]
    }
]
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 05 November 2021, 12:25:28
Ja so passt es jetzt. Hast du eine Idee wegen der uiTable?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 05 November 2021, 12:48:57
Zitat von: xerion am 05 November 2021, 12:25:28
Ja so passt es jetzt. Hast du eine Idee wegen der uiTable?
Was ist mit der uiTable?
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 05 November 2021, 12:53:49
Zitat von: ch.eick am 05 November 2021, 12:48:57
Was ist mit der uiTable?
Oh sehe gerade das der Kommentar wohl beim Bearbeiten gelöscht wurde. Ich Ann die uiTable nicjt sehen muss aber dabei sagen daß ich das noch nie genutzt habe vielleicht auch Anfängerfehler.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 05 November 2021, 13:03:49
Zitat von: xerion am 05 November 2021, 12:53:49
Oh sehe gerade das der Kommentar wohl beim Bearbeiten gelöscht wurde. Ich Ann die uiTable nicht sehen muss aber dabei sagen, dass ich das noch nie genutzt habe vielleicht auch Anfängerfehler.
Das uiTable ist im Kia_eNiro_PV DOIF als Attribut gesetzt.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 05 November 2021, 13:24:08
Zitat von: ch.eick am 05 November 2021, 13:03:49
Das uiTable ist im Kia_eNiro_PV DOIF als Attribut gesetzt.
Nein das ist nicht gesetzt, das wird anscheinend beim RAW Input nicht mit übernommen.

EDIT: Über "Raw Definition" ging es aber nicht über "RAW FHEM-code" input. Komisch
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 05 November 2021, 13:29:44
Zitat von: xerion am 05 November 2021, 13:24:08
Nein das ist nicht gesetzt, das wird anscheinend beim RAW Input nicht mit übernommen.

EDIT: Über "Raw Definition" ging es aber nicht über "RAW FHEM-code" input. Komisch
Das ist mir gestern auch schon aufgefallen, da ich etwas geändert hatte und es einfach nicht aktiv wurde ???

EDIT: Ich bin schon beim Testen für die Klimatisierung über den Google Kalender...
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 05 November 2021, 18:35:07
Hallo zusammen,

ich habe da mal eine Frage, habt Ihr schon den Wert für den tatsächlichen Verbrauch auf 100 km irgendwo auslesen können?
Jetzt im Winter liegt der ja höher als im Wommer und ich möchte den tatsächlichen Verbrauch, der im Wagen angezeigt wird als Berechnungsgrundlage der openWB mitteilen.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 06 November 2021, 18:37:56
Ich habe hier nochmal einen Ausblick für die Zeitsteuerung.

Mit der Zeitangabe in der Komfort Zeile und der Auswahl im Pull Down darüber kann man den Termin Auschalten/Heizen/Kühlen.
Ist  die Zeit größer als die aktuelle Zeit findet es noch am gleichen tag statt, ist die Zeit Kleiner, so wird der Timer für den nächsten Tag eingetragen.
Im Feld daneben wird dann das Klimatisieren mit Datum und Zeit angezeigt.

Darüber hinaus kann man auch einen Termin pro Tag im Kalender eintragen.
Das ist momentan eine Besonderheit des "Abfall" Kalenders, da jede Tonne nur einmal am Tag abgeholt wird :-) :-)
Eventuell könnte man das auch über eine andere Kalenderimplementierung einbinden, jedoch denke ich wird man nicht mehrfach am Tag diese Funktionalität verwenden.

Als nächstes arbeite ich bereits daran beim SofortLaden (openWB) das Entladen des Hausspeichers zu sperren.
Das ist sicher eine ziemlich spezielle Angelegenheit, da ja jeder einen anderen WR, Speicher oder eine anderer WB hat.

VG
    Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 09 November 2021, 09:09:18
Hallo zusammen,

eigentlich sollte das "stop car" die Klimatisierung beenden, jedoch bleibt dabei wohl das "defrost" aktiv.
Ist das so normal, oder eventuell ein Fehler im Bluelinky?

Beim Start wird ja dieses JSON übergeben, beim Stop habe ich das jedoch nicht gefunden.

{"defrost": true, "windscreenHeating": true, "temperature": 23 , "unit": "C"}


Nun wäre ein Gedanke vor dem Stop nochmals ein Start mit jeweils "false" zu senden und anschließend dann das Stop.

Aufgefallen ist es mir bei meinen Tests, da beim Status natürlich das defrost noch auf true steht.
Steigt man jedoch ins Auto ein ist es wirklich noch aktiv, wird jedoch dann von der Klimaautomatik anschließend runter geregelt.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 11 November 2021, 18:29:23
Hallo zusammen,

kennt jemand die Struktur für das "set - navigation" ?
Wie muss da das json aussehen? im github von bluelinky habe ich da nichts gefunden.

"Tripinfo" und "monthly report" klappt auch, da weiß ich nur nicht wie ich das json aus dem node-red zum FHEM schicken kann.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 12 November 2021, 09:58:10
EDIT: Das ist echt merkwürdig. Ich glaube die Berechnung funktioniert nur für positive Temperatur Werte :-) Laut Wikipedia ist die Umrechnungsformel auch eine ganz andere.
status_airTemp_value 22

Moin, und noch eine Frage :-)

Die Umwandlung der AirTemp bringt immer als Wert 15, was nicht so ganz stimmen kann :-)

Im node-red wird eine 02H ausgelesen und dann irgend wie mit dieser Berechnung in Grad Celsius umgerechnet.
Nach dem was ich meine zu verstehen wird das airTemp Register mit Hexadecimal 02 gelesen und dann in Integer gewandelt und durch 2 geteilt. Das Ergebnis dann + 14

Somit wäre das
(0000 0000 0000 0010) H = 2 dez
2/2 = 1
14 +1 = 15

status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);
status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);
status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);

Also entweder wird das falsche Register gelesen, oder die Berechnung stimmt nicht.

Kann mir da jemand weiter helfen?

Ich würde gerne die Standheizung nur ab einer bestimmten Temperatur im Auto starten lassen.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 23 November 2021, 16:05:11
Hey zusammen

ich habe mal hier openWB mit Kia connect (https://wiki.fhem.de/wiki/OpenWB#Komplexe_Anbindung) ein Anwendungsbeispiel abgelegt.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 07 Dezember 2021, 16:55:40
Hallo zusammen,
ich habe leider immer noch das Problem, dass die

status_airTemp_value 15

leider falsch angezeigt wird. Das scheint etwas im node-red Flow nicht richtig berechnet zu werden.
Wenn das Auto aufgeheizt ist, dann werden auch mal 21° angezeigt, ansonsten jedoch immer 15°, was jetzt im Winter eher unwarscheinlich ist.

Könnte mir da jend eventuell helfen?
VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 12 Januar 2022, 13:19:32
Hallo zusammen,
ich habe gerade mal ein Update gemacht.

Kia Connect und openWB (https://forum.fhem.de/index.php/topic,116175.msg1184265.html#msg1184265)
und hier das DOIF (https://forum.fhem.de/index.php/topic,116175.msg1184267.html#msg1184267)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 12 Januar 2022, 13:47:04
Und nochmal ich :-)

Es besteht nach wie vor die nach meiner Meining fehlerhafte Temperaturanzeige

Das ist aus dem node-red Flow aus der Funktion analyseStatus()

else {
    let status = msg.payload;
    status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);
    try{
    status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);
    status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);
    } catch(e) {}


Das WEB sagt zu Farenheit zu Celsius
Zitat
(32 °F − 32) × 5/9 = 0 °C

Aber die Formel kann ich da nicht erkennen. Könnte mir da jemand weiter helfen?

VG  Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 07 Februar 2022, 10:55:02
Hallo zusammen,
seit gestern Nacht kann sich bei mir bluelinky nicht mehr anmelden.

Register request has failed with Error=PHONE_REGISTRATION_ERROR
Retry... 1
Register request has failed with Error=PHONE_REGISTRATION_ERROR
Retry... 2

Da hatte Hyundai wohl schon mal ein Aussperren von nicht gewünschten Apps vor einem Jahr gemacht.
Habt Ihr das auch bereits bemerkt? Oder liege ich da falsch?
Eine Abfrage vom Handy funktioniert problemlos.

Gruß
    Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 07 Februar 2022, 11:58:11
Zitat von: ch.eick am 07 Februar 2022, 10:55:02
Hallo zusammen,
seit gestern Nacht kann sich bei mir bluelinky nicht mehr anmelden.

Da bist du nicht der Einzige. ;-/
Scheint ein generelles Problem mit dem Bluelink-Server oder dem Bluelinky-Zugang zu sein. Die Entwickler sind dran.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: boxana am 07 Februar 2022, 18:17:37
wird es da ene officielle lösüng für geben?

gruss Chrisitan
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 07 Februar 2022, 19:24:25
Zitat von: boxana am 07 Februar 2022, 18:17:37
wird es da ene officielle lösüng für geben?
Beim letzten mal hatten sie eine Lösung gefunden :-) Also nach dem Fix das bluelinky aktualisieren...
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: PatrickR am 07 Februar 2022, 21:43:34
Hi!

Zitat von: mnl1234 am 07 Februar 2022, 11:58:11
Die Entwickler sind dran.
Gibt's da eine Issue im Github oder kann man irgendwo anders sehen, was passiert?

/Edit:
Huch, gerade geht es wieder. Hatte die PIN hin und zurück geändert aber vermutlich hat das nichts mit der Lösung zu tun. Wie schaut es bei Euch aus?

Patrick
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: boxana am 08 Februar 2022, 09:10:35
Zitat von: PatrickR am 07 Februar 2022, 21:43:34
Hi!
Gibt's da eine Issue im Github oder kann man irgendwo anders sehen, was passiert?

/Edit:
Huch, gerade geht es wieder. Hatte die PIN hin und zurück geändert aber vermutlich hat das nichts mit der Lösung zu tun. Wie schaut es bei Euch aus?

Patrick

Was hast du wie gemacht?
Bei mir geht es weiterhin nicht.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 08 Februar 2022, 10:02:17
Zitat von: ch.eick am 12 Januar 2022, 13:47:04
Und nochmal ich :-)

Es besteht nach wie vor die nach meiner Meining fehlerhafte Temperaturanzeige

Das ist aus dem node-red Flow aus der Funktion analyseStatus()

else {
    let status = msg.payload;
    status.airTemp.value = 14+(parseInt(status.airTemp.value,16)/2);
    try{
    status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reservChargeInfo.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);
    status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value = 14+(parseInt(status.evStatus.reservChargeInfos.reserveChargeInfo2.reservChargeInfoDetail.reservFatcSet.airTemp.value,16)/2);
    } catch(e) {}


Das WEB sagt zu Farenheit zu Celsius
Aber die Formel kann ich da nicht erkennen. Könnte mir da jemand weiter helfen?

VG  Christian

Da hat noch keiner geantwortet.
Das ist keine Umrechnung von Fahrenheit auf Celsius sondern hat was mit der Hyundai/Kia internen Repräsentzation des Werts zu tun.

Das ist ein Hex-Wert in 0,5°C-Schritten und einem Offset von 14.

Also wenn 02H kommt, also 0x02, sind das dezimal 2, also 15°C.
Der Wert 03H ist dann 15,5°C usw.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: mnl1234 am 08 Februar 2022, 10:03:38
Zitat von: boxana am 08 Februar 2022, 09:10:35
Was hast du wie gemacht?
Bei mir geht es weiterhin nicht.

Bei mir nur sporadisch. Es scheint so zu sein, dass Bluelink was umgestellt hat und jetzt alle 15 Minuten neue Client-IDs generiert werden müssen. Das ist seit gestern Abend gefixt, aber NPN hats noch nicht angezogen.
Wäre dann Bluelinky Version 7.6.3
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 08 Februar 2022, 11:41:53
Zitat von: boxana am 08 Februar 2022, 09:10:35
Was hast du wie gemacht?
Bei mir geht es weiterhin nicht.
Bei mir auch noch nicht
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 08 Februar 2022, 16:17:20
Zitat von: ch.eick am 08 Februar 2022, 11:41:53
Bei mir auch noch nicht
Okay, der Patch scheint zu funktionieren.

Ich betreibe bluelinky in einem node-red Container und habe im Container folgendes gemacht.

npm uninstall node-red-contrib-bluelinky
npm install node-red-contrib-bluelinky
Dann einen Neustart des Containers

Ich denke das war die harte Tour und man könnte es sicher auch anders machen.

Falls jemand meine Implementierung in FHEM verwendet und dort der Zustand des Kia_connect Devices auf "pending" steht, kann man im Device einfach ein set getStatus auslösen.
Das stößt eine neue Abfrage an und setzt das req_active wieder auf den richtigen wert.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: PatrickR am 08 Februar 2022, 21:38:51
Zitat von: mnl1234 am 08 Februar 2022, 10:03:38
Bei mir nur sporadisch.
Stimmt leider. Funktionierte die ersten Male gut aber nach 20 Minuten war der Spuk dann wieder vorbei.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: PatrickR am 08 Februar 2022, 21:46:36
Hi!

Zitat von: ch.eick am 08 Februar 2022, 16:17:20
Ich betreibe bluelinky in einem node-red Container und habe im Container folgendes gemacht.

npm uninstall node-red-contrib-bluelinky
npm install node-red-contrib-bluelinky
Dann einen Neustart des Containers

Ich denke das war die harte Tour und man könnte es sicher auch anders machen.
Da ich ungefähr 0 Erfahrung mit npm habe: Spricht irgendwas gegen

npm install bluelinky

Das hat bei mir bluelinky auf 7.6.4 hochgezogen.

Patrick
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 09 Februar 2022, 10:12:11
Hallo,
nach meinem installieren der aktuellsten Version läuft es wieder stabiel.
Zitat von: PatrickR am 08 Februar 2022, 21:46:36
Da ich ungefähr 0 Erfahrung mit npm habe: Spricht irgendwas gegen

npm install bluelinky

Das hat bei mir bluelinky auf 7.6.4 hochgezogen.
Okay, dann brauche ich ja beim nächsten mal auch nur das npm install zu machen.
Da es bei mir im node-red läuft hat das Paket einen anderen Namen.

Gruß
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: PatrickR am 09 Februar 2022, 12:22:11
Hi!

Nach dem Update auf 7.6.4 bekomme ich nach einiger Zeit leider wieder Fehler, dann später wieder - ohne weitere Änderungen - Werte:


ManagedBluelinkyError: @EuropeVehicle.fullStatus: [401] Unauthorized on [GET] https://prd.eu-ccapi.hyundai.com:8080/api/v2/spa/vehicles/XXX/latest - {"retCode":"F","resCode":"4017","resMsg":"Invalid request value - Invalid Application Id. - YYY","msgId":"ZZZ"}


Offenbar wurde in 7.6.3 das Stamp-Generation-Intervall auf 15 Minuten gesetzt, in 7.6.4 dann auf 4 Stunden.

/Edit:
So wie es aussieht, scheint npm install bluelinky@2.6.3 zwar die entsprechende Version zu installieren, node-red-contrib-bluelinky aber weiterhin die "aktuelle" Version zu verwenden:

+-- node-red-contrib-bluelinky@0.0.27
| `-- bluelinky@7.6.4

Gibt es da einen eleganten Trick, wie ich temporär und testweise die 7.6.3 verwenden kann?

/Edit 2:
Ok, erledigt. Repo gecloned, package.json editiert und Paket installiert. Mal sehen, ob es nun länger läuft...

Patrick
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 09 Februar 2022, 15:13:08
Zitat von: PatrickR am 09 Februar 2022, 12:22:11
Hi!

Nach dem Update auf 7.6.4 bekomme ich nach einiger Zeit leider wieder Fehler, dann später wieder - ohne weitere Änderungen - Werte:

Offenbar wurde in 7.6.3 das Stamp-Generation-Intervall auf 15 Minuten gesetzt, in 7.6.4 dann auf 4 Stunden.

/Edit:
So wie es aussieht, scheint npm install bluelinky@2.6.3 zwar die entsprechende Version zu installieren, node-red-contrib-bluelinky aber weiterhin die "aktuelle" Version zu verwenden:

+-- node-red-contrib-bluelinky@0.0.27
| `-- bluelinky@7.6.4

Gibt es da einen eleganten Trick, wie ich temporär und testweise die 7.6.3 verwenden kann?

/Edit 2:
Ok, erledigt. Repo gecloned, package.json editiert und Paket installiert. Mal sehen, ob es nun länger läuft...
Hallo,
wie kann ich denn die Version abfragen?
Bei mir wird ja wohl die latest gezogen.
VG
  Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: PatrickR am 09 Februar 2022, 15:27:17
Hi!

Zitat von: ch.eick am 09 Februar 2022, 15:13:08
wie kann ich denn die Version abfragen?
npm ls
Ggf. vorher noch in das richtige Verzeichnis gehen, bei einem Docker-Container z. B. in /data

Patrick
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 09 Februar 2022, 17:04:39
Zitat von: PatrickR am 09 Februar 2022, 15:27:17
Hi!
npm ls
Ggf. vorher noch in das richtige Verzeichnis gehen, bei einem Docker-Container z. B. in /data

Patrick
Okay, Danke

-- node-red-contrib-bluelinky@0.0.27
  `-- bluelinky@7.6.3

Damit läuft es noch immer stabiel.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: PatrickR am 09 Februar 2022, 17:26:04
Hi!

Zitat von: ch.eick am 09 Februar 2022, 17:04:39

-- node-red-contrib-bluelinky@0.0.27
  `-- bluelinky@7.6.3

Damit läuft es noch immer stabiel.
Bei mir sieht es mit der 7.6.3 auch bislang gut aus. Mit der 7.6.4 gab es nach einiger Zeit Fehlermeldungen. Werde das beobachten.

Patrick
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: tomahawk2015 am 22 Mai 2022, 07:35:58
Hallo,
ich versuche mich auch seit letzter Woche an dem Thema, erstmal nur in node-red mit Inject und Debug und ohne
das Drumherum. Ich kann auch schon kommunizieren und Dinge wie Location, Status abfragen.
Ich würde nun gerne noch Fahrten wegschreiben und dafür gibt es ja den Node get-tripinfo.
Hier erhalte ich aber mit einfachem Timestamp-Inject die Meldung ""TypeError: Cannot read property 'toString' of undefined".
Ich vermute mal, das liegt daran, dass man einen Tag/Monat (und eventuell einen weiteren Parameter für die Form des Reports)
mitgeben muss, siehe auch
https://github.com/Hacksore/bluelinky/issues/126
Ich habe auch schonmal in dem Inject herumgespielt mit Topic/Payload aber irgendwie klappt
das noch nicht. Kann mir eventuell jemand sagen, wie das korrekte Format auszusehen hat,
eventuell auch direkt im Inject-Node? Ich habe auch mal in den anderen Codeschnipseln
geschaut (FHEM, EVCC und es gab ja auch schon ein Besipiel in einem Flow im Wiki mit JSON, funktioniert das?) aber irgendwie keinen Wert
gefunden, der da möglicherweise übergeben wird.


Vielen Dank!
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 22 Mai 2022, 09:20:06
Zitat von: tomahawk2015 am 22 Mai 2022, 07:35:58
Hallo,
ich versuche mich auch seit letzter Woche an dem Thema, erstmal nur in node-red mit Inject und Debug und ohne
das Drumherum. Ich kann auch schon kommunizieren und Dinge wie Location, Status abfragen.
Ich würde nun gerne noch Fahrten wegschreiben und dafür gibt es ja den Node get-tripinfo.
Hier erhalte ich aber mit einfachem Timestamp-Inject die Meldung ""TypeError: Cannot read property 'toString' of undefined".
Ich vermute mal, das liegt daran, dass man einen Tag/Monat (und eventuell einen weiteren Parameter für die Form des Reports)
mitgeben muss, siehe auch
Moin,
das würde mich auch interessieren, könntest Du mir Deine Definitionen mal hier anhängen, dann schaue ich mir das auch mal an.
Die Grunddeffinitionen funktionieren für den Kia eNiro ja bereits.

Ich habe noch ein zusätzliches Problem mit der Temperatur, da scheint die Umrechnung zwischen Farenheit und Celsius nicht richtig zu sein. Das hatte ich glaube ich auch schon mal hier geschrieben :-(

Gruß Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: tomahawk2015 am 22 Mai 2022, 10:37:15
Hallo,

ich hängs mal als Screenshot an. Laut dem vorher verlinkten Github Issue bin ich mal von folgenden Übergabeparametern ausgegangen:
setTripMonth:202205 (Topic:Payload, jewils als String)
tripPeriodType:0 (Topic:Payload, String bzw. Number)
Alternativ kann man anscheinend setzen
setTripDay:20220521 (Topic:Payload, jewils als String)
tripPeriodType:1 (Topic:Payload, String bzw. Number)
und erhält dann eine Tagesauswertung.
Wobei man ja eigentlich alles in einem Inject übergeben müsste aber das habe ich nicht hinbekommen, in einem Inject Day und PeriodType gleichzeitig zu übergeben,
wie gesagt stecke da bei Node-red im Anfangsstadium. Die Fehlermeldung ist immer dieselbe wie in meinem ersten Post.
Später würde ich natürlich alles auch per FHEM machen wollen, vielleicht es auf dem Wege sogar einfacher per MQTT, keine Ahnung.
Leider ist die Doku ja sehr spärlich, eventuell kriegt man es zusammen hin :-)

VG Thorsten

Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 22 Mai 2022, 10:54:40
Zitat von: tomahawk2015 am 22 Mai 2022, 10:37:15
Hallo,

ich hängs mal als Screenshot an. Laut dem vorher verlinkten Github Issue bin ich mal von folgenden Übergabeparametern ausgegangen:
setTripMonth:202205 (Topic:Payload, jewils als String)
tripPeriodType:0 (Topic:Payload, String bzw. Number)
Alternativ kann man anscheinend setzen
setTripDay:20220521 (Topic:Payload, jewils als String)
tripPeriodType:1 (Topic:Payload, String bzw. Number)
und erhält dann eine Tagesauswertung.
Wobei man ja eigentlich alles in einem Inject übergeben müsste aber das habe ich nicht hinbekommen, in einem Inject Day und PeriodType gleichzeitig zu übergeben,
wie gesagt stecke da bei Node-red im Anfangsstadium. Die Fehlermeldung ist immer dieselbe wie in meinem ersten Post.
Später würde ich natürlich alles auch per FHEM machen wollen, vielleicht es auf dem Wege sogar einfacher per MQTT, keine Ahnung.
Leider ist die Doku ja sehr spärlich, eventuell kriegt man es zusammen hin :-)

VG Thorsten
Hallo Torsten,
in meinem Node-RED ist bereits etwas drin, was ich aber noch nicht verwendet habe. Siehe Bild 1.
Dort habe ich einfach mal auf das Inject geklickt, was im Debug dann zu sehen ist.
Der Pfad mit dem JSON scheint über FHEM wahlweise durchlaufen zu werden. aber da müsste man im FHEM das JSON noch eingeben. Ein reines set ohne payload führt zu der zweiten Meldung im Debug.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 22 Mai 2022, 17:41:02
Hallo Thorsten,
ich habe jetzt mal etwas experimentiert und den node-RED Flow noch verändert. Beim JSON Objekt war anscheinend die Konvertierung bei mir falsch. Die habe ich jetzt auf JavaScript-Object gesetzt. Dann ist noch das MQTT am Ende dazu gekommen und ich bekomme nun die ersten readings.

set Kia_connect getTripinfo {"year": 2022, "month": 5, "day": 21}

2022-05-22 17:25:00   1_tripsCount    6
     2022-05-22 17:25:00   1_trips_1_distance 3
     2022-05-22 17:25:00   1_trips_1_durations_drive 7
     2022-05-22 17:25:00   1_trips_1_durations_idle 1
     2022-05-22 17:25:00   1_trips_1_end   2022-05-21T05:46:39.000Z
     2022-05-22 17:25:00   1_trips_1_speed_avg 38
     2022-05-22 17:25:00   1_trips_1_speed_max 83
     2022-05-22 17:25:00   1_trips_1_start 2022-05-21T05:39:39.000Z
     2022-05-22 17:25:00   1_trips_1_timeRaw 073939
     2022-05-22 17:25:00   1_trips_2_distance 3
     2022-05-22 17:25:00   1_trips_2_durations_drive 6
     2022-05-22 17:25:00   1_trips_2_durations_idle 1
     2022-05-22 17:25:00   1_trips_2_end   2022-05-21T04:48:19.000Z
     2022-05-22 17:25:00   1_trips_2_speed_avg 41
     2022-05-22 17:25:00   1_trips_2_speed_max 91
     2022-05-22 17:25:00   1_trips_2_start 2022-05-21T04:42:19.000Z
     2022-05-22 17:25:00   1_trips_2_timeRaw 064219
     2022-05-22 17:25:00   1_trips_3_distance 0
     2022-05-22 17:25:00   1_trips_3_durations_drive 1
     2022-05-22 17:25:00   1_trips_3_durations_idle 1
     2022-05-22 17:25:00   1_trips_3_end   2022-05-21T04:23:33.000Z
     2022-05-22 17:25:00   1_trips_3_speed_avg 0
     2022-05-22 17:25:00   1_trips_3_speed_max 0
     2022-05-22 17:25:00   1_trips_3_start 2022-05-21T04:22:33.000Z
     2022-05-22 17:25:00   1_trips_3_timeRaw 062233
     2022-05-22 17:25:00   1_trips_4_distance 0
     2022-05-22 17:25:00   1_trips_4_durations_drive 3
     2022-05-22 17:25:00   1_trips_4_durations_idle 0
     2022-05-22 17:25:00   1_trips_4_end   2022-05-21T04:22:45.000Z
     2022-05-22 17:25:00   1_trips_4_speed_avg 23
     2022-05-22 17:25:00   1_trips_4_speed_max 49
     2022-05-22 17:25:00   1_trips_4_start 2022-05-21T04:19:45.000Z
     2022-05-22 17:25:00   1_trips_4_timeRaw 061945
     2022-05-22 17:25:00   1_trips_5_distance 0
     2022-05-22 17:25:00   1_trips_5_durations_drive 2
     2022-05-22 17:25:00   1_trips_5_durations_idle 0
     2022-05-22 17:25:00   1_trips_5_end   2022-05-21T04:07:47.000Z
     2022-05-22 17:25:00   1_trips_5_speed_avg 24
     2022-05-22 17:25:00   1_trips_5_speed_max 43
     2022-05-22 17:25:00   1_trips_5_start 2022-05-21T04:05:47.000Z
     2022-05-22 17:25:00   1_trips_5_timeRaw 060547
     2022-05-22 17:25:00   1_trips_6_distance 0
     2022-05-22 17:25:00   1_trips_6_durations_drive 0
     2022-05-22 17:25:00   1_trips_6_durations_idle 0
     2022-05-22 17:25:00   1_trips_6_end   2022-05-21T04:04:57.000Z
     2022-05-22 17:25:00   1_trips_6_speed_avg 2
     2022-05-22 17:25:00   1_trips_6_speed_max 7
     2022-05-22 17:25:00   1_trips_6_start 2022-05-21T04:04:57.000Z
     2022-05-22 17:25:00   1_trips_6_timeRaw 060457

Für mehr habe ich jetzt gerade keine Zeit ;-)
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: tomahawk2015 am 24 Mai 2022, 11:25:45
Hallo Christian,

vielen Dank für Deinen Input, das ist ja eigentlich schon die fertige Lösung. Ich habe alles soweit nachvollziehen können inklusive der Einbindung in FHEM. Eine Frage interessehalbe hätte ich aber noch,
an welcher Stelle hast Du die zu übergebenden Parameter (Year,Month,Day) dokumentiert gefunden? Ich meine, sie sind natürlich nachvollziehbar aber den einzigen Hinweis auf das Übergabeformat
hatte ich in besagtem Github Issue gefunden und da war ja von einem Format YYYYMMDD die Rede...diese Funktionalität gettripinfo find ich nach wie vor nirgendwo dokumentiert? Kann man das
irgendwie aus dem Node get-tripinfo extrahieren, mit welchen Parametern die arbeitet?

VG

Thorsten
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 24 Mai 2022, 13:08:24
Zitat von: tomahawk2015 am 24 Mai 2022, 11:25:45
Hallo Christian,

vielen Dank für Deinen Input, das ist ja eigentlich schon die fertige Lösung. Ich habe alles soweit nachvollziehen können inklusive der Einbindung in FHEM. Eine Frage interessehalbe hätte ich aber noch,
an welcher Stelle hast Du die zu übergebenden Parameter (Year,Month,Day) dokumentiert gefunden? Ich meine, sie sind natürlich nachvollziehbar aber den einzigen Hinweis auf das Übergabeformat
hatte ich in besagtem Github Issue gefunden und da war ja von einem Format YYYYMMDD die Rede...diese Funktionalität gettripinfo find ich nach wie vor nirgendwo dokumentiert? Kann man das
irgendwie aus dem Node get-tripinfo extrahieren, mit welchen Parametern die arbeitet?
Hallo Torsten,
den ganzen Flow hatte ich hier irgendwo auch schon mal gepostet, es war aber noch ein Fehler drin, da ich das ja auch nur übernommen hatte und die Trip geschichte dort nur begonnen war.

Wenn Du auf das Objekt Tripinfo klickst, wird es recht im Node-RED angezeigt. Dort auf Hilfe-zeigen, was dann etwas das JSON erläutert.
Das mqtt-out hatte ich noch hinzugefügt und im FHEM das redingList erweitert. Die readings werden jedoch noch nicht schön gruppiert, das schaue ich mir nach dem Urlaub mal an, oder es hilft noch jemand anderes, da ich mgtt und Node-RED auch nur experimentell bearbeiten kann :-) Der Output von Kia muss ja auch noch vernünftig interpretiert werden, damit man damit etwas anfangen kann.

Und wie gesagt, die Temperaturanzeige scheint auch noch falsch berechnet zu werden.
So wie ich das gezählt habe sind wir bereits 6-7 Kia Nutzer in FHEM, somit wird sich sicherlich noch etwas bewegen.

VG
   Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 20 Februar 2023, 12:45:44
Hallo zusammen,
habt Ihr in den letzten tagen auch mal wieder Probleme bei der Kia Abfrage?

VG  Christian
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 20 Februar 2023, 13:19:29
Zitat von: ch.eick am 20 Februar 2023, 12:45:44
Hallo zusammen,
habt Ihr in den letzten tagen auch mal wieder Probleme bei der Kia Abfrage?

VG  Christian
Aktuell habe ich auch Probleme, aber nicht nur mit Bluelinky sondern auch direkt in der Kia Connect App.
Titel: Antw:E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 20 Februar 2023, 15:01:05
Zitat von: xerion am 20 Februar 2023, 13:19:29
Aktuell habe ich auch Probleme, aber nicht nur mit Bluelinky sondern auch direkt in der Kia Connect App.
Okay, dann brauchen wir ja nicht bei uns zu suchen. Ich hab bei Kia ein Ticket über die App aufgemacht ;-)

EDIT: 15:00 Uhr Ich glaube die basteln da wieder rum :-( , mal geht es, mal kommt nix.
  Aber egal, die 32 kWh Überschuss sind im Auto :-)
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: tomahawk2015 am 05 April 2023, 18:09:27
Hallo,

aktuell erhalte ich beim Login über Bluelinky (Hyundai) folgende Fehlermeldung:
"@EuropeController.login: sign in with EuropeanBrandAuthStrategy failed with error Error: @EuropeanBrandAuthStrategy.login: Cannot find the argument userId in https://prd.eu-ccapi.hyundai.com:8080/web/v1/user/integration/auth?&locale=en.
        Please use the following url and connect from a browser, it may probably ask you to "Change your password" or "Accept the new conditions"
        Once done, try again".

Dann kommt eine lange url mit einem Login, wenn ich da die Daten eingebe, kommt eine leere Seite.

Ich habe mich ehrlich gesagt auch noch nie per Browser eingeloggt, immer nur per Hyundai App, was auch noch normal funktioniert. Bisher nirgendwo
ein Hinweis auf aktuelle Bedingungen.
Habe die aktuellste bluelinky Version in Benutzung (0.0.30). Das ganze seit dem 1. April...

Hat das Problem noch jemand bzw. funktioniert der Login mit Hyundai Bluelink Daten generell noch?

Danke + VG
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: Rewe2000 am 06 April 2023, 15:27:42
Hallo tomahawk2015,

Du bist nicht allein.

https://forum.fhem.de/index.php?topic=118822.msg1271135#msg1271135 (https://forum.fhem.de/index.php?topic=118822.msg1271135#msg1271135)

Gruß Reinhard
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 27 April 2023, 13:00:34
Moin,
ich habe ja hier schon das Bluelinky mit openWB in einem Device gekoppelt dargestellt.
Dazu habe ich hier mal wieder was geschrieben. (https://forum.fhem.de/index.php?msg=1274051)

VG  Christian
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 30 Juni 2023, 17:42:26
Hallo zusammen,
nach einer Störung zwischen Kia und dem Dienstleister Vodafone (für Kia) lief zuerst meine App auf dem Handy in einen Netzwerk Fehler.
Bluelinky ging dann natürlich auch nicht mehr.

In der App auf dem Handy läuft es jetzt wieder, jedoch kann sich Bluelinky immer noch nicht verbinden.
Hat da noch jemand eine Idee, eventuell wo man in dem Node-Red Flow etwas sehen kann?

VG   Christian
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: xerion am 30 Juni 2023, 21:40:34
Es gibt aktuell wieder Probleme bei der Anmeldung. Hyundai/Kia haben das wohl wieder angepasst. App Id wurde wohl geändert wird aktuell in vielen Foren diskutiert. Es gibt aber schon Issues im Github Projekt von Bluelinky. Wir müssen einfach (mal wieder) warten.
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 01 Juli 2023, 07:21:42
Zitat von: xerion am 30 Juni 2023, 21:40:34Es gibt aktuell wieder Probleme bei der Anmeldung. Hyundai/Kia haben das wohl wieder angepasst. App Id wurde wohl geändert wird aktuell in vielen Foren diskutiert. Es gibt aber schon Issues im Github Projekt von Bluelinky. Wir müssen einfach (mal wieder) warten.
Sorry, das hatte ich im github noch nicht gefunden.
Warten gehört nicht immer zu meiner Kernkompetenz ;D
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: Rewe2000 am 06 Juli 2023, 10:18:29
Hallo,

seit ihr schon wieder einen Schritt weiter mit der KIA Abfrage?
Klappt die Abfrage mittlerweile wieder? Bei mir kommt seit 28.06.2023 um 23:00 Uhr nichts mehr.

Ein aktuelles Update (Linux und Bluelinky) habe ich gemacht, frage ich unter der Linux Console node kia.js kommt aktuell keine Rückantwort und auch kein Fehler.
Irgendwie finde ich dieses Mal keine Lösung damit die Abfrage wieder funktioniert.
Mein Linux Wissen und mein Englisch ist auch nicht so gut, dass ich dies alleine schaffen würde.

Gruß Reinhard
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 06 Juli 2023, 14:35:23
Zitat von: Rewe2000 am 06 Juli 2023, 10:18:29Seit ihr schon wieder einen Schritt weiter mit der KIA Abfrage?
Klappt die Abfrage mittlerweile wieder? Bei mir kommt seit 28.06.2023 um 23:00 Uhr nichts mehr.

Ein aktuelles Update (Linux und Bluelinky) habe ich gemacht, frage ich unter der Linux Console node kia.js kommt aktuell keine Rückantwort und auch kein Fehler.
Irgendwie finde ich dieses Mal keine Lösung damit die Abfrage wieder funktioniert.
Hallo Reinhard,
im Node-red wird bereits daran gearbeitet und für Hyundai scheint es da schon etwas zu geben. Es ist jedoch noch keine neue Version bereit gestellt worden. Das Issue ist noch offen.
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 07 Juli 2023, 13:04:50
Hallo zusammen,
um für Kia die Verbindung wieder herzustellen muss man dieser Anleitung folgen (https://github.com/SondreNjaastad/node-red-contrib-bluelinky#what-to-do-when-bluelinky-is-updated). Danach hat es bei mir wieder funktioniert, jedoch ist die Palett Version von node-red-contrib-bluelinky 0.0.30 die selbe wie vorher. Es wird wohl nur im Hintergrund beim Löschen und wieder neu Installieren ein andes Paket aktualisiert, wo die Korrektur drin ist.

VG  Christian
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: Rewe2000 am 08 Juli 2023, 18:00:02
Hallo Christian,

irgendwie bekomme ich keine Daten vom Server, so wie es für mich aussieht sollte der Login mit meinen Benutzerdaten klappen.
Gebe ich direkt auf der Linux Kommandozeile den Abfrageaufruf:
reinhard@Fhem-Bullseye-SSD:~/bluelinky $ cd /home/reinhard/bluelinky
reinhard@Fhem-Bullseye-SSD:~/bluelinky $ node kia.js
reinhard@Fhem-Bullseye-SSD:~/bluelinky $

ein, so kommt überhaupt keine Rückmeldung. Nur die App am Android Handy stellt sich von Deutsch wieder auf Englisch zurück.
Schreibe ich den Usernamen in den Anmeldedaten falsch, so wird ein Fehler angezeigt, das sollte ja auch erwartet werden.

Ich verwende bei Bluelinky die aktuelle Version 8.1.1 und für node und npm folgende Versionen:
reinhard@Fhem-Bullseye-SSD:~/bluelinky $ node -v
v19.9.0
reinhard@Fhem-Bullseye-SSD:~/bluelinky $ npm -v
9.6.3

Linux Bullsey selbst ist aktuell.

Meine kia.js Datei sieht wie folgt aus:
const BlueLinky = require('bluelinky');
const MQTT = require("async-mqtt");

const client = new BlueLinky({
  username: 'Benutzername',
  password: 'Passwort',
  brand: 'kia',
  region: 'EU',
  pin: 'Geheim'
});

client.on('ready', async () => {
  const vehicle = client.getVehicle('Fahrgestellnummer');
  try {
    const odo = await vehicle.odometer();
    console.log(odo);
    const status = await vehicle.status({ parsed: false, refresh: true });
    console.log(status);
    const location = await vehicle.location();
    console.log(location);

    const mqttClient = await MQTT.connectAsync("mqtt://127.0.0.1:1883", { username:"Benutzer-Raspi", password:"Passwort-Raspi" })
    console.log("Sending to MQTT server");
    if ((status.evStatus.batteryStatus > 0) && (odo.value > 0)) {  // wird gelegentlich falsch mit 0 ausgelesen, dann nicht senden
        try {
                var options={
                retain:true,
                qos:1};
                await mqttClient.publish(
                   "BluelinkCarStatus/Fahrgestellnummer",
                   JSON.stringify({
                     odo: odo.value,
                     soc: status.evStatus.batteryStatus,
                     range: status.evStatus.drvDistance[0].rangeByFuel.evModeRange.value,
                     locked: status.doorLock,
                     battery12V: status.battery.batSoc,
                     longitude: location.longitude,
                     latitude: location.latitude,
                   }),options
                );

                // This line doesn't run until the server responds to the publish
                await mqttClient.end();
                // This line doesn't run until the client has disconnected without error
                console.log("mqtt call Done");
        } catch (e){
                // Do something about it!
                console.log(e.stack);
                process.exit();
        }
    } // if
  } catch (err) {
    // log the error from the command invocation
  }
});

client.on('error', async (err) => {
  // something went wrong with login
});
Ich habe diese schon mit der Datei in der Doku verglichen, kann aber selbst keinen Fehler finden.
Ich verwende kein NodeRed sondern sende die Daten über MQTT nach Fhem. Aber grundsätzlich sollte doch die pure Linux Abfrage mit node zumindest Daten anzeigen.

Die Hinweise im vorigen Post habe ich umgesetzt, meine Anmeldedaten (Benutzer und Passwort) für die Android KIA App und den My KIA Account habe ich gleich angepasst und mich von der App ab und wieder angemeldet, leider ohne Änderung.
Irgendwie stecke ich aktuell fest.
Wäre prima wenn ihr noch eine Idee habt.

Gruß Reinhard
Titel: Aw: E-Auto Hyundai Bluelink / Bluelinky (Hilfe zu Node.js)
Beitrag von: ch.eick am 08 Juli 2023, 18:54:36
Hi,
Ich verwende den Node-Red docker Container und habe nur die verlinkte Anweisungen durchgearbeitet, also die Palette neu installiert und dann den Flow wieder import.
Vorher muss natürlich die Handy App laufen, dafür gibt es sogar einen Kia Support, der auch binnen 24h geantwortet hatte. Da war allerdings die App bereits wieder funktionsfähig.

Sorry, wenn ich nicht helfen konnte
     Christian