OH3 zuviele Items?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

OH3 zuviele Items?

Beitrag von Steinspiel »

Moin,

Ich wollte mal mein erstes "externes" Widget installieren und habe es mit "weatherCard" und "weatherPopup" probiert...

Da ich zuerst im Widget nichts angezeigt bekam und auch nicht wußte wie man dies konfigurieren sollte, habe ich alles an Items hinzugefügt was der Channel hergab... :!:
OH hat sich zwar nicht aufgehängt, es dauerte aber ne Weile bis sich am Bildschirm wieder was regte.

Nun zeigt das Widget Daten an, aber ich denke das ich gar nicht alle hinzugefügten Items brauche um das Wetter der nächsten vier Tage zu sehen.

Ist es, was die Funktion/Geschwindigkeit betrifft, egal wie viele Item in der Main UI installiert sind oder kann das irgendwelche negative Auswirkungen haben?

schönen Sonntag Abend noch...
bis dann, Steinspiel

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: OH3 zuviele Items?

Beitrag von udo1toni »

Je mehr Items, desto mehr Ereignisse, also ja, die Anzahl der Items in einem System hat definitiv Einfluss auf die Geschwindigkeit bzw. eher die Reaktionsfreudigkeit des Systems. Beim Anlegen hat openHAB natürlich etliches intern zu erledigen, eine große Menge an zusätzlichen Items auf einen Schlag wird dann natürlich auch zu einer einmaligen Wartezeit führen. Ich habe in meinem System knapp 900 Items und bin damit eher klein, ich habe schon von Systemen mit der fünffachen Menge Items gelesen. Es kommt aber sicher auch etwas auf die Art der Items an, bzw. wie oft diese Daten erhalten.
Letztlich musst Du ausprobieren, ob sich Dein System "zäh" anfühlt oder nicht.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: OH3 zuviele Items?

Beitrag von Steinspiel »

Moin,
udo1toni hat geschrieben: 20. Mär 2022 22:25 [...]
Letztlich musst Du ausprobieren, ob sich Dein System "zäh" anfühlt oder nicht.
Ich habe gestern noch etwas recherchiert und im engl. OH Forum den Hinweis gefunden das das OpenWeatherMap Binding bei voller 7 Tage Voraussage 666 Items verwenden soll...
Erst habe ich gedacht ich probiere es mal einfach ein paar Tage aus wie es sich "anfühlt"... Heute früh dann aber gemerkt das das Backup heute Nacht nicht angesprungen ist UND, was viel schlimmer ist, das ich die Kaffeemaschine im dunklen befüllen musste...! :o

Heute Abend habe ich dann festgestellt das der Raspi (wahrscheinlich seit heute Nacht) komplett aufgehängt war, der Conbee Stick funktionierte sogar erst nach dem zweiten Neustart!

Ob das nun wirklich an die installierten Items des Binding oder die Art wie ich das Weather Widget eingebunden habe, lag, lässt sich natürlich jetzt schlecht sagen...

Ich vermute aber "the Number of the Beast" in Verbindung mit dem Abnehmenden Halbmond gestern Nacht könnte auch eine größere Rolle gespielt haben...!
bis dann, Steinspiel

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: OH3 zuviele Items?

Beitrag von udo1toni »

:lol:
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: OH3 zuviele Items?

Beitrag von int5749 »

Steinspiel hat geschrieben: 21. Mär 2022 19:55 Ich vermute aber "the Number of the Beast" in Verbindung mit dem Abnehmenden Halbmond gestern Nacht könnte auch eine größere Rolle gespielt haben...!
Das muss so sein und mein System ist die Bestätigung Deiner Theorie.

ich nutze auch ein Weather Widget aus dem Netz und habe dafür eine eigene items-Datei angelegt. In dieser sind alleine 705 Items nur vom DarkSkyWeather und mein System schnurrt wie ein Kätzchen. Also mal schnell raus, das Biest suchen!!

VG
int5749
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: OH3 zuviele Items?

Beitrag von Steinspiel »

Moin,
int5749 hat geschrieben: 21. Mär 2022 21:14 und habe dafür eine eigene items-Datei angelegt.
Die Idee find ich gar nicht schlecht! Habe das Binding noch einmal in OH3 x hinzugefügt und die Items per VSCode in einer *.items Datei abgelegt. Für mich fühlt sich im Moment OH3x noch völlig normal an...!

Irgendwie klappt die Konfiguration des Widget dieses mal noch nicht so richtig, wenn das läuft weiß ich genaues.
Welches Widget nutzt Du?

Noch was anderes, bei DarkSkyWeather, hast Du da in der Widget Konfiguration mit "Item Prefix 1" und "2" zu tun? Die müssen bei mir hier definiert werden, es klappt nur nicht...

Das muss so sein und mein System ist die Bestätigung Deiner Theorie.
Jetzt mal ohne Flachs: habe ne WLED unterm Schreibtisch die sich seit Wochen nach Sonnenuntergang zuverlässig (!) auf 30% gedimmt, blau einschaltet. Wie ich eben das Binding installierte begann das Teil rot zu flackern, wirklich :!:
Ich sollte nach 'nem Exorcist-Binding Ausschau halten. :D

