Tag und Nacht Zeit in Prozent

Hallo Alle zusammen:

Gibt es eine Möglichkeit die Zeit die die Sonnen von Sonnenaufgang bis Sonnenuntergang benötigt in Prozent auszudrücken ?

Also Sonnenaufgang 0% Sonnenuntergang 100% und vielleicht auch noch Nachtbeginn -100% bis Sonnenaufgang wieder 0 %

Oder ähnliches ??

Nachtrag:

habe es jetzt glaube ich :

sunrise_sunset_percent:
  friendly_name: 'Zeitdauer Sonnenaufgang bis Sonnenuntergang in %'
  value_template: >
    {% set sunrise = state_attr('sun.sun', 'next_rising') | as_timestamp %}
    {% set sunset = state_attr('sun.sun', 'next_setting') | as_timestamp %}
    {% set total_duration = sunset - sunrise %}
    {% set night_duration = 24 * 60 * 60 - total_duration %}
    {% set current_time = now().timestamp() %}
    {% set remaining_duration = sunset - current_time %}
    {% set daylight_duration = total_duration - night_duration %}
    {% set percent = ((total_duration - remaining_duration) / daylight_duration) * 100 %}
    {% set bounded_percent = 0 if percent < 0 else 100 if percent > 100 else percent %}
    {{ bounded_percent | round(2) }}

:crayon:by HarryP: Zusammenführung Doppelpost.
*@Zirc1781 *
Bitte zukünftig für Korrekturen/Nachträge bei “bearbeiten” Funktion (geht 24h) nutzen. Danke!

Moin,
kannst ja mal berichten ob dein Sensor funktioniert.
Muss es denn in % sein? Du kannst bei der Sonnen Integration den Sensor für die Elevation Aktivieren dort wird es in ° angezeigt.

LG
Tobi

Ja sollte in Prozent sein.

Ich möchte in Folge den Batterie SoC ‘in %’ mit den Stunden subtrahieren.

Um einen positiven oder negativen Wert zu erhalten.

Ich möchte eine Steuerkennlinie herstellen um Automationen anzusteuern.

Funktioniert doch nicht so wie erhofft.

image

Bei der Zeitdauer wird der Sonnenaufgang vom Folgetag für die Berechnung verwendet.

Habe mir gestern Abend aber noch einen Weiteren Sensor geschrieben : den Tageslicht in Prozent und der funktioniert.

      daylight_percent:
        friendly_name: "Tageslicht in Prozent"
        value_template: >-
          {% set start = states('sensor.sonnenaufgang_xxx') | as_datetime %}
          {% set end = states('sensor.sonnenuntergang_xxx') | as_datetime %}
          {% set now = now() %}
          {% set total_seconds = (end - start).total_seconds() %}
          {% set seconds_elapsed = (now - start).total_seconds() %}
          {{ ((seconds_elapsed / total_seconds) * 100) | round(1) }}
        unit_of_measurement: "%"

Jetzt habe ich Ihn noch erweitert , so das er eigentlich nur bis 100 % kommt und er soll morgens erst auf 0 % springen.
mal schauen ob das funktioniert.

      daylight_percent:
        friendly_name: "Tageslicht in Prozent"
        value_template: >-
           {% set start = states('sensor.sonnenaufgang_xxx') | as_datetime %}
           {% set end = states('sensor.sonnenuntergang_xxx') | as_datetime %}
           {% set now = now() %}
           {% set total_seconds = (end - start).total_seconds() %}
           {% set seconds_elapsed = (now - start).total_seconds() %}
           {% set percentage = ((seconds_elapsed / total_seconds) * 100) %}
           {% set adjusted_percentage = 100 if percentage >= 100 else percentage %}
           {{ adjusted_percentage | round(1) }}
        unit_of_measurement: "%"
´´´

oder so (mal kurz im TemplateEditor reingehackt) einfach reinpasten und schauen ob es das tut was es soll. Also die Werte die da rauskommen, ist jetzt kein fertiger sensor

