Bon voilà ce que j’ai :
Il faut installer les élément suivants
Créer un compte sur Créer un compte sur Login to ipgeolocation.io pour avoir les options de la lune.
Ajouter les secrets suivants :
ipgeolocation_api: xxxxx
entitie_zone_home_latitude: 47.8xxxxxxx
entitie_zone_home_longitude: 1.9xxxxxx
a partir de là, on créer les sensors :
sensor:
- platform: rest
resource: https://api.ipgeolocation.io/astronomy
name: Moon API
scan_interval: 1200
params:
apiKey: !secret ipgeolocation_api
latitude: !secret entitie_zone_home_latitude
longitude: !secret entitie_zone_home_longitude
json_attributes:
- date
- current_time
- moonrise
- moon_status
- moon_altitude
- moon_distance
- moon_azimuth
- moon_parallactic_angle
value_template: >
{% if value_json.moon_altitude > 0 %}
up
{% else %}
down
{% endif %}
icon: >
{{ state_attr('sensor.moon', 'icon') }}
template:
- sensor:
- name: "period_of_day"
state: >-
{% set elevation = state_attr('sun.sun', 'elevation') %}
{% set rising = state_attr('sun.sun', 'rising') %}
{%- if elevation <= -12 -%}
night
{%- elif -12 < elevation <= -6 -%}
{{ 'dawn' if rising else 'dusk' }}
{%- else -%}
day
{%- endif -%}
- name: "Sun Top"
state: >-
{% from 'rotation.jinja' import deg2rad_top %}
{{ deg2rad_top(state_attr('sun.sun', 'azimuth'), state_attr('sun.sun', 'elevation')) }}
- name: "Sun Left"
state: >-
{% from 'rotation.jinja' import deg2rad_left %}
{{ deg2rad_left(state_attr('sun.sun', 'azimuth'), state_attr('sun.sun', 'elevation')) }}
- name: "Sun Top inverse"
state: >
{% from 'rotation.jinja' import deg2rad_top %}
{{ deg2rad_top(state_attr('sun.sun', 'azimuth'), state_attr('sun.sun', 'elevation'), 180) }}
- name: "Sun Left inverse"
state: >-
{% from 'rotation.jinja' import deg2rad_left %}
{{ deg2rad_left(state_attr('sun.sun', 'azimuth'), state_attr('sun.sun', 'elevation'), 180) }}
- name: "Sun opacity"
state: |
{%- if states('sun.sun') == 'above_horizon' -%}
1
{%- else -%}
0
{%- endif -%}
- name: "moon Top"
state: >-
{% from 'rotation.jinja' import deg2rad_top %}
{{ deg2rad_top(state_attr('sensor.moon_api', 'moon_azimuth'), state_attr('sensor.moon_api', 'moon_altitude')) }}
- name: "moon Left"
state: >-
{% from 'rotation.jinja' import deg2rad_left %}
{{ deg2rad_left(state_attr('sensor.moon_api', 'moon_azimuth'), state_attr('sensor.moon_api', 'moon_altitude')) }}
- name: "moon Top inverse"
state: >-
{% from 'rotation.jinja' import deg2rad_top %}
{{ deg2rad_top(state_attr('sensor.moon_api', 'moon_azimuth'), state_attr('sensor.moon_api', 'moon_altitude'), 180) }}
- name: "moon Left inverse"
state: >-
{% from 'rotation.jinja' import deg2rad_left %}
{{ deg2rad_left(state_attr('sensor.moon_api', 'moon_azimuth'), state_attr('sensor.moon_api', 'moon_altitude'), 180) }}
- name: "moon opacity"
state: |
{%- if states('sensor.moon_api') == 'up' -%}
1
{%- else -%}
0
{%- endif -%}
Ajouter les images dans www
Et enfin on ajoute la carte
type: picture-elements
image: /local/images/empty.png
elements:
- type: custom:html-template-card
title: ""
ignore_line_breaks: true
picture_elements_mode: true
content: >
<img src="/local/images/sun/sun-48190.png" style="width:10%; left:{{
states('sensor.sun_left') }}%; top:{{ states('sensor.sun_top') }}%;
opacity:{{ states('sensor.sun_opacity') }};
padding:0;margin:0;position:absolute;transform:translate(-50%,-50%);" />
<img src="/local/images/moon_phases/{{states('sensor.moon_phase')}}.png"
style="width:1.5%; left:{{ states('sensor.moon_left') }}%; top:{{
states('sensor.moon_top') }}%; opacity:{{ states('sensor.moon_opacity')
}}; padding:0;margin:0;position:absolute; rotate:
{{state_attr('sensor.moon_api','moon_parallactic_angle')}}deg;transform:translate(-50%,-50%);"
/>
style:
top: 50%
left: 50%
width: 100%
height: 100%
En gros, lune et soleil vont suivre la parabole
S’afficher quand ils sont levés ou pas, phase de la lune comprise. Chez moi, ça fait donc le tour de la maison en fonction de la position réelle.
Il faut aussi adapter l’angle de la maison (chez moi 25°) dans le fichier /config/custom_templates/rotation.jinja
{# Définition de l'angle de la maison (house) en degrés par rapport au nord. Cet angle sera utilisé pour ajuster les calculs des angles d'azimut soleil/lune #}
{%- set house_angle_deg = 25 -%}
{# Définition de la constante PI pour convertir des degrés en radians #}
{%- set PI = 3.14159265359 -%}
{# Macro privée pour calculer la coordonnée "top" en fonction des angles d'azimut et d'élévation #}
{%- macro _deg2rad_top(azimuth_deg, elevation_deg, house) -%}
{# Conversion de l'azimut de degrés en radians, en prenant en compte l'angle de la maison #}
{%- set azimuth_rad = (azimuth_deg - house) * PI / 180 -%}
{# Conversion de l'élévation de degrés en radians #}
{%- set elevation_rad = elevation_deg * PI / 180 -%}
{# Calcul du cosinus de l'azimut en radians #}
{%- set cos_azimuth = cos(azimuth_rad) -%}
{# Calcul du cosinus de l'élévation en radians #}
{%- set cos_elevation = cos(elevation_rad) -%}
{# Calcul de la coordonnée "top" en fonction des cosinus, résultat converti en entier (50% - 49% facteur de l'élevation pour avoir une valeur entre 1 et 99) #}
{{- (50 - 49 * cos_azimuth * cos_elevation) | int(0) -}}
{%- endmacro -%}
{# Macro privée pour calculer la coordonnée "left" en fonction des angles d'azimut et d'élévation #}
{%- macro _deg2rad_left(azimuth_deg, elevation_deg, house) -%}
{# Conversion de l'azimut de degrés en radians, en prenant en compte l'angle de la maison #}
{%- set azimuth_rad = (azimuth_deg - house) * PI / 180 -%}
{# Conversion de l'élévation de degrés en radians #}
{%- set elevation_rad = elevation_deg * PI / 180 -%}
{# Calcul du sinus de l'azimut en radians #}
{%- set sin_azimuth = sin(azimuth_rad) -%}
{# Calcul du cosinus de l'élévation en radians #}
{%- set cos_elevation = cos(elevation_rad) -%}
{# Calcul de la coordonnée "left" en fonction du sinus et du cosinus, résultat converti en entier (50% - 49% facteur de l'élevation pour avoir une valeur entre 1 et 99) #}
{{- (50 + 49 * sin_azimuth * cos_elevation) | int(0) -}}
{%- endmacro -%}
{# Macro pour calculer la coordonnée "top" avec l'angle de la maison défini #}
{%- macro deg2rad_top(azimuth_deg, elevation_deg, correction_deg = 0 ) -%}
{{- _deg2rad_top(azimuth_deg, elevation_deg, house_angle_deg + correction_deg) -}}
{%- endmacro -%}
{# Macro pour calculer la coordonnée "left" avec l'angle de la maison défini #}
{%- macro deg2rad_left(azimuth_deg, elevation_deg, correction_deg = 0 ) -%}
{{- _deg2rad_left(azimuth_deg, elevation_deg, house_angle_deg + correction_deg) -}}
{%- endmacro -%}
Evidement, redémarrage & co pour la prise en compte