FVE se střídači GoodWe - SEMS Portal

Ucelené projekty, návody a postupy.
Uživatelský avatar
Lion®
Administrátor fóra
Administrátor fóra
Příspěvky: 1604
Registrován: 28. září 2020, 14:07
Bydliště: podkrkonoší
Dal poděkování: 144 poděkování
Dostal poděkování: 193 poděkování
Kontaktovat uživatele:

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od Lion® »

No, to asi nemáš zač.😆
Počítáš také s tím, že ty baterie asi budou postupně ztrácet na kapacitě?

Mě se ten utility_meter celkem líbí. Uděláš si senzory podle tarifu a podle toho jaký potřebuješ cyklus z jakékoliv měřené entity. Pak už je jen +-*/. Input_number - em můžeš hejbat s cenou atp... 😆
________________
🍻 Přispěj a získej přístup do obsahu fóra pro dárce. :thx:
Oficiální sada s Raspberry Pi 4B/4GB, černá +Argon NEO Raspberry Pi 4 Case
Patriot Burst 2.5" SATA SSD 120GB + AXAGON EE25-XA6 ALINE box

Galerie realizací

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

S baterií počítám - kapacita 28.8kWh, integrace mi hází SOH pro obě baterie - takže si ho dovolím zprůměrovat, aktuálně 98%, při vybití na 10% se odpojuje (a i odpojená může klesnout na 9%) - takže mám vlastně nyní využitelných maximálně 88% z 28.8 kWh s tím že to o těch 10% posunuji, tzn. pokud je baterie na 10% je k dispozici čistá nula.
Lion® píše: 20. srpen 2021, 23:07 Uděláš si senzory podle tarifu
právě kdybych nějak dokázal vyrobit něco jako

for i in range(1,10)
parsuj
senzor_zap(i) = vyparsovaná hodnota

tak by to bylo jednoduché.
Jenže v HA nemůžu.
Musím z druhé strany

value_template: a tady zapsat jednu hodnotu

ono by stačilo kdyby se daly našablonovat i jen atributy, jenže to taky nejde, v tom následujícím název atributu zap1 až zap10, vyp1 až vyp10 taky nezapíšu šablonou, jen hodnotu.

attribute_templates:
zap1: > a tady zapsat jednu hodnotu

Pro dvacet senzorů bych musel ctrl+c ctrl-v nakopírovat téměř stejný kód, jen si do proměnné zadat který z výsledků v průběhu cyklu chci "zapsat"

Jestli to jde nějak líp tak nevím jak.

Aktuálně mám rozepsáno následující. Z HH:MM z atributů senzoru nizky_tarif mi to udělá konkrétní datumočasy zapnutí a vypnutí VT na následující dva dny (jeden, pokud je mezi půlnocí a svítáním + posun), s tím že bere do úvahy jestli se jedná o pracden nebo víkendový.
Řádky "tady nastav senzor" jsou nerealizovatelné, nebo jsem nepřišel na to jak to udělat - v Node Red by šlo alespoň call service, tady fakt nevím.
Otestováno proti nějakým datům (přechod VT přes půlnoc),
zruším vypisování ZAP/VYP a výsledkem bude jen hodnota kolik zbývá HH:MM:SS VT od teď do určeného času.
Pro automatizaci to bude stačit, použiji invertovaný "binary_sensor.nizky_tarif", pak nahradím fyzickým senzorem VT.

Jinak to tu nechám, je to celkem jednoduše upravitelné aby vypisoval jednotlivé intervaly VT - kdyby někdo potřeboval takové senzory.

Nainstalovaný CEZ a vývojářské nástroje, šablony:

Kód: Vybrat vše

Prvni vec - spocitej celkovou delku VT:

Cas T je nejblizsi usvit + posun (pomocnik, číslo, input_number.po_vychodu_slunce)
Najdi vsechny casy mezi ted a casem T
#}
ted je:         {% set nyni=(now()) -%} {{ nyni }}
slunce vyjde v:{% set vychod = as_datetime(strptime(state_attr("sun.sun", "next_rising"), "")) | as_local %} {{ vychod }}
tedy slunce vyjde za  {{ (vychod - nyni) }}
{% set konec_rizeni = (vychod + timedelta( minutes=states('input_number.po_vychodu_slunce')|float*60)) | as_local %}
{{ (konec_rizeni - nyni) }}
{% if (nyni + timedelta(days=1, minutes=-5)) < konec_rizeni %}
  {% set konec_rizeni = konec_rizeni - timedelta(days = 1) %}
{%- endif %}
a baterku se budu snazit udrzet pro VT od dnesniho zapadu slunce do: 
{{ konec_rizeni | as_local()}} 
{#
***********************************************************************************************************
****      konec_rizeni je jen cas do ktereho budu pocitat by mela vystacit baterie                *********
***********************************************************************************************************
Z CEZU dostavam dva datove objekty [0] pro pracovni dny, [1] pro vikend

zacneme jednoduse - proste to vypis

********************************** jdeme pridat nejakou logiku ******************************
Zjistit cas dalsiho zapnuti VT - tedy od now() 
a celkovou dobu trvani VT az do "konec_rizeni"#}
{%- set ns = namespace() -%} {# musim pouzit namespace pokud promennou upravuji v cyklu a chci ji mit i po skonceni cyklu#}
{%- set nyni = now() -%} {#jeden cas vsude, at neni binec v mikrosekundach#}
{%- set ns.doba_vt = nyni -%} {# inicializace - po pruchodu cykly chci mit zbyvajici doba VT do konec_mereni jako "timedelta"#}
{%- set ns.doba_vt = ns.doba_vt - ns.doba_vt -%} {# Nulova datetime promenna, nevim jak jinak#}
{%- set ns.vt_index = 1 -%} {#udelam si index pro pripadne pouziti Zap VT[index] aby mi navazovali, v cyklech pak musim odecitat#}
{%- set is_vt = False -%} {# je nyni VT?#}
{%- set ns.j = 0 -%} {# pomocna pro index#}
{%- set ns.prechod = False -%} {# Pokud budu parsovat dva dny nastavim na konci parsovani prvniho dne pokud zacal VT uz ten prvni den a neskoncil#}
{%- set den =  as_datetime(nyni.strftime('%Y-%m-%d')) -%} {# bud proparsujeme jen dnesek nebo i o den vice#}
{%- set ns.vypvt = nyni -%} {#cas posledniho Vypnuti VT VT VT !, #}
{%- set ns.zapvt = nyni -%} {#cas posledniho Zapnuti VT#}

{% if nyni.weekday() != konec_rizeni.weekday() %} #mam parsovat i dnesek? ano, vychod slunce je az zitra?, parsuji dva dny
  {% if nyni.weekday() < 5 %} # pracovni nebo vikend ?
    {% set vikend = 0 %}
  {%- else -%}
    {% set vikend = 1 %}
  {%- endif -%}
  {%- set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_1']) | string, '%H:%M').time()) -%}
  {%- if ns.vypvt > den %} # testuji jestli prvni zapnuti NT neni tedy o pulnoci, tzn. od pulnoci do tohoto CAS_ZAP_1(NT!) jiz bezi VT
     Zap0 VT0> {{ den }}
     Vyp0 VT0> {{ ns.vypvt }}
     {%- if ns.vypvt >= nyni >= den -%} #jsme zrovna v p prvnim useku VT ?? prvni vypnuti vt >= nyni >= pulnoc - jsme mezi prvnim vypnutim VT a pulnoci?
        {%- set ns.doba_vt = ns.vypvt - nyni -%} #prvni usek doby vt je od ted do xx 
        {{ ns.doba_vt }}
     {%- endif -%}
  {%- endif -%}
  {% for i in range(1,10) -%}
    {% if (state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_VYP_' ~ i] %} {# je v datech cez definovan dalsi casovy usek ?#}
      {% set ns.zapvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_VYP_' ~ i  ]) | string, '%H:%M').time()) %}
      {%-if  ns.zapvt < den + timedelta( days=1, minutes = -1) %} {#vyfiltruji pokud by pripadny konec byl ve 23:59#}
         {{ 'Zap1 VT'~i~' > ' ~ ns.zapvt -}} 
         {%- set ns.prechod = true -%} {#- -#} 
      {% endif %}
      {% set ns.j = i %}
    {%- endif -%}
    {%- if ((state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_ZAP_' ~ (i | int +1) ]) -%}
      {% set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_' ~ (i | int +1) ]) | string, '%H:%M').time()) %}
      {{- '   Vyp1 VT'~i~' > ' ~ ns.vypvt }} 
      {%- set ns.prechod = false -%} {#- -#} 
    {%- endif %}
    {% if ns.zapvt and ns.zapvt<ns.vypvt %} #pokud neprochazime pres prazdna data nebo posledni ZAP_VT neni fiktivni CEZ 23:59
    rozdil1 vyp - zap {{ns.vypvt - ns.zapvt }}

      {% if ns.zapvt | as_local <= nyni <= ns.vypvt | as_local %} # jsme nyni v intervalu, posuneme zacatek na nyni
         {% set ns.zapvt = nyni %}  aaaaaaaaaaaaaaaaaaaaaaaaaa
      {% endif %}

# nemusim testovat zda rizeni konci v tomto intervalu, tento den to urcite nebude

      {% if ns.zapvt | as_local >= nyni and ns.vypvt | as_local <= konec_rizeni %} #interval je cely mezi nyni a koncem mereni
         {%- set ns.doba_vt = ns.doba_vt + (ns.vypvt | as_local - ns.zapvt | as_local) %}
      {% endif %}
     
    
    doba_vt1 - vysledek senzoru {{ ns.doba_vt }} 
    {% endif %}
  {%- endfor %}
>>>>>>>> ns.prechod {{ns.prechod}}
>>>>>>>>>>>>>>>>>v ns.j mam posledni index pro VT_ZAP a zkusim jestli k nemu take existuje  vyp- no kravina- nebude, vdyt posledni uz davno mam {{ ns.j }}
>>>>>>>>>>> bud to konci VTvyp - a tedy az do pulnoci vt neni, 
>>>>>>>>>>>>nebo to konci VTzap a hlasim dalsimu cyklu prechod vt pres pulnoc
>>>>>>>>>>>> jen musim osetrit aby uz nevypisovat pokud najdu VTzap (tedy NT_vyp, CAS_VYP) ve 23:59 bo CEZ
    {%- if ((state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_VYP_' ~ j ]) -%}
      {% set ns.zapvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_VYP_' ~ j ]) | string, '%H:%M').time()) %}
      {{ 'Vyp VT'~j~' > ' ~ ns.vypvt }} 
    {%- endif -%}
  {% if ns.vypvt < den + timedelta( minutes = -1) %} #pokud neni VT vypnut do pulnoci (tedy 23:59, ale CEZ to ma tak divne v datech)
vt prvniho dne neni vypnut o pulnoci !!! dodelat
  {%- endif %}
   
  {% set den = den + timedelta(days=1) %}
melo by to byt zitra> {{den}}
v ns.vypvt {{ ns.vypvt }} cas posledniho vypnuti VT
v ns.zapvt {{ ns.zapvt }} cas posledniho zapnuti VT
{% endif %} # parsuj vzdy den konce_rizeni

--Druhy nebo jediny den:----------------------  22222222222222222222222222222222222222222222222222222222222222
{% if konec_rizeni.weekday() < 5 %} # pracovni nebo vikend ?
    {% set vikend = 0 %}
  {%- else -%}
    {% set vikend = 1 %}
  {%- endif %}
  {% if ns.prechod %}   #je vt zapnuty z minuleho pruchodu???
      {% set test = ns.zapvt %} #tak testujeme proti poslednimu zapnuti vcera {{ test }}
  {% else %}
     {% set test = den %} # nebo proti dnesni pulnoci {{ test }} 
  {%- endif %}

  {%- set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_1']) | string, '%H:%M').time()) -%}
  {%- if ns.vypvt > test %} # testuji jestli prvni zapnuti NT neni tedy o pulnoci, tzn. od pulnoci do tohoto CAS_ZAP_1(NT!) jiz bezi VT
     Zap0 VT0> {{ test }}
     Vyp0 VT0> {{ ns.vypvt }}
     {%- if ns.vypvt|as_local >= nyni|as_local >= test | as_local -%} #jsme zrovna v p prvnim useku VT ?? prvni vypnuti vt >= nyni >= posledni zapnuti vt - jsme mezi prvnim vypnutim VT a pulnoci?
        {%- set ns.doba_vt = ns.doba_vt + (ns.vypvt - nyni) -%} #prvni usek doby vt je od ted do xx 
        {{ doba_vt }}
     {% elif nyni < ns.vypvt|as_local %} # nebo jsme pred timto usekem VT, tak ho zapocitame cely od pulnoci nebo pripadnemu vcerejsimu zapnuti (pokud za usekem tak nas nezajima)
         {% set ns.doba_vt = ns.doba_vt + ( ns.vypvt - test ) %}
     {%- endif -%}
  {%- endif -%}
  {% for i in range(1,10) -%}
    {% if (state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_VYP_' ~ i] %} {# je v datech cez definovan dalsi casovy usek ?#}
      {% set ns.zapvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_VYP_' ~ i  ]) | string, '%H:%M').time()) %}
      {%-if  ns.zapvt < den + timedelta( days=1, minutes = -1) %} {#vyfiltruji pokud by pripadny konec byl ve 23:59#}
         {{ 'Zap2 VT'~i~' > ' ~ ns.zapvt -}} 
      {% endif %}
      {% set ns.j = i %}
    {%- endif -%}
    {%- if ((state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_ZAP_' ~ (i | int +1) ]) -%}
      {% set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_' ~ (i | int +1) ]) | string, '%H:%M').time()) %}
      {{- '   Vyp2 VT'~i~' > ' ~ ns.vypvt -}} 
    {%- endif %}
    {%- if ns.zapvt and ns.zapvt<ns.vypvt -%} {#pokud neprochazime pres prazdna data nebo posledni ZAP_VT neni fiktivni CEZ 23:59#}
    rozdil2 vyp - zap {{ ns.vypvt - ns.zapvt }}

      {%- if ns.zapvt | as_local <= nyni <= ns.vypvt | as_local %} # jsme nyni v intervalu, posuneme zacatek na nyni
         {% set ns.zapvt = nyni %}  aaaaaaaaaaaaaaaaaaaaaaaaaa 
      {%- endif %}

      {% if ns.zapvt | as_local <= konec_rizeni <= ns.vypvt | as_local %}# rizeni konci v tomto intervalu, posuneme konec
         {% set ns.vypvt = konec_rizeni %} zzzzzzzzzzzzzzzzzzzzzz
      {% endif %}

      {%- if ns.zapvt | as_local >= nyni and ns.vypvt | as_local <= konec_rizeni -%} #interval je cely mezi nyni a koncem mereni
         {% set ns.doba_vt = ns.doba_vt + (ns.vypvt | as_local - ns.zapvt | as_local) -%}
      {%- endif -%}
    doba_vt2, tedy VYSLEDNA HODNOTA TOHOTO SENZORU: {{ ns.doba_vt }}
    {% endif %}
  {%- endfor %}


v ns.vypvt {{ ns.vypvt }} cas posledniho vypnuti VT
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Tak senzor zbývajících minut VT do "vychod_slunce + offset" je hotový.
Jako atribut zobrazuje i "Konec rizeni" - konkrétní datum/čas do kterého aktuálně počítá součty intervalů VT.

Konec rizeni je od teď vždy vzdálený
- od cca 0 minut (za okamžik nastane čas "východ slunce + offset")
- do cca 24 hodin (čas "východ slunce + offset" byl před chvílí - takže počítej do zítřejšího)

Údaje bere z následujících zdrojů:
Entita: binary_sensor.nizky_tarif - což je senzor z HACS integrace https://github.com/zigul/HomeAssistant-CEZdistribuce
Entita: input_number.po_vychodu_slunce - což je pomocník typu "číslo" a je v hodinách (nebo zlomcích hodin)
Entita: sun.sun - což je slunce přítomné v HA již od jeho instalace
Sensor_Doba_VT.png

configuration.yaml:

Kód: Vybrat vše

sensor:
  - platform: template
    sensors:
          doba_vt_do:
        friendly_name: "Doba VT zbývající do: východ slunce + offset"
        value_template: >-
          {%-set vychod = as_datetime(strptime(state_attr("sun.sun", "next_rising"), "")) | as_local-%}
          {%- set nyni = now() -%} {#jeden cas vsude, at neni binec v mikrosekundach#}
          {%-set konec_rizeni = (vychod + timedelta( minutes=states('input_number.po_vychodu_slunce')|float*60)) | as_local-%}
          {%-if (nyni + timedelta(days=1, minutes=-5)) < konec_rizeni-%}
            {%-set konec_rizeni = konec_rizeni - timedelta(days = 1)-%}
          {%- endif%}
          {%- set ns = namespace() -%} {# musim pouzit namespace pokud promennou upravuji v cyklu a chci ji mit i po skonceni cyklu#}
          {%- set ns.doba_vt = nyni -%} {# inicializace - po pruchodu cykly chci mit zbyvajici doba VT do konec_mereni jako "timedelta"#}
          {%- set ns.doba_vt = ns.doba_vt - ns.doba_vt -%} {# Nulova datetime promenna, nevim jak jinak#}
          {%- set ns.prechod = False -%} {# Pokud budu parsovat dva dny nastavim na konci parsovani prvniho dne pokud zacal VT uz ten prvni den a neskoncil#}
          {%- set den =  as_datetime(nyni.strftime('%Y-%m-%d')) -%} {# bud proparsujeme jen dnesek nebo i o den vice#}
          {%- set ns.vypvt = nyni -%} {#cas posledniho Vypnuti VT VT VT !, #}
          {%- set ns.zapvt = nyni -%} {#cas posledniho Zapnuti VT#}
          {%-if nyni.weekday() != konec_rizeni.weekday()-%} {#mam parsovat i dnesek? ano, vychod slunce je az zitra?, parsuji dva dny#}
            {%-if nyni.weekday() < 5-%} {# pracovni nebo vikend ?#}
              {%-set vikend = 0-%}
            {%- else -%}
              {%-set vikend = 1-%}
            {%- endif -%}
            {%- set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_1']) | string, '%H:%M').time()) -%}
            {%- if ns.vypvt > den-%} {# testuji jestli prvni zapnuti NT neni tedy o pulnoci, tzn. od pulnoci do tohoto CAS_ZAP_1(NT!) jiz bezi VT#}
              {%- if ns.vypvt >= nyni >= den -%} {#jsme zrovna v p prvnim useku VT ?? prvni vypnuti vt >= nyni >= pulnoc - jsme mezi prvnim vypnutim VT a pulnoci?#}
                  {%- set ns.doba_vt = ns.vypvt - nyni -%} {#prvni usek doby vt je od ted do xx #}
                  {{ ns.doba_vt }}
              {%- endif -%}
            {%- endif -%}
            {%-for i in range(1,10) -%}
              {%-if (state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_VYP_' ~ i]-%} {# je v datech cez definovan dalsi casovy usek ?#}
                {%-set ns.zapvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_VYP_' ~ i  ]) | string, '%H:%M').time())-%}
                {%-if  ns.zapvt < den + timedelta( days=1, minutes = -1)-%} {#vyfiltruji pokud by pripadny konec byl ve 23:59#}
                  {%- set ns.prechod = true -%} {#- -#} 
                {%-endif-%}
              {%- endif -%}
              {%- if ((state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_ZAP_' ~ (i | int +1) ]) -%}
                {%-set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_' ~ (i | int +1) ]) | string, '%H:%M').time())-%}
                {%- set ns.prechod = false -%} {#- -#} 
              {%- endif-%}
              {%-if ns.zapvt and ns.zapvt<ns.vypvt-%} {#pokud neprochazime pres prazdna data nebo posledni ZAP_VT neni fiktivni CEZ 23:59#}
                {%-if ns.zapvt | as_local <= nyni <= ns.vypvt | as_local-%} {# jsme nyni v intervalu, posuneme zacatek na nyni#}
                  {%-set ns.zapvt = nyni-%}  
                {%-endif-%}
                {%-if ns.zapvt | as_local >= nyni and ns.vypvt | as_local <= konec_rizeni-%}
                  {%- set ns.doba_vt = ns.doba_vt + (ns.vypvt | as_local - ns.zapvt | as_local)-%}
                {%-endif-%}
              {%-endif-%}
            {%- endfor-%}
            {%-if ns.vypvt < den + timedelta( minutes = -1)-%}
            {%- endif-%}
            {%-set den = den + timedelta(days=1)-%} {# druhy nebo jediny den projdi vzdy#}
          {%-endif-%} 
          {%-if konec_rizeni.weekday() < 5-%}
              {%-set vikend = 0-%}
            {%- else -%}
              {%-set vikend = 1-%}
            {%- endif-%}
            {%-if ns.prechod-%}
                {%-set test = ns.zapvt-%}
            {%-else-%}
              {%-set test = den-%}
            {%- endif-%}
            {%- set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_1']) | string, '%H:%M').time()) -%}
            {%- if ns.vypvt > test-%} 
              {%- if ns.vypvt|as_local >= nyni|as_local >= test | as_local -%} 
                  {%- set ns.doba_vt = ns.doba_vt + (ns.vypvt - nyni) -%} 
                  {{ doba_vt }}
              {%-elif nyni < ns.vypvt|as_local-%} 
                  {%-set ns.doba_vt = ns.doba_vt + ( ns.vypvt - test )-%}
              {%- endif -%}
            {%- endif -%}
            {%-for i in range(1,10) -%}
              {%-if (state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_VYP_' ~ i]-%}
                {%-set ns.zapvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_VYP_' ~ i  ]) | string, '%H:%M').time())-%}
                {%-if  ns.zapvt < den + timedelta( days=1, minutes = -1)-%} 
                {%-endif-%}
              {%- endif -%}
              {%- if ((state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_ZAP_' ~ (i | int +1) ]) -%}
                {%-set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_' ~ (i | int +1) ]) | string, '%H:%M').time())-%}
              {%- endif-%}
              {%- if ns.zapvt and ns.zapvt<ns.vypvt -%} 
                {%- if ns.zapvt | as_local <= nyni <= ns.vypvt | as_local-%}
                  {%-set ns.zapvt = nyni-%}
                {%- endif-%}
                {%-if ns.zapvt | as_local <= konec_rizeni <= ns.vypvt | as_local-%}
                  {%-set ns.vypvt = konec_rizeni-%}
                {%-endif-%}
                {%- if ns.zapvt | as_local >= nyni and ns.vypvt | as_local <= konec_rizeni -%}
                  {%-set ns.doba_vt = ns.doba_vt + (ns.vypvt | as_local - ns.zapvt | as_local) -%}
                {%- endif -%}
              {%-endif-%}
            {%- endfor-%}
          {{ (ns.doba_vt.total_seconds() | int / 60) | int }}
        unit_of_measurement: "min"
        attribute_templates:
          konec_rizeni: >-
            {% set nyni=(now()) -%}
            {% set vychod = as_datetime(strptime(state_attr("sun.sun", "next_rising"), "")) | as_local %}
            {% set konec_rizeni = (vychod + timedelta( minutes=states('input_number.po_vychodu_slunce')|float*60)) | as_local %}
            {% if (nyni + timedelta(days=1, minutes=-5)) < konec_rizeni %}
              {% set konec_rizeni = konec_rizeni - timedelta(days = 1) %}
            {%- endif %}
            {{ konec_rizeni | as_local()}}
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od Pete30 »

Když vidím tvou pěknou práci a je vidět že se vyznáš, dostal jsem nápad ;)
Mám tu 4x solární panel (pouze 640W na balkon se víc nevejde :roll: ) a ty mám řízeny přes TriStar MPPT controller (TS-MPPT-45) do akumulátoru LIFEPO4. TriStar má RS232, propojení s PC kde pomocí prográmku pro tento regulátor bylo možné vidět aktuální výkon panelů, proud, napětí a nastavovat hodnoty regulátoru(na win 10 to nějak už nefunguje, ale nevadí již si to žije několik let svým životem bez problému).
Otázka:
Bylo by možné vyčítat data přes tu RS232 připojenou na nodemcu TX-RX (ESPhome) a dále je zpracovat v HA?
Něco mi říká že ano, ale nevím jak začít :roll:
Pokud nejsem přítomen tak jsem na rybách ;)

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Nastavení portu by mohlo být jako tady: https://www.manualslib.com/manual/73946 ... =50#manual
Googlím dál, nacházím popis protokolu: https://www.stellavolta.com/content/MSC ... US-Doc.pdf
A ještě jednou - modbus rtu - https://www.home-assistant.io/integrations/modbus/

Takže bych také řekl že to půjde. Asi bych začal s nějakým usb/serial převodníkem připojeným do USB na HA a tou modbus integrací výše

A pak - nevím zatím sice jak je to s nějakým "remote serial" u ESP - zkusit zkusit si rozchodit nějakou sériovou linku/bridge přes wifi
narazil jsem na esp-link
a možná https://community.home-assistant.io/t/r ... ows/280111

Sériovou komunikaci asi taky výhledově začnu řešit - mám tu pár věcí kde bych to využil.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od Pete30 »

Dík, prolezu to. Mám stažené i nějaké dokumenty Tristar MPPT modbus dokumentace.
Mám z toho v hlavě bordel, případně ještě zapojím syna(naštěstí je programátor).
Když jsem se připojil serial-USB dostanu z něj přes jejich prográmek MSview toto:
FV.png
Pokud nejsem přítomen tak jsem na rybách ;)

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Což počítám přes tu modbus integraci taky.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od Pete30 »

Tady mám problém že regulátor je od HA vzdálen cca 15m, proto to chci řešit přes ESPhome(nejlépe).
Asi bude potřeba vytvořit vlastní komponentu v ESP.
https://esphome.io/components/uart.html
https://esphome.io/cookbook/uart_text_s ... =uart_read
Potom se , ale už ztrácím jak zpracovat data z dokumentace regulátoru modbus, protože to pravděpodobně vysype surová data 0x003A(Output Power) například. Zatím jen teorie ještě jsem nic nezkoušel a ani netuším jaké napětí používá na TX-RX regulátor abych neodprásk nodemcu
Pokud nejsem přítomen tak jsem na rybách ;)

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Ono to bude mít asi standardní RS232, tzn. možná nějakých +-12V

Na konverzi 5V/3,3V signálů stačí tohle https://www.laskarduino.cz/4-kanaly-obo ... -5v-a-3-3v
a na konverzi 5V na RS-232 tohle: https://www.laskarduino.cz/prevodnik-tt ... --max3232/
Teoreticky by ten RS-232 modul měl fungovat i na 3,3V, ale pro jistotu...

Pak bych zkusil najít nějaký FW pro ESP který by zařídil TCP/MODBUS

a na HA použil tu modbus integraci.

Zkusím se po něčem podívat
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Tak to asi bude všechno ještě jednodušší -

Příklad - přečíst všechno z modbus a poslat přes mqtt:
https://github.com/ashish8284/ESP8266_M ... WAY_GOODWE

Vzít příklad, upravit podle dokumentace k tristar a asi hotovo. MQTT je už počítám v pohodě.


Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Odpovědět

Zpět na „Komplexní projekty“