Aktienkurs anzeigen lassen

Moin,

ich habe gerade über Tankerkönig die Benzinpreise in mein HA integriert.

Danach kam mir die Idee, dass es doch auch eine Möglichkeit geben müsste, wie man Aktienkurse einfach verfolgen kann. Nach kurzer Recherche scheint das Thema scheint nicht besonders verbreitet zu sein. Ich habe über HACS Yahoo Finance gefunden, aber auch dazu gibt es nur sehr wenige Informationen.

Habe ich etwas übersehen? Wie verfolgt ihr Aktienkurse mit HA?

Vielleicht hilft dir das hier weiter:

Die Erweiterung hatte ich tatsächlich schon, bin aber mit der configuration.yaml nicht weitergekommen und dachte, es läge nicht an mir.

Liegt wohl dann aber doch an mir. Zumindest sagt HA jetzt, dass es “platform” nicht kennt.

Ich habe den Code unter drei andere Identitäten geschrieben.

# Aktienkurse
      - platform: avanza_stock
        stock:
          - id: 12345
            name: Unternehmen1
          - id: 67890
            name: Unternehmen2

Jetzt habe ich den Sensor aus dem Beispiel mit dem Aktienkurs von Gamestop, obwohl ich den Code in der configuration.yaml schon gelöscht habe und auch HA neu gestartet habe.

Wie bekomme ich den wieder weg? Wenn ich im Dashboard auf einer Entitätskarte “gamestop” eingebe, erscheint der Aktienkurs - wie geschrieben ist der Code aber bereits entfernt.

:pencil2: by tarag: Beiträge zusammengeführt

HA neu starten. Muss man immer nach bearbeiten der configuration.yaml

Ist es möglich, die Codeschnipsel aus der Avanza Integration auch in einen Template Helfer über die GUI zu integrieren? Wenn ja, welche Variante müsste ich hier auswählen?

Habe meine alten/vorherigen Template Sensoren nun in die Helfer übertragen. Dadurch konnte ich den Code Schnipsel von Avanza in meine configuration.yaml kopieren und sehe nun meine Aktien im Dashboard.

PS: Ich schätze, da hatte ich vorher einen Fehler in der Formatierung.

Ich nutze dafür einfach Scrape und hole mir so die Kurse, die ich brauche von boerse.de

Wie sieht dein Code dazu aus? Ich bekomme keinen Wert zurück.

Hallo Moritz84,
ich wäre auch am Code interessiert, wäre toll wenn du ihn uns zur Verfügung stellen könntest :grinning:

Kein Code. Scrape ist eine UI-Integration.

Was nimmt du für den CSS-Selektor? Bei mir funktioniert beides nicht für Tesla AKTIE | Aktienkurs & News | TL0 | A1CX3T – boerse.de

  • div.col-sm-4:nth-child(1) > span:nth-child(1) > span:nth-child(1)
  • .kurszeile > div:nth-child(1) > span:nth-child(1)
    Muss da noch eine Umwandlung von Komma nach Dezimalpunkt ins Wert-Template?

Danke für Deine Info,
wäre es dir möglich für eine Beispielsaktie eine Hardcopy zu zeigen wie man dies einstellt?

Mit der Yahoo Finance funktioniert es so:
In der configuration.yaml:

yahoofinance:
  symbols:
    - appl
    - TSLA
    - NVDA

dann die Sensoren anlegen (habe sie in einer sensors.yaml ausgelagert):

- platform: yahoofinance
  symbols:
    - TSLA
    - NVDA
    - AAPL
    - MSFT
    - META
  scan_interval: 300

Hier die Apex-card:

type: custom:apexcharts-card
graph_span: 14d
header:
  show: true
  title: Tesla & NVIDIA Aktienkurs
  show_states: true
  colorize_states: true
chart_type: line
apex_config:
  chart:
    height: 300
    zoom:
      enabled: true
  stroke:
    curve: smooth
    width: 2
  tooltip:
    shared: true
  markers:
    size: 3
  legend:
    position: top
  yaxis:
    - show: true
      seriesName: Tesla
      title:
        text: Tesla ($)
      opposite: false
    - show: true
      seriesName: NVIDIA
      title:
        text: NVIDIA ($)
      opposite: true
series:
  - entity: sensor.yahoofinance_tsla
    name: Tesla
    color: "#E82127"
    show:
      in_header: true
  - entity: sensor.yahoofinance_nvda
    name: NVIDIA
    color: "#76B900"
    show:
      in_header: true

Apex-card
Aus den vorhandenen Daten lassen sich natürlich auch andere Charts ziehen, wie z.B. prozentuale Veränderungen ab einem gewissen Zeitraum etc.
Gruß

