Benachrichtigungen
Alles löschen

Attribute eines Sensors in Home Assistant nutzen

31 Beiträge
4 Benutzer
0 Reactions
1,427 Ansichten
 Olli
(@olli)
Mitglied Admin
Beigetreten: Vor 11 Jahren
Beiträge: 773
Themenstarter  

@bernd32457 Top, danke dir!

Das sieht, sagen wir mal, interessant aus, was da an Daten bereitgestellt wird. Strukturiert ist es leider nicht, aber ggf. hilft dir mein Code dennoch.

Probier' mal in den Entwicklerwerkzeugen unter Template aus, ob du mit folgendem Code eine Ausgabe der "options" bekommst:

{{ state_attr("sensor.ebusd_hmu_ebusd_hmu_statuscode_scode", "options") }}

Wenn ja, kannst du mit einer einfachen Abfrage überprüfen, ob der Wert "Deicing active" in der Auflistung enthalten ist:

{% if 'Deicing active' in state_attr("sensor.ebusd_hmu_ebusd_hmu_statuscode_scode", "options") %}
    ja
{% else %}
    nein
{% endif %}

Schau' sicherheitshalber mal, ob ich den Namen des Sensors korrekt abgetippt habe.


   
AntwortZitat
(@bernd32457)
Active Member
Beigetreten: Vor 7 Monaten
Beiträge: 8
 

@olli Hallo Oli, erstmal vielen Dank für deine Mühen. Ich denke aber ich habe falsch ausgedrückt. Das der Wert "Deicing active" in der Auflistung vorhanden will ich nicht prüfen da es offensichtlich ist und z.b. bei Beginn der Enteisung im Logbuch als Meldung eingetragen wird. Ich möchte den Status auslesen um zu wissen ob ob "Deicing active" an oder aus ist. Mit den Informationen bzw die beiden Zuständen möchte ich z.b. Betriebsstunden ermitteln die für die Enteisung anfallen oder Verlustleistung berechnen die bei Enteisung anfällt.

Alle hier aufgeführten "Options"  sind auch verfügbar.

options:
- Frost protection
- Standby
- "Heating: Compressor shutdown"
- "Heating: Compressor blocked"
- "Heating: Prerun"
- "Heating: Compressor active"
- "Heating: Overrun"
- "Cooling: Compressor shutdown"
- "Cooling: Compressor blocked"
- "Cooling: Prerun"
- "Cooling: Compressor active"
- "Cooling: Overrun"
- "Heating: Immersion heater active"
- "Warm Water: Compressor blocked"
- "Warm Water: Prerun"
- "Warm Water: Compressor active"
- "Warm Water: Immersion Heater active"
- "Warm Water: Overrun"
- "Heating: Immersion Heater shutdown"
- "Heating: Immersion Heater blocked"
- "Warm Water: Immersion Heater shutdown"
- "Warm Water: Immersion Heater blocked"
- Air purging program active
- Compressor oil heating activated
- Fan 1 blocked
- Fan 1 air inlet too high
- Fan 1 air inlet too low
- Fan 2 blocked
- Building circuit flow too low
- Building circuit pump fault
- "Frequency converter fault: Compressor"
- "Frequency converter fault: Mains voltage"
- "Frequency converter fault: Overheating"
- Deicing time too long
- Deicing flow temperature too low
- Compressor outlet temperature too high
- Hot gas temperature switch open
- "Fan 1: Wind"
- "Fan 2: Wind"
- Current limt active
- High pressure switch open
- Compressor outlet temperature too high
- Evaporation temperature too low
- Condensation temperature too low
- Evaporation temperature too high
- Condensation temperature too high
- Building circuit return temperature too low
- Building circuit return temperature too high
- "Immersion heater: Flow temperature too high"
- Deicing active
- Frequency converter fault
- "Connection fault: frequency converter"
- 4-port-valve position fault

device_class: enum
friendly_name: "ebusd hmu Statuscode "
 


   
AntwortZitat
 Olli
(@olli)
Mitglied Admin
Beigetreten: Vor 11 Jahren
Beiträge: 773
Themenstarter  

@bernd32457 Das verstehe ich irgendwie nicht.

Ich möchte den Status auslesen um zu wissen ob ob "Deicing active" an oder aus ist.

Ist das jetzt ein Status oder eine Information im Attribut? 

...da es offensichtlich ist und z.b. bei Beginn der Enteisung im Logbuch als Meldung eingetragen wird

Aber dann kennst du doch den aktuellen Zustand, wenn es als Meldung im Logbuch steht?

Alle hier aufgeführten "Options"  sind auch verfügbar.