Danke,
bis dann, Steinspiel

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: OH3 zuviele Items?

Beitrag von int5749 »

Moin Moin
Steinspiel hat geschrieben: 22. Mär 2022 20:47 Irgendwie klappt die Konfiguration des Widget dieses mal noch nicht so richtig, wenn das läuft weiß ich genaues.
Welches Widget nutzt Du?
Ich bin nicht mehr sicher, wo genau ich dies gefunden hatte, aber hier mal der Code

Code: Alles auswählen

uid: weatherCard
tags:
  - OpenWeatherMap
  - allInOne
  - daily forecast
  - expandable
  - hourly forecast
  - weather
props:
  parameters:
    - description: <b>Optional prefix</b> for item names
      label: Item prefix
      name: itemPrefix
      required: false
      type: TEXT
      groupName: general
    - description: <b>Additional prefix</b> for item names that belongs to another Things channel (valid for 'StationName' as it might differ)
      label: Additional item prefix
      name: itemPrefix2
      required: false
      type: TEXT
      groupName: general
    - description: The number of hours you want to forecast (<u>default:</u> <b>12</b>)
      label: Number of hours to forecast
      name: forecastHours
      required: false
      type: TEXT
      groupName: general
    - description: The number of days you want to forecast (<u>default:</u> <b>3</b>)
      label: Number of days to forecast
      name: forecastDays
      required: false
      type: TEXT
      groupName: general
    - description: Show all informations at once (increases height)
      label: Big card
      name: bigCard
      required: false
      type: BOOLEAN
      groupName: lookandfeel
    - description: Use this only on screens with a very small view-width
      label: Mobile optimized
      name: mobile
      required: false
      type: BOOLEAN
      groupName: lookandfeel
      advanced: true
    - description: Set a background-image which will be shown during the day (if empty it will fall back to the linear-gradient)
      label: Background image-url (day-cycle)
      name: backgroundUrlDay
      required: false
      type: TEXT
      groupName: lookandfeel
    - description: Set a background-image which will be shown during the night (if empty it will fall back to the linear-gradient)
      label: Background image-url (night-cycle)
      name: backgroundUrlNight
      required: false
      type: TEXT
      groupName: lookandfeel
    - description: Activate day & night Indication on hourly forecast (background color & sunrise / sunset indicator icon)
      label: Show sunrise & sunset
      name: sunIndicator
      required: false
      type: BOOLEAN
      groupName: lookandfeel
    - description: Overwrite the global font-color as rgb (<u>default:</u> <b>255,255,255<b>)
      label: Font color (rgb)
      name: fontColor
      required: false
      type: TEXT
      groupName: lookandfeel
    - description: Overwrite the global text shadow color as rgb (<u>default:</u> <b>0,0,0<b>)
      label: Text shadow color(rgb)
      name: textShadowColor
      required: false
      type: TEXT
      groupName: lookandfeel
    - label: Daytime background indication color
      name: sunIndicatorColorDay
      required: false
      type: TEXT
      groupName: lookandfeel
      advanced: true
    - label: Nighttime background indication color
      name: sunIndicatorColorNight
      required: false
      type: TEXT
      groupName: lookandfeel
      advanced: true
    - description: Overwrite the station location name
      label: Location title
      name: locationTitle
      required: false
      type: TEXT
      groupName: localization
    - description: Format of the timestamp below the location-name (<u>default:</u> <b>DD. MMMM YYYY</b>)<br>Visit <a 'https://day.js.org/docs/en/display/format'>https://day.js.org/docs/en/display/format</a> for more informations.
      label: Timestamp format
      name: dateScheme
      required: false
      type: TEXT
      groupName: localization
    - description: Acitvate 24-hour time-format (<u>default:</u> <b>12-hour clock-format</b>)
      label: 24h hour-format
      name: dateFormat
      required: false
      type: BOOLEAN
      groupName: localization
    - description: Add suffix to the hourly-forecast timestamp
      label: Custom hour suffix
      name: timestampSuffix
      required: false
      type: TEXT
      groupName: localization
    - label: Translation 'Feel'
      name: wordingFeel
      required: false
      type: TEXT
      groupName: localization
    - label: Translation 'Hourly'
      name: wordingForecastHours
      required: false
      type: TEXT
      groupName: localization
    - label: Translation 'Daily'
      name: wordingForecastDays
      required: false
      type: TEXT
      groupName: localization
    - label: Translation '%-Precipitation'
      name: wordingForecastPrecib
      required: false
      type: TEXT
      groupName: localization
    - label: Translation 'Now'
      name: wordingNow
      required: false
      type: TEXT
      groupName: localization
    - label: Translation 'Today'
      name: wordingToday
      required: false
      type: TEXT
      groupName: localization
    - label: Translation 'Sunrise at'
      name: wordingSunrise
      required: false
      type: TEXT
      groupName: localization
    - label: Translation 'Sunset at'
      name: wordingSunset
      required: false
      type: TEXT
      groupName: localization
  parameterGroups:
    - name: general
      label: General settings
    - name: widgetAction
      context: action
      label: Action
      description: Action to perform when the element is clicked (<b>Experimental</b>)
    - name: lookandfeel
      label: Look & Feel
      description: Everything that influences the look & feel of the widget
    - name: localization
      label: Localization settings
      description: Set alternative wordings & date pattern