3 „Gefällt mir“

Danke für das Teilen!!!

Bei mir aktualisieren die Werte nicht, habe schon verschiedene Zeiteinheiten versucht… hast du einen Idee?

yahoofinance:
  symbols:
    - appl
    - TSLA
    - NVDA
    - ^GDAXI
    - DTE.DE
    
sensor:
  - platform: yahoofinance
    scan_interval:
      minutes: 1
    symbols:
      - TSLA
      - NVDA
      - ^GDAXI
      - DTE.DE

Ich mache das so:

sensor:
  - platform: rest
    name: "Aktie Microsoft"
    resource: https://www.avanza.se/_api/market-guide/stock/3873
    method: GET
    value_template: "{{ value_json.quote.buy }}"
    scan_interval: 300
    force_update: true
    device_class: "monetary"
  - platform: template
    sensors:
      formatted_aktie_microsoft:
        friendly_name: "Microsoft Aktie"
        value_template: "{{ states('sensor.aktie_microsoft') | float | round(0) | int }}"
        unit_of_measurement: "$"
        icon_template: "mdi:currency-usd"

@RalfEs
guter Tipp, danke. Yahoo Finance funktioniert anscheinend nicht mehr:
Error fetching YahooSymbolUpdateCoordinator data: {‘code’: ‘internal-error’, ‘description’: ‘Connection is deallocated and cannot be used anymore.’}
Hatte die Entitäten vor Monaten für einen Kollegen mal erstellt, aber selbst
nicht genutzt.
Habe es nun mit Avanza umgesetzt:
sensors.yaml

# REST Sensoren für Aktienkurse von Avanza.se
- platform: rest
  name: "Aktie Tesla"
  resource: https://www.avanza.se/_api/market-guide/stock/238449
  method: GET
  value_template: "{{ value_json.quote.last if value_json is defined and 'quote' in value_json and 'last' in value_json.quote else 'unavailable' }}"
  headers:
    User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
  scan_interval: 300
  force_update: true
  device_class: "monetary"

- platform: rest
  name: "Aktie NVIDIA"
  resource: https://www.avanza.se/_api/market-guide/stock/4478
  method: GET
  value_template: "{{ value_json.quote.last if value_json is defined and 'quote' in value_json and 'last' in value_json.quote else 'unavailable' }}"
  headers:
    User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
  scan_interval: 300
  force_update: true
  device_class: "monetary"

- platform: rest
  name: "Aktie Apple"
  resource: https://www.avanza.se/_api/market-guide/stock/3323
  method: GET
  value_template: "{{ value_json.quote.last if value_json is defined and 'quote' in value_json and 'last' in value_json.quote else 'unavailable' }}"
  headers:
    User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
  scan_interval: 300
  force_update: true
  device_class: "monetary"

# Sensoren für Prozentuale Änderung
- platform: rest
  name: "Tesla Change"
  resource: https://www.avanza.se/_api/market-guide/stock/238449
  method: GET
  value_template: "{{ value_json.quote.changePercent if value_json is defined and 'quote' in value_json and 'changePercent' in value_json.quote else 'unavailable' }}"
  headers:
    User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
  scan_interval: 300
  force_update: true

- platform: rest
  name: "NVIDIA Change"
  resource: https://www.avanza.se/_api/market-guide/stock/4478
  method: GET
  value_template: "{{ value_json.quote.changePercent if value_json is defined and 'quote' in value_json and 'changePercent' in value_json.quote else 'unavailable' }}"
  headers:
    User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
  scan_interval: 300
  force_update: true

- platform: rest
  name: "Apple Change"
  resource: https://www.avanza.se/_api/market-guide/stock/3323
  method: GET
  value_template: "{{ value_json.quote.changePercent if value_json is defined and 'quote' in value_json and 'changePercent' in value_json.quote else 'unavailable' }}"
  headers:
    User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
  scan_interval: 300
  force_update: true

