Repository navigation
0.4.3
MyHOME Integration Release v0.4.3
Installation
HACS (recommended)
- Add this repository as a custom repository in HACS
- Install the MyHOME integration
- Restart Home Assistant
Manual installation
- Download
myhome.zipfrom the assets below - Extract it into
custom_components/myhome/in your Home Assistant
configuration directory (the archive holds the integration's files
themselves, with no top-level folder) - Restart Home Assistant
Changelog
Covers driven together stop where they are told again. A basic actuator timed its run from the moment the command was queued rather than from the moment the gateway actually wrote it on the bus, and a scene moving a dozen shutters at once left the last ones running short. Nothing to configure: no new key, no changed default, no change to the roll model, the profiles or the calibration maths.
Fixed
- Covers commanded together stopped too high. One command worker writes about ten frames a second, so with twelve covers given
set_cover_positionat once the k-th direction frame left the socket roughly0.1 × kseconds after that cover had already started counting, while its stop — scheduled for the end of the run, and finding an empty queue by then — went out immediately. Every motor ran shorter than modelled: measured on a 195 cm shutter, the twelve stopped between 5 and 14 cm too high, the last ones worst, while the same covers driven one at a time landed within a centimetre or two. The run is now timed from the instant the frame is written to the bus, and the timed stop that ends it moves with that instant. - The stop that ends a set position or a tilt run is timed the same way. The motor keeps turning while the stop frame waits its turn, so the estimate is frozen where the shutter really got to when the stop left, not on the target it had already passed. That stop is armed from the instant the direction frame reached the bus, and is not queued before it, so a run whose start waited its turn still runs its full length instead of being cut short by its own stop.
- A movement command that never reaches the bus no longer moves the estimate. When the command path gives up on a direction frame — the queue TTL expired, the gateway never answered — the cover goes back to the position it started from, instead of running a phantom estimate to an end stop nothing is heading for. A stop that is dropped after being queued keeps the behaviour a refused stop already had: the shutter runs on to its end stop, and the estimate runs with it.
- The window in which a gateway echo is recognised opens when the frame is written, not when it is queued. A command that spent a second in the queue is still recognised by its own repeat, instead of that repeat being read as somebody at the keypad.
- A cover no longer runs to its end stop when its command waited in the queue. A scene that moves several shutters at once can leave a frame waiting more than a second and a half before the gateway writes it; the gateway's own repeat of that command then arrived after the window in which it is recognised as a repeat, and was read as somebody pressing the keypad — the shutter ran to the end of its travel and the stop that should have ended the run was cancelled with it. The window now covers the wait as well, and a command is timed from the moment its frame reaches the socket rather than from the gateway's acknowledgement.
- A command the gateway never acknowledged is not written a second time. The frame had already left the socket, so the actuator has it: the retry only ever repeats a frame that never reached the socket at all. Such a command is still reported and counted as dropped, exactly as before.
Changed
- Stop frames overtake the command queue. A stop (
*2*0*<where>##) is handed to a sending worker before any movement or status frame already waiting for another device; ordering among stops, and among everything else, stays FIFO. Behind a frame of its own device it is inserted right after that frame, not appended behind every other cover's too, so a scene moving a dozen other shutters can no longer make the stop wait for all of them; what one device is told still reaches the bus in the order it was told, so a stop can never end a run that has not started. A status request for the same device does not hold the stop back either — only another movement frame does — and "same device" is(WHO, WHERE, bus interface), so a light and a cover sharing a WHERE are told apart. A late stop lengthens a run exactly as a late start shortens it, and twelve stops can collide just as twelve starts can. The queue bound, the TTL, the published queue length and the diagnostics counters are unchanged and still count the total. This ordering is a guarantee of the queue, not of the bus: withcommand_worker_countset above its default of1, two adjacent frames for the same device can still be written out of order. myhome.cover_calibration_runreports the interval the motor really ran. It starts timing the half run when the direction frame reaches the bus, andmotor_secondsis now the interval between that delivery and the delivery of the stop — never less than the run that was asked for — rather than the number of seconds the run was planned for. On an idle queue the two are the same figure. The action fails with a message naming the entity when either frame never reaches the bus, instead of reporting seconds for a shutter that did not move, or did not stop.