EVNotiPi

Auflistung von gewünschten Features, Ausschreibung zur Umsetzung
Heavendenied
Beiträge: 508
Registriert: Do Feb 20, 2020 1:16 pm

Re: EVNotiPi

Beitrag von Heavendenied »

Nachdem EVNotiPi ja mit unserem Ioniq nun seit langer Zeit einwandfrei läuft würde ich gerne auch unseren "neuen" Peugeot iOn damit auslesen.
Ich hab schon rausgefunden, dass man in den EVNotiPi Sourcen auch weitere Fahrzeuge anlegen kann.
Allerdings hab ich mich noch nie wirklich mit Canbus beschäftigt udn bin daher mit PID, Transmit CAN ID etc etwas überfordert.
Es gibt bereits den Outlander_EV als Car in EVNotiPi und ich würde eigentlich davon ausgehen, dass der dem iOn recht ähnlich ist.
Aber soweit ich das verstanden habe wird bei EVNotiPi immer eine "Anfrage" über CANbus an das Fahrzeug geschickt und das was zurück kommt dann ausgewertet, während andere Tools wie Canion wohl einfach "mithören". Beim mithören ist dann wohl die 0x374 der Wert für den SOC.
Weiterhin habe ich für die BErechnung des SOC aus dem Wert von 0x374 diese Formel gefunden:
SOC1 = { payload: (data[0] - 10) / 2 }

Jetzt würde ich also gerne versuchen mir die Abfrage des Outlander so anzupassen, dass sie für meinen iOn passt. Aber ich verstehe einfach nicht, was da alles in der OUTL_EV.py passiert...

Code: Alles auswählen

from car import *

# This is OUTLANDER interface

cmd = bytes.fromhex('2101')         # PID command
canIDtx=0x761                       # Transmit CAN ID
canIDrx=0x762                       # Receive CAN ID
index=2                             # index of SoC in received message

class OUTL_EV(Car):

    def __init__(self, config, dongle, gps):
        Car.__init__(self, config, dongle, gps)
        self.dongle.setProtocol('CAN_11_500')

    def readDongle(self, data):
        now = time()
        raw = {}

        cmds = (('ATFCSH761','OK'),
                ('ATFCSD300000','OK'),
                ('ATFCSM1','OK'))

        for c,r in cmds:
            self.dongle.sendAtCmd(c, r)

        raw[cmd] = self.dongle.sendCommandEx(cmd, canrx=canIDrx, cantx=canIDtx)

# test print for soc raw value
#       print(hex(raw[cmd][index]))

        data.update({
            'SOC_DISPLAY':              raw[cmd][index] / 2.0 - 5,
         })
Kann mir da jemand helfen?
Gruß,
Jürgen
Antworten