timestamp: Mar 6, 2022, 3:43:47 PM
component: f7-card
config:
  class:
    - padding
  style:
    --weather-card-border-radius: 20px
    --weather-card-color: "=(!props.fontColor) ? '255,255,255' : props.fontColor"
    --weather-card-text-color: rgba(var(--weather-card-color),1)
    --weather-card-text-shadow-color: "=(!props.textShadowColor) ? '0,0,0' : props.textShadowColor"
    --weather-font-size-large: 26px
    --weather-font-size-normal: 18px
    --weather-font-size-small: 16px
    --weather-font-size-xlarge: 60px
    --weather-font-size-xsmall: 14px
    --weather-font-size-xxlarge: 70px
    --weather-font-size-xxsmall: 12px
    --weather-text-shadow-light: 2px 2px rgba(var(--weather-card-text-shadow-color),.15)
    --weather-text-shadow-strong: 2px 2px rgba(var(--weather-card-text-shadow-color),.35)
    --weather-text-transform-time: uppercase
    -moz-user-select: none
    -ms-user-select: none
    -webkit-user-select: none
    background: "=dayjs().format() >= items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'ForecastToday_Sunrise'].state && dayjs().format() < items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'ForecastToday_Sunset'].state ? 'linear-gradient(to bottom, #355b8e, #c0d4f0)' : 'linear-gradient(to bottom, #413D8F, #CE9FC8)'"
    border-radius: var(--weather-card-border-radius)
    color: var(--weather-card-text-color)
    height: "=(props.bigCard) ? '' : '160px'"
    overflow: hidden
    user-select: none