Meinst du damit, dass dies die möglichen Zustände der Entität sein können? Dann kann dort also als Zustand "Deicing active" stehen? Da es kein "Deicing inactive" gibt, unterstelle ich, dass jeder andere Zustand, als "Deicing active" dann als "inactive" anzusehen ist? Und wenn dem so ist, willst du vermutlich eigentlich nur wissen, wie lange die Entität den Zustand "Deicing active" hatte und 24h abzüglich dieses Zustandes wäre dann "Deicing inactive"?

Sorry, wenn ich unnötig viel Frage, aber aus der Ferne verstehe ich es bislang noch nicht so richtig 🤔 😆 


   
AntwortZitat
(@bernd32457)
Active Member
Beigetreten: Vor 7 Monaten
Beiträge: 8
 

@olli sorry, du hast Recht ich möchte die möglichen Zustände der Entität  auswerten / weiterverarbeiten . Es z.B. den Zustand "Deicing active" ein / true oder aus / false. 


   
AntwortZitat
(@bernd32457)
Active Member
Beigetreten: Vor 7 Monaten
Beiträge: 8
 
image

   
AntwortZitat
 Olli
(@olli)
Mitglied Admin
Beigetreten: Vor 11 Jahren
Beiträge: 773
Themenstarter  

@bernd32457 Sorry, dass ich noch einmal nachfrage: Du willst wissen, wie lange der Zustand "Deicing active" war, richtig?


   
AntwortZitat
(@bernd32457)
Active Member
Beigetreten: Vor 7 Monaten
Beiträge: 8
 

@olli ja so ist es. Das heißt ich möchte natürlich den Status von "Deicing active"  wissen.


   
AntwortZitat
 Olli
(@olli)
Mitglied Admin
Beigetreten: Vor 11 Jahren
Beiträge: 773
Themenstarter  

@bernd32457 Alles klar, das sollte mit folgendem Code/History-Sensor gehen:

sensor:
  - platform: history_stats
    name: Deicing active
    entity_id: sensor.ebusd_hmu_ebusd_hmu_statuscode_scode
    state: "Deicing active"
    type: time
    start: "{{ today_at() }}"
    end: "{{ now() }}"

Ein Reboot von HA nach dem Hinzufügen des Codes ist notwendig. Das Ergebnis ist dann in Stunden mit Nachkommastelle.


   
AntwortZitat
(@bernd32457)
Active Member
Beigetreten: Vor 7 Monaten
Beiträge: 8
 

@olli Vielen lieben Dank Oli !!! Es sieht so aus als würde es kla 😊 😊 ppen


   
AntwortZitat
 iMoe
(@imoe)
Active Member
Beigetreten: Vor 6 Monaten
Beiträge: 5
 

Hi Olli,

ich habe Dein Video zum Attribute Auslesen gesehen und fand es richtig gut. Hast Du vielleicht eine Idee, wie Du mir bei meinem Szenario weiterhelfen kannst?

Ich würde gerne auf einem Home Assistant Dashboard mein aktuelles Crypto Portfolio mit Einzelwerten in Form einer Tabelle darstellen.

Die Daten für das Portfolio werden täglich von einem Python Script (auf einem anderen PI) eingesammelt und in einer JSON-Datei gesichert. Ich hatte überlegt das tägliche JSON-Objekt via MQTT an den MQTT Broker in Home Assistant zu schicken. Dann würde ich eine oder vermutlich mehrere Entitäten mit Attributen in der MQTT Integration anlegen, um die Daten verfügbar zu machen.

Die Struktur des JSONs ist in der Form dynamisch, dass Assets dazu kommen können und natürlich verschwinden können.

Die Struktur sieht aktuell so aus:

{
  "dt": "02/02/2025 00:00:01.000",
  "portfolioValue": {
    "dt-1": "01/02/2025 00:00:01.000",
    "perf-1": "-0.38%",
    "dt-2": "31/01/2025 00:00:01.000",
    "perf-2": "-0.13%",
    "portfolioValue": 100
  },
  { "assets": [
    {
      'type': 'BTC',
      'assetV': 0.001,
      'assetP': '10.0%',
      'dt-1': '01/02/2025 00:01',
      'perf-1': '-0.29%',
      'dt-2': '31/01/2025 00:01',
      'perf-2': '-0.16%'
    },
    {
      'type': 'NextAsset',
      'assetV': 1,
      'assetP': '50.0%',
      'dt-1': '01/02/2025 00:01',
      'perf-1': '-0.29%',
      'dt-2': '31/01/2025 00:01',
      'perf-2': '-0.16%'
    }, 
    {...}
  ]}
}

