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

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

Vorheriges Thema - Nächstes Thema

michisa86888

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?

xerion

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.
Ich würde mich  freuen, wenn du meinen Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren, nutzt: https://invite.tibber.com/5fc08jbs. So bekommen wir beide 50 Euro und 100 % Ökostrom / https://geld-fuer-eauto.de/ref/334561880

acw81

@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.

acw81

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



michisa86888

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"?

acw81

#20
Ü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


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>





mnl1234

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

acw81

#22
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



[
  {
    "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?


mnl1234

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?

mnl1234

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.

acw81

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.

mnl1234

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.

acw81

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.

acw81

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>"
  }
]

mnl1234