Hi all, I am currently working on a project for my Prius and I need to be able to know the door and window status over CAN. I have found the window status on message ID 0x638, data byte 4 (2 bits per window), but I can't seem to locate the door status. I have found a bit in message 0x626 that appears to indicate the status of either the dome light or the door indicator on the dash, however I would love to know the status of each door individually. Does anyone know if that is available or will I need to do more reverse engineering? Thanks! Erik PS. ID 0x638 also appears to contain the lock status and hatch button state on bytes 2 and 6, if this is useful to anyone!
For the curious, here's how to decode the door lock and window status: Code: def windowStatus(data, window): status = (data >> (2 * window)) & 0x03 if status == 1: return "Fully Open" if status == 2: return "Closed" if status == 3: return "Partially Open" return "N/A" Code: if msg.arbitration_id == 0x638: if msg.data[1] & 0x80: print("Driver Door: " + ("Unlocked" if msg.data[2] & 0x10 else "Locked")) print("Passenger Door: " + ("Unlocked" if msg.data[2] & 0x08 else "Locked")) print("Rear Doors: " + ("Unlocked" if msg.data[2] & 0x06 else "Locked")) print("Hatch: " + ("Unlocked" if msg.data[2] & 0x01 else "Locked")) print("Hatch Button: " + ("Pressed" if msg.data[6] & 0x40 else "Released")) print("Driver Window: " + windowStatus(msg.data[4], 3)) print("Passenger Window: " + windowStatus(msg.data[4], 2)) print("Right Rear Window: " + windowStatus(msg.data[4], 1)) print("Left Rear Window: " + windowStatus(msg.data[4], 0))
Check the wiring diagram to see if the door switches are separately connected to an ECU. I suspect that they are all on one connection. My wife's CT200h displays which door is open, while my Gen2 Prius only displays that a door is open.
Maybe this is overly picky but your code returns inaccurate information if one rear door is locked and the other isn't.
Hi @taxibuddy - unfortunately, the two rear doors appear to be connected in a "logical-AND" configuration - if either is unlocked, the status bits show 'unlocked' for both. I am expecting the same for the 'door-open' status, as there is only 1 wire going to the ECU for both rear doors in the wiring diagram.
@RobH: The wiring diagram shows that there are inputs for the following "courtesy switches": - Front Left - Front Right - Rear (both in parallel) - Hatch - Hood I think it should be possible, therefore, to read these on the CAN bus...
Got it! It was sharing the same message as the parking brake, which I had already filtered out and is why I couldn't find it... For future reference: Code: if msg.arbitration_id == 0x620: if msg.data[1] & 0x80: print("Driver Door: " + ("Open" if msg.data[5] & 0x20 else "Closed")) print("Passenger Door: " + ("Open" if msg.data[5] & 0x10 else "Closed")) print("Rear Doors: " + ("Open" if msg.data[5] & 0x0c else "Closed")) print("Hatch: " + ("Open" if msg.data[5] & 0x02 else "Closed")) print("Parking Brake: " + ("On" if msg.data[7] & 0x10 else "Off")) Still no sign of the hood status (even on that message), but I don't need that anyway.