Água quente - a que horas está pronta. (Termoacumulador)

Mais que um projeto, per se, trata-se de um conceito-ideia que permite, através da conjugação de vários sensores e de templates, saber quanto tempo levará um termoacumulador a aquecer a água - independentemente da temperatura inicial e da final.

O conceito baseia-se nas experiências de Joule que comprovou que são necessários 4,186 J/g∙°C para aquecer 1 cal/g de água.

Num sentido prático, suponhamos que temos um termoacumulador com 80L de capacidade e uma resistência de 1500W.
A temperatura inicial é de 30ºC e a final (pretendida) é de 60ºC.

A fórmula para saber quanto tempo levará ditos 80L a alcançarem a temperatura final representa-se por:

Segundos = 4.186J/g∙°C ( Volume/g [ temperatura final - temperatura inicial]) / Wattage

4.186J/g∙°C ( 80000g [60ºC-30ºC]) / 1500W = 6698 segundos

Ou seja, algo como: 1h:51m:38s


Aplicando isso ao HA, podemos recorrer a dois tipos de sensores:

Sonda termoacumulador - temperatura em tempo real
Tomata inteligente/dados do próprio termoacumulador/etc./definir potência fixa - Potência/consumo

ex:

template:
  - sensor:
      - name: "Time Heater Seconds"
        unique_id: time_heater_seconds
        state: >
          {{ (4.186*(80000*(60-states('sensor.temperature)|float(0)))/states('sensor.heater_watts')|float(0)) | round(0) }}
        availability:  "{{ states('sensor.heater_watts') | float > 0 }}"

Dessa forma conseguimos saber, de forma constante, quanto tempo levará a água a aquecer - a qualquer momento.

No meu caso, tratando-se de um termoacumulador antigo, estou a utilizar como sensores um Shelly 1PM, como sonda, e os dados (FreeDS - MQTT - freeds_XXXX/calcWatts) vindos do gestor de excedentes; o que permite recolher os dados, não só com a potência máxima (ex: 1500W) mas também com, e apenas, o recurso dos excedentes (ex: 500W, 650W, 1400W, etc.)

Se preferirem que os dados venham em HH:MM:SS, podem alterar o template para:

  - sensor:
      - name: "Time Heater - HH:MM:SS"
        unique_id: time_heater_hms
        state: >
          {{ (4.186*(80000*(60-states('sensor.temperature')|float(0)))/states('sensor.heater_watts')|float(0)) | round(0) | int | timestamp_custom('%H:%M:%S' , false) }}
        availability:  "{{ states('sensor.heater_watts') | float > 0 }}"

Outro exemplo prático será um template que diga, em vez de quanto tempo levará (segundos), a que horas estará a água pronta:

  - sensor:        
      - name: "Time Temperature"
        unique_id: time_heater_temperature
        state: >
          {{ (states('sensor.time_heater_seconds') | float + now().timestamp() | int) | timestamp_custom('%H:%M:%S' , false) }}
        availability: "{{ states('sensor.time_heater_seconds') not in ['0', 'unavailable', 'unknown', 'none'] }}"

sensores

Ps. Se os dados de potência (Watts) forem 0W, os sensores, obviamente, ficarão ‘Unavailable’.
Edit: Acréscimo de ‘availability’ aos templates para resolver qualquer erro inevitável como “ZeroDivisionError”, quando a 0W.


EDIT:

Para resolver algumas questões estéticas, como os sensores ficarem a gray (names, icons & state-text [Unavailable]), e valores errados, caso a temperatura pretendida fosse atingida (ex: 55ºC) mas o termostato só disparasse a uma temperatura superior, induzindo a equação a valores errados: (now)HH:MM:SS - segundos & 00:00:00 - segundos; criei outros 3 templates, para se acrescentar aos 3 já criados.

Ficando a solução completa:

  - sensor:
      - name: "Time Heater Seconds"
        unique_id: time_heater_seconds
        state: >
          {{ (4.186*(80000*(60-states('sensor.temperature')|float(0)))/states('sensor.heater_watts')|float(0)) | round(0) }}
        availability:  "{{ states('sensor.heater_watts') | float > 0 }}"
        
      - name: "Time Heater"
        unique_id: time_heater
        state: >
          {{ (4.186*(80000*(60-states('sensor.temperature')|float(0)))/states('sensor.heater_watts')|float(0)) | round(0) | int | timestamp_custom('%H:%M:%S' , false) }}
        availability:  "{{ states('sensor.heater_watts') | float > 0 }}"

      - name: "Heater When"
        unique_id: heater_when
        state: >
          {{ (states('sensor.time_heater_seconds') | float + now().timestamp() | int) | timestamp_custom('%H:%M:%S' , false) }}
        availability: "{{ states('sensor.time_heater_seconds') not in ['0', 'unavailable', 'unknown', 'none'] }}"
        
#########Mode 2########## Sensores a serem adicionados ao Frontend


      - name: "Time Heater Seconds 2"
        unique_id: time_heater_seconds_2
        state: >
          {% if (is_state('sensor.time_heater_seconds','unavailable')) %}
            Idle
          {% elif (states('sensor.time_heater_seconds') | float <= 0) %}
            Idle
          {% else %}
            {{ states('sensor.time_heater_seconds') }}
          {% endif %}
        
      - name: "Time Heater 2"
        unique_id: time_heater_2
        state: >
          {% if (is_state('sensor.time_heater_seconds','unavailable')) %}
            Idle
          {% elif (states('sensor.time_heater_seconds') | float <= 0) %}
            Idle
          {% else %}
            {{ states('sensor.time_heater') }}
          {% endif %}

      - name: "Heater When 2"
        unique_id: heater_when_2
        state: >
          {% if (is_state('sensor.time_heater_seconds','unavailable')) %}
            Idle
          {% elif (states('sensor.time_heater_seconds') | float <= 0) %}
            Idle
          {% else %}
            {{ states('sensor.heater_when') }}
          {% endif %}

Honestamente, não consegui contemplar uma solução mais elegante. Mas, ao menos, essa parece resolver todas as pequenas questões e imperfeições.

Exemplos de ambos modes:

Ex: 1500W - Temperatura pretendida por atingir
mode2normal

Aqui começam os erros & questões estéticas, já resolvidos…

Ex: 1500W - Temperatura pretendida alcançada (ex:55ºC), mas termostato só dispara a uma temperatura superior (ex: 60ºC)
mode2minus

Ex: 0W - Temperatura pretendida alcançada
0w

10 Curtiram

Obrigado @MarAE pela partilha e os meus parabéns!

Adoro estes projectos baseados em ciência e que ainda por cima são uteis. É excelente para ser aplicado no dia a dia a coisas como por exemplo a gestão de excedentes ou a poupança de energia.

Realmente algo muito interessante. Já agora para sistemas com bomba de calor calculo que na formula na área dos watts se tenha de colocar os watts da bomba de calor a multiplicar pelo factor scop ?

Ou seja, para uma bomba de calor com potência de 250 W e scop de 2,8 :

4.186J/g∙°C ( 80000g [60ºC-30ºC]) / 250 * 2,8 = 14,352 segundos

Claro que na Bomba de calor a temperatura externa influência muito, mas de qualquer maneira dá para ter uma ideia, e assim fazer esses sensores de cálculo de tempo de aquecimento só com bomba de calor ou com BC e resistência, etc…

Muito bom @MarAE muito útil.
Ainda há dias se perguntava isso no discord.
Já agora uma curiosidade , quantas vezes por dia e durante quanto tempo Mantens o shelly ligado para no teu device de excedentes que deduzo que seja um triac.

É mesmo, @j_assuncao. Imaginação é o limite… E concordo. Há um certo aliciante, raison d’être, de aplicação de ciência ao mundano do dia-a-dia de automatizações. Ainda mais aquelas que nem nos lembramos que estão ‘activas’.


Fico em dúvida, @finipini.
Tendo apenas lido por alto, ou ouvido sobre o tema, fiquei com ideia que a ‘actual & badalada’ bomba de calor servia para slips (mono, multi) e, através de uma caldeira, de água sanitária.
Posso estar em erro, mas tinha ideia que havia essa diferenciação de uma típica cassete exterior de ar condicionado e a bomba de calor.

Tal iria obrigar a conseguir diferenciar-ou-especificar a energia utilizada para cada uma das ações. Talvez até incluindo, como dizes o SCOP e a dissipação/ou alocação de energia.


Ohhh! Houve discussão, @RodolfoVieira, sobre algo parecido? O link leva-me para “regras-de-utilização”.

Não compreendi a tua questão.
Uso um shelly 1PM unicamente-e-independente como sonda; sempre ‘ligado’. Separado - porque tem dita possibilidade - de acréscimo à board.

E sim, trata-se de um triac - estando agora a usar a nova versão; depois de ter tido alguns problemas com a versão antiga.

Top top top.
Amanha já vou testar, tenho vindo a pensar em não aquecer a água quando estou fora de casa.
Porque por vozes aquece e arrefece e volta a aquecer sem ninguém em casa e foram 2kw desperdiçados. Assim já consigo programar para estar a temperatura X a chegada da primeira pessoa a casa…

esquece eu estava com a cabeça a pensar em outra coisa, estava a pensar caso usasses netmetering naquela fração dos 15min como reportado aqui neste topico , mas uma vez que usas o triac ele devolve ao termoacumlador o excendente que queiras.
Caso queiras partilhar tambem aqui no forum a tua estratégia com esse triac e contar um pouco de como o usas seria interessado tambem uma partilha de projectos com esse tema.

1 Curtiu

Boa tarde.
Eu, tendo conhecimentos mais limitados, também já tenho isso há muito tempo a funcionar, e aproveito para partilhar o meu código, sem qualquer alteração. Assume que o painel, ao ligar, tem um aquecimento constante de 6ºC por hora, observação minha estimada ao longo do tempo.

binary_sensor:
  - platform: trend
    sensors:
      temperatura_agua_a_subir:
        entity_id: sensor.painel_solar_temperature
        device_class: heat

      temperatura_agua_a_descer:
        entity_id: sensor.painel_solar_temperature
        invert: true
        device_class: cold
sensor:

  - platform: derivative
    source: sensor.painel_solar_temperature
    name: Variação Temperatura da Água (10min)
    round: 1
    unit_time: h #
    unit: "°C/h"
    time_window: "00:10:00"

  - platform: derivative
    source: sensor.painel_solar_temperature
    name: Variação Temperatura da Água (30min)
    round: 1
    unit_time: h #
    unit: "°C/h"
    time_window: "00:30:00"

  - platform: template
    sensors:
  
      tendencia_temperatura_agua:
        unique_id: tendencia_temperatura_agua
        friendly_name: Temperatura da água (Tendência)
        value_template: >-
          {% if states('binary_sensor.temperatura_agua_a_descer') == 'on' %}
            A arrefecer
          {% elif states('binary_sensor.temperatura_agua_a_subir') == 'on' %}
            A aquecer
          {% else %}
            Constante
          {% endif %}
        icon_template: >-
          {% if states('binary_sensor.temperatura_agua_a_descer') == 'on' %}
            mdi:thermometer-chevron-down
          {% elif states('binary_sensor.temperatura_agua_a_subir') == 'on' %}
            mdi:thermometer-chevron-up
          {% else %}
            mdi:coolant-temperature
          {% endif %}
  
      estado_temperatura_agua:
        unique_id: estado_temperatura_agua
        friendly_name: Estado Temp. Água
        value_template: >-
            {% set temp_alvo = 38.0 %}
            {% set temp_actual = states('sensor.painel_solar_temperature')|float(default=0) %}
            {% if temp_actual >= temp_alvo %}
              OK
            {% else %}
              FRIA
            {%- endif -%}
        attribute_templates:
          Tempo Necessário: >-
            {% set temp_alvo = 38 %}
            {% set temp_actual = states('sensor.painel_solar_temperature')|float(default=0) %}
            {% set racio_aquecimento_actual = states('sensor.variacao_temperatura_da_agua_10min')|float(default=0) %}
            {% set racio_aquecimento_forcado = 6.0 %}
            {% set estado_painel_solar = states('switch.localtuya_power_01') %}
            {% if temp_actual >= temp_alvo %}
              {% set segundos = 0 %}
            {% else %}
              {% if estado_painel_solar == 'on' %}
                {% set segundos = (((temp_alvo-temp_actual) / racio_aquecimento_forcado) * 3600)|int(default=0) %}
              {% else %}
                {% if racio_aquecimento_actual > 0 %}
                  {% set segundos = (((temp_alvo-temp_actual) / racio_aquecimento_actual) * 3600)|int(default=0) %}
                {% else %}
                  {% set segundos = -1 %}
                {% endif %}
              {% endif %}
            {% endif %}
            {% if segundos < 0 %}
              ∞
            {% else %}
              {{ '-' if segundos == 0 else segundos|timestamp_custom('%H:%M',false) }} 
            {% endif %}
          Tempo com Painel: >-
            {% set temp_alvo = 38 %}
            {% set temp_actual = states('sensor.painel_solar_temperature')|float(default=0) %}
            {% set racio_aquecimento_forcado = 6.0 %}
            {% if temp_actual >= temp_alvo %}
              {% set segundos = 0 %}
            {% else %}
                {% set segundos = (((temp_alvo-temp_actual) / racio_aquecimento_forcado) * 3600)|int(default=0) %}
            {% endif %}
            {% if segundos < 0 %}
              ∞
            {% else %}
              {{ '-' if segundos == 0 else segundos|timestamp_custom('%H:%M',false) }} 
            {% endif %}

e um script que me responde com a temperatura da água, que ativo pelo googlehome por voz, está um pouco mais complexo devido a eu tentar detectar de qual google home foi feita a pergunta através de movimento perto (falível, eu sei):

alias: Temperatura da água - Relatório
sequence:
  - service: tts.google_translate_say
    data:
      entity_id: >-
        {% set colunas = ['media_player.coluna_da_sala',
        'media_player.coluna_da_cozinha', 'media_player.coluna_da_cave'] %} {%
        set movimento =
        ['binary_sensor.movimento_quintal_occupancy','binary_sensor.movimento_na_cave_occupancy','binary_sensor.movimento_sala_occupancy','binary_sensor.movimento_cozinha_occupancy']
        %} {% set n_alvos =
        expand(states.media_player)|selectattr('attributes.media_title','eq','Ruído
        branco')|map(attribute='entity_id')|list | count %} {% if n_alvos == 1
        %}
          {{ expand(states.media_player)|selectattr('attributes.media_title','eq','Ruído branco')|map(attribute='entity_id')|list |join(', ') }}
        {% elif (expand(movimento) | selectattr('state', 'eq',
        'on')|map(attribute='entity_id')| list | count ) == 0 %}
          {{ expand(colunas) | sort(attribute='last_changed', reverse=true) | map(attribute='entity_id') | first }}
        {% else %}
          {{ expand(movimento) | selectattr('state', 'eq', 'on') |map(attribute='entity_id')| list | join(', ')
            | replace('binary_sensor.movimento_sala_occupancy','media_player.coluna_da_sala')
            | replace('binary_sensor.movimento_cozinha_occupancy','media_player.coluna_da_cozinha')
            | replace('binary_sensor.movimento_quintal_occupancy','media_player.coluna_da_cozinha')
            | replace('binary_sensor.movimento_na_cave_occupancy','media_player.coluna_da_cave')
           }}
        {% endif %}
      message: >-
        {% set temperatura =
        states('sensor.painel_solar_temperature')|float(default=0) %} {% set
        descer = states('binary_sensor.temperatura_agua_a_descer') %} {% set
        tempo_sem_painel = state_attr('sensor.estado_temperatura_agua','Tempo
        Necessário') %} {% set tempo_com_painel =
        state_attr('sensor.estado_temperatura_agua','Tempo com Painel') %} {% if
        tempo_com_painel is search(':', ignorecase=False) %}
          {% set hc = tempo_com_painel.split(':')[0]|int(default=0) %}
          {% set mc = tempo_com_painel.split(':')[1]|int(default=0) %}
        {% else %}
          {% set hc = 0 %}
          {% set mc = 0 %}
        {% endif %} {% if tempo_sem_painel is search(':', ignorecase=False) %}
          {% set hs = tempo_sem_painel.split(':')[0]|int(default=0) %}
          {% set ms = tempo_semn_painel.split(':')[1]|int(default=0) %}
        {% else %}
          {% set hs = 0 %}
          {% set ms = 0 %}
        {% endif %} {% set texto = '' %}

        {% set texto = texto + 'A água ' + ['do painel ','no painel ','do
        depósito ','no depósito ',' ']|random %} {% set texto = texto + 'está a
        ' + temperatura|string + ' graus, ' %} {% if temperatura > 75 %}
           {% set texto = texto + ['dá para escaldar uma galinha.','está muito quente, cuidado para não se queimarem.','está mesmo muito quente.']|random %}
        {% elif temperatura > 62 %}
          {% set texto = texto + ['dá para quantos banhos forem precisos.','está quente o suficiente para os banhos que forem precisos.']|random %}
        {% elif temperatura > 48 %}
          {% set texto = texto + ['está óptima para pelo menos 2 banhos.','dá para pelo menos 2 banhos.','dá para tomar banho pelo menos 2 vezes.']|random %}
        {% elif temperatura > 38 %}
          {% set texto = texto + ['está óptima para pelo menos 1 banho.','dá para pelo menos 1 banho.','dá para 1 banho não muito longo.']|random %}
          {% if descer %}
            {% set texto = texto + ' No entanto está a arrefecer a um ritmo de ' + states('sensor.variacao_temperatura_da_agua_30min')|float(default= 0)|abs|string + ' graus por hora.' %}
          {% endif %}
        {% elif temperatura > 35 %}
          {% set texto = texto + ['dá para 1 banho rápido,','dá à conta para 1 banho rápido, ']|random %}
          {% if descer %}
            {% set texto = texto + 'mas está a arrefecer a um ritmo de ' + states('sensor.variacao_temperatura_da_agua_30min')|float(default= 0)|abs|string + ' graus por hora.' %}
          {% else %}
            {% set texto = texto + 'apesar de estar a aquecer a um ritmo de ' + states('sensor.variacao_temperatura_da_agua_30min')|float(default= 0)|abs|string + ' graus por hora.' %}
          {% endif %}
        {% else %}
          {% if temperatura > 31 %}
             {% set texto = texto + ['um pouco fria.','está fria.']|random %}
          {% elif temperatura > 26 %}
            {% set texto = texto + ['bastante fria.','está muito fria.','está bastante fria.']|random %}
          {% else %}
            {% set texto = texto + ['está gelada!','está fria demais.','nem pensar em tomar banho!']|random %}
          {% endif %}
          {% if states('switch.localtuya_power_01') == 'on' %}
            {% set texto = texto + ' O painel está ligado e será necessário ' %}
            {% if hc > 0 %}
              {% if hc == 1 %}
                {% set texto = texto + '1 hora' %}
              {% else %}
                {% set texto = texto + hc|string + 'horas' %}
              {% endif %}
            {% endif %}
            {% if hc > 0 and mc > 0 %}
              {% set texto = texto + ' e ' %}
            {% endif %}
            {% if mc > 0 %}
              {% if mc == 1 %}
                {% set texto = texto + '1 minuto' %}
              {% else %}
                {% set texto = texto + mc|string + 'minutos' %}
              {% endif %}
            {% endif %}
            {% set texto = texto + ' para ' + ['atingir','chegar a']|random + ' uma boa temperatura.' %}
          {% else %}
            {% if descer %}
              {% set texto = texto + ' Sem o painel não será possível aquecer a água. Ligando painel será necessário ' %}
              {% if hc > 0 %}
                {% if hc == 1 %}
                  {% set texto = texto + '1 hora' %}
                {% else %}
                  {% set texto = texto + hc|string + 'horas' %}
                {% endif %}
              {% endif %}
              {% if hc > 0 and mc > 0 %}
                {% set texto = texto + ' e ' %}
              {% endif %}
              {% if mc > 0 %}
                {% if mc == 1 %}
                  {% set texto = texto + '1 minuto' %}
                {% else %}
                  {% set texto = texto + mc|string + 'minutos' %}
                {% endif %}
              {% endif %}
              {% set texto = texto + ' para ' + ['atingir','chegar a']|random + ' uma boa temperatura.' %}
            {% else %}
              {% set texto = texto + ' Sem o painel será necessário esperar ' %}
              {% if hs > 0 %}
                {% if hs == 1 %}
                  {% set texto = texto + '1 hora' %}
                {% else %}
                  {% set texto = texto + hs|string + 'horas' %}
                {% endif %}
              {% endif %}
              {% if hs > 0 and ms > 0 %}
                {% set texto = texto + ' e ' %}
              {% endif %}
              {% if ms > 0 %}
                {% if ms == 1 %}
                   {% set texto = texto + '1 minuto' %} 
                {% else %}
                  {% set texto = texto + ms|string + 'minutos' %}
                {% endif %}
              {% endif %}      
              {% set texto = texto + '. Com o painel ligado levará ' %}
              {% if hc > 0 %}
                {% if hc == 1 %}
                  {% set texto = texto + '1 hora' %}
                {% else %}
                  {% set texto = texto + hc|string + 'horas' %}
                {% endif %}
              {% endif %} {{ ' e ' if hc > 0 and mc > 0  }} {% if mc > 0 %}
                {% if mc == 1 %}
                  {% set texto = texto + '1 minuto' %} 
                {% else %}
                  {% set texto = texto + mc|string + 'minutos' %}
                {% endif %}
              {% endif %}
              {% set texto = texto + ' para ' + ['atingir','chegar a']|random + ' uma boa temperatura.' %}
            {% endif %}
          {% endif %}
        {% endif %} {{ texto }}
mode: single
icon: mdi:coolant-temperature

Diz-me a temperatura e o comportamento esperado com a evolução atual da temperatura da água, com e sem ligar o switch, com frases aleatórias para não ser repetitivo.
Eu sei, “maluqueira”, mas tinha tempo livre na altura. :stuck_out_tongue:

Tenho depois este card que me permite ver, caso a temperatura da água esteja abaixo do mínimo definido, quanto tempo levará a chegar à temperatura correcta, com e sem ligar a resistência. Se a temperatura estiver a descer, levará tempo “infinito” sem ligar a resistência:

image

image
Ou seja, neste último quadro, Ev. Actual = infinito, ou seja, sem ligar o painel nunca vai chegar à temperatur adequada; se ligar a resistência demorará cerca de 37min a chegar à temperatura certa.

Já agora, para quem nunca gostou de matemática, aqui está uma boa aplicação das derivadas, que sempre pensaram serem inúteis e uma perda de tempo. :blush:

1 Curtiu

Para quem andar a experimentar esta ideia, ou o vier a fazer no futuro. Acrescentei um “EDIT” ao post inicial, com o acréscimo de 3 novos sensores/templates.

Essa solução final resolve algumas questões estéticas, como o estado ‘Unavailable’, e uns valores errados quando a temperatura pretendida (ex: 55ºC) era alcançada mas o termostato apenas disparava (continuando o consumo energético) quando uma temperatura superior ser atingida.

Desculpem qualquer coisa. :disappointed:

1 Curtiu

Estou a testar uma automation que estou a detectar se pelo menos um dos telefones está em casa se sim liga a resistencia das aguas quentes às 4 e meia da manha.
Assim não mando fora cerca de 2000 w porque me esqueço de desactiva quando estou fora

Es tenho programado para manter a água entre 45-50º mas mas durante o dia faz um aquecimento que ninguém aproveita.
Embrei me de meter um raio de 3km em que eu a voltar para casa entro nele e liga a resistência e quando chegar a casa já tenho água quente

1 Curtiu

O que faço no meu painel termosifao de inverno quando o sol nao aquece e tem de bombar com uma resistencia s 2.5kv para aquecer 300litros de agua ate 55º em menos de 2 horas , muito simplesmente é: ligar a resistencia a partir das 15horas, porque 15? porque o sol ja aqueceu tudo o que tinha a aquecer e apartir daque só á resistencia eletrica. e tem um arduino com o tal relé de controlo da resistência e um sensor Dallas DS18B20 entre o tanque e a espuma de revestimento. Quando chega a 55 desliga ao fim de uns minutos. claro que o termómetro tem um offset de uns 8 ou 10 graus ou lá o que é ,pois o lado de fora do tanque(primeira camada antes do isolamento) não é a temperatura da agua. Mas evito fazer cálculos estimados podem sofrer variáveis a meio do processo.
Como so chegamos la para as 7 a casa ,a essa hora ja está mais que quente. Nem quero saber quanto tempo levou a aquecer desde que esteja quente.

como desliga depois de estar quente não volta a aquecer durante a noite e gastar energia desnecessariamente durante a noite pois ninguem toma banho de manha cá em casa. é tudo antes de ir para a cama. :sweat_smile:
Mas tenho de congratular esta abordagem pelo lato da estimativa e do calculo. :ok_hand:


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade