Closed jschroeter closed 2 months ago
Ideas:
CALL_ACCEPT_VIDEO
to VIDEO_REQUEST
or similar, since a) it's not a call (video is 1-way) and b) the indoor station typically sends this action automatically without any user interaction. The audio call is activated as a separate action. As mentioned above, the only weird thing is that this action also is sent when just opening a missed call or opening the menu of the indoor station.BUTTON_RING_UNKOWN
to SWITCH
?CALL_INTERNAL
for 0x12
OPEN_DOOR
to DOOR_OPEN
, just to have consistent naming?@ravenst0ne if you have a few minutes, please have a look. Maybe your station even supports more?
Ideas:
* rename `CALL_ACCEPT_VIDEO` to `VIDEO_REQUEST` or similar, since a) it's not a call (video is 1-way) and b) the indoor station typically sends this action automatically without any user interaction. The audio call is activated as a separate action. As mentioned above, the only weird thing is that this action also is sent when just opening a missed call or opening the menu of the indoor station.
Yes, we should then also use AUDIO_REQUEST
.
Maybe AUDIO_REQUEST is the one which is also triggering video and VIDEO_REQUEST is something totally different.
We can only guess :)
* rename `BUTTON_RING_UNKOWN` to `SWITCH`?
This is funny :-) My audio station (indoor and outdoor) sends BUTTON_RING_UNKOWN
for all unassigned buttons.
The generic "light" button on my indoor station sends 0x41. So maybe change 0x41 to LIGHT and 0x42 to BUTTON
("Schalthandlung", is it really a switch or a "press action"?). But maybe also the "Schaltform" (button vs. swicth) defines if it is 0x41 or 0x42.
We only can guess at the moment.
* add action `CALL_INTERNAL` for `0x12` * rename `OPEN_DOOR` to `DOOR_OPEN`, just to have consistent naming?
Sounds good!
unclear what this is doing
{"action": "ACTION_UNKOWN", "parameters": "0000", "source": "000000", "destination": "000000", "type": "TYPE_UNKOWN", "busdata": "E20020ED3F4B0000A1A286FD5F", "event_id": "17"} {"busdata": "E20020ED3F4B0000A1A286FD5F", "data": ["0xE2", "0x0", "0x20", "0xED", "0x3F", "0x4B", "0x0", "0x0", "0xA1", "0xA2", "0x86", "0xFD", "0x5F"], "valid": false}
valid = false
Seems an invalid message (checksum and/or parity bit).
Does this happen often? This may indicate a "weak" message which we do not receive properly.
So it could be S/W or H/W or just a bus glitch.
I also noticed a bug in the debug output, the raw counting values (which would help in such a case) are not send. Doh! I'll fix that.
E20020ED3F4B0000A1A286FD5F
you also received
020020ED3F4B0000A1A286FD5F
It seems the first nibble is mangled.
Thanks for fixing the debug output!
valid = false
Seems an invalid message (checksum and/or parity bit). Does this happen often? This may indicate a "weak" message which we do not receive properly. So it could be S/W or H/W or just a bus glitch.
I can reliably reproduce it by Outdoor ring & accept audio call & open door & manual close call & wait ~30s. Other than that I haven't seen it so far.
Here the full debug output:
{"action": "BUTTON_RING", "parameters": "0360", "source": "A286FD", "destination": "000000", "type": "OUTDOOR", "busdata": "011011A286FD0360A04A", "event_id": "1"}
{"busdata": "011011A286FD0360A04A", "raw": ["0x3E", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x22", "0xC", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0x21", "0x21", "0xD", "0x21", "0xD", "0x21", "0x21", "0xD", "0x21"], "valid": true}
{"action": "CALL_ACCEPT_VIDEO", "parameters": "0278", "source": "ED3F4B", "destination": "A286FD", "type": "INDOOR", "busdata": "022028ED3F4B0278A1A286FD01", "event_id": "2"}
{"busdata": "022028ED3F4B0278A1A286FD01", "raw": ["0x3D", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21"], "valid": true}
{"action": "CALL_ACCEPT", "parameters": "0000", "source": "ED3F4B", "destination": "A286FD", "type": "INDOOR", "busdata": "020021ED3F4B0000A1A286FD60", "event_id": "3"}
{"busdata": "020021ED3F4B0000A1A286FD60", "raw": ["0x3D", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21"], "valid": true}
{"action": "OPEN_DOOR", "parameters": "0060", "source": "ED3F4B", "destination": "A286FD", "type": "INDOOR", "busdata": "020031ED3F4B0060A1A286FDD0", "event_id": "4"}
{"busdata": "020031ED3F4B0060A1A286FDD0", "raw": ["0x3D", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD"], "valid": true}
{"action": "CALL_CLOSE", "parameters": "0000", "source": "ED3F4B", "destination": "A286FD", "type": "INDOOR", "busdata": "020020ED3F4B0000A1A286FD5F", "event_id": "5"}
{"busdata": "020020ED3F4B0000A1A286FD5F", "raw": ["0x3D", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0xD", "0x21"], "valid": true}
# call seems to have ended, no active audio/video. But when waiting ~30s, I get:
{"action": "ACTION_UNKOWN", "parameters": "0000", "source": "000000", "destination": "000000", "type": "TYPE_UNKOWN", "busdata": "020020ED3F4B0000A1A686FD5F", "event_id": "6"}
{"busdata": "020020ED3F4B0000A1A686FD5F", "raw": ["0x3E", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0x21", "0x21", "0xD", "0xD", "0x21", "0xD", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0x21", "0x21", "0x21", "0xD", "0x21", "0xD", "0xD", "0x21", "0xD", "0xB", "0x20", "0x21", "0xC", "0x21", "0xC", "0xC", "0x1F", "0xB", "0xB", "0x20", "0x20", "0x20", "0x21", "0xD", "0xD", "0xD", "0x21", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0xD", "0x21", "0xD", "0x21"], "valid": false}
Hm, the debug output indicates a valid bus transmission with a wrong bit.
The bit length for the right commands (excerpt) were:
D | 21 | D | 21 | 21
for the invalid message
D | 21 | D | B | 20
So one bit was inverted (the 0x0B). All bits around are valid, so it was also not a single glitch/transient and 0x0D vs. 0x0B - this is also no far.
Bit = 0 = 0x21 = 33 periods wide pulsetrain Bit = 1 = 0xD = 13 periods wide pulsetrain Bit = ERROR = 0xB =11 periods wide pulsetrain
At the moment, nothing we can do I would assume, but let's keep an eye on it.
Alright - since invalid messages don't get printed in the non-debug output, I also don't see any issue with it.
The generic "light" button on my indoor station sends 0x41. So maybe change 0x41 to LIGHT and 0x42 to BUTTON ("Schalthandlung", is it really a switch or a "press action"?)
Same here, the "light" button on my indoor station sends 0x41, so I would leave it as is. Unfortunately I couldn't test the light button on the outdoor station yet, it seems to be not connected (I will check one day).
On my indoor station the "Schalthandlung" is only accessible via the menu, so there is no separate button for it. And in the menu, for each of the 4 there are two options: on and off, which result in different parameters being sent (on: xx40
, off: xx50
), that's why I thought about "SWITCH". But I guess it's better to keep it generic for now and call the action "BUTTON" (instead of "BUTTON_RING_UNKOWN").
I'm not 100% happy with "CALL_CLOSE" as this is also used for ending the video stream, meaning there was no active "call". But I don't have a better idea yet, so I left it as is.
LGTM :+1:
Idea: CALL_CLOSE
-> AUDIO_VIDEO_END
I updated the docs, please have a look and then we can close this issue.
Collecting some more bus actions to add them to the docs, code + streamline wording. Work in progress.
Outdoor ring & accept audio call & open door & manual close call
Outdoor ring + open door (without accepting audio call)
Button ring + no user interaction
View missed call / pressing the "menu" button on the indoor station
When viewing the missed call on the indoor station ("phone" button blinking + pressing it), the following command appears on the bus, although the video stream doesn't start or at least is not visible on the indoor station. It's just showing the picture which is saved on the SD card of the indoor station. The same happens when pressing the "menu" button on the indoor station (there is no active call, no video showing, just the menu is visible).
Open door without open call
Similar to opening with an active call, but the destination is the controller instead of the outdoor station.
Activate camera from indoor station (without audio call)
Indoor station: "Schalthandlung"
see https://partner.gira.de/data3/12391110.pdf page 17
Internal calls from the indoor station
see https://partner.gira.de/data3/12391110.pdf page 17