So, das Update beim pi hat funktioniert. Nun gibt es auch keine Fehlermeldung mehr beim Aufruf des soc_helper. Allerdings kommt vom Auto keine Info zurück. Der Beginn der Ausgabe des soc_helper sieht exakt aus wie in Deiner Doku. Aber nach dem Senden der SOC- und DST-Anforderung passiert nichts mehr.
Ich habe den Output angehängt und auch die Einstellungen des WiCAN.
Und damit alle Infos zusammen sind, hier auch noch einmal die configuration.py:
Code: Alles auswählen
"""
Dies ist das Konfigurationsfile. Hier bitte nach eigenen Gegebenheiten eintragen. soc_helper
entdeckt Schreibzugriffe auf die Datei und liest sie neu ein. Bitte trotzdem die Ausgabe in
nohup.out oder auf der Konsole beachten, falls etwas Ungültiges abgespeichert wurde.
"""
"""
Spritmonitor-Konfiguration.
WICHTIG: Es muß eine gültige Umgebungsvariable SPRITMONITOR_BEARER_TOKEN geben. Diese kann
bei Spritmonitor.de auf der Passwort-Vergessen-Seite angefordert werden. Eine Umgebungs-
variable wird verwendet, damit nicht aus versehen der Zugang mit verschickt wird, wenn der
Code weitergegeben oder veröffentlicht wird. Sie wird vor Aufruf von soc_helper.py mittels
"export SPRITMONITOR_BEARER_TOKEN=<eigenerToken>" deklariert - idealerweise in der Datei
~/.profile schon bei der Anmeldung am System.
"""
USE_SPRITMONITOR = False # Auf False setzen, falls Übertragung nicht erfolgen soll
SPRITMONITOR_VEHICLE_ID = '1370192' # Bitte hier die eigene Fahrzeug-ID (In der App oder Webseite angezeigt) einfügen
SPRITMONITOR_FUELSORT = 24 # über die API sind die Nummern der Kraftstoffsorten abrufbar. Hier wichtig: 19 - Elektrizität, 24 - Ökostrom
SPRITMONITOR_FUELPRICE = 0.08 # Preis in €/kWh. Bei reinem PV-Laden die Einspeisevergütung plus evt. Umsatzsteuer auf Eigenverbrauch.
# Folgende Attribute können der Betankung per default zugefügt werden (maximal je eines pro Zeile aussuchen):
# Reifen: summertires wintertires allyeartires
# Fahrweise: slow normal fast
# Mit Klima: ac
# Mit Anhänger: trailer
# Mit Standheizung: heating
SPRITMONITOR_ATTRIBUTES = 'summertires,slow'
"""
CAN. Siehe CAN-Datenbank VW: https://www.goingelectric.de/wiki/Liste-der-OBD2-Codes/
"""
# Die eigentliche Botschaft an den WiCAN im json-Format wird in soc_helper zusammengebaut. Beispiel für das eine Sendebotschaft (11-Bit-ID):
# '{ "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }'
# Beispiel für das eine Sendebotschaft (29-Bit-ID):
# '{ "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": true, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }'
# hier wird nur das Relevante angegeben: Die IDs der addressierten CAN-Teilnehmer (Sende-/EmpfangsID) und 8 Datenbytes in einer Liste, im Beispiel
# SOC_REQUEST=[3, 34, 2, 140, 170, 170, 170, 170] 3 Kommando-Bytes, nämlich 34,2,140. Der Rest ist Füllung.
# SOC_REQ_ID=2021 Dies ist die ID der Anforderung
# SOC_RESP_ID=2029 Mit dieser ID kommt die Antwort aus dem Fahrzeug
# FIXME: Momentan wird automatisch genau dann eine 29-Bit-ID angenommen, wenn die ID >4095 ist, sonst eine 11-Bit-ID.
# Sobald ein Fahrzeug diese Annahme verletzt, muß der Code angepaßt werden.
# VW e-up
SOC_REQUEST = [3, 34, 2, 140, 170, 170, 170, 170]
SOC_REQ_ID = 2021 # 2021: Batterie-SG
SOC_RESP_ID = 2029 # 2029: Batterie-SG
ODO_REQUEST = [3, 34, 2, 189, 170, 170, 170, 170] # e-up - Antwort ist 2 CAN-Frames lang!
ODO_REQ_ID = 2021 # 2021: Batterie-SG
ODO_RESP_ID = 2029 # 2029: Batterie-SG
# VW e-Golf
#SOC_REQUEST = [3, 34, 2, 140, 170, 170, 170, 170]
#SOC_REQ_ID = 2021 # 2021: Batterie-SG
#SOC_RESP_ID = 2029 # 2029: Batterie-SG
#ODO_REQUEST = [3, 34, 2, 189, 170, 170, 170, 170]
#ODO_REQ_ID = 2021 # 2021: Batterie-SG
#ODO_RESP_ID = 2029 # 2029: Batterie-SG
# Ora Funky Cat, Danke an Kitmgue
#SOC_REQUEST = [3, 34, 3, 8, 170, 170, 170, 170]
#SOC_REQ_ID = 1931
#SOC_RESP_ID = 1995
#ODO_REQUEST = [3, 34, 208, 4, 170, 170, 170, 170]
#ODO_REQ_ID = 1931
#ODO_RESP_ID = 1995
#VW MEB (laut id3esp32)
#SOC_REQUEST = [3, 34, 2, 140, 170, 170, 170, 170]
#SOC_REQ_ID = 0x17FC007B
#SOC_RESP_ID = 0x17FE007B
#ODO_REQUEST = [3, 34, 41, 90, 170, 170, 170, 170]
#ODO_REQ_ID = 0x17FC0076
#ODO_RESP_ID = 0x17FE0076
# Fiat 500e, siehe https://github.com/meatpiHQ/wican-fw/issues/95
#SOC_REQUEST = [3, 34, 160, 16, 170, 170, 170, 170]
#SOC_REQ_ID = 0x18DA44F1
#SOC_RESP_ID = 0x18DAF144
#ODO_REQUEST = [3, 34, 32, 1, 170, 170, 170, 170]
#ODO_REQ_ID = 0x18DA42F1
#ODO_RESP_ID = 0x18DAF142
"""
#OPENWB-Konfiguration
"""
OPENWB_IP = '192.168.1.60' # hier die Adresse der OpenWB einstellen - Lokaler Name könnte auch funktionieren, nicht ausprobiert
# Die folgenden Topics hängen von der Konfiguration der OpenWB ab. Wichtig ist, die Zahlen (IDs) richtig zu setzen. Sie sind in
# Firmware 2.0 auf der Statusseite zu finden.
#Für OpenWB 2.x:
OPENWB_SETSOC_TOPIC = 'openWB/set/vehicle/1/soc_module/calculated_soc_state/manual_soc' # Topic zum Setzen des manuellen SOC.
OPENWB_GETSOC_TOPIC = 'openWB/vehicle/1/get/soc' # Topic, um den SOC-Wert der Wallbox auszulesen
OPENWB_CHARGECOUNTER_TOPIC = 'openWB/chargepoint/3/get/imported' # Topic, um den Ladezähler auszulesen. Insbesondere die Nummer ist anzupassen
OPENWB_GETPLUGSTATE_TOPIC = 'openWB/chargepoint/3/get/plug_state' # Topic, um den Steckerzustand auszulesen. Nummer anpassen!
OPENWB_FACTORCOUNTER = 1000 # Faktor, um von der Einheit des Zählers (in 2.0 sind es Wh) auf kWh umzurechnen
#Für OpenWB 1.9:
#OPENWB_SETSOC_TOPIC='openWB/set/lp/1/manualSoc' #das Topic, auf das der ermittelte SOC geschrieben werden soll.
#OPENWB_GETSOC_TOPIC='openWB/lp/1/%Soc' #Topic, um den SOC-Wert der Wallbox auszulesen
#OPENWB_CHARGECOUNTER_TOPIC='openWB/lp/1/kWhCounter' #Topic, um den Ladezähler auszulesen. Bei 1.9 in kWh, bei 2.0 in Wh!
#OPENWB_GETPLUGSTATE_TOPIC='openWB/lp/1/boolPlugStat' #Topic, um den Steckerzustand auszulesen.
#OPENWB_FACTORCOUNTER=1 #Faktor, um von der Einheit des Zählers (in 1.9 sind es kWh) auf kWh umzurechnen
"""
WiCAN
"""
WICAN_NAME= 'eup' # Eindeutiger Name des WiCAN, beispielsweise der Name des Fahrzeugs. Definiert einen Zweig unter others/ im MQTT-Broker.
"""
Sonstiges
"""
# Zum Loglevel:
# CRITICAL - momentan nur Versionsausgabe bei Start
# ERROR - Fehler
# WARNING - nur Dinge, die auffällig sind und wichtiger
# INFO - Überblick, was gerade so passiert
# DEBUG - Zur Entwicklung.
LOGLEVEL = 'INFO'
# In das Chargelog werden die Daten der Ladevorgänge geschrieben: Start-SOC, Kilometerstand, Energiemenge, End-SOC laut Wallbox
CHARGELOG_PATH = '/home/pi/soc_helper/energydata.csv'
# Berechnungsfunktion des SOC aus der Antwort des Fahrzeugs.
# Die Antwortbytes des Fahrzeuges auf die SOC-Abfrage werden in einer Liste "bytes" mit n Elementen
# gesammelt. Das erste Element hat den Index 0 und beinhaltet die Sender-ID. Die Funktion rechnet aus
# den Bytes den SOC als Ganzzahl aus und gibt ihn zurück.
# Das Ergebnis muß für die OpenWB-SW 1.9 eine Ganzzahl sein, die Software 2.x kann Nachkommastellen.
def getSoc(bytes):
"""
Berechnen eines SOC aus den übergebenen Bytes. In der Regel entspricht der Rückgabewert des Batteriesteuergerätes dem echten
SOC des Akkus. Die Anzeige zeigt aber schon früher 100% (z.B. bei echten 96%) und 0% (z.B. bei echten 4%). Es sollte der
angezeigte Wert zurückgegeben werden, da sonst z.B. bei 96% echtem SOC die Ladungs seitens des Autos beendet wird.
Des weiteren kann zumindest bei VW ein Wert größer umgerechneten 100% auf einen Fehler oder fehlende Bereitschaft des ange-
fragten Steuergerätes deuten.
"""
soc = round(bytes[4]/2.5*51/46-6.4) # VW e-up [2029, 98, 2, 140, aa, xx, xx, xx, xx]. SOC=aa/2.5, Umrechung auf Anzeigewert
#soc = round((bytes[4]/2.5-8)/0.88) # e-Golf [2029, 98, 2, 140, aa, xx, xx, xx, xx]. SOC=aa/2.5, Umrechung auf Anzeigewert
#soc = round((bytes[4]*256+bytes[5])/10) # Ora Funky Cat [1995, 98, 3, 8, aa, bb, xx, xx]. SOC ist (aa*256+bb)/10
#soc = round((bytes[4]/2.5*51/46-6.4) # VW MEB [0x17FE007B, 98, 2, 140, aa, xx, xx, xx]. SOC ist aa/2.5, Umrechnung auf Anzeigewert
#soc = round((bytes[6]/2.55) # Fiat 500e [0x18DAF144, 98, 160, 16, xx, xx, aa, xx, xx, xx, ...]. SOC ist aa/2.55
#ungültige Werte werden in soc_helper.py abgefangen und gelogged.
return soc
# Funktionen für die Kilometerstand-Berechnung
# Die Antwortbytes des Fahrzeuges auf die km-Abfrage werden in einer Liste "bytes" mit n Elementen
# gesammelt. Das erste Element hat den Index 0 und beinhaltet die Sender-ID. Die Funktion rechnet
# aus den Bytes den Kilometerstand als Ganzzahl aus und gibt ihn zurück.
def getOdo(bytes):
odo=bytes[5]*65536+bytes[6]*256+bytes[7] # VW e-up. [2029, 98, 2, 189, xx, bb, cc, dd, xx, xx, xx, xx, xx, xx]
#odo=bytes[5]*65536+bytes[6]*256+bytes[7] # VW e-Golf, ungetestet. [2029, 98, 2, 189, xx, bb, cc, dd, xx, xx, xx, xx, xx, xx]
#odo = bytes[4]*65536+bytes[5]*256+bytes[6] # Ora Funky Cat. [1995, 98, 208, 4, aa, bb, cc, xx]
#odo = bytes[4]*65536+bytes[5]*256+bytes[6] # VW MEB. [0x17FE0076, 98, 41, 90, aa, bb, cc, xx]
#odo = (bytes[4]*65536+bytes[5]*256+bytes[6])/10 # Fiat 500e [0x18DAF142, 98, 32, 1, aa, bb, cc, xx]
return odo
Im MQTT-Browser wird weiterhin auch nur das Status-Topic angezeigt.