Just to follow-up on this, what I have learned is the problem seems to show up when HassOS is updated. When that happens, a bunch of services do not get loaded. What seems to correct it is to stop and restart AppDaemon.
What I have done to detect the problem is use AppDaemon 4’s list_services() function to get the full list of services. I create a variable in my initialize() function, then compare that list to the services I have now:
self.expected_services = <insert list returned previously by list_services()>
services_now = self.list_services(namespace="global")
if len([i for i in self.expected_services + services_now if i not in self.expected_services or i not in services_now]) == 0:
self.log("Services list matches")
else:
self.log("Services list does NOT match")
I realize I can improve on the code to list the differences. The important thing right now is that I can see if I am missing a bunch.
One side-effect of this is that when I install a new integration (for example, I setup Sonos last night), a few new services may appear, so I have to update my expected_services list. While a little annoying, it is better than having my Harmony functionality unexpectedly cease working!
(I am currently on AppDaemon 4.0.2.5, HassOS 3.13, HA Core 0.108.9)