slots:
  default:
    - component: oh-link
      config:
        actionPropsParameterGroup: widgetAction
        class:
          - no-padding
          - no-margin
        color: white
        style:
          height: 100%
          left: 0
          max-height: 192px
          position: absolute
          top: 0
          width: 100%
          z-index: 98
        visible: "=props.widget_action && (vars.moreInfo === false || !vars.moreInfo) ? true : false"
    - component: f7-block
      config:
        class:
          - no-padding
          - no-margin
        style:
          background: "=dayjs().format() >= items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'ForecastToday_Sunrise'].state && dayjs().format() < items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'ForecastToday_Sunset'].state ? 'no-repeat 100% / cover url(' + props.backgroundUrlDay + ')' : 'no-repeat 100% / cover url(' + props.backgroundUrlNight + ')'"
          height: 100%
          left: 0
          position: absolute
          top: 0
          width: 100%
    - component: f7-row
      config:
        visible: "=(!vars.moreInfo) ? true : false"
      slots:
        default:
          - component: f7-col
            config:
              style:
                z-index: 95
            slots:
              default:
                - component: Label
                  config:
                    style:
                      font-size: var(--weather-font-size-large)
                      font-weight: 600
                      letter-spacing: .75px
                      overflow: hidden
                      text-overflow: ellipsis
                      text-shadow: var(--weather-text-shadow-strong)
                      white-space: nowrap
                    text: "=!props.locationTitle ? items[(!props.itemPrefix2 ? (!props.itemPrefix ? '' : props.itemPrefix) : props.itemPrefix2) + 'StationName'].state : props.locationTitle"
                - component: Label
                  config:
                    style:
                      color: rgba(var(--weather-card-color),.7)
                      font-size: var(--weather-font-size-xxsmall)
                      letter-spacing: .75px
                      overflow: hidden
                      text-overflow: ellipsis
                      text-shadow: var(--weather-text-shadow-light)
                      white-space: nowrap
                    text: "=dayjs().format(props.dateScheme ? props.dateScheme : 'DD. MMMM YYYY')"
                - component: f7-row
                  config:
                    class:
                      - align-items-center
                    style:
                      flex-wrap: nowrap
                  slots:
                    default:
                      - component: f7-icon
                        config:
                          f7: "=(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '01d') ? 'sun_max_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '01n') ? 'moon_stars_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '02d') ? 'cloud_sun_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '02n') ? 'cloud_moon_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '03d') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '03n') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '04d') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '04n') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '09d') ? 'cloud_heavyrain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '09n') ? 'cloud_heavyrain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '10d') ? 'cloud_sun_rain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '10n') ? 'cloud_moon_rain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '11d') ? 'cloud_sun_bolt_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '11n') ? 'cloud_moon_bolt_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '13d') ? 'cloud_snow_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '13n') ? 'cloud_snow_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '50d') ? 'cloud_fog_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Iconid'].state === '50n') ? 'cloud_fog_fill' : '?'"
                          style:
                            font-size: var(--weather-font-size-xxlarge)
                            padding-bottom: 5px
                            padding-top: 5px
                            text-shadow: var(--weather-text-shadow-strong)
                      - component: f7-col
                        config:
                          visible: =props.mobile === true
                        slots:
                          default:
                            - component: Label
                              config:
                                class:
                                  - padding-left
                                style:
                                  font-size: 31px
                                  font-weight: 600
                                  line-height: 31px
                                  overflow: hidden
                                  text-overflow: ellipsis
                                  text-shadow: var(--weather-text-shadow-strong)
                                  white-space: nowrap
                                text: "=Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Temperature'].state.split(' ')[0] * 10) / 10 + '°'"
                            - component: Label
                              config:
                                class:
                                  - padding-left
                                style:
                                  font-size: var(--weather-font-size-small)
                                  overflow: hidden
                                  text-overflow: ellipsis
                                  text-shadow: var(--weather-text-shadow-light)
                                  white-space: nowrap
                                text: "=((!props.wordingFeel) ? 'Feel: ' : props.wordingFeel + ': ') + Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Apparenttemperature'].state.split(' ')[0]) + '°'"
                - component: Label
                  config:
                    style:
                      font-size: var(--weather-font-size-small)
                      overflow: hidden
                      text-overflow: ellipsis
                      white-space: nowrap
                    text: "=items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Condition'].state"
          - component: f7-col
            config:
              class:
                - text-align-right
              style:
                align-self: "=props.bigCard ? 'flex-start' : 'flex-end'"
                z-index: 95
              visible: =!props.mobile
            slots:
              default:
                - component: Label
                  config:
                    style:
                      font-size: var(--weather-font-size-xlarge)
                      font-weight: 600
                      line-height: var(--weather-font-size-xlarge)
                      overflow: hidden
                      text-overflow: ellipsis
                      text-shadow: var(--weather-text-shadow-strong)
                      white-space: nowrap
                    text: "=Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Temperature'].state.split(' ')[0] * 10) / 10 + '°'"
                - component: Label
                  config:
                    style:
                      font-size: var(--weather-font-size-normal)
                      overflow: hidden
                      text-overflow: ellipsis
                      text-shadow: var(--weather-text-shadow-light)
                      white-space: nowrap
                    text: "=((!props.wordingFeel) ? 'Feel: ' : props.wordingFeel + ': ') + Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Apparenttemperature'].state.split(' ')[0]) + '°'"
                - component: f7-row
                  config:
                    class:
                      - justify-content-flex-end
                    style:
                      flex-wrap: nowrap
                      font-size: var(--weather-font-size-xsmall)
                      text-shadow: var(--weather-text-shadow-light)
                  slots:
                    default:
                      - component: Label
                        config:
                          style:
                            overflow: hidden
                            text-overflow: ellipsis
                            text-shadow: var(--weather-text-shadow-light)
                            white-space: nowrap
                          text: "=Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Humidity'].state.split(' ')[0]) + ' ' + items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Humidity'].state.split(' ')[1]"
                          tooltip: Humidity
                      - component: Label
                        config:
                          style:
                            color: rgba(var(--weather-card-color),.25)
                            text-shadow: var(--weather-text-shadow-light)
                          text: ""
                      - component: Label
                        config:
                          style:
                            overflow: hidden
                            text-overflow: ellipsis
                            text-shadow: var(--weather-text-shadow-light)
                            white-space: nowrap
                          text: "=Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Windspeed'].state.split(' ')[0]) + ' ' + items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Current_Windspeed'].state.split(' ')[1]"
                          tooltip: Windspeed
    - component: oh-button
      config:
        action: variable
        actionVariable: moreInfo
        actionVariableValue: true
        class:
          - margin-top
          - margin-right
        color: white
        colorTheme: white
        iconMaterial: more_horiz
        iconSize: 20px
        style:
          color: var(--weather-card-text-color)
          font-weight: 600
          position: absolute
          right: 0
          top: 0
          z-index: 99
        visible: "=(props.bigCard) ? false : ((!vars.moreInfo || vars.moreInfo === false) ? true : false)"
    - component: oh-button
      config:
        action: variable
        actionVariable: moreInfo
        actionVariableValue: false
        class:
          - margin-top
          - margin-right
        color: white
        colorTheme: white
        iconMaterial: close
        iconSize: 20px
        style:
          color: var(--weather-card-text-color)
          font-weight: 600
          position: absolute
          right: 0
          top: 0
          z-index: 99
        visible: "=(props.bigCard) ? false : ((vars.moreInfo || vars.moreInfo === true) ? true : false)"
    - component: f7-block
      config:
        class:
          - no-padding
          - no-margin
          - align-items-space-between
        visible: =vars.moreInfo || props.bigCard === true
      slots:
        default:
          - component: f7-segmented
            config:
              strong: true
              style:
                --f7-button-active-text-color: rgba(var(--weather-card-color),1)
                --f7-button-border-radius: 0
                --f7-button-raised-box-shadow: none
                --f7-button-text-color: rgba(var(--weather-card-color),.5)
                --f7-segmented-strong-button-active-bg-color: transparent
                --f7-segmented-strong-button-active-box-shadow: 0px 4px 0 -1px rgba(var(--weather-card-color),1)
                --f7-segmented-strong-button-active-text-color: rgba(var(--weather-card-color),1)
                --f7-segmented-strong-padding: 3px
                --f7-segmented-strong-text-color: rgba(var(--weather-card-color),.5)
                align-items: flex-end
                background: transparent
                padding-top: "=(props.bigCard) ? '16px' : '0'"
                width: "=(props.bigCard) ? '100%' : 'calc(100% - 38px)'"
                z-index: 999
              textColor: white
            slots:
              default:
                - component: oh-button
                  config:
                    action: variable
                    actionVariable: tab
                    actionVariableValue: hourly_forecast
                    active: =vars.tab === 'hourly_forecast'
                    color: var(--weather-card-text-color)
                    text: "=(!props.wordingForecastHours) ? 'Hourly' : props.wordingForecastHours"
                - component: oh-button
                  config:
                    action: variable
                    actionVariable: tab
                    actionVariableValue: daily_forecast
                    active: =vars.tab === 'daily_forecast'
                    color: var(--weather-card-text-color)
                    text: "=(!props.wordingForecastDays) ? 'Daily' : props.wordingForecastDays"
                - component: oh-button
                  config:
                    action: variable
                    actionVariable: tab
                    actionVariableValue: precip_forecast
                    active: =vars.tab === 'precip_forecast'
                    color: var(--weather-card-text-color)
                    text: "=(!props.wordingForecastPrecib) ? '%-Precipitation' : props.wordingForecastPrecib"
          - component: f7-block
            config:
              class:
                - no-padding
              style:
                border-bottom: 4px solid rgba(var(--weather-card-color),.5)
                margin-left: 4px
                margin-right: 4px
          - component: f7-swiper
            config:
              class:
                - padding-top
              navigation: true
              params:
                breakpoints:
                  "0":
                    slidesPerView: 1
                  "240":
                    slidesPerView: 2
                  "320":
                    slidesPerView: 3
                  "480":
                    slidesPerView: 4
                  "640":
                    slidesPerView: 5
                grabCursor: true
                initalSlide: 0
                keyboard: true
                mousewheel: true
                observeSlideChildren: true
                observer: true
                runCallbacksOnInit: true
                spaceBetween: 5
                updateOnWindowResize: true
                watchOverflow: true
              style:
                --swiper-navigation-color: var(--weather-card-text-color)
                --swiper-navigation-size: 30px
              visible: =vars.tab === 'hourly_forecast' || !vars.tab
            slots:
              default:
                - component: oh-repeater
                  config:
                    for: hour
                    fragment: true
                    rangeStart: 0
                    rangeStop: "=(!props.forecastHours) ? 12 : Number(props.forecastHours)"
                    sourceType: range
                  slots:
                    default:
                      - component: f7-swiper-slide
                        config:
                          expandable: true
                          style:
                            background: "=(props.sunIndicator) ? ((dayjs().add(loop.hour,'hour').format() >= items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state && dayjs().add(loop.hour,'hour').format() <= items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state) ? (!props.sunIndicatorColorDay ? 'rgba(255,255,255,.2)' : props.sunIndicatorColorDay) : (!props.sunIndicatorColorNight ? 'rgba(41,109,152,.2)' : props.sunIndicatorColorNight)) : 'none'"
                            border-radius: 5px
                        slots:
                          default:
                            - component: f7-icon
                              config:
                                f7: sun_max_fill
                                size: 17px
                                style:
                                  color: var(--weather-card-text-color)
                                  cursor: pointer
                                  position: absolute
                                  right: 3px
                                  top: 3px
                                  z-index: 998
                                tooltip: "=((!props.wordingSunrise) ? 'Sunrise at ' : props.wordingSunrise + ' ') + ((!props.dateFormat) ? dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state).format('h:mm A') : dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state).format('H:mm') + (!props.timestampSuffix ? '' : ' ' + props.timestampSuffix) ) + '<br><b>' + dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state).fromNow() + '</b>'"
                                visible: "=(dayjs().add(loop.hour,'hour').startOf('hour').format() === dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state).startOf('hour').format() && props.sunIndicator === true)"
                            - component: f7-icon
                              config:
                                f7: moon_fill
                                size: 17px
                                style:
                                  color: var(--weather-card-text-color)
                                  cursor: pointer
                                  position: absolute
                                  right: 3px
                                  top: 3px
                                  z-index: 998
                                tooltip: "=((!props.wordingSunset) ? 'Sunset at ' : props.wordingSunset + ' ') + ((!props.dateFormat) ? dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state).format('h:mm A') : dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state).format('H:mm') + (!props.timestampSuffix ? '' : ' ' + props.timestampSuffix) ) + '<br><b>' + dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state).fromNow() + '</b>'"
                                visible: "=(dayjs().add(loop.hour,'hour').startOf('hour').format() === dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state).startOf('hour').format() && props.sunIndicator === true)"
                            - component: f7-row
                              config:
                                class:
                                  - justify-content-center
                              slots:
                                default:
                                  - component: Label
                                    config:
                                      style:
                                        color: var(--weather-card-text-color)
                                        font-size: var(--weather-font-size-xsmall)
                                        font-weight: 700
                                        text-shadow: var(--weather-text-shadow-light)
                                        text-transform: var(--weather-text-transform-time)
                                      text: "=(loop.hour === 0) ? ((!props.wordingNow) ? 'Now' : props.wordingNow) : ((!props.dateFormat) ? dayjs().add(loop.hour,'hour').startOf('hour').format('h A') : dayjs().add(loop.hour,'hour').startOf('hour').format('H')) + (!props.timestampSuffix ? '' : ' ' + props.timestampSuffix)"
                            - component: f7-col
                              config:
                                class:
                                  - text-align-center
                              slots:
                                default:
                                  - component: f7-icon
                                    config:
                                      f7: "=(items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '01d') ? 'sun_max_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '01n') ? 'moon_stars_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '02d') ? 'cloud_sun_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '02n') ? 'cloud_moon_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '03d') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '03n') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '04d') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '04n') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '09d') ? 'cloud_heavyrain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '09n') ? 'cloud_heavyrain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '10d') ? 'cloud_sun_rain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '10n') ? 'cloud_moon_rain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '11d') ? 'cloud_sun_bolt_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '11n') ? 'cloud_moon_bolt_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '13d') ? 'cloud_snow_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '13n') ? 'cloud_snow_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '50d') ? 'cloud_fog_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Iconid'].state === '50n') ? 'cloud_fog_fill' : '?'"
                                      size: 48
                                      style:
                                        color: var(--weather-card-text-color)
                                        padding-bottom: 5px
                                        padding-top: 5px
                                        text-shadow: var(--weather-text-shadow-strong)
                                  - component: Label
                                    config:
                                      style:
                                        color: var(--weather-card-text-color)
                                        font-size: var(--weather-font-size-normal)
                                        font-weight: 400
                                        text-shadow: var(--weather-text-shadow-light)
                                      text: "=Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + ((loop.hour === 0) ? 'Current' : 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1))) + '_Temperature'].state.split(' ')[0]) + '°'"
          - component: f7-swiper
            config:
              class:
                - padding-top
              navigation: true
              params:
                breakpoints:
                  "0":
                    slidesPerView: 1
                  "210":
                    slidesPerView: "=(!props.forecastDays) ? 2 : ((props.forecastDays < 2) ? Math.round(Number(props.forecastDays) + 1) : 2)"
                  "480":
                    slidesPerView: "=(!props.forecastDays) ? 3 : ((props.forecastDays < 3) ? Math.round(Number(props.forecastDays) + 1) : 3)"
                  "640":
                    slidesPerView: "=(!props.forecastDays) ? 4 : ((props.forecastDays < 4) ? Math.round(Number(props.forecastDays) + 1) : 4)"
                grabCursor: true
                initalSlide: 0
                keyboard: true
                mousewheel: true
                observeSlideChildren: true
                observer: true
                spaceBetween: 5
                updateOnWindowResize: true
                watchOverflow: true
              style:
                --swiper-navigation-color: var(--weather-card-text-color)
                --swiper-navigation-size: 30px
              visible: =vars.tab === 'daily_forecast'
            slots:
              default:
                - component: oh-repeater
                  config:
                    for: day
                    fragment: true
                    rangeStart: 0
                    rangeStop: "=(!props.forecastDays) ? 3 : Number(props.forecastDays)"
                    sourceType: range
                  slots:
                    default:
                      - component: f7-swiper-slide
                        config:
                          class: text-align-center
                        slots:
                          default:
                            - component: f7-row
                              config:
                                class:
                                  - justify-content-center
                                  - align-items-center
                              slots:
                                default:
                                  - component: Label
                                    config:
                                      style:
                                        color: var(--weather-card-text-color)
                                        font-size: var(--weather-font-size-xsmall)
                                        font-weight: 700
                                        text-shadow: var(--weather-text-shadow-light)
                                        text-transform: var(--weather-text-transform-time)
                                      text: "=(loop.day === 0) ? ((!props.wordingToday) ? 'Today' : props.wordingToday) : dayjs().add(loop.day,'day').startOf('day').format('dddd')"
                            - component: f7-icon
                              config:
                                f7: "=(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '01d') ? 'sun_max_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '01n') ? 'moon_stars_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '02d') ? 'cloud_sun_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '02n') ? 'cloud_moon_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '03d') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '03n') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '04d') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '04n') ? 'cloud_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '09d') ? 'cloud_heavyrain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '09n') ? 'cloud_heavyrain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '10d') ? 'cloud_sun_rain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '10n') ? 'cloud_moon_rain_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '11d') ? 'cloud_sun_bolt_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '11n') ? 'cloud_moon_bolt_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '13d') ? 'cloud_snow_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '13n') ? 'cloud_snow_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '50d') ? 'cloud_fog_fill' : (items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + loop.day_idx))) + '_Iconid'].state === '50n') ? 'cloud_fog_fill' : '?'"
                                size: 48
                                style:
                                  color: var(--weather-card-text-color)
                                  padding-bottom: 5px
                                  padding-top: 5px
                                  text-shadow: var(--weather-text-shadow-strong)
                            - component: f7-row
                              config:
                                class:
                                  - justify-content-center
                              slots:
                                default:
                                  - component: Label
                                    config:
                                      style:
                                        color: var(--weather-card-text-color)
                                        font-size: var(--weather-font-size-normal)
                                        font-weight: 400
                                        text-shadow: var(--weather-text-shadow-light)
                                      text: "=Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + ((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + (loop.day_idx))) + '_Maxtemperature'].state.split(' ')[0])+'°'"
                                  - component: Label
                                    config:
                                      style:
                                        color: rgba(255,255,255,.2)
                                        font-size: var(--weather-font-size-normal)
                                      text: " | "
                                  - component: Label
                                    config:
                                      style:
                                        color: var(--weather-card-text-color)
                                        font-size: var(--weather-font-size-normal)
                                        font-weight: 400
                                        text-shadow: var(--weather-text-shadow-light)
                                      text: "=Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + ((loop.day === 0) ? 'Today' : ((loop.day === 1) ? 'Tomorrow' : 'Day' + (loop.day_idx))) + '_Mintemperature'].state.split(' ')[0])+'°'"
          - component: f7-swiper
            config:
              class:
                - padding-top
              navigation: true
              params:
                breakpoints:
                  "0":
                    slidesPerView: 1
                  "240":
                    slidesPerView: 2
                  "320":
                    slidesPerView: 3
                  "480":
                    slidesPerView: 4
                  "640":
                    slidesPerView: 5
                grabCursor: true
                initalSlide: 0
                keyboard: true
                mousewheel: true
                observeSlideChildren: true
                observer: true
                runCallbacksOnInit: true
                spaceBetween: 5
                updateOnWindowResize: true
                watchOverflow: true
              style:
                --swiper-navigation-color: var(--weather-card-text-color)
                --swiper-navigation-size: 30px
              visible: =vars.tab === 'precip_forecast'
            slots:
              default:
                - component: oh-repeater
                  config:
                    for: hour
                    fragment: true
                    rangeStart: 0
                    rangeStop: "=(props.forecastHours === undefined) ? 12 : Number(props.forecastHours)"
                    sourceType: range
                  slots:
                    default:
                      - component: f7-swiper-slide
                        config:
                          expandable: true
                          id: =loop.hour_idx
                          style:
                            background: "=(props.sunIndicator) ? ((dayjs().add(loop.hour,'hour').format() >= items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state && dayjs().add(loop.hour,'hour').format() <= items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state) ? (!props.sunIndicatorColorDay ? 'rgba(255,255,255,.2)' : props.sunIndicatorColorDay) : (!props.sunIndicatorColorNight ? 'rgba(41,109,152,.2)' : props.sunIndicatorColorNight)) : 'none'"
                            border-radius: 5px
                        slots:
                          default:
                            - component: f7-icon
                              config:
                                f7: sun_max_fill
                                size: 17px
                                style:
                                  color: var(--weather-card-text-color)
                                  cursor: pointer
                                  position: absolute
                                  right: 3px
                                  top: 3px
                                  z-index: 998
                                tooltip: "=((!props.wordingSunrise) ? 'Sunrise at ' : props.wordingSunrise + ' ') + ((!props.dateFormat) ? dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state).format('h:mm A') : dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state).format('H:mm') + (!props.timestampSuffix ? '' : ' ' + props.timestampSuffix) ) + '<br><b>' + dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state).fromNow() + '</b>'"
                                visible: "=(dayjs().add(loop.hour,'hour').startOf('hour').format() === dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunrise'].state).startOf('hour').format() && props.sunIndicator === true)"
                            - component: f7-icon
                              config:
                                f7: moon_fill
                                size: 17px
                                style:
                                  color: var(--weather-card-text-color)
                                  cursor: pointer
                                  position: absolute
                                  right: 3px
                                  top: 3px
                                  z-index: 998
                                tooltip: "=((!props.wordingSunset) ? 'Sunset at ' : props.wordingSunset + ' ') + ((!props.dateFormat) ? dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state).format('h:mm A') : dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state).format('H:mm') + (!props.timestampSuffix ? '' : ' ' + props.timestampSuffix) ) + '<br><b>' + dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state).fromNow() + '</b>'"
                                visible: "=(dayjs().add(loop.hour,'hour').startOf('hour').format() === dayjs(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'Forecast' + (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').format() ? 'Today' : (dayjs().add(loop.hour,'hour').startOf('day').format() === dayjs().startOf('day').add(1,'day').format() ? 'Tomorrow' : 'Day2')) + '_Sunset'].state).startOf('hour').format() && props.sunIndicator === true)"
                            - component: f7-row
                              config:
                                class:
                                  - justify-content-center
                                  - align-items-center
                              slots:
                                default:
                                  - component: Label
                                    config:
                                      style:
                                        color: var(--weather-card-text-color)
                                        font-size: var(--weather-font-size-xsmall)
                                        font-weight: 700
                                        text-shadow: var(--weather-text-shadow-light)
                                        text-transform: var(--weather-text-transform-time)
                                      text: "=(loop.hour === 0) ? ((!props.wordingNow) ? 'Now' : props.wordingNow) : ((!props.dateFormat) ? dayjs().add(loop.hour,'hour').startOf('hour').format('h A') : dayjs().add(loop.hour,'hour').startOf('hour').format('H')) + (!props.timestampSuffix ? '' : ' ' + props.timestampSuffix)"
                            - component: f7-col
                              config:
                                class:
                                  - justify-content-center
                                  - align-items-center
                                  - text-align-center
                              slots:
                                default:
                                  - component: f7-icon
                                    config:
                                      f7: umbrella_fill
                                      size: 48
                                      style:
                                        color: var(--weather-card-text-color)
                                        padding-bottom: 5px
                                        padding-top: 5px
                                        text-shadow: var(--weather-text-shadow-strong)
                                  - component: Label
                                    config:
                                      style:
                                        color: var(--weather-card-text-color)
                                        font-size: var(--weather-font-size-normal)
                                        font-weight: 400
                                        text-shadow: var(--weather-text-shadow-light)
                                      text: "=Math.round(items[((!props.itemPrefix) ? '' : props.itemPrefix) + 'ForecastHours' + ((loop.hour_idx+1 < 10 ? '0'+(loop.hour_idx+1) : loop.hour_idx+1)) + '_Precipprobability'].state.split(' ')[0]) + '%'"
