#CONFIGURATION

rest_command:
  fiat_lock:
    url: !secret my500e_API
    method: POST
    headers:
      Content-Type: application/x-www-form-urlencoded
    payload: !secret Fiat_lock
  fiat_unlock:
    url: !secret my500e_API
    method: POST
    headers:
      Content-Type: application/x-www-form-urlencoded
    payload: !secret Fiat_unlock
  fiat_charge:
    url: !secret my500e_API
    method: POST
    headers:
      Content-Type: application/x-www-form-urlencoded
    payload: !secret Fiat_charge

sensor:
  - platform: rest
    resource: !secret my500e_API
    payload: !secret Fiat_sensor
    method: POST
    scan_interval: 3600 # In seconds, calls once per hour, noting 100 call daily limit for SIM plan
    name: JSON fiat
    headers:
      Content-Type: application/x-www-form-urlencoded
    json_attributes:
      - SOC
      - Range
      - ODO
      - ChargerConnected
      - ChargeStatus
      - Batt12V
      - DoorLockStatus
      - VehicleAmbientTemp
      - LocationGPS
      - LocationLongLat
      - LocationSpd
    value_template: "{{ value.json_fiat | default }}"

  - platform: template
    sensors:
      soc:
        friendly_name: "State of Charge"
        value_template: "{{ state_attr('sensor.json_fiat', 'SOC') }}"
        unit_of_measurement: '%'
        device_class: battery
      range:
        friendly_name: "Range"
        value_template: "{{ state_attr('sensor.json_fiat', 'Range') }}"
        unit_of_measurement: 'km'
      range_m:
        friendly_name: "Range Imperial"
        value_template: "{{ (states('sensor.range')|float / 1.6093)|round(0) }}"
        unit_of_measurement: 'Miles'        
      odo:
        friendly_name: "Odometer"
        value_template: "{{ state_attr('sensor.json_fiat', 'ODO') }}"
        unit_of_measurement: 'km'
      odo_m:
        friendly_name: "Odometer Imperial"
        value_template: "{{ (states('sensor.odo')|float / 1.6093)|round(1) }}"
        unit_of_measurement: 'Miles'             
      charger_connected:
        friendly_name: "Charger Connected"
        value_template: "{{ state_attr('sensor.json_fiat', 'ChargerConnected') }}"
      charge_status:
        friendly_name: "Charge Status"
        value_template: "{{ state_attr('sensor.json_fiat', 'ChargeStatus') }}"
      batt_12v:
        friendly_name: "12V Battery"
        value_template: "{{ state_attr('sensor.json_fiat', 'Batt12V') }}"
        unit_of_measurement: 'V'
      batt_12v_per:
        friendly_name: "12V Battery Period" #replaces comma with period for decimals
        value_template: "{{ states('sensor.batt_12v')|float / 1000 }}"
        unit_of_measurement: 'V'        
      batt_12v_per2:
        friendly_name: "12V Battery Period R2" #rounds decimal to two places
        value_template: "{{ states('sensor.batt_12v_per')|round(2) }}"
        unit_of_measurement: 'V'        
      door_lock_status:
        friendly_name: "Door Lock Status"
        value_template: "{{ state_attr('sensor.json_fiat', 'DoorLockStatus') }}"
      vehicle_ambient_temp:
        friendly_name: "Vehicle Temperature"
        value_template: "{{ state_attr('sensor.json_fiat', 'VehicleAmbientTemp') }}"
        unit_of_measurement: '°C'
      vehicle_ambient_temp_f:
        friendly_name: "Vehicle Temperature Farenheit"
        value_template: "{{ ((states('sensor.vehicle_ambient_temp')|float / 0.556) + 32)|round(0) }}"
        unit_of_measurement: '°F'
      location_gps:
        friendly_name: "GPS Location"
        value_template: "{{ state_attr('sensor.json_fiat', 'LocationGPS') }}"
      location_long_lat:
        friendly_name: "Location Longitude & Latitude"
        value_template: "{{ state_attr('sensor.json_fiat', 'LocationLongLat') }}"
      location_spd:
        friendly_name: "Speed"
        value_template: "{{ state_attr('sensor.json_fiat', 'LocationSpd') }}"
        unit_of_measurement: 'km/H'
      location_spd_m:
        friendly_name: "Speed Imperial"
        value_template: "{{ (states('sensor.location_spd')|float / 1.6093)|round(0) }}"
        unit_of_measurement: 'MPH'
      location_spd_m0: # When GPS indicates speed is close to zero (i.e., 1), car is often still, this gets rid of 1 and replaces it with zero
        friendly_name: "Stationary Speed Fix"
        value_template: >
          {% if is_state('sensor.location_spd_m', '1') %}
            0
          {% else %}
            {{ states('sensor.location_spd_m') }}
          {% endif %}
      fiat_lock_status:
        friendly_name: "Fiat Lock Status"
        value_template: >
          {% if is_state('sensor.door_lock_status', '1') %}
            Locked
          {% else %}
            Unlocked
          {% endif %}
        icon_template: >
          {% if is_state('sensor.door_lock_status', '1') %}
            mdi:lock
          {% else %}
            mdi:lock-open
          {% endif %}
      fiat_charging_status:
        friendly_name: "Fiat Charging Status"
        value_template: >
          {% if is_state('sensor.charge_status', '1') %}
            Charging
          {% else %}
            Not Charging
          {% endif %}
      fiat_charger_connected:
        friendly_name: "Fiat Charger Connected"
        value_template: >
          {% if is_state('sensor.charger_connected', '1') %}
            Connected
          {% else %}
            Not Connected
          {% endif %} 
      fiat_latitude: # Lovelace Map Card requires that latitude and longitude be attributes; this sensor splits them.
        friendly_name: "Fiat Latitude"
        value_template: "{{ states('sensor.location_long_lat').split(',')[0] }}"
      fiat_longitude:
        friendly_name: "Fiat Longitude"
        value_template: "{{ states('sensor.location_long_lat').split(',')[1] }}"
      fiat_map: # Latitude and longitude recombined as attributes, for use by Map Card
        friendly_name: "Fiat 500 e" # Badge in Map Card makes a 3-letter acronym from name > "F5e"
        value_template: "OK"
        attribute_templates:
          latitude: "{{ states('sensor.fiat_latitude') }}"
          longitude: "{{ states('sensor.fiat_longitude') }}"

lock:
  - platform: template
    name: Fiat Lock
    value_template: "{{ is_state('sensor.door_lock_status', '1') }}"
    lock:
      service: script.lock_fiat
    unlock:
      service: script.1649125768563