Beheerder Michel Geplaatst: 30 juli 2023 Beheerder Geplaatst: 30 juli 2023 Sinds 2018 rijd ik elektrisch. In eerste instantie een Nissan Leaf Tekna (2018), wat een hele fijne 'lelijke' auto was. Comfortabel, snel en degelijk. Helaas was de accu (40kW) te klein en de auto inmiddels een beetje verouderd. In 2018 heb ik toen ook meteen een EV lader zelf gebouwd. Omdat ik toen maximaal 20A over de (bestaande) kabel mocht transporteren heb ik de lader tot 1 fase 20A beperkt en de laadstroom kan ik dus van de minimale 6A tot 20A regelen. In de praktijk kan ik daar dus van 1,4kW tot 4,6kW mee laden, ofwel een volle accu in een nachtje laden. Uiteraard de lader slim gemaakt met een ESP8266 en die middels de rest-API in Home Assistant geïntegreerd. Zie config: Spoiler ############################################################# # Simple EVSE Wallbox Wifi package # # Hardware: https://github.com/CurtRod/SimpleEVSE-WiFi # ############################################################# #### Set charging amp limits ##### input_number: evse_max_amps: name: "Max. stroom" icon: mdi:power-socket unit_of_measurement: A min: 6 max: 20 evse_max_charge_distance: name: "Maximaal bijladen" min: 10 max: 270 step: 10 #### Smart charging #### input_boolean: solar_smart_charging: name: "Slim laden" icon: mdi:solar-power-variant #### Set max amps #### rest_command: evse_set_max_amps: url: "http://192.168.207.98/setCurrent?current={{ states.input_number.evse_max_amps.state }}" #### Activate EVSE #### command_line: - switch: name: EVSE command_on: "curl http://192.168.207.98/setStatus?active=true" command_off: "curl http://192.168.207.98/setStatus?active=false" command_state: "curl -X GET http://192.168.207.98/getParameters" value_template: "{{ value_json.list[0].evseState == True }}" #### customizations #### homeassistant: customize: input_number.evse_max_amps: persistent: true input_number.evse_max_charge_distance: persistent: true switch.evse: persistent: true icon: mdi:ev-station #### sensors #### sensor: - platform: rest resource: http://192.168.207.98/getParameters name: evse # scan_interval: 20 value_template: 'OK' json_attributes_path: $.list[0] json_attributes: - vehicleState - evseState - maxCurrent - actualCurrent - actualPower - duration - alwaysActive - lastActionUser - lastActionUID - energy - mileage - meterReading - currentP1 ## optioneel voor 3-fase laden # - currentP2 # - currentP3 - platform: template sensors: evse_vehiclestate: value_template: "{{ state_attr('sensor.evse', 'vehicleState') }}" evse_vehicle_state_templated: friendly_name: Status value_template: >- {% if is_state('sensor.evse_vehiclestate', '1') %} Niet verbonden {% elif is_state('sensor.evse_vehiclestate', '2') %} Verbonden {% elif is_state('sensor.evse_vehiclestate', '3') %} Laadt... {% endif %} icon_template: >- {% if is_state('sensor.evse_vehiclestate', '1') %} mdi:car {% elif is_state('sensor.evse_vehiclestate', '2') %} mdi:ev-plug-type2 {% elif is_state('sensor.evse_vehiclestate', '3') %} mdi:battery-charging {% endif %} evse_evsestate: value_template: "{{ state_attr('sensor.evse', 'evseState') }}" evse_maxcurrent: value_template: "{{ state_attr('sensor.evse', 'maxCurrent') }}" evse_actualcurrent: friendly_name: Actuele laadstroom value_template: "{{ state_attr('sensor.evse', 'actualCurrent') }}" icon_template: mdi:power-socket evse_actualpower: value_template: "{{ state_attr('sensor.evse', 'actualPower') }}" friendly_name: "Actueel laadvermogen" icon_template: mdi:flash-circle unit_of_measurement: kW evse_duration: value_template: "{{ state_attr('sensor.evse', 'duration') }}" evse_duration_templated: friendly_name: Tijd geactiveerd value_template: >- {% set uptime = states.sensor.evse_duration.state | float * 1 / 60000 | int %} {% set minutes = ((uptime % 60) / 1) | int %} {% set hours = ((uptime % 1440) / 60) | int %} {% set days = (uptime /1440) | int %} {%- if uptime < 1 -%} Minder dan één minuut {%- else -%} {%- if days > 0 -%} {%- if days == 1 -%} 1 dag {%- else -%} {{ days }} dagen {%- endif -%} {%- endif -%} {%- if hours > 0 -%} {%- if days > 0 -%} {{ ', ' }} {%- endif -%} {%- if hours == 1 -%} 1 uur {%- else -%} {{ hours }} uren {%- endif -%} {%- endif -%} {%- if minutes > 0 -%} {%- if days > 0 or hours > 0 -%} {{ ', ' }} {%- endif -%} {%- if minutes == 1 -%} 1 minuut {%- else -%} {{ minutes }} minuten {%- endif -%} {%- endif -%} {%- endif -%} icon_template: mdi:progress-clock evse_alwaysactive: value_template: "{{ state_attr('sensor.evse', 'alwaysActive') }}" evse_lastactionuser: value_template: "{{ state_attr('sensor.evse', 'lastActionUser') }}" evse_lastactionuid: value_template: "{{ state_attr('sensor.evse', 'lastActionUID') }}" evse_energy: friendly_name: Opgeladen vermogen value_template: "{{ state_attr('sensor.evse', 'energy') }}" icon_template: mdi:download unit_of_measurement: kWh evse_mileage: friendly_name: Opgeladen bereik value_template: "{{ state_attr('sensor.evse', 'mileage') }}" icon_template: mdi:map-marker-distance evse_meterreading: friendly_name: Meterstand deze sessie value_template: "{{ state_attr('sensor.evse', 'meterReading') }}" icon_template: mdi:counter unit_of_measurement: kWh evse_currentp1: friendly_name: Amperage Fase 1 value_template: "{{ state_attr('sensor.evse', 'currentP1') }}" icon_template: mdi:power-socket ## optioneel voor 3-fase laden # evse_currentp2: # friendly_name: Amperage Fase 2 # value_template: "{{ state_attr('sensor.evse', 'currentP2') }}" # icon_template: mdi:power-socket # evse_currentp3: # friendly_name: Amperage Fase 3 # value_template: "{{ state_attr('sensor.evse', 'currentP3') }}" # icon_template: mdi:power-socket template: - sensor: - name: "EVSE energieverbruik in kWh" unique_id: EVSE_energieverbruik_in_kwh unit_of_measurement: "kWh" device_class: energy state_class: total_increasing state: "{{ states('sensor.evse_energy')|float(0) }}" availability: "{{ states('sensor.evse_energy')|is_number }}" icon: mdi:ev-station -- SimpleEVSE geïntegreerd in Home Assistant -- Een EV lader bouwen is geen rocket science, want in feite is het niets meer dan een apparaat dat verteld hoeveel stroom er richting de auto mag en aan- of uitgezet kan worden. De lader zelf zit immers in de auto. Het laadprotocol is vrij simpel en hiervoor zijn veel EV-controllers beschikbaar. Zelf heb ik toen gekozen voor de EVSE Wallbox DIN (met SimpleEVSE Wifi). Een paar jaar later hebben we zonnepanelen laten plaatsen en daar heb ik gekozen voor een installatie met Enphase micro-omvormers met een Envoy-S Metered controller op 3 fasen. Dat wil zeggen dat ik niet alleen (per fase) kan meten wat de zonnepanelen opleveren, maar ook (per fase) wat het huis totaal verbruikt. Dat alles met een meet-interval vanaf minimaal 6 seconden. Ik heb dus beschikking over: - Opbrengst zonnepanelen (gemeten met Envoy S metered) - Verbruik huis (gemeten met Envoy S metered) - Afname van het net (gemeten met p1 interface: https://www.espthings.io/sm01 ) - Teruglevering naar het net (gemeten met p1 interface: https://www.espthings.io/sm01 ) Het doel was om de zonne-energie, zodra deze opgewekt wordt, ook meteen zo veel mogelijk te verbruiken en wat is er dan beter dan zo veel mogelijk in je auto stoppen om zo de impact op het milieu zo veel mogelijk te beperken en natuurlijk ook om de zonnepanelen terug te verdienen. In België kun je immers niet meer salderen (wel nog tegen een lagere vergoeding terugleveren). Om te weten wanneer je moet gaan laden is de eerste vereiste weten wat je NETTO energie is. Ofwel de productie minus al het eigen verbruik. Ter illustratie de zonnepanelen: Netto energie template sensor in Home Assistant: Spoiler template: - trigger: - platform: time_pattern seconds: "/5" sensor: - name: Netto electriciteitsverbruik unique_id: netto_electriciteitsverbruik state: "{{ ((states('sensor.envoy_current_power_consumption') | float * 0.001) - (states('sensor.envoy_current_power_production') | float * 0.001))| round(2) | default(0)}}" unit_of_measurement: "Kw" Nu weet ik dus, afhankelijk van de update-interval van de Enphase Envoy-S (6-8 seconden) en de interval van de template sensor, gemiddeld iedere ~10 seconden wat het netto energieverbruik is. Daarna werd het iets spannender, want nu wilde ik eigenlijk de lader automatisch aanschakelen als de zon gaat schijnen, 'harder' laten laden als de zonnepanelen opleveren en 'zachter' zodra er minder opgeleverd word. Uit als er enige tijd geen opbrengst is. Ofwel die 'Netto energie' sensor zo veel mogelijk op 0 houden. Na wat experimenteren kwam ik tot deze oplossing: ('duracell' is de naam van mijn auto in de Home Assistant integratie (HACS Tesla integratie), 'evse' is de lader) Spoiler ##### smart solar charging ###### # Car charger - Vehicle state: # # 2 = connected # # 3 = charging # ################################# ## turn smart solar charging on - id: smart_solar_charging_on alias: smart_solar_charging_on initial_state: on trigger: platform: state entity_id: - sensor.envoy_current_power_production condition: condition: and conditions: - condition: numeric_state entity_id: sensor.netto_electriciteitsverbruik below: "-1.2" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "2" - condition: numeric_state entity_id: sensor.duracell_battery below: "100" action: - service: switch.turn_on entity_id: switch.evse - delay: 00:00:05 - service: switch.turn_on entity_id: switch.duracell_charger - delay: 00:00:05 - service: homeassistant.update_entity entity_id: sensor.evse ## turn smart solar charging off - id: smart_solar_charging_off alias: smart_solar_charging_off initial_state: on trigger: platform: numeric_state entity_id: sensor.netto_electriciteitsverbruik above: "0.3" for: minutes: "2" condition: condition: and conditions: - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: switch.turn_off entity_id: switch.evse #### set charging amperage #### ## up - id: smart_solar_charging_amperage_up alias: smart_solar_charging_amperage up initial_state: on trigger: - platform: state entity_id: sensor.netto_electriciteitsverbruik - platform: state entity_id: sensor.evse_actualpower - platform: state entity_id: sensor.envoy_current_power_consumption - platform: state entity_id: sensor.envoy_current_power_production - platform: state entity_id: switch.evse to: "on" condition: condition: and conditions: - condition: numeric_state entity_id: sensor.netto_electriciteitsverbruik below: "-0.35" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: input_number.set_value data: value: "{{ (states.input_number.evse_max_amps.state | int ) + 1 }}" target: entity_id: input_number.evse_max_amps - delay: 00:00:02 - service: homeassistant.update_entity entity_id: sensor.evse ## down - id: smart_solar_charging_amperage_down alias: smart_solar_charging_amperage down initial_state: on trigger: - platform: state entity_id: sensor.netto_electriciteitsverbruik - platform: state entity_id: sensor.evse - platform: state entity_id: sensor.envoy_current_power_consumption - platform: state entity_id: sensor.envoy_current_power_production - platform: state entity_id: switch.evse to: "on" condition: condition: and conditions: - condition: numeric_state entity_id: sensor.netto_electriciteitsverbruik above: "0" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: input_number.set_value data: value: "{{ (states.input_number.evse_max_amps.state | int ) - 1 }}" target: entity_id: input_number.evse_max_amps - delay: 00:00:02 - service: homeassistant.update_entity entity_id: sensor.evse Tot hier werkt alles via uitsluitend lokale API's, hier komt geen cloud dienst aan te pas! Dit werkt perfect van 1,4kW tot 4,6kW, echter soms leveren de panelen bijvoorbeeld maar 1.3kW op en heb je ook nog 350w eigen verbruik. Dan wil je eigenlijk nog lager dan die 6A (1.4kW). Gelukkig kan mijn huidige auto zelf wel laden van 1-32A per fase, dus heb ik een automatisering gemaakt die, zodra het minimum van de lader (6A) is bereikt, de tesla zelf instelt op 1 to 5A. Zo kan ik effectief van 0.23kW tot 4,6kW optimaal gebruik maken van de opbrengst van de panelen. De tesla integratie gaat wel via de cloud, maar die is wel erg betrouwbaar en snel: Spoiler ## Tesla max amps up - id: tesla_smart_solar_charging_amperage_up alias: Tesla smart_solar_charging_amperage up initial_state: on trigger: - platform: state entity_id: sensor.netto_electriciteitsverbruik condition: condition: and conditions: - condition: numeric_state entity_id: sensor.netto_electriciteitsverbruik below: "-0.35" - condition: state entity_id: input_number.evse_max_amps state: "6.0" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: number.set_value data: value: "{{ (states.number.duracell_charging_amps.state | int ) + 1 }}" target: entity_id: number.duracell_charging_amps ## Tesla max amps down - id: tesla_smart_solar_charging_amperage_down alias: Tesla smart_solar_charging_amperage down initial_state: on trigger: - platform: state entity_id: sensor.netto_electriciteitsverbruik condition: condition: and conditions: - condition: numeric_state entity_id: sensor.netto_electriciteitsverbruik above: "0" - condition: state entity_id: input_number.evse_max_amps state: "6.0" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: number.set_value data: value: "{{ (states.number.duracell_charging_amps.state | int ) - 1 }}" target: entity_id: number.duracell_charging_amps ## Correct tesla charging amps - id: correct_tesla_charging_amperage alias: Correct Tesla charging amperage initial_state: on trigger: - platform: state entity_id: input_number.evse_max_amps - platform: state entity_id: sensor.netto_electriciteitsverbruik condition: condition: and conditions: - condition: numeric_state entity_id: input_number.evse_max_amps above: "6" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: not conditions: - condition: state entity_id: number.duracell_charging_amps state: "{{ (states.input_number.evse_max_amps.state) }}" action: - service: number.set_value data: value: "{{ (states.input_number.evse_max_amps.state) }}" target: entity_id: number.duracell_charging_amps Hier kan je dat mooi zien, de auto begin vanaf +/- 13.00 te laden en is rond 15.30 vol. Het geeft in ieder geval, los van alle besparingen, een enorm goed gevoel dat de auto voor een groot deel op zonne-energie rijd. Twee 'nadelen': Met name bij sterk wisselende bewolking of bijvoorbeeld wanneer de wasmachine en kookplaat plotseling aan gaan net niet snel genoeg geschakeld wordt, waardoor we gemiddeld zo'n 200-300w per uur van het net trekken. Als je thuis komt moet je altijd de laadstekker in de auto stoppen. Ook dat is gedeeltelijk geautomatiseerd, want zodra de deuren van de auto van 'open' naar 'closed' gaan, de auto niet ingeplugd is en de auto in de zone 'thuis' is, stuur ik met HA automatisch het laadklepje open en hoef ik alleen nog maar de vaste kabel van de EV-lader in de auto te steken. Mvg, Michel 1 1 Gebruik je een advertentie blocker? Sluit onze website dan uit. Zonder advertenties kan deze site niet voortbestaan.
Beheerder Michel Geplaatst: 1 augustus 2023 Auteur Beheerder Geplaatst: 1 augustus 2023 Vanwege dit k@tweer kon ik nu pas testen of ook die laatste aanpassing goed werkt. Heb de code zondagavond nog iets aangepast. Laden met 0,2kW Gebruik je een advertentie blocker? Sluit onze website dan uit. Zonder advertenties kan deze site niet voortbestaan.
Beheerder Michel Geplaatst: 8 september 2023 Auteur Beheerder Geplaatst: 8 september 2023 Afgelopen weekend nog wat getuned en dit is nu de actuele config: Netto verbruik: template: - trigger: - platform: state entity_id: - sensor.envoy_XXXXXXXXX_current_power_consumption - sensor.envoy_XXXXXXXXX_current_power_production sensor: - name: Netto electriciteitsverbruik unique_id: netto_electriciteitsverbruik state: "{{ ((states('sensor.envoy_XXXXXXXXX_current_power_consumption') | float(0) * 0.001) - (states('sensor.envoy_XXXXXXXXX_current_power_production') | float(0) * 0.001))|round(2) }}" unit_of_measurement: "Kw" Smart charging: ###### smart solar charging ####### # Car charger - Vehicle state: # # 2 = connected # # 3 = charging # # 'duracell' = name of the car # # evse = DIY car charger (20A max)# ################################### ## turn smart solar charging on - id: smart_solar_charging_on alias: smart_solar_charging_on initial_state: on trigger: - platform: state entity_id: sensor.netto_electriciteitsverbruik condition: condition: and conditions: - condition: numeric_state entity_id: sensor.netto_electriciteitsverbruik below: "-1" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "2" - condition: numeric_state entity_id: sensor.duracell_battery below: "100" action: - service: input_number.set_value data: value: "6" target: entity_id: input_number.evse_max_amps - service: switch.turn_on entity_id: switch.evse - delay: 00:00:01 - service: switch.turn_on entity_id: switch.duracell_charger - delay: 00:00:03 - service: homeassistant.update_entity entity_id: sensor.evse mode: parallel ## turn smart solar charging off - id: smart_solar_charging_off alias: smart_solar_charging_off initial_state: on trigger: - platform: numeric_state entity_id: sensor.netto_electriciteitsverbruik above: "0" for: minutes: "2" condition: condition: and conditions: - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: switch.turn_off entity_id: switch.evse - delay: 00:00:03 - service: homeassistant.update_entity entity_id: sensor.evse #### set charging amperage #### ## up - id: smart_solar_charging_amperage_up alias: smart_solar_charging_amperage initial_state: on trigger: - platform: state entity_id: sensor.netto_electriciteitsverbruik condition: condition: and conditions: - condition: numeric_state entity_id: sensor.netto_electriciteitsverbruik below: "-0.25" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: input_number.set_value data: value: "{{ (states.input_number.evse_max_amps.state | int ) + 1 | round(0) }}" target: entity_id: input_number.evse_max_amps - service: homeassistant.update_entity data: {} target: entity_id: sensor.evse ## down - id: smart_solar_charging_amperage_down alias: smart_solar_charging_amperage down initial_state: on trigger: - platform: state entity_id: sensor.netto_electriciteitsverbruik condition: condition: and conditions: - condition: numeric_state entity_id: sensor.netto_electriciteitsverbruik above: "0" - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: input_number.set_value data: value: "{{ (states.input_number.evse_max_amps.state | int ) - 1 | round(0) }}" target: entity_id: input_number.evse_max_amps - service: homeassistant.update_entity data: {} target: entity_id: sensor.evse ## Correct the tesla charging amperage in order to be able to charge from 4A upwords. - id: correct_tesla_charging_amperage alias: Correct Tesla charging_amperage initial_state: on trigger: - platform: state entity_id: input_number.evse_max_amps condition: condition: and conditions: - condition: state entity_id: input_boolean.solar_smart_charging state: "on" - condition: state entity_id: sensor.evse_vehiclestate state: "3" action: - service: tesla_custom.api data: command: CHARGING_AMPS parameters: path_vars: vehicle_id: "9296XXXXXXXXXXX" charging_amps: "{{ (states.input_number.evse_max_amps.state) | round(0) }}" Resultaat: (binnen het rode vlak = smart charging, daarna was de accu vol ;)) Blauw = opname van het net Orange = verbruikte zonneenergie Paars = teruggeleverd Gebruik je een advertentie blocker? Sluit onze website dan uit. Zonder advertenties kan deze site niet voortbestaan.
Beheerder Michel Geplaatst: 8 september 2023 Auteur Beheerder Geplaatst: 8 september 2023 De volgende stap (bij een volgend regenachtig weekend) wordt het optimaliseren van de automatiseringen, wat het kan ook allemaal in één of hooguit 2 automatiseringen Gebruik je een advertentie blocker? Sluit onze website dan uit. Zonder advertenties kan deze site niet voortbestaan.
Aanbevolen berichten
Maak een account aan of log in om te reageren
Je moet een lid zijn om een reactie te kunnen achterlaten
Account aanmaken
Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!
Registreer een nieuwe accountInloggen
Heb je reeds een account? Log hier in.
Nu inloggen