Auf der Seite waren dann auch die default DarkSky Items, diese habe ich dann eben einfach in eine items kopiert und die Bridge konfiguriert.
Die Anpassungen waren überschaubar.
Steinspiel hat geschrieben: 22. Mär 2022 20:47 Jetzt mal ohne Flachs: habe ne WLED unterm Schreibtisch die sich seit Wochen nach Sonnenuntergang zuverlässig (!) auf 30% gedimmt, blau einschaltet. Wie ich eben das Binding installierte begann das Teil rot zu flackern, wirklich :!:
Ich sollte nach 'nem Exorcist-Binding Ausschau halten. :D
So langsam mache ich mir Sorgen, vor Allem weil ich den Container bei mir noch Skynet genannt habe. Hoffentlich kommt von Deiner Geisterstimmung nichts zu mir, nur weil ich Dir antworte :lol: :lol:

Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: OH3 zuviele Items?

Beitrag von udo1toni »

Ist ohnehin zu spät, das Monster hat ja Zugriff aufs Internet :lol:
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: OH3 zuviele Items?

Beitrag von Steinspiel »

Moin,

Leider komme ich erst jetzt zum antworten...
int5749 hat geschrieben: 22. Mär 2022 21:45 Ich bin nicht mehr sicher, wo genau ich dies gefunden hatte, aber hier mal der Code
Das war vielleicht hier , jedenfalls habe ich "meine" WeatherCard daher...
Hoffentlich kommt von Deiner Geisterstimmung nichts zu mir, nur weil ich Dir antworte :lol: :lol:
Wenn es mal nur die "Geisterstimmung" währe, selbst mit (langsamen!) Zombies könnte ich mich arrangieren... ;-)

Das die WLED ausgefallen sind scheint daran zu liegen das die LED`s selbst wohl den Geist aufgegeben haben: habe den ESP32 heute neu geflasht, das Web GUI läuft aber die LED`s lassen sich nicht schalten. Gut, das kann immer mal passieren und hat bestimmt nichts mit OH zu tun. Trotzdem lief es hier bei mir unrund: manche (alten) Schaltungen funktionierten nicht oder merklich verzögert, das nächtliche Backup blieb manchmal aus... Nun habe ich alles wieder auf Anfang gesetzt und mich von der Wetteranzeige erst mal verabschiedet - jetzt läuft alles wieder wie gewohnt.

Danke für die Hinweise und schönen Restsonntag noch...
bis dann, Steinspiel

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: OH3 zuviele Items?

Beitrag von scotty »

Hallo zusammen,
vielleicht darf ich mal kurz ein Frage stellen: @int5749, das mit der eigenen items-Datei für dein Weather Widget interessiert mich doch sehr. Wie hast du das gemacht?

Danke im Voraus.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Antworten