Skip to content

Instantly share code, notes, and snippets.

@esbenr
Created February 23, 2021 08:50
Show Gist options
  • Save esbenr/90f6d4f3586838ea4f44b5ca29bfabac to your computer and use it in GitHub Desktop.
Save esbenr/90f6d4f3586838ea4f44b5ca29bfabac to your computer and use it in GitHub Desktop.
Node-RED nodes for parsing JSON from connectedcars.io subflow
[
{
"id":"5702eca4.c373e4",
"type":"api-call-service",
"z":"93e5dfe8.6683b",
"name":"Device tracker",
"server":"84d7c1be.d21e3",
"version":1,
"debugenabled":false,
"service_domain":"device_tracker",
"service":"see",
"entityId":"",
"data":"{}",
"dataType":"json",
"mergecontext":"",
"output_location":"",
"output_location_type":"none",
"mustacheAltTags":false,
"x":1040,
"y":180,
"wires":[
[
]
]
},
{
"id":"d6602e99.4c146",
"type":"function",
"z":"93e5dfe8.6683b",
"name":"Create data for car",
"func":"var adblue = msg.payload.adblueRemainingKm[0]\nvar model = msg.payload.model.toLowerCase();\nmsg.payload = {\n \"data\": {\n \"dev_id\": \"vw_\" + model,\n \"gps\": [\n msg.payload.position.latitude,\n msg.payload.position.longitude\n ],\n \"attributes\": {\n \"license_plate\": msg.payload.licensePlate,\n \"friendly_name\": msg.payload.model,\n \"vin\": msg.payload.vin,\n \"name\": msg.payload.name,\n \"brand\": msg.payload.brand,\n \"make\": msg.payload.make,\n \"model\": msg.payload.model,\n \"year\": msg.payload.year,\n \"engine_size\": msg.payload.engineSize,\n \"fuel_economy\": msg.payload.fuelEconomy,\n \"fuel_type\": msg.payload.fuelType,\n \"fuel_percentage\": msg.payload.fuelPercentage,\n \"fuel_level\": msg.payload.fuelLevel.liter,\n \"fuel_level_time\": msg.payload.fuelLevel.time,\n \"fuel_tank_size\": msg.payload.fuelTankSize,\n \"ignition\": msg.payload.ignition.on,\n \"ignition_time\": msg.payload.ignition.time,\n \"odometer\": msg.payload.odometer.odometer,\n \"odometer_time\": msg.payload.odometer.time,\n \"outdoor_temperature\": msg.payload.outdoorTemperatures[0].celsius,\n \"outdoor_temperature_time\": msg.payload.outdoorTemperatures[0].time,\n \"location_time\": msg.payload.position.time,\n \"health_ok\": msg.payload.health.ok,\n \"health_recommendation\": msg.payload.health.recommendation,\n \"latest_battery_voltage\": msg.payload.latestBatteryVoltage.voltage,\n \"latest_battery_voltage_time\": msg.payload.latestBatteryVoltage.time,\n \"service_predicted_date\": msg.payload.service.predictedDate,\n \"service_predicted_next_oilchange_in_km_date\": msg.payload.service.nextOilChangeInKmPredictedDate,\n \"service_predicted_next_oilchange_in_days_date\": msg.payload.service.nextOilChangeInDaysPredictedDate,\n \"service_predicted_next_interval_service_in_km_date\": msg.payload.service.nextIntervalServiceInKmPredictedDate,\n \"service_predicted_next_interval_service_in_days_date\": msg.payload.service.nextIntervalServiceInDaysPredictedDate,\n }\n }\n}\n\nif (adblue !== undefined) {\n msg.payload.data.attributes.adblue_remaining_km = adblue.km\n msg.payload.data.attributes.adblue_remaining_km_time = adblue.time\n}\n\nreturn msg;",
"outputs":1,
"noerr":0,
"initialize":"",
"finalize":"",
"x":790,
"y":180,
"wires":[
[
"5702eca4.c373e4"
]
]
},
{
"id":"84d7c1be.d21e3",
"type":"server",
"name":"Home Assistant",
"addon":true
}
]
@esbenr
Copy link
Author

