Well, I said, “I’m happy again” too soon. While the homeassistant/turn_on and homeassistant/turn_off services adequately replace the remote/turn_on and remote/turn_off for the Harmony hub, there is no equivalent to replace the remote/send_command used to send specific commands to navigate menus and pause/play/fastforward/rewind, etc.
So, I considered whether it could be a Supervisor version or HassOS version, since those did not appear to change when I did the rollback. But in researching, I could not find any documentation of how to roll those back. I tried restarting them, but there was no change.
In reading the AppDaemon documentation, I came upon the self.list_services() function/api call, which, acording to the Change Log, is new to AppDaemon 4.0.0. So, I added this to my initialization routine:
self.log(self.list_services(namespace="global"))
When parsing through the list of services in the log, I could see that there were no services listed for the “remote” or “harmony_hub” domains. Obviously, that would account for the errors. But why were they missing? Was there anything else missing?
I thought this might be a bug in AppDaemon 4, so I reinstalled AppDaemon 3, and renamed my original appdaemon.yaml file back (I always keep old versions for a while), stopped AppDaemon 4 and started AppDaemon 3. The list_services() function threw an error, as expected since it was not part of AppDaemon 3. I tried the parts of my system that were not working with AppDaemon 4, and they were working again!
Okay, getting much better! Switching versions is very painless, so I swapped my appdaemon.yaml file back to version 4, stopped AppDaemon 3 and started AppDaemon 4 again. I found that the “remote” and “harmony” services were now listed! I tried my system, and everything is working again.
I compared the services list from before and after the problem. The first (problem) version had 136 services. The newer (working) version has 168. These are the services that are in the new version that were not in the old version:
{'namespace': 'default', 'domain': 'zwave', 'service': 'add_node'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'add_node_secure'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'cancel_command'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'change_association'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'heal_network'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'heal_node'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'print_config_parameter'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'print_node'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'refresh_entity'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'refresh_node'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'refresh_node_value'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'remove_failed_node'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'remove_node'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'rename_node'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'rename_value'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'replace_failed_node'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'reset_node_meters'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'set_config_parameter'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'set_node_value'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'set_poll_intensity'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'set_wakeup'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'soft_reset'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'stop_network'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'test_network'},
{'namespace': 'default', 'domain': 'zwave', 'service': 'test_node'},
{'namespace': 'default', 'domain': 'remote', 'service': 'learn_command'},
{'namespace': 'default', 'domain': 'remote', 'service': 'send_command'},
{'namespace': 'default', 'domain': 'remote', 'service': 'toggle'},
{'namespace': 'default', 'domain': 'remote', 'service': 'turn_off'},
{'namespace': 'default', 'domain': 'remote', 'service': 'turn_on'},
{'namespace': 'default', 'domain': 'harmony', 'service': 'change_channel'},
{'namespace': 'default', 'domain': 'harmony', 'service': 'sync'},
Interestingly, of the zwave domain, only this was in the bad version:
{'namespace': 'default', 'domain': 'zwave', 'service': 'start_network'},
So this leaves unanswered questions for me. Why did this happen? Was it a bad install? Will this happen again? If you have any answers to these questions, I hope you will post them here. And if you see any similar challenges, please share those as well.