Zur dauerhaften Speicherung würde ich dann noch eine InfluxDB vorsehen.


   
AntwortZitat
 iMoe
(@imoe)
Active Member
Beigetreten: Vor 6 Monaten
Beiträge: 5
 

Noch eine Ergänzung, ChatGPT habe ich schon mal gefragt und das hat mir folgende manuelle Card vorgeschlagen. Allerdings bekomme ich die nicht zum Laufen:

type: custom:config-template-card
variables:
  assets: >
    [[[ return states['sensor.portfolio'].attributes.assets || []; ]]]
  sorted_assets: >
    [[[ return assets.sort((a,b) => b.assetV - a.assetV); ]]]
card:
  type: entities
  title: Assets
  entities: >
    [[[ return sorted_assets.map(asset => {
        return {
          entity: 'sensor.portfolio', // hier könntest Du einen Dummy-Eintrag verwenden
          name: asset.type,
          secondary_info: asset.assetP + ' (' + asset.assetV + ')'
        }
    }); ]]]

   
AntwortZitat
 iMoe
(@imoe)
Active Member
Beigetreten: Vor 6 Monaten
Beiträge: 5
 

Ich habe die Frage auch hier mal gepostet mit noch ein paar mehr Details:

https://community.home-assistant.io/t/100-templatable-lovelace-configurations/105241/912?u=themoe


   
AntwortZitat
 iMoe
(@imoe)
Active Member
Beigetreten: Vor 6 Monaten
Beiträge: 5
 

Ich habe meine Idee mit einer Markdown Card lösen können 


   
AntwortZitat
 Olli
(@olli)
Mitglied Admin
Beigetreten: Vor 11 Jahren
Beiträge: 773
Themenstarter  

@imoe Ja, über eine Markdown-Card wäre ich auch gegangen, da ich für sowas gerne auf zusätzliche HACS-Karten verzichte, wenn möglich.

Magst du deinen konkreten Code teilen, da dieser in Kombination mit deinem Attribut-Beispiel sicherlich nicht nur für mich interessant sein dürfte! 😉


   
AntwortZitat
 iMoe
(@imoe)
Active Member
Beigetreten: Vor 6 Monaten
Beiträge: 5
 

@olli ja klar!

Mein YAML Code der Markdown Card sieht jetzt so aus:

<i>
<table width=100%>
  <tr>
    <td align="right">{{ states['sensor.portfolio'].attributes.dt }}
    </td>
  </tr>
</table>
</i>

<table width=100%>
  <tr align="right">
    <td align="center" width=20%>{{ states['sensor.portfolio'].attributes.assetsCount}}</td>
    <td width=20%>{{ states['sensor.portfolio'].attributes.portfolioValue.portfolioValueStr }}</td>
    <td width=20%></td>
    <td width=20%>{{ states['sensor.portfolio'].attributes.portfolioValue['perf-1'] }}</td>
    <td width=20%>{{ states['sensor.portfolio'].attributes.portfolioValue['perf-2'] }}</td>
  </tr>
</table>

<table width=100%>
<tr align="right">
  <th width=20% align="center">Asset</th>
  <th width=20%>USDT</th>
  <th width=20%>%</th>
  <th width=20%>Perf-1</th>
  <th width=20%>Perf-2</th>
</tr>
{% for asset in states['sensor.portfolio'].attributes.assets %}
{% if float(asset.assetPercentage) > 0.25 %}
<tr align="right">
  <td align="center">{{ asset.type }}</td>
  <td>{{ asset.assetValueStr }}</td>
  <td>{{ asset.assetPercentageStr }}</td>
  <td>{{ asset["perf-1"] }}</td>
  <td>{{ asset["perf-2"] }}</td>
</tr>
{% endif %}
{% endfor %}
<tr align="right">
  <td align="center">{{ states['sensor.portfolio'].attributes.others.type }}</td>
  <td>{{ states['sensor.portfolio'].attributes.others.assetValueStr }}</td>
  <td>{{ states['sensor.portfolio'].attributes.others.assetPercentageStr }}</td>
  <td></td>
  <td></td>
</tr>
</table>
<small><i>
<table width=100%>
  <tr align="right">
    <td>
      Dt-1: {{ states['sensor.portfolio'].attributes.portfolioValue['dt-1'] }}
      </td>
  </tr>
  <tr align="right">
    <td>
      Dt-2: {{ states['sensor.portfolio'].attributes.portfolioValue['dt-2'] }}
    </td>
  </tr>
</table></i></small>

   
AntwortZitat
Seite 2 / 3