{% set r = as_timestamp(state_attr('sun.sun','next_rising')) %}
{% set s = as_timestamp(state_attr('sun.sun','next_setting')) %}
{% if r > s %}
  {% set r = r - 60*60*24 %}
{% endif %}
{% set d = s - r %}
{% set n = 60*60*24 - d %}
1 Kalendertag (100%) ist  {{ 60*60*24 }} s
davon ist der Tag         {{ (d)|timestamp_custom('%H:%M:%S',false) }} also {{d}} s
und die Nacht             {{ (n)|timestamp_custom('%H:%M:%S',false) }} also {{n}} s
macht dann in Prozent
Tag                       {{ 100 / ( 60*60*24 ) * d }} %
Nacht                     {{ 100 / ( 60*60*24 ) * n }} %

Bis jetzt funktioniert meine Lösung gut.

nun erstelle ich mir noch eine Kennlinie zum Batteriespeicher Füllstand.


#
#Kennlinie
#

      remaining_battery_percent:
        friendly_name: 'Kennlinie in %'
        value_template: >
          {% set battery_state = states('sensor.scb_battery_soc') %}
          {% set sunset_percent = states('sensor.daylight_percent') %}
          {% if battery_state != 'unknown' and battery_state | float >= 0 and sunset_percent %}
            {{ battery_state | float - sunset_percent | float | round(1) }}
          {% else %}
            0
          {% endif %}
        unit_of_measurement: "%"

Automatisierung funktioniert auch noch / im Moment lasse ich mir nur eine Meldung schicken wenn der Wert über und unter 2% (Überschuß) fällt.

image

1 „Gefällt mir“

Habe nun noch ein paar Anpassungen gemacht und stelle diese für Euch rein.

Tageslicht in Prozent wurde angepasst :

daylight_percent:
  friendly_name: "Tageslicht in Prozent"
  value_template: >-
    {% set start = states('sensor.sonnenaufgang_xxx') | as_datetime %}
    {% set end = states('sensor.sonnenuntergang_xxx') | as_datetime %}
    {% set now = now() %}
    {% set total_seconds = (end - start).total_seconds() %}
    {% set seconds_elapsed = (now - start).total_seconds() %}
    {% set sunrise_time = states('sensor.sonnenaufgang_xxx') | as_datetime %}
    {% set sunset_time = states('sensor.sonnenuntergang_xxx') | as_datetime %}
    
    {% if now < sunrise_time %}
      {% set adjusted_percentage = 100 %}
    {% elif now > sunset_time %}
      {% set adjusted_percentage = 100 %}
    {% else %}
      {% set percentage = ((seconds_elapsed / total_seconds) * 100) %}
      {% set adjusted_percentage = 100 if percentage < 10 else percentage %}
    {% endif %}
    
    {{ adjusted_percentage | round(1) }}
  unit_of_measurement: "%"

So habe ich immer nach Sonnenuntergang und vor Sonnenaufgang 100 %

Bei Sonnenaufgang springt der Wert erst um wenn 10% erreicht wird.
Das habe ich gemacht weil mein Batteriespeicher nicht unter 10 % entladen wird und sonst Automatisierungen anlaufen würden.

#
#Kennlinie
#

      remaining_battery_percent:
        friendly_name: 'Kennlinie in %'
        value_template: >
          {% set battery_state = states('sensor.scb_battery_soc') %}
          {% set sunset_percent = states('sensor.daylight_percent') %}
          {% if battery_state != 'unknown' and battery_state | float >= 0 and sunset_percent %}
            {{ battery_state | float - sunset_percent | float | round(1) }}
          {% else %}
            0
          {% endif %}
        unit_of_measurement: "%"

Hier auch noch einmal die weitere Verwertung .

" Ich hoffe jetzt läuft alles, ansonsten werde ich berichten. "
Vielleicht kann ein Anderer von Euch das ganze auch so oder ähnlich gebrauchen.

Es funktioniert für meine Anforderungen gut.

Nachts auf 100 % und Morgens springt er erst um wenn die eingestellten 10% des Tages erreicht sind.
Damit kann ich arbeiten.