DIY OVMS (Open Vehicles) Integration

No, non ho provato perchè il server americano in passato mi dava problemi

I also had the curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number error message trying to get a token from https://api.openvehicles.com:6868. It looks like port 6868 expects http. However if you change that to port 6869 the https request works.

In addition, my password contained special characters which could not be put into the token request URL as-is, so I first used https://www.urlencoder.org/ to url-encode the password itself.

Is it possible to send command to stop charging?
I made an automation to send a notification when SoC reaches 80%, and I would like to stop charging at that point.

That may depend on your car.

https://docs.openvehicles.com/en/latest/

Smart EQ. " Control charge:no"…

Apologies, that is a typo from my end, you should be using port 6869 as you discovered. I’ve updated the blog post since. :slight_smile:

Sorry I didn’t seem to get notifications for thread replies so I didn’t see any of these!

Its set up in your preferences.

Use the WEB Editor to create a file “/store/events/vehicle.charge.stop/10-notify” with this line:

notify raise text info usr.charge.batt “Battery is charging stop”

How can you make “send a notification when SoC reaches 80%” ??

Hey there I think this is great! really keen to set this up, I have to admit I’m a bit of a rookie with YAML and HA, side note the blog images seem to be broken but what I am having issues with getting HA to accept the configuration, most of what I have done has been integrations. Currently running HA OS but getting the following when validating the config

Integration error: -binary_sensor - Integration ‘-binary_sensor’ not found.
Integration error: -sensor - Integration ‘-sensor’ not found.

found some code from dexter who works for me:

  - platform: command_line
    scan_interval: 60
    name: car_charging
    command: |-
      username='…'; password='…'; vehicleid='…'; ip='https://ovms.dexters-web.de:6869';\
      c=$(curl -X GET -sc - "$ip/api/cookie?username=$username&password=$password" -o /dev/null);\
      echo "${c}" | curl -X GET -sb - "$ip/api/status/$vehicleid"
    value_template: "{{ value_json.chargestate }}"
 …

copied from https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/issues/624

what would be the new syntax/code because of the newest changes in HA?
described here:

Also, in vehicleid field, what I need to write? The GCM sender ID?
Thanks!

Everything with - platform: command_line needs to be updated.

So the example shown would end up being:

command_line
    - sensor:
        scan_interval: 60
        name: car_charging
        command: |-
          username='…'; password='…'; vehicleid='…'; ip='https://ovms.dexters-web.de:6869';\
          c=$(curl -X GET -sc - "$ip/api/cookie?username=$username&password=$password" -o /dev/null);\
          echo "${c}" | curl -X GET -sb - "$ip/api/status/$vehicleid"
        value_template: "{{ value_json.chargestate }}"

Put this in configurations.yaml. Or also in command_line.yaml works, but then drop the first level in YAML.

And vehicle ID is whatever you registered as vehicle ID in Dexters.

I can confirm this works well. The only thing I don’t like is that for every metric I need to make two HTTP requests for every sensor, while the OVMS server gives a nice full JSON.

Note to self: always try the initial solution before going with the replies and comments. @jabelone blog writeup works perfectly well with Dexter’s server.

The hostname is ovms.dexters-web.de

This means the REST service can be used to update multiple entities, which is way easier to maintain and has less chances of hitting the rate limit on the server.

I’m getting an error:
The system cannot restart because the configuration is not valid: Error loading /config/configuration.yaml: while scanning a simple key in “/config/configuration.yaml”, line 25, column 4 could not find expected ‘:’ in “/config/configuration.yaml”, line 26, column 13

Any idea what’s wrong?

I’ve done it like this and it works!

But it’s still not compliant with the latest version, so some changes should be done?