# Template Sensoren mit Fehlerbehandlung
- platform: template
  sensors:
    formatted_aktie_tesla:
      friendly_name: "Tesla Aktie"
      value_template: "{{ states('sensor.aktie_tesla') | float(0) | round(2) }}"
      unit_of_measurement: "$"
      icon_template: >-
        {% if states('sensor.tesla_change') | float(0) > 0 %}
          mdi:arrow-up-bold
        {% elif states('sensor.tesla_change') | float(0) < 0 %}
          mdi:arrow-down-bold
        {% else %}
          mdi:currency-usd
        {% endif %}

    formatted_aktie_nvidia:
      friendly_name: "NVIDIA Aktie"
      value_template: "{{ states('sensor.aktie_nvidia') | float(0) | round(2) }}"
      unit_of_measurement: "$"
      icon_template: >-
        {% if states('sensor.nvidia_change') | float(0) > 0 %}
          mdi:arrow-up-bold
        {% elif states('sensor.nvidia_change') | float(0) < 0 %}
          mdi:arrow-down-bold
        {% else %}
          mdi:currency-usd
        {% endif %}

    formatted_aktie_apple:
      friendly_name: "Apple Aktie"
      value_template: "{{ states('sensor.aktie_apple') | float(0) | round(2) }}"
      unit_of_measurement: "$"
      icon_template: >-
        {% if states('sensor.apple_change') | float(0) > 0 %}
          mdi:arrow-up-bold
        {% elif states('sensor.apple_change') | float(0) < 0 %}
          mdi:arrow-down-bold
        {% else %}
          mdi:currency-usd
        {% endif %}

    tesla_change_percent:
      friendly_name: "Tesla Änderung (%)"
      value_template: "{{ states('sensor.tesla_change') | float(0) | round(2) }}"
      unit_of_measurement: "%"
      icon_template: >-
        {% if states('sensor.tesla_change') | float(0) > 0 %}
          mdi:arrow-up-bold
        {% elif states('sensor.tesla_change') | float(0) < 0 %}
          mdi:arrow-down-bold
        {% else %}
          mdi:minus
        {% endif %}

    nvidia_change_percent:
      friendly_name: "NVIDIA Änderung (%)"
      value_template: "{{ states('sensor.nvidia_change') | float(0) | round(2) }}"
      unit_of_measurement: "%"
      icon_template: >-
        {% if states('sensor.nvidia_change') | float(0) > 0 %}
          mdi:arrow-up-bold
        {% elif states('sensor.nvidia_change') | float(0) < 0 %}
          mdi:arrow-down-bold
        {% else %}
          mdi:minus
        {% endif %}

    apple_change_percent:
      friendly_name: "Apple Änderung (%)"
      value_template: "{{ states('sensor.apple_change') | float(0) | round(2) }}"
      unit_of_measurement: "%"
      icon_template: >-
        {% if states('sensor.apple_change') | float(0) > 0 %}
          mdi:arrow-up-bold
        {% elif states('sensor.apple_change') | float(0) < 0 %}
          mdi:arrow-down-bold
        {% else %}
          mdi:minus
        {% endif %}

vertikaler stack Karte:

