Open d2inco opened 3 weeks ago
I'd like to keep to using service discovery vs storing credentials in plain text. I could add an option to the UI to fall back to the manual config options but you need the MQTT integration configured anyway for the entities to show up.
You configure the MQTT integration to use your broker:
That's mine for the mosquitto addon.
Ah yes, I do have the MQTT configured with my broker, port, the HASS username and pw in there. So, maybe it's just not fully getting passed to the Addon ?
Can you post the error and your MQTT config? The Supervisor API shouldn't differentiate between using Mosquitto and something else
This is the MQTT Configuration for my external (within the home network):
This is the Config file of Xcdl-Itron-MQTT (rather than a GUI shot):
meter_port: 8081
cert_dir: /config/certs
cert_file: cert.pem
key_file: key.pem
ldfi: REDACTED
Yes, the meter_ip
is confirmed and does show port 8081 open and responding.
This is the log capture after attempting to start the Xcel iTron MQTT is here:
Add-on: Xcel iTron MQTT
Bridge from Xcel iTron smart meters to MQTT
-----------------------------------------------------------
Add-on version: 1.4.0
You are running the latest version of this add-on.
System: Debian GNU/Linux 12 (bookworm) (amd64 / qemux86-64)
Home Assistant Core: 2024.10.4
Home Assistant Supervisor: 2024.10.3
-----------------------------------------------------------
Please, share the above information when looking for help
or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service base-addon-banner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-xcel-itron-mqtt: starting
[09:26:38] INFO: Initializing Xcel iTron2MQTT
s6-rc: info: service init-xcel-itron-mqtt successfully started
s6-rc: info: service xcel-itron-mqtt: starting
s6-rc: info: service xcel-itron-mqtt successfully started
s6-rc: info: service legacy-services: starting
[09:26:39] INFO: Starting Xcel iTron2MQTT
[09:26:39] ERROR: Got unexpected response from the API: Service not enabled
s6-rc: info: service legacy-services successfully started
Traceback (most recent call last):
File "/opt/xcel_itron2mqtt/main.py", line 83, in <module>
meter = xcelMeter(INTEGRATION_NAME, ip_address, port_num, creds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/xcel_itron2mqtt/xcelMeter.py", line 58, in __init__
self.mqtt_client = self.setup_mqtt(self.mqtt_server_address, self.mqtt_port)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/xcel_itron2mqtt/xcelMeter.py", line 197, in setup_mqtt
client.connect(mqtt_server_address, mqtt_port)
File "/usr/local/lib/python3.12/site-packages/paho/mqtt/client.py", line 912, in connect
self.connect_async(host, port, keepalive,
File "/usr/local/lib/python3.12/site-packages/paho/mqtt/client.py", line 978, in connect_async
raise ValueError('Invalid host.')
ValueError: Invalid host.
[09:26:40] INFO: Service Xcel iTron2MQTe exited with code 1 (by signal 0)
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service xcel-itron-mqtt: stopping
s6-rc: info: service xcel-itron-mqtt successfully stopped
s6-rc: info: service init-xcel-itron-mqtt: stopping
s6-rc: info: service init-xcel-itron-mqtt successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service base-addon-log-level: stopping
...
So I'd think that there should be a client.username_pw_set(username,password)
in stack trace, too, somewhere that maybe isn't being set? But again, I'm not a Python guy, so...
The Mosquitto addon also uses a username and password, so using an external broker should not be different. But, for sake of completeness: here's where the username/password is set in the upstream project and here is where this addon extracts the credentials
The error is saying "Invalid host". It's not clear to me if that's because of that "Service not enabled" API error or if your config is incorrect. Are you using the MQTT integration for other things successfully? Have you restarted your Home Assistant instance (a quick Google showed several issues on the wmbusmeters
project with the same error saying a restart fixed it for some reason).
Yeah, I use the MQTT successfully (407 devices, 501 entities).
I see the two code-links you provided, and it makes some sense with:
export MQTT_USER=$(bashio::services mqtt "username")
export MQTT_PASSWORD=$(bashio::services mqtt "password")
export MQTT_PORT=$(bashio::services mqtt "port")
that if the bashio::services
works right, it should pull the host/port/un/pw, but without it showing up in debug logs, i can't verify that it's working... plus, like you said, it does show 'invalid host' which means it's not getting there... I'm not seeing any negative lines in the mosquitto line on the broker indicating a failed connection (or even the first line of "new connection from").
I had already restarted HA this morning, but went ahead and just did it, with no change. I'd wonder if it's a routing issue, with potentially the container not routing to non-containers, but that would not make sense since others would then be having issues with the Xcel meter not being reachable.
For what it's worth, I tried adding host
port
username
and password
that the python referenced into the config yaml under the Xcel iTron MQTT GUI/configuration tab, but no change there... still the 'invalid host' error.
on The link you sent above, is there any way to have it use the "bashio::log.info" to output the MQTT Server/Port/User (not Password) ENV variables after bashio::services has attempted to fetch them, to make sure they're even being fetched correctly? Say, after line 16?
Sure, just pushed a commit to the next
branch with the logging. Can you install off of that branch?
Would love to, but, naively, "how" - I ended up uninstalling then reinstalling, figuring that I would get the prompt for Main vs (other) branch there, but that didn't happen (had saved my config, hopefully it'll still work). Attempting to add a new repo of "https://github.com/wingrunr21/hassio-xcel-itron-mqtt/tree/next" failed, as well. I know i'vee seen a branch-choice dropdown before, but not seeing it under the Addon, the upper-right overflow 3-dot menu, or ... google-search is not being helpful..
ok, this is a low-risk change so I'll just push a patch version then
[11:53:45] INFO: Starting Xcel iTron2MQTT
[11:53:45] ERROR: Got unexpected response from the API: Service not enabled
s6-rc: info: service legacy-services successfully started
[11:53:45] INFO: Meter config: 192.168.XcelMeterIPWasHere:8081
[11:53:45] INFO: MQTT server config: :
Traceback (most recent call last):
File "/opt/xcel_itron2mqtt/main.py", line 83, in <module>
meter = xcelMeter(INTEGRATION_NAME, ip_address, port_num, creds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/xcel_itron2mqtt/xcelMeter.py", line 58, in __init__
self.mqtt_client = self.setup_mqtt(self.mqtt_server_address, self.mqtt_port)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/xcel_itron2mqtt/xcelMeter.py", line 197, in setup_mqtt
client.connect(mqtt_server_address, mqtt_port)
File "/usr/local/lib/python3.12/site-packages/paho/mqtt/client.py", line 912, in connect
self.connect_async(host, port, keepalive,
File "/usr/local/lib/python3.12/site-packages/paho/mqtt/client.py", line 978, in connect_async
raise ValueError('Invalid host.')
ValueError: Invalid host.
[11:53:46] INFO: Service Xcel iTron2MQTe exited with code
So it looks like maybe its not fetching it?
Ya, seems like it. It's gotta be this: ERROR: Got unexpected response from the API: Service not enabled
. I wonder if the Supervisor only enables the MQTT service when the Mosquitto addon is installed.
I have a random idea: can you install the Mosquitto addon and not start it or otherwise change your MQTT config and see if things work?
I looked up the Supervisor code and it seems they are using the addon config, not the integration config. So I'll need to add this config to the UI
I really don't want to do that; I don't have a dev-system to try stuff out on, and i have too many things that talk to/through MQTT and don't want to risk them saying "oh, now I have a broker install locally, let me shift to that"...
Lemme ask this - are the bash lines export MQTT_SERVER=$(bashio::services mqtt "host")
pulling from the installed service broker, or are they asking the integration what the config values are, isntead?
Just saw your edit (good! really didn't want to do that!) -- is there a way to query the Intergration config-setting vs the mqtt broker Service setting?
Ya, I can have the config lookup fall back to the services call if the UI config isn't set. I just need to add that to the UI and test it.
Hello.
Any chance you could either make the MQTT Broker part of the Configuration UI, or alternatively, give an example of the 4 entries needed to get it up and running? I was able to locate a 'mqtt_server_address' and 'mqtt_port' in the error message and tried those, but still need to be able to get the MQTT User/Pass in there, as well
I'm running an external broker, and the reference to it in the documentation, "You can use an external broker other than the Mosquitto addon by configuring the MQTT integration with that broker's details" don't have the 4 specific yaml Keys that need to be set for an external broker. (If I understood Python better, I'd go diving into it, but... I don't).
Thank you!