Automatizare Fotovoltaice cu Home Assistant
Last Updated: Nov 27 2022 13:22, Started by
wtvr
, Sep 27 2022 20:50
·
0
#1
Posted 27 September 2022 - 20:50
Salutari. Deja avem o casa verde avand fotovoltaice instalate. De ce sa nu fie de asemenea si inteligenta? Acest topic e incercarea mea de a va ajuta in automatizarea consumului cu energie din panouri.
Totul se face din Home Assistant prin controlul unor relee. De ce e nevoie: 1.PC cu Home Assistant. Nu recomand Rasberry, e scump si nu-l gasesti in stoc. Eu folosesc PC-ul curent si nu e nicio problema. 2.Senzor de lumina. Trebuie unul ce nu face peak in lumina soarelui (exemplu: MAX44009, TSL2591) 3.Contor de energie compatibil Home Assistant. Eu am Shelly EM 4.Relee EspHome. Nodemcu/D1 Mini+releu 5v sau chiar "Kit releu cu ESP8266". 5.Power meter tip priza sau Shelly 1PM sau chiar Shelly Plug. 6.Broadlink rm4c daca trebuie sa controlam un AC prin infrarosu. 7.Un glob de sticla. Cablu internet 8. Rabdare, un pic de engleza. Navigarea in HA si esphome trebuie sa invatati singuri. Principiul e relativ simplu: dispozitivul de imersie solara (pyranometru) masoara intensitatea luminoasa, Home Assistant efectueaza conversia in putere electrica (W), calculeaza in timp real puterea solara ramasa si controleaza relee/telecomenzi. Se ia un glob de sticla cu mos craciun si se scoate mosul cu ajutorul unui burgiu tip bradut (se poate, fundul e facut din ghips). Se mai da o gaura in lateral jos pentru fixarea globului intr-un diblu. Introduc senzorul in glob si il fixez astfel incat lumina soarelui sa nu refracteze pe acesta. Se pune cat mai aproape de sticla (nu in mijlocul globului) si se gaseste zona cu cele mai putine distorsiuni (e important). Se lipeste sau prinde in alt surub cablul de fundul globului. Folosind cat5, firele rigide tin senzorul pe pozitie. Eu am acoperit senzorul cu o banda te teflon pentru a-si pastra valorile in timp, sa nu se "arda" de la radiatia solara. Senzorul se monteaza unde bate mereu soarele SI wifi-ul.... Se poate si comunicarea prin cablu direct la PC. Acesta este codul esphome pentru MAX44009 si TSL2591: sensor: - platform: tsl2591 name: "Luminita_TSL2591" id: "my_tls2591" address: 0x29 # gain: 1x , 25x . 400x , 9500X gain: 1x update_interval: 0.05s #0.1 power_save_mode: true device_factor: 53 glass_attenuation_factor: 19.9 #glass_attenuation_factor: 14.4 integration_time: 100ms infrared: name: "luminita infrarosu" unit_of_measurement: "W" device_class: power full_spectrum: name: "Luminita spectru complect" unit_of_measurement: "W" device_class: power filters: - filter_out: 0 - quantile: window_size: 25 send_every: 25 send_first_at: 5 quantile: .9 - multiply: 1 calculated_lux: id: i_lux name: "Luminita Lux" unit_of_measurement: "Lx" accuracy_decimals: 0 filters: - filter_out: 0 - quantile: window_size: 25 send_every: 25 send_first_at: 5 quantile: .9 sensor: - platform: max44009 name: "Luminita_max44009" id: "my_max44009" update_interval: 1s mode: continuous Montam acel Shelly EM la invertor: un canal pe intrare, celalalt pe iesire AC. Facem entitate in HA "solar_power" si "solar_energy": template: - sensor: - name: "solar_energy" unit_of_measurement: "kWh" device_class: energy state_class: total attributes: last_reset: '1970-01-01T00:00:00+00:00' icon: mdi:solar-panel-large state: > {% set iesire_kwh = states('sensor.shellyem_98cdac1f3e9e_channel_2_energy') | float %} {% set intrare_kwh = states('sensor.shellyem_98cdac1f3e9e_channel_1_energy') | float %} {% if is_number(states('sensor.shellyem_98cdac1f3e9e_channel_2_energy')) and is_number(states('sensor.shellyem_98cdac1f3e9e_channel_1_energy')) %} {{ ((iesire_kwh - intrare_kwh) - 0.02) | round(1) }} {% else %} None {% endif %} - sensor: - name: "solar_power" unit_of_measurement: "W" icon: mdi:solar-power device_class: power state_class: measurement state: > {% set iesire_w = states('sensor.shellyem_98cdac1f3e9e_channel_2_power') | float %} {% set intrare_w = states('sensor.shellyem_98cdac1f3e9e_channel_1_power') | float %} {% if is_number(states('sensor.shellyem_98cdac1f3e9e_channel_2_power')) and is_number(states('sensor.shellyem_98cdac1f3e9e_channel_1_power')) %} {{ ((iesire_w - intrare_w)-20) | round(1) }} {% else %} None {% endif %} Calibram senzorul. Luam un text editor, eu folosesc vscode, notam valorile in felul urmator: lumin putere azimuth 6115 1780 282 2903 896 279 etc etc etc Lumina este valoarea data de senzor. Puterea e valoarea puterii instante cand este folosita SI reteaua de ex la 250W retea, rest putere solara. Azimuth e data de entitatea sensor.sun_azimuth. Daca nu o gasiti, exista tutoriale. Strangem valori o zi intreaga la fiecare 30 minute. Copy paste pe coloana se poate face cu SHIFT+CONTROL. Intram pe acest site si scriem la coloana Y putere si X lumina. NU le inversam. Vom obtine o formula. dam copy si paste in vscode. Va da paste in format ciudat, trebuie corectat. Inlocuim minus cu "-" (e diferit), "*"cu "*"(la fel) si "x" cu "light". Acum avem formula pregatita pentru inserarea in noua entitate "available_pv_power". Vom avea nevoie de doua astfel de formule, o data cu valori de inainte de azimutul perpendicularei pe panouri (dimineata) si inca o dupa (Zi1 si Zi2). - sensor: - name: "available_pv_power" unit_of_measurement: "W" icon: mdi:theme-light-dark device_class: power state_class: measurement state: > {% set light = states('sensor.luminita_spectru_complect') | float %} {% set azimuth = state_attr('sun.sun', 'azimuth') | float %} {% set zi1 = (-0.0000039232*light**2+0.2892511146*light+120) | float %} {% set zi2 = (-0.0000050035*light**2+0.3157799813*light-56) | float %} {% if is_state("sun.sun","below_horizon") %} {{ '\U0001f31c' }} {% elif azimuth | float >= 55 and azimuth | float < 185 and is_number(light) %} {{ (zi1) | float | round(0) }} {% elif azimuth | float >= 185 and azimuth | float < 310 and is_number(light) %} {{ (zi2) | float | round(0) }} {% else %} None {% endif %}Felicitari, ai reusit cea mai grea parte a tutorialului. Urmeaza o noua entitate, solar_power_remaining. Inlocuim 5500 cu ce putere solara ai instalata. Aceasta entitate se ocupa cu aflarea in timp real a puterii ramase si gata de utilizare: - sensor: - name: "solar_power_remaining" unit_of_measurement: "W" icon: mdi:solar-power device_class: power state_class: measurement state: > {% set available = states('sensor.available_pv_power') %} {% set used = states('sensor.solar_power') %} {% if is_state("sun.sun","below_horizon") %} {{ '\U0001f31c' }} {% elif is_number(states('sensor.available_pv_power')) and is_number(states('sensor.solar_power')) and available | float < 5500 %} {{ (available | float - used | float) | round(0) }} {% elif is_number(states('sensor.available_pv_power')) and is_number(states('sensor.solar_power')) and available | float >= 5500 %} {{ (5500 - used | float) | round(0) }} {% else %} None {% endif %} Automatizarile: pentru releu esphome/shelly 1pm: alias: Boiler ON OFF no SBU description: "" trigger: - platform: numeric_state entity_id: sensor.shellyem_98cdac1f3e9e_channel_2_power id: offov for: hours: 0 minutes: 0 seconds: 1 above: "5000" - platform: numeric_state entity_id: sensor.solar_power_remaining for: hours: 0 minutes: 0 seconds: 20 id: solar_av above: 1050 - platform: numeric_state entity_id: sensor.shellyem_98cdac1f3e9e_channel_1_power for: hours: 0 minutes: 0 seconds: 15 above: "150" id: off_retea - platform: state entity_id: - sensor.luminita_spectru_complect to: unavailable id: unavailable for: hours: 0 minutes: 1 seconds: 0 condition: - condition: sun before: sunset after: sunrise action: - choose: - conditions: - condition: trigger id: solar_av - condition: numeric_state entity_id: sensor.shellyem_98cdac1f3e9e_channel_1_power below: "250" - condition: device type: is_off device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch sequence: - type: turn_on device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch - conditions: - condition: trigger id: off_retea - condition: device type: is_on device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch for: hours: 0 minutes: 0 seconds: 0 sequence: - type: turn_off device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch - conditions: - condition: trigger id: offov - condition: device type: is_on device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch for: hours: 0 minutes: 0 seconds: 0 sequence: - type: turn_off device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch - conditions: - condition: trigger id: unavailable - condition: device type: is_on device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch sequence: - type: turn_off device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch default: [] mode: restartPentru ac-uri urmeaza alta postare. |
#2
Posted 28 September 2022 - 06:44
Ești super tare. Urmăresc cu maxim de interes. Asta îmi preocupa și mie mintea în ultimele săptămâni.
Si uite ca am găsit gândit deja de altcineva. După ce voi 8ncepe implementarea voi interveni cu idei/sygestii. Oricum, este super tare cum ai gândit totul. Spor. |
#3
Posted 28 September 2022 - 07:31
Sunt sanse mari ca ac-ul pe care il ai sa poata fi controlat de home assistant prin instalarea componentei custom cu HACS. Pentru Midea poti instala asta. Pentru Hisense, asta. Daca nu reusim integrarea, vom folosi acel Broadlink rm4c care e recunoscut automat in HA. Exista o componenta custom numita "SmartIR" ce se ocupa cu controlul prin IR a aerului conditionat. Configuratia HA arata asa:
climate: - platform: smartir name: DDeal_HVAC unique_id: ddeal_hvac device_code: 1800 #cod telecomanda Vortex VAI1220FFWR controller_data: remote.telecomanda_universala_remote #entitate telecomanda broadlinkCautam telecomanda prin incercarea a diferitelor coduri ce le gasiti pe acel github, o gasesti aproape sigur. Automatizari pot fi de mai multe feluri: Aparatul porneste direct la temperatura dorita cand e putere solara: alias: Incalzire Bucatarie description: "" trigger: - platform: numeric_state entity_id: sensor.solar_power_remaining_ignoring_boiler for: hours: 0 minutes: 2 seconds: 0 above: 850 id: remaining - platform: numeric_state entity_id: sensor.shellyem_98cdac1f3e9e_channel_1_power above: 250 id: retea for: hours: 0 minutes: 0 seconds: 30 condition: - condition: sun before: sunset after: sunrise after_offset: "01:00:00" action: - choose: - conditions: - condition: trigger id: remaining - condition: numeric_state entity_id: sensor.temperatura_camera_tehnica below: 30 - condition: state state: "off" entity_id: climate.bucatarie sequence: - type: turn_off device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch enabled: false - service: climate.set_temperature data: temperature: 24 hvac_mode: heat target: entity_id: climate.bucatarie - device_id: 0543c64bb681b6c9fd4f4dc521496ef1 domain: button entity_id: button.nodemcu_3_restart type: press - conditions: - condition: trigger id: retea - condition: state state: heat entity_id: climate.bucatarie sequence: - service: climate.turn_off data: {} target: entity_id: climate.bucatarie default: [] mode: restartAparatul nu porneste singur, doar isi schimba temperatura in functie de puterea solara si noi decidem daca il vrem sau nu pornit: alias: Incalzire Dvale description: "" trigger: - platform: numeric_state entity_id: sensor.solar_power_remaining_ignoring_boiler for: hours: 0 minutes: 1 seconds: 30 above: 750 id: remaining - platform: numeric_state entity_id: sensor.shellyem_98cdac1f3e9e_channel_1_power above: "250" id: retea for: hours: 0 minutes: 2 seconds: 0 - platform: state entity_id: - climate.midea_ac_18691697944765 from: heat to: "off" for: hours: 0 minutes: 0 seconds: 6 id: off_reset_temp condition: - condition: sun before: sunset after: sunrise after_offset: "01:00:00" action: - choose: - conditions: - condition: trigger id: remaining - condition: numeric_state entity_id: sensor.temperatura_camera_tehnica below: 30 - condition: numeric_state entity_id: sensor.maindorm_hvac_set_temp below: 26 sequence: - service: climate.set_temperature data: temperature: 26 target: entity_id: climate.midea_ac_18691697944765 - type: turn_off device_id: a7475f6837dd700fb92256ecaf5c3b40 entity_id: switch.boiler_1500w_shelly1pm domain: switch enabled: false - conditions: - condition: trigger id: retea - condition: state state: heat entity_id: climate.midea_ac_18691697944765 - condition: numeric_state entity_id: sensor.maindorm_hvac_set_temp above: "22" sequence: - service: climate.set_temperature data: temperature: 22 target: entity_id: climate.midea_ac_18691697944765 - conditions: - condition: trigger id: off_reset_temp sequence: - service: climate.set_temperature data: temperature: 22 target: entity_id: climate.midea_ac_18691697944765 default: [] mode: restartAutomatizare de tip 3 care e in beta: aparatul porneste la temperatura joasa (vbm de caldura), si isi creste treptat temperatura pana cand nu mai e putere disponibila. Cand soarele intra in nori, se schimba temperatura inapoi la prima temperatura (cea la care a pornit). Pentru automatizarea asta e nevoie sa monitorizam de indeaproape consumul instant al aparatului. Folosim priza aia shelly. alias: Incalzire Ddeal new description: "" trigger: - platform: numeric_state entity_id: sensor.solar_power_remaining_ignoring_boiler for: hours: 0 minutes: 1 seconds: 0 above: 1250 id: remaining - platform: numeric_state entity_id: sensor.shellyem_98cdac1f3e9e_channel_1_power above: 250 id: retea for: hours: 0 minutes: 1 seconds: 30 - platform: numeric_state entity_id: sensor.solar_power_remaining_ignoring_boiler for: hours: 0 minutes: 0 seconds: 59 above: 600 id: remaining_low - platform: state entity_id: - climate.ddeal_hvac to: "off" from: heat id: off reset for: hours: 0 minutes: 0 seconds: 1 condition: - condition: sun before: sunset after: sunrise after_offset: "01:20:00" action: - choose: - conditions: - condition: trigger id: remaining_low - condition: state entity_id: climate.ddeal_hvac state: "off" sequence: - service: climate.set_temperature data: temperature: 17 hvac_mode: heat target: entity_id: climate.ddeal_hvac - conditions: - condition: trigger id: remaining_low - condition: state entity_id: climate.ddeal_hvac state: heat - condition: numeric_state entity_id: sensor.vortex_ddeal_set_temp below: 19 sequence: - service: climate.set_temperature data: temperature: 19 target: entity_id: climate.ddeal_hvac - conditions: - condition: trigger id: remaining_low - condition: numeric_state entity_id: sensor.vortex_ddeal_set_temp above: 18 below: 21 - condition: state entity_id: climate.ddeal_hvac state: heat sequence: - service: climate.set_temperature data: temperature: 21 target: entity_id: climate.ddeal_hvac - conditions: - condition: trigger id: remaining - condition: state entity_id: climate.ddeal_hvac state: heat - condition: numeric_state entity_id: sensor.vortex_ddeal_set_temp below: 27 sequence: - service: climate.set_temperature data: temperature: 27 target: entity_id: climate.ddeal_hvac - conditions: - condition: trigger id: retea - condition: numeric_state entity_id: sensor.vortex_ddeal_set_temp above: 17 - condition: state entity_id: climate.ddeal_hvac state: heat sequence: - service: climate.set_temperature data: temperature: 17 target: entity_id: climate.ddeal_hvac - conditions: - condition: trigger id: off reset sequence: - service: climate.set_temperature data: temperature: 16 target: entity_id: climate.ddeal_hvac - conditions: - condition: trigger id: remaining_low - condition: numeric_state entity_id: sensor.vortex_ddeal_set_temp below: 23 above: 20 sequence: - service: climate.set_temperature data: temperature: 23 target: entity_id: climate.ddeal_hvac default: [] mode: restart |
#4
Posted 28 September 2022 - 07:39
Am uitat sa precizez: daca ai invertor ce injecteaza in retea, NU mai e nevoie de senzor. Shelly EM inregistreaza valoare negativa pe canalul retelei nationale si aceea e puterea solara ramasa "solar_power_remaining". De asemenea, automatizarile sunt pentru functionarea fara baterii, pe modul solar first sau "SUB" cum e denimit la invertoarele easun/mpp.
|
#5
Posted 28 September 2022 - 08:08
scuze, dar titlul e incomplet!
trebuie adăugat: ...cu computer, senzori, relee, contoare inteligente, power meter, PROGRAME de editare și CUNOȘTINȚE solide de înșirat linii de cod... așa, doar cu home asistent aprind luminile și pornesc muzica! PS: n-ai zis fix ce ne interesează - rezultatul final este...? |
#7
Posted 28 September 2022 - 08:26
Rezultatul final este controlul consumatorilor in functie de puterea solara ce o avem astfel incat se minimizeaza timpul de amortizare al investitiei dupa ce am instalat panourile fotovoltaice. Nu sunt programator, mi-a luat fix un an sa invat sa fac "esphoame" si sa obtin acele automatizari ce le consider eu bune. Automatizarile nu sunt scrise de mine, au un editor visual/interactiv dar in scris nu se poate transfera acea automatizare decat prin codul yaml.
|
#9
Posted 29 September 2022 - 10:43
@wtvr , tot ce ai postat aici e si testat in viata reala sau e inca in faza de concept ?
|
#10
Posted 29 September 2022 - 11:15
wtvr, on 28 septembrie 2022 - 08:26, said:
Rezultatul final este controlul consumatorilor in functie de puterea solara ce o avem astfel incat se minimizeaza timpul de amortizare al investitiei dupa ce am instalat panourile fotovoltaice. ăăă, de ce nu citești topicele cu atenție? orice ai face, amortizarea nu are loc în timp util: mereu se va strica ceva din sistem (inverter, panou) care va adăuga o nouă sumă importantă la valoarea de amortizat iar soluțiile cele mai eficiente și NE îmbârligate sunt: divertere care trimit energia spre AC-uri, boilere, puffere, piscine! că aprinzi tu 2 becuri în plus nu-nseamnă amortizare, ci doar joacă! |
|
#11
Posted 29 September 2022 - 11:27
Imbarligate sunt doar daca nu ai cunostintele necesare sau esti prea lenes sa le obtii...caz in care mai bine cumperi diverterul gata facut.
Neinitiat asa cum sunt in acest aspect, cu Homeassistant si cu un contor suplimentar tip Shelly am reusit sa imi cresc autoconsumul de la 19% la peste 50% in conditiile in care nu am inca o rezistenta in puffer. Deci se poate... Mai mult decat atat i-am dat de gust, vreau sa dezvolt optiunile. Felicitari colegului care a avut bunavointa sa impartaseasca cu noi informatiile. Ca sa nu mai zic ca userul citat e inițiatorul topicului, deci cred ca altii ar trebui sa citeasca tot! )) Edited by piratu360, 29 September 2022 - 11:35. |
#12
Posted 29 September 2022 - 11:36
și io apreciez munca colegului, dar tre să zică lucrurilor pe nume!
iar cazul tău întărește idea mea: se poate crește autoconsumul și fără să cunoști 2 limbaje de programare (unii n-au timp, alții abilități) |
#13
Posted 29 September 2022 - 11:40
E mai simplu decat vrei sa-ti imaginezi! Nu e tot numai cod... Si posibilitatile sunt nelimitate!
Sa nu mai zic ca userul in cauza a lasat mura in gura mai sus tot ce trebuie. Acum fiecare trebuie sa selecteze ce are nevoie. Partea nasoala e ca ,da, mai ai de cumparat componente...dar nici diverterul nu e gratis...unele fiind foarte scumpe. Ca idee, o placa cu 4 relee de tip esp8266 e undeva la 50 de lei )) Daca n-ai timp si nici abilitati se poate presupune ca ai bani? )) Edited by piratu360, 29 September 2022 - 11:41. |
#15
Posted 29 September 2022 - 14:52
hvac, on 29 septembrie 2022 - 10:43, said:
@wtvr , tot ce ai postat aici e si testat in viata reala sau e inca in faza de concept ? Sus cu galben (la panouri)este puterea disponibila citita de senzor. Are o eroare de +-200W. Attached FilesEdited by Dany_Darke, 29 September 2022 - 15:47. |
|
#16
Posted 29 September 2022 - 15:35
Si "ete asa" ii descurajati voi pe cei care vor sa faca ceva constructiv (si complicat)............
Edited by hvac, 29 September 2022 - 15:35. |
#17
Posted 29 September 2022 - 16:06
wtvr, on 29 septembrie 2022 - 14:52, said:
Da, este. Automatizarea acelui releu este folosita pentru un boiler, merge de prin februarie anul asta fara mari modificari. Am facut tot felul de entitati in HA, stiu consumul HVAC pe fotovoltaice si separat pe grid, boilerul la fel, restul casei la fel (adunate). Si mai sunt altele. Nu controlez becuri, nu ma pasionează. Ac-urile au mers pe rece cu automatizare de tip on-off cum am dat in primul caz. Pe cald funcționează cu succes, un ac porneste singur dimineața si isi creste temperatura setata folosind un "buget" de 450w. Daca are energie (850w+), trece direct la 28 grade...sau orice alta temperatura se doreste. Cum ziceam, automatizarile sunt interactive, dai paste la codul yaml, schimbi pe interfață fara cod, corectezi pentru dispozitivul tau si modifici dupa preferinte temperaturile si pragurile de putere. Sus cu galben (la panouri)este puterea disponibila citita de senzor. Are o eroare de +-200W. Ai in plan si masurarea cop/err ? vad cateva rubrici cu off |
#18
Posted 29 September 2022 - 16:23
hvac, on 29 septembrie 2022 - 16:06, said: Ai in plan si masurarea cop/err ? vad cateva rubrici cu off Am facut ceva similar cu calibrarea senzorului: o regresie multiliniara ce imi da o formula unde x1 e temperatura setata si x2 e temperatura exterioara masurata cu alt senzor de temperatura esphome. Acea calibrare se bazează pe un manual Fujitsu rebrand Midea unde am scrise pe tabel COP si EER la capacitatea maxima. Ce nu sunt eu convins e cat de adevarat e acest cop/eer daca aparatul merge la capacitate maxima=>merge foarte ineficient. In cel mai rau caz, inmultind cop/eer cu puterea absorbita si adunand valorile la toate cele 4 ac-uri, obtin un necesar de caldura care e relevant comparat cu sine insusi. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users