type: vertical-stack
cards:
  - show_name: true
    show_icon: true
    show_state: true
    type: glance
    title: Aktien Portfolio
    columns: 3
    entities:
      - entity: sensor.formatted_aktie_tesla
        name: Tesla
        icon: mdi:car
        tap_action:
          action: more-info
      - entity: sensor.formatted_aktie_nvidia
        name: NVIDIA
        icon: mdi:chip
        tap_action:
          action: more-info
      - entity: sensor.formatted_aktie_apple
        name: Apple
        icon: mdi:apple
        tap_action:
          action: more-info
    state_color: true
  - type: conditional
    conditions:
      - entity: sensor.tesla_change_percent
        state_not: unavailable
    card:
      type: horizontal-stack
      cards:
        - type: entities
          style: |
            ha-card {
              border-radius: 10px;
              --ha-card-background: rgba(0, 0, 0, 0.05);
            }
          title: Tägliche Änderung (%)
          entities:
            - entity: sensor.tesla_change_percent
              secondary_info: last-changed
              icon: |
                {% if states('sensor.tesla_change_percent') | float(0) > 0 %}
                  mdi:arrow-up-bold
                {% elif states('sensor.tesla_change_percent') | float(0) < 0 %}
                  mdi:arrow-down-bold
                {% else %}
                  mdi:minus
                {% endif %}
              name: Tesla
              icon_color: |
                {% if states('sensor.tesla_change_percent') | float(0) > 0 %}
                  forestgreen
                {% elif states('sensor.tesla_change_percent') | float(0) < 0 %}
                  firebrick
                {% else %}
                  gray
                {% endif %}
            - entity: sensor.nvidia_change_percent
              secondary_info: last-changed
              icon: |
                {% if states('sensor.nvidia_change_percent') | float(0) > 0 %}
                  mdi:arrow-up-bold
                {% elif states('sensor.nvidia_change_percent') | float(0) < 0 %}
                  mdi:arrow-down-bold
                {% else %}
                  mdi:minus
                {% endif %}
              name: NVIDIA
              icon_color: |
                {% if states('sensor.nvidia_change_percent') | float(0) > 0 %}
                  forestgreen
                {% elif states('sensor.nvidia_change_percent') | float(0) < 0 %}
                  firebrick
                {% else %}
                  gray
                {% endif %}
            - entity: sensor.apple_change_percent
              secondary_info: last-changed
              icon: |
                {% if states('sensor.apple_change_percent') | float(0) > 0 %}
                  mdi:arrow-up-bold
                {% elif states('apple_change_percent') | float(0) < 0 %}
                  mdi:arrow-down-bold
                {% else %}
                  mdi:minus
                {% endif %}
              name: Apple
              icon_color: |
                {% if states('sensor.apple_change_percent') | float(0) > 0 %}
                  forestgreen
                {% elif states('sensor.apple_change_percent') | float(0) < 0 %}
                  firebrick
                {% else %}
                  gray
                {% endif %}
  - type: custom:mini-graph-card
    name: Tesla
    icon: mdi:tesla
    entities:
      - entity: sensor.formatted_aktie_tesla
        name: Tesla
        color: "#e82127"
    hours_to_show: 24
    points_per_hour: 2
    line_width: 2
    font_size: 80
    animate: true
    hour24: true
    show:
      labels: true
      points: true
      fill: fade
    color_thresholds:
      - value: 0
        color: "#e82127"
  - type: custom:mini-graph-card
    name: NVIDIA
    icon: mdi:chip
    entities:
      - entity: sensor.formatted_aktie_nvidia
        name: NVIDIA
        color: "#76b900"
    hours_to_show: 24
    points_per_hour: 2
    line_width: 2
    font_size: 80
    animate: true
    hour24: true
    show:
      labels: true
      points: true
      fill: fade
    color_thresholds:
      - value: 0
        color: "#76b900"
  - type: custom:mini-graph-card
    name: Apple
    icon: mdi:apple
    entities:
      - entity: sensor.formatted_aktie_apple
        name: Apple
        color: "#A2AAAD"
    hours_to_show: 24
    points_per_hour: 2
    line_width: 2
    font_size: 80
    animate: true
    hour24: true
    show:
      labels: true
      points: true
      fill: fade
    color_thresholds:
      - value: 0
        color: "#A2AAAD"
  - type: history-graph
    title: Apple
    hours_to_show: 24
    entities:
      - entity: sensor.formatted_aktie_apple

Vielen Dank an das teilen Eurer Vorgehensweise… Yahoofinance geht, allerdings mit dem Service… alle x Sekunden Minuten können die Werte dann aktualisiert werden, nur in der configuration.yaml geht der Intervall wohl nicht…

Ich würde gerne den Scan Intervall dynamisch ändern… also tagsüber beispielsweise auf 5 Minuten und in der Nacht auf 10 MInuten…
Dazu müsste ich den festen Intervall als Parameter definieren… hier hören leider meine Kenntnisse auf…

Kann mir jemand helfen wie ich in der YAML einen dynamischen Paramete als Helfer beispielsweise einbinden kann?

So könnte/müsste es funktionieren:
Lege 2 Sensoren mit unterschiedlichen Intervallen an:

sensor:
  - platform: yahoofinance
    symbols:
      - TSLA
    scan_interval: 300  # 5 Minuten
    name: "Tesla Frequent"

  - platform: yahoofinance
    symbols:
      - TSLA
    scan_interval: 600  # 10 Minuten
    name: "Tesla Nacht

dann einen Template-Sensor anlegen:

template:
  - sensor:
      - name: "Tesla Kurs Aktiv"
        unique_id: tesla_kurs_aktiv
        unit_of_measurement: "USD"
        state: >
          {% if is_state('input_boolean.use_frequent_scan', 'on') %}
            {{ states('sensor.tesla_frequent') }}
          {% else %}
            {{ states('sensor.tesla_nacht') }}
          {% endif %}

und dann eine Automation:

automation:
  - alias: "Schneller Scan tagsüber"
    trigger:
      - platform: time
        at: "08:00:00"
    action:
      - service: input_boolean.turn_on
        target:
          entity_id: input_boolean.use_frequent_scan

  - alias: "Langsamer Scan nachts"
    trigger:
      - platform: time
        at: "22:00:00"
    action:
      - service: input_boolean.turn_off
        target:
          entity_id: input_boolean.use_frequent_scan

Komme Montag erst dazu, es selbst nochmal zu testen
Gruß
Holger

1 „Gefällt mir“

Hallo Holger, super nett von dir, werde ich heute Abend versuchen.
Dankeee!!