ANZEIGE des letzten WLAN ONLINE Status vom Fahrzeug

Moin, moin,

wir haben erfolgreich unsere VW Flotte von der VW / WeConnect Cloud mit Hilfe der Meatpi WiCan Dongle befreien können.

Wenn ein Fahrzeug nun das heimische WLAN erreicht, wird der Fahrzeugzustand auf “online” gesetzt wie hier zu sehen, weil sich der o.g. Dongle bei Ankunft automatisch ins WLAN einbuch und dann via Automation per CANBUS die Steuergeräte um den SOC, die Reichweite und km Stand gebeten werden.

Das gleiche passiert beim Öffnen des Fahrzeugs bzw. auch beim Einschalten der Zündung. Dann werden alle 6 Sekunden die Eckwerte SOC, km Stand und Reichweite übertragen, bis der OBD2 Adapter NICHT MEHR ONLINE IM WLAN IST.

Hier ist der Sensor aus der configuration.yaml und der funktioniert zuverlässig.

    - name: "GOLF Status"
      unique_id: "sensor.golf_status"
      state_topic: "wican/12345678901234/can/status"
      value_template: "{{ value_json.status }}"
      icon: mdi:car

und so sieht er aus

Jetzt hätte ich gerne im Dashboard neben Reichweite / SOC / km Stand nun auch den Moment der letzten Datenübertragung via WLAN angezeigt, also den Moment, bevor der Sensor den Status von “online” auf “offline” wechselt.

Wie kann ich den Zeitpunkt der letzten Online Aktivität des Fahrzeug mit Datum und Uhrzeit anzeigen / speichern ?

Man könnte einen input_datetime Helfer anlegen:

input_datetime:
  golf_last_online_time:
    name: "GOLF Letzte Online Aktivität"
    has_date: true
    has_time: true

Danach könnte man über eine Automisation sagen: Wenn Dein oberer verläßlicher Sensor den Status Online meldet, dann trage alle 6 Sekunden die Zeit in den Helper bis der Wagen den Status Online verliert.

automation:
  - alias: "GOLF Letzte Online Aktivität Aktualisieren"
    trigger:
      - platform: state
        entity_id: sensor.golf_status
        to: 'online'
    action:
      - repeat:
          while:
            - condition: state
              entity_id: sensor.golf_status
              state: 'online'
          sequence:
            - service: input_datetime.set_datetime
              target:
                entity_id: input_datetime.golf_last_online_time
              data:
                timestamp: "{{ now().timestamp() }}"
            - delay: "00:00:06"

Und den Helfer input_datetime.golf_last_online_time stellst Du dann im Dashboard nach.

PS: Nach einem aus irgendeinem Grund nötigen HA Neustart, wird die Automatisation unterbrochen und aktualisiert den Sensor nicht mehr.
Sofern Dich das stört, könnte man diesen Effekt umgehen, in dem man eine weitere Automatisation baut, die nach jedem HA Neustart Deinen oberen verläßlichen Sensor irgendeinen Status setzt, der wieder überschrieben wird, sobald Wagen wieder Online meldet und dann würde auch obige Aut. wieder starten.

1 „Gefällt mir“

Wenn ich das richtig sehe, dann habe ich ja schon fast alles, denn Deine Automation ist ja schon nda und liest aktuell jede Minute - solange der Dongle onine ist - den SOC Reichweite und Odometer aus.

Also hänge ich da sozusagen nur das aktualisieren des Helpers dran.

Ich habe mir Deine Idee noch nicht näher angeschaut, sondern nur überflogen und bei den “6 Sekunden” gedacht, dass es 100% in die SOC Update Automation passen würde, die ja eh schon getriffgert wird, sobald der Status von was auch immer auf “online” wechselt und solange der “status = online” ist auch alle 6 Sekunden bzw. künftig 60 Sekunden ein Update holt und dann halt sozusage schreibt, “war da - 16:06” bis die Automation stoppt, weil Dongle in Sleep mode fällt oder aber Dongle das WLAN verlässt und Status auf offline kippt.

Danke, werde das nachher mal umsetzen, wenn der Wagen wieder da ist.

Update:

Jetzt bin ich schon beim 1. Punkt ins Straucheln geraten, denn ich dachte, dass das obere YAML sei und ich einfügen können sollte.

Aber ich finde keinen “Yaml anzeigen” Hinweis oder Menü bei Helferlein.

Ich habe einen neuen Helfer nur per UI erstellen können und war da eingeschränkt. Selbst danach konnte ich kein “als yaml editieren” finden.

Daher die Frage.
Danke

:crayon:by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)

Ich finde den Helper UI auch besser, hätte das oben nicht so sagen sollen, muß an der Zeit gelegen haben, sry. Aber ansonsten nimm Deinen Helper und schreibe die Datum/Zeit Werte über eine Automatisation hinein.

Was mir auch noch einfiel: Man könnte die Automatisation auch über einen 60 s Trigger starten

trigger:
  - platform: time_pattern
    minutes: "1"

Ich fand das bei 6 s unnötig aber bei 1 min. Der Vorteil wäre, daß selbst nach HA Neustart die Automatisation wieder von allein losläuft.

