Wir haben einen niedlichen e-UP in der Einfahrt zu stehen, bei dem ich gerne den Batteriestand abfragen würde, sobald er in der Einfahrt abgestellt wird.
Das geht natürlich per CLOUD-APP. Aber dafür möchte VW auch gerne 100 Euro für 2 Jahre bekommen. Und dafür dass deren Software nur alle Jubeljahre mal vernünftig funktioniert, hab ich einfach keinen Bock drauf.
Dafür hab ich mir einen MQTT-Fähigen OBD2-Adapter besorgt.
Ich möchte das gerne per Home-Assistant automatisieren. Aber meine Kenntnisse vom selbigen reichen dafür einfach nicht aus. Eventuell kann mir da einer von euch unter die Arme greifen? Den großteil der Arbeit hab ich schon erledigt.
First Things first:
Ein nettes { "bus": "0", "type": "tx", "frame": [{ "id": 2015, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }; per mqtt auf wican/xxxxxid/can/tx gesendet.
Entlockt dem UP ein freundliches
{"bus":"0","type":"rx","ts":35216,"frame":[{"id":2029,"dlc":8,"rtr":false,"extd":false,"data":[4,98,2,140,68,170,170,170]}]}
auf dem wican/xxxxxxid/can/rx topic
Die 68 im Data-Block ist der SOC (/255*100)
Cool. Also ab in Home-Assistant und zwei Sensoren eingerichtet.
Code:
mqtt:
sensor:
- name: "E-UP Status MQTT"
state_topic: "wican/xxxxxid/status"
value_template: "{{ value_json.status }}"
- name: "E-UP SOC MQTT"
state_topic: "wican/xxxxxid/can/rx"
Und dann eine kleine Automatisation eingerichtet, was den MQTT-Status überwacht. Und sofort wenn der Status auf Online wechselt (das passiert, wenn sich der OBD-Adapter ins WLAN einloggt beim Parken oder beim Losfahren, wenn der Zündschlüssel gedreht wird) die "Frage" nach dem SOC im topic vom wican published (geiles denglisch).
Code:
alias: MQTT e-UP SOC Abfrage
description: ""
trigger:
- platform: state
entity_id:
- sensor.e_up_status_mqtt
to: online
condition: []
action:
- service: mqtt.publish
data:
qos: 0
retain: false
payload: >-
{ "bus": "0", "type": "tx", "frame": [{ "id": 2015, "dlc": 8, "rtr":
false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] };
topic: wican/xxxxxid/can/tx
mode: single
Und da hänge ich jetzt.
Der SOC vom UP ist der 5. Wert im Data-Block (hier im Beispiel also 68), den man noch wundervoll durch 255 teilen darf und dann mit 100 Multiplizieren. (oder gleich nur durch 2,55 teilen).
Aber dafür bin ich echt zu blöd. Wie mache ich dem Home-Assistant-Sensor klar, dass er aus
{"bus":"0","type":"rx","ts":35216,"frame":[{"id":2029,"dlc":8,"rtr":false,"extd":false,"data":[4,98,2,140,68,170,170,170]}]}
den data-Block den 5 Wert nimmt und ihn dann durch 2,55 teilt? *seufz*
Ist einer von euch in Home-Assistant bewandert?
Ich würde ja sagen, dass ich das irgendwie mit "split" hinbekomme, aber ich schaffe es ja nicht mal "nur" den data-Block abzuholen im Sensor.
Ein
Code:
mqtt:
sensor:
- name: "E-UP SOC MQTT"
state_topic: "wican/xxxxxid/can/rx"
value_template: "{{ value_json.data }}"
z.b. gibt immer einen leeren String als Rückmeldung :-(
Ah ... wenn ich "frame" abfrage, dann verringere ich schon den Datenberg.
Code:
mqtt:
sensor:
- name: "E-UP SOC MQTT"
state_topic: "wican/xxxxxid/can/rx"
value_template: "{{ value_json.frame }}"
Code:
[
{
"id": 2029,
"dlc": 8,
"rtr": false,
"extd": false,
"data": [
4,
98,
2,
140,
68,
170,
170,
170
]
}
]
Ich hab so dermaßen keine Ahnung von diesen Datenformaten.. das geht mir so auf den Sack^^