sensor:
  - platform: command_line
    scan_interval: 60
    name: car_charging
    command: |-
      username='...'; password='...'; vehicleid='...'; ip='https://ovms.dexters-web.de:6869';\
      c=$(curl -X GET -sc - "$ip/api/cookie?username=$username&password=$password" -o /dev/null);\
      echo "${c}" | curl -X GET -sb - "$ip/api/status/$vehicleid"
    value_template: "{{ value_json.chargestate }}"
    json_attributes:
      - soc
      - soh
      - vehicle12v_current
      - chargepower
      - chargekwh
      - temperature_cabin
      - temperature_battery
      - charging
      - charge_estimate
      - chargeduration
      - estimatedrange
      - chargetype
      - speed
      - odometer

  - platform: command_line
    scan_interval: 60
    name: charge_info
    command: |-
      username='...'; password='...'; vehicleid='...'; ip='https://ovms.dexters-web.de:6869';\
      c=$(curl -X GET -sc - "$ip/api/cookie?username=$username&password=$password" -o /dev/null);\
      echo "${c}" | curl -X GET -sb - "$ip/api/charge/$vehicleid"
    value_template: "{{ value_json.chargepower }}"
    json_attributes:
      - linevoltage
      - battvoltage
      - chargecurrent
      - chargepower
      - chargetype
      - chargestate
      - soc
      - units
      - idealrange
      - estimatedrange
      - mode
      - chargelimit
      - chargeduration
      - chargeb4
      - chargekwh
      - chargesubstate
      - chargetimermode
      - chargestarttime
      - chargetimerstale
      - cac100
      - soh
      - charge_etr_full
      - charge_etr_limit
      - charge_limit_range
      - charge_limit_soc
      - cooldown_active
      - cooldown_tbattery
      - cooldown_timelimit
      - charge_estimate
      - charge_etr_range
      - charge_etr_soc
      - idealrange_max
      - cp_dooropen
      - pilotpresent
      - charging
      - caron
      - temperature_pem
      - temperature_motor
      - temperature_battery
      - temperature_charger
      - temperature_ambient
      - temperature_cabin
      - carawake
      - staletemps
      - staleambient
      - charging_12v
      - vehicle12v
      - vehicle12v_ref
      - vehicle12v_current

The beginning of your block should be:

command_line:
    - sensor:
        scan_interval: 60
        name: car_charging

They’ve swapped around how module-sensor relation is defined (I guess for better maintainability of YAML files). Used to be that you defined each sensor and then which module/platform it uses. But I guess this means you have a jumble of mixed platforms in a single file. Now you define the module command_line and every sensor under it, meaning it can only be defined in a more concise way.

Hi all, if you want to use OVMS v3 with MQTT, I’ve put together a respository with a pretty complete set of YAML. The method used by Jaimyn uses HTTP access through OVMS v2. Neither is better or worse, just depends on what you like!

I thought I’d add this here that dexter-web.de requires passwords with special characters, and special characters can’t be included in URLs. Any special characters will require conversion as follows:

'# → %23
/ → %2F
: → %3A
? → %3F
\ → %5C
% → %25

Hopefully this will save others the 3 hours I spent trying to get the HomeAssistant curl script to work to find this was the issue!

Many thanks for your work, @jabelone !

I’m thinking this should be an integration of some kind, but I know next to nothing about building those. Maybe if I find some time, I’ll see if I can throw a crude one together, even if only via HACS.

To be clear, though, I’m a pretty poor coder and I genuinely do NOT have much time available, so if anybody feels like taking up the cause, go for it!

2 Likes

If someone wants to add the Renault Twizy to Home Assistant:

Sensor:
  - platform: rest
    scan_interval: 120
    name: twizy_status
    resource: https://ovms.dexters-web.de:6869/api/status/{ID}?username={username}&password={API key}
    value_template: "{{ value_json.soc }}"
    json_attributes:
      - cac100
      - estimatedrange
      - idealrange
      - idealrange_max
      - odometer
      - soc
      - soh
      - temperature_battery
      - temperature_charger
      - temperature_motor
      - temperature_pem
      - tripmeter
      - vehicle12v

  - platform: rest
    scan_interval: 120
    name: twizy_chargestate
    resource: https://ovms.dexters-web.de:6869/api/charge/{ID}?username={username}&password={API key}
    value_template: "{{ value_json.chargestate }}"
    json_attributes:
      - battvoltage
      - cac100
      - charge_estimate
      - charge_etr_full
      - charge_limit_range
      - charge_limit_soc
      - chargecurrent
      - chargelimit
      - chargepower
      - temperature_battery
      - temperature_charger
      - temperature_motor
      - temperature_pem
      - vehicle12v
1 Like