PS: Ich habe jetzt ein paar tage keinen Rechner und übers Handy ist zu umständlich.

Das mit dem Trigger passt doch schon, denn

Wenn ich die Daten vom SOC & Reichweite und Odometer eh mit der existierenden Automation schon hole, füge ich einfach nur die Aktualsierung des Helpers ein und das wird dann zeitgleich miterledigt.

Einziger Haken aktuell:

Wie kriege ich im Dashboard ein “schöneres UI” ?

Aktuell habe ich das hier
image

bei Entitäten kann ich zwar etwas auswählen, aber mit Stunde allein oder Minute werde ich auch nicht glücklich.
Ich hab nix gefunden, wo ich das Format einstellen kann wie
21. Aug. - 11:22 Uhr

oder so

DANKE

Hier gibt es etliche Möglichkeiten, wo Du Dich durchprobieren kannst:

  • statt horizontal kannst Du vertikal darstellen und siehst ggf. komplette Zeit (simple)
  • Du kannst auch eine Markdown Karte nehmen und mit Template Code die Zeit so formatieren wie Du es möchtest
{% set datum_str = states('input_datetime.xxx') %}
{% set datum = as_timestamp(datum_str) | timestamp_custom('%d %b - %H:%M', true) %}
{{ datum }}

Mit

<font size=xxx color=xxx>{{ datum }}</font>

kannst Du auch mit Größe und Farbe experimentieren.

Hier wäre auch eine reine HTML Tabelle möglich mit je einer Zeile pro Fahrzeug (aber Du verlierst den More-Info Klick)

  • Sicher findest Du bei Custom Cards wie Button oder Mushroom etwas Passenderes.
  • Spannend wird es, die Namen, Icon und Zustände Größe und Farbeändern sollen je nach Bedingungen wie ab xxx km oder seit xxx h nicht online

Viel Spaß

1 „Gefällt mir“

vielen herzlichen Dank,
da werde ich probieren und sicher was finden, hab halt nur “Stock gewählt” und stand plötzlich gefühlt in einer Sackgasse.

Habe oben Deinen 1. Vorschlag als Lösung markiert, weil da an sich alles drin stand, was man erst einmal braucht.

Der Rest steht dann halt hier weiter unten, wo der, den es interessiert, auch noch lesen wird. !

:+1: :+1: :+1:

:crayon:by HarryP: unnötiges Vollzitat entfernt

Du könntest aber auch einfach mit dem „last updated“ Attribut von deiner WLAN Entität arbeiten. Das ändert sich ja so lange nicht mehr, bis es wieder von offline zu online wechselt.


{% set last_updated = (states.ENTITÄT.last_updated) | as_timestamp | timestamp_custom('%d.%m.%y %-H:%M') %}

{{ last_updated }}

Viele Grüße
SirTobi270

1 „Gefällt mir“

Das schau ich mir mal nachher an, wenn der Wagen zurück kommen wird.

Aber das klingt gut und nahe an dem, was ich mir ursprünglich dachte, weil ich da ja den Stand schon habe, nur hab ich das nicht auswerten können für eine Kachel.

Danke schön

UPDATE:
Das ist mein sensor, der vom Meatpi Dongle getriggert wird.

sensor.golf_status

also wäre Dein

{% set last_updated = (states.ENTITÄT.last_updated) | as_timestamp | timestamp_custom('%d.%m.%y %-H:%M') %}

{{ last_updated }}

so anzuwenden,
wobei ich den timestamp noch verändert hab, da Tag und Monat sowie Zeit reichen:

{% set last_updated = (states.sensor.golf_status.last_updated) | as_timestamp | timestamp_custom('%d.%m. - %-H:%M') %}

{{ last_updated }}

Im template checker kriegte ich schon mal das korrekte Datum mit Zeit

      21.08. - 19:17

Aber wo oder wie füge ich den Code der Automation hinzu ?

Hier ist die bereits zuvor angepasste Automation, aber stark verkürzt bei den 3 Punkten.

action:
  - repeat:
      sequence:
        - condition: state
          entity_id: sensor.golf_status
          state: online
          ...
        - service: mqtt.publish
          data:
            qos: "0"
            retain: true
            topic: export/golf/km_stand_permanent
            payload_template: "{{ states('sensor.golf_km_stand') }}"
        - service: input_datetime.set_datetime
          target:
            entity_id: input_datetime.golf_letzter_online_zeitpunkt
          data:
            timestamp: "{{ now().timestamp() }}"
        - delay:
            hours: 0
            minutes: 0
            seconds: 12
            milliseconds: 0
      until:
        - condition: state
          entity_id: sensor.golf_status
          state: offline

Das ist ja kein service: input_datetime. mehr

{% set last_updated = (states.sensor.golf_status.last_updated) | as_timestamp | timestamp_custom(‘%d.%m. - %-H:%M’) %}

{{ last_updated }}

Danke schön

Ich bin nicht so ganz sicher wofür du da die Automation nutzt. Also für das “letzte Update Feld” brauchst du die eigentlich nicht. Das kannst du einfach so lösen:

{% set jetzt = (now()) | as_timestamp | timestamp_custom('%d.%m. - %-H:%M') %}
{% set last_updated = (states.sensor.golf_status.last_updated) | as_timestamp | timestamp_custom('%d.%m. - %-H:%M') %}

{% if is_state('sensor.golf_status','online') %}
  {{ jetzt }}
{% else %}
  {{ last_updated }}
{% endif %}

Oder ich verstehe deine Anforderung nicht so richtig… :wink:

Liebe Grüße
SirTobi270

MOin,
ich habe die Automation gekürzt, weil sie sonst viel länger ist.

Die Automation startet, sobald der Status des Fahrzeug Dongles auf ONLINE wechselt.

Das passiert üblicherweise bei

  • Erreichen des heimischen WLAN von unterwegs aus oder
  • Einschalten der Zündung

Dann läuft alle 12 Sekunden diese Automation solange, bis der Dongle Status "Offline"ist oder ich meine != “onine”.

Die Automation schickt dann via HA per mqtt über WLAN und dem OBD2 dongle die Can Bus Nachricht an ein bestimmtes Steuergerät “Sag mir den SoC” und bekommt eine CanBus Antwort mit 55% zurück

Gleiches Prinzip folgt dann für Reichweite und km Stand.
Jede Minute, solange der Dongle online ist, werden die aktuellen Daten wegen des SOC und der Reichweite in HA importiert, sprich der Ladestand der Batterie und was der VW als Reichweite im COckpit anzeigt, wobei sich beides beim Laden ändern (der Km Stand bleibt ja gleich, weil parkendes Auto)

und am Ende dieser Kette würde nun Dein Code den Zeitpunkt des letzten “Lebenssignals” des Fahrzeugs im WLAN notieren.

Hier geht der Dongle meist so 5 Minuten nach Türen schließen in einen Schlafe oder Pause, bis die TÜren geöffnet werden bzw. die Zündung eingeschaltet wird.
Die Sonne hat gerade das Minimum an Ertragsüberschuss erreicht, dass der Wagen nun lädt und das sieht dann so aus (und das Laden hat den dongle auch zum Leben erweckt).

Und weil ich ja eh schon minütlich die besagten Werte auslese, passt die Automation perfekt, um das letzte Lebenszeichen zu aktualisieren, nur kann ich den Code hier an der folgenden Stelle nicht speichern bzw. hab einen Fehler.

Daher die Frage, wo / wie ich Deinen Code einfügt, also ich meine am Ehesten ja in Automation ein oder meinst Du die configuration.yaml ginge?

Danke schön

Aber die Automation trägt ja nur die Informationen zusammen. Wo werden die Informationen den angezeigt? Irgendwo auf deinem Dashboard, nehme ich an… Und genau da würde ich dann einfach z.B. ein Markdown erstellen, dort kopierst du meinen Code rein und fertig bist du… Das ganze kannst du je nach Bedarf natürlich noch etwas chicker designen, aber das ist ein anderes Thema.

Dir geht es doch darum, dass du die Info - also “letztes Update” - irgendwo ablesen kannst. Dafür brauchst du nichts anderes als den Code… Keine Automation notwendig.

Viele Grüße

1 „Gefällt mir“

ja,
das hat geklappt und sieht echt gut aus mit Header formatiert.

Aber was muss ich tun, wenn ich das nun noch um den km Stand ergänzen möchte im Format 55.555 km ?

Das hab ich probiert und gab Fehler

{% set odo_meter = (states.sensor.golf_km_stand_permanent) %}
{{ odo_meter }}

Der Sensor existiert und hat den Wert 55.555 km oder so ähnlich.

DANKE

Versuchs mal mit

{{ states('sensor.golf_km_stand_permanent') }}

So kannst du dir auch die Variable sparen… Oder Wenn du es gerne mit Variable haben willst, dann so:

{% set odo_meter = states('sensor.golf_km_stand_permanent') %}
{{ odo_meter }}
1 „Gefällt mir“

Danke,
funktioniert beides, fehlt nur noch die Antwort auf die Frage nach der Formatierung , denn ich suche “#.##0” oder genauer “55.555”

Ich hab das schon irgendwo mal gesehen und gebraucht, nur war das sicher bei meinem 1 Test mit HA anno 2020 oder so.
ich kann mich dunkel an jinja2 template engine erinnern bzw. wie ich daran gedreht habe, bis das mal passte.

UPDATE: sieht jetzt so aus

Dank der Formatierung hier auch mit Tausender Punkt

  - type: markdown
    content: >
      {% if is_state('sensor.golf_status','online') %} {% set zuletzt = (now())
      | as_timestamp | timestamp_custom('%d.%m. %-H:%M') %} {% else %}  {% set
      zuletzt = (states.sensor.golf_status.last_updated) | as_timestamp |
      timestamp_custom('%d.%m. %-H:%M') %} {% endif %}

      # {{ "{0:_.0f}".format(states('sensor.golf_km_stand_permanent') | int) |
      replace("_",".") }} km {{ zuletzt }}