esbenr commented Feb 23, 2021

Function node:

var adblue = msg.payload.adblueRemainingKm[0]
var model = msg.payload.model.toLowerCase();
msg.payload = {
  "data": {
    "dev_id": "vw_" + model,
    "gps":  [
        msg.payload.position.latitude,
        msg.payload.position.longitude
    ],
    "attributes": {
        "license_plate": msg.payload.licensePlate,
        "friendly_name": msg.payload.model,
        "vin": msg.payload.vin,
        "name": msg.payload.name,
        "brand": msg.payload.brand,
        "make": msg.payload.make,
        "model": msg.payload.model,
        "year": msg.payload.year,
        "engine_size": msg.payload.engineSize,
        "fuel_economy": msg.payload.fuelEconomy,
        "fuel_type": msg.payload.fuelType,
        "fuel_percentage": msg.payload.fuelPercentage,
        "fuel_level": msg.payload.fuelLevel.liter,
        "fuel_level_time": msg.payload.fuelLevel.time,
        "fuel_tank_size": msg.payload.fuelTankSize,
        "ignition": msg.payload.ignition.on,
        "ignition_time": msg.payload.ignition.time,
        "odometer": msg.payload.odometer.odometer,
        "odometer_time": msg.payload.odometer.time,
        "outdoor_temperature": msg.payload.outdoorTemperatures[0].celsius,
        "outdoor_temperature_time": msg.payload.outdoorTemperatures[0].time,
        "location_time": msg.payload.position.time,
        "health_ok": msg.payload.health.ok,
        "health_recommendation": msg.payload.health.recommendation,
        "latest_battery_voltage": msg.payload.latestBatteryVoltage.voltage,
        "latest_battery_voltage_time": msg.payload.latestBatteryVoltage.time,
        "service_predicted_date": msg.payload.service.predictedDate,
        "service_predicted_next_oilchange_in_km_date": msg.payload.service.nextOilChangeInKmPredictedDate,
        "service_predicted_next_oilchange_in_days_date": msg.payload.service.nextOilChangeInDaysPredictedDate,
        "service_predicted_next_interval_service_in_km_date": msg.payload.service.nextIntervalServiceInKmPredictedDate,
        "service_predicted_next_interval_service_in_days_date": msg.payload.service.nextIntervalServiceInDaysPredictedDate,
    }
  }
}

if (adblue !== undefined) {
    msg.payload.data.attributes.adblue_remaining_km = adblue.km
    msg.payload.data.attributes.adblue_remaining_km_time = adblue.time
}

return msg;

Call-service node:
image

@dannyjensen
Copy link

Hej Esben. Jeg er helt ny i HA og NR.
Har dog prøvet at følge din guide på yt, men får debug fejl.
Jeg har en ældre skoda der IKKE kan komme på skoda-connect men kun på min skoda app, hvilket fungere fint. Jeg har dog ikke noget "Namespace", kan ikke gennemskue og det udløser fejlen!
Kan du hjælpe?
20210223_124041

@esbenr
Copy link
Author

esbenr commented Feb 23, 2021

Hej. Det skyldes at du mangler et namespace, så kan subflow'et ikke authenticate og få en valid token. Namespace er ikke noget du har fået, det angiver om det er VW, skoda, Audo eller noget andet. Jeg har en VW og skal derfor bruge "semler". Jeg ved ikke hvad namespace man skal bruge ved Skoda.
Hvis ikke du allerede er medlem af Dansk Home Assistant gruppen, på Facebook, så kan jeg anbefale det. Der er flere der benytter mit flow til Skoda og mon ikke de kan hjælpe med namespace til Skoda.
Spørg evt. i denne tråd: https://www.facebook.com/groups/209025039666209/permalink/859412864627420/?comment_id=860886254480081&reply_comment_id=861124024456304

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment