Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Least Home assistant doesn't like MQTT format #205

Closed
ardenking opened this issue Aug 3, 2023 · 26 comments
Closed

Least Home assistant doesn't like MQTT format #205

ardenking opened this issue Aug 3, 2023 · 26 comments
Labels

Comments

@ardenking
Copy link

After updating to latest HA get this following warning about the MQTT formatting

any advice on resolving

IMG_20230803_120757

@ardenking
Copy link
Author

I've got round this by flashing with esphome

@CacheMinimal
Copy link

I've got round this by flashing with esphome

Any chance you could share a configuration for this?

@ardenking
Copy link
Author

esphome:
name: in-therm-pwt-002-1
platform: ESP8266
board: esp01_1m
on_boot:
priority: 600
then:
- switch.turn_off: power_switch

Make sure logging is not using the serial port

logger:
baud_rate: 0

Enable Home Assistant API

api:

ota:
password: "YOUR_OTA_PASSWORD"

wifi:
ssid: "YOUR_WIFI_SSID"
password: "YOUR_WIFI_PASSWORD"
fast_connect: true

Enable fallback hotspot (captive portal) in case wifi connection fails

ap:
ssid: "In-Therm-Pwt-002-1"
password: "YOUR_GENERATED_PASSWORD"

captive_portal:

uart:
rx_pin: GPIO3
tx_pin: GPIO1
baud_rate: 9600

Getting time from HA

time:

  • platform: homeassistant
    id: ha_time

Register the Tuya MCU connection

tuya:
time_id: ha_time

climate:

  • platform: tuya
    name: "Thermostat"
    switch_datapoint: 1
    target_temperature_datapoint: 2
    current_temperature_datapoint: 3
    eco_datapoint: 5
    eco_temperature: 20 °C
    temperature_multiplier: 0.5
    visual:
    min_temperature: 20 °C
    max_temperature: 35 °C
    temperature_step: 0.5 °C

Create a sensor

sensor:

  • platform: "tuya"
    name: "Temperature"
    sensor_datapoint: 3
    unit_of_measurement: "°C"
    device_class: "temperature"
    accuracy_decimals: 1
    filters:
    • multiply: 0.5

switch:

  • platform: "tuya"
    name: "Power"
    id: power_switch
    switch_datapoint: 1
    internal: true
  • platform: "tuya"
    name: "Eco Mode"
    icon: "mdi:earth"
    switch_datapoint: 5
    internal: true
  • platform: "tuya"
    name: "Lock"
    icon: "mdi:lock"
    switch_datapoint: 6
    internal: true

@ardenking
Copy link
Author

this should be enough to get you started

@FreakyPady
Copy link

Wow, interesting... i found this topic because i got the same message in Home Assistant now after updating to 2023.8.

I'm not pretty sure if i understand right what you described here, ardenking. I'm also using ESPhome addon in Home Assistant, but with other devices not with my thermostat (BHT-002 with WThermostat 1.18-fas at the moment).
Do I understand right, that it's possible to flash the ESP's inside just with ESPhome and adding your code to control them simply with ESPhome via Home Assistant?

In the past i didn't ever thought about the possibility with ESPhome - i just flashed the described file and configured the thermostat via webinterface... But this could be a possible solution, if 2024.2 will come bevor an fix of the described error is available.

@ardenking
Copy link
Author

Yep I put the yaml in esphome addon downloaded the bin file and updated via the web interface on this firmware

@FreakyPady
Copy link

Thanks, that's really good to know. After that, the device should be able to get updates via ESPhome OTA?

Maybe I will test this, just for fun. In comparison to the actual used software i just would miss the possibility of the time schedule: Changing the integrated schedule via webinterface is very comfortable. If using your yaml via ESPhome i need to change the time schedule directly at every device or let HA doing all the changes, right?

@ardenking
Copy link
Author

Im using the scheduler from HACs to set timers directly in Lovelace Its made things better because its all in one place

@MJP-76
Copy link

MJP-76 commented Aug 10, 2023

Hope I am not hijacking the thread here but thought I would pop in my 2cents worth

Been using ESPHome on mine from day 1 and use a scheduler to run them. I have 3 for separate underfloor heating and since its ESPHome it uses the esphome integration and not mqtt

As I get the floor temp into home assistant it manages them based on time of day, year, who's home etc etc along with all my other heating as I use schedy via Appdaemon to control all my heating

All you should need to change in my code for these devices to appear in home assistant is install the ESPHome addon and then change the "substitutions" with your device name, set up the sections in your esphome secrets file for wifi, ha API key etc, and generate the .bin and upload to your thermostat

There are many other little tweaks you can add like turning off the relay/switch when power is restored etc comes on etc

One thing I like is the restart if API connection is lost which if your HA goes down, it will reboot and automatically "power off" so no need to worry if

Here is my ESPHome code:

`substitutions:
devicename: Entrance UFH
deviceid: entranceufh

esphome:
name: ${deviceid}
platform: ESP8266
board: esp01_1m

logger:
baud_rate: 0

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: ${devicename}_AP
password: !secret ap_password
domain: !secret domain
fast_connect: true

captive_portal:

api:
reboot_timeout: 15min
encryption:
key: !secret api_key

ota:
password: !secret ota_password

uart:
rx_pin: GPIO3
tx_pin: GPIO1
baud_rate: 9600

web_server:
auth:
username: admin
password: !secret web_server_password

time:

  • platform: homeassistant
    id: homeassistant_time

text_sensor:

  • platform: wifi_info
    ip_address:
    name: ${devicename} IP Address

binary_sensor:

  • platform: status
    name: ${devicename} Status

tuya:
time_id: homeassistant_time

climate:

  • platform: tuya
    name: "${devicename}"
    switch_datapoint: 1
    target_temperature_datapoint: 2
    current_temperature_datapoint: 102
    eco_datapoint: 5
    eco_temperature: 16 °C
    temperature_multiplier: 0.5
    visual:
    min_temperature: 15 °C
    max_temperature: 23 °C
    temperature_step: 0.5 °C

sensor:

  • platform: wifi_signal
    name: "${devicename} WiFi Signal"
    update_interval: 60s
  • platform: uptime
    name: "${devicename} Uptime"
  • platform: "tuya"
    name: "${devicename} Target Temp"
    sensor_datapoint: 2
    unit_of_measurement: "°C"
    device_class: "temperature"
    accuracy_decimals: 1
    filters:
    • multiply: 0.5
  • platform: "tuya"
    name: "${devicename} Room Temp"
    sensor_datapoint: 3
    unit_of_measurement: "°C"
    device_class: "temperature"
    accuracy_decimals: 1
    filters:
    • multiply: 0.5
  • platform: "tuya"
    name: "${devicename} Floor Temp"
    sensor_datapoint: 102
    unit_of_measurement: "°C"
    device_class: "temperature"
    accuracy_decimals: 1
    filters:
    • multiply: 0.5
  • platform: "tuya"
    name: "${devicename} Mode"
    sensor_datapoint: 4
    internal: true

switch:

  • platform: restart
    name: "${devicename} Restart"
  • platform: "tuya"
    name: "${devicename} Power"
    id: power_switch
    switch_datapoint: 1
  • platform: "tuya"
    name: "${devicename} ECO Mode"
    icon: "mdi:earth"
    switch_datapoint: 5
  • platform: "tuya"
    name: "${devicename} Child Lock"
    icon: "mdi:lock"
    switch_datapoint: 6
  • platform: "tuya"
    name: "${devicename} DP 104"
    switch_datapoint: 104
    internal: true

Sorry, code does not format correctly on here too well

@ardenking
Copy link
Author

Thanks for the input hopefully between my yaml and yours should be enough for others to roll their own for their environment

@FreakyPady
Copy link

Thank you both, that's really awesome... I have one test device to play around, maybe i will test this.

"schedy via Appdaemon" was also new for me. That sounds great if HA should control the schedule. But for me, in case of an error in my home automation, the self-sufficent function including schedule of my thermostat is the preferred way.

According your code, MJP-76, i have a few questions:

  • You enable the web_server. What would be shown on the website?
  • The last switch "DP 104": Do you know about the function?
  • The AP function: Is that just for backup reasons, if the declared wifi ssid is not available?

Your yaml-code would be better formatted if you use the "code" button above this textfield! Example:

esphome:
  name: "dummy"
  friendly_name: "friendly dummy"

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

Thank you!

@MJP-76
Copy link

MJP-76 commented Aug 10, 2023

Used the code button plenty of times, not sure why it just keeps formatting as it does

Esphome has a nice add-on that creates a dashboard where you can edit and update you config / firmware easily without leaving home assistant

Screenshot 2023-08-10 at 15 31 03

Red devices are offline, grey are up to date and then a blue update if there is a new firmware ready to go and a nice button that says "Update All" which i nice when you have lots of esphome devices as it will build and update for you one at a time

I think esphome you can set home assistant to do a ping of the devices but cant remember, this will shows the online/offline state

For each device, you can manually update, check logs etc or click the visit button which takes you to the web interface of the device where you can control it, see logs and run updates etc as below

Screenshot 2023-08-10 at 15 40 56

I found that if you have an "internal" domain name on your router setup then its easier to get to the devices if HA is down by just typing the device name.domain.name etc but if not, just the device name should service on a normal ISP router

I would highly recommend the settings I have for wifi, api, captive_portal and web_server as a bare minimum

That way if you ever lose connectivity to HA or even the wifi SSID they are configured for, they restart with their own AP

Hope that answers your questions

And just a bit on my heating:

My heating is 373 lines of code, it controls 13 radiators, 5 ceiling fans, 2 air cons and monitors about 14 room temperatures and 1 external temperature. It switches to different schedules based on the external temp i.e Summer/winter

If I am away the wife generally migrates to the bedroom when I am, so why heat the house or if we are both away it effectively shuts it down so it only protects against condensation etc (In the UK)

My son works shifts so why heat his room when not there

All done with Home Assistant, a few sonoff TH16 on my heaters, and some aqua sensors :)

@MJP-76
Copy link

MJP-76 commented Aug 10, 2023

Oh, One thing I forget, Sometimes when you have "other" firmware like tasmota on the devices, there is not enough memory to load the esphome

I have even had it with an old device with a much older esphome on it that you need to load the sonoff_mini firmware I think it is or as you can see, i have a very, very basic esphome config that fits and once its running you can upload the new config

So, best go with a minimal firmware, the put your full one on it if you are changing over

@FreakyPady
Copy link

Thanks for your very detailed report. I am also using the ESPhome addon in HA, but just played around a bit... I build an own counter on my gas meter with this, very simple! But didn't ever thought about the possibility of changing my thermostat to ESPhome platform.

In my home, i'm having 8 thermostate running underfloor heatings (water, not electric). Because of that, heating is very slow... Heating must start for example 2 hours before somebody comes home and can stop 2h before the last one leaves. Because of that, i'm having an minimum time schedule directly in every thermostat. In additional to that, HA controls all the exceptions: School holidays, holidays of me or my wife, ... Presence would be detected also, but not to start the heating. It's just for the decision to stop heating or not!

Because of that, for me it's usefull to use an time schedule instead of a presence detection. And if my raspberry (running HA) will stop working (and i'm maybe not at home and my wife don't like to freeze) it's better to put this "minimal time schedule" directly in the thermostat. So, in the worst case, heating is independent from HA.

I saw that with the firmware from klaus ahrenberg it should be possible to change the integrated schedule via MQTT-command ( https://github.com/klausahrenberg/WThermostatBeca ). Do you know about the possibility? That should be also possible to integrate in ESPhome, if you have the knowledge...

@hakspiel
Copy link

i made some changes to naming of the Climate Entity in the code. HA does not show this error message anymore.

@pczolee
Copy link

pczolee commented Aug 26, 2023

i made some changes to naming of the Climate Entity in the code. HA does not show this error message anymore.

Thank you! The binary in you repo is the final version? Can I upload and update from the web in 1.22?

@hakspiel
Copy link

it is based on latest FAS version.

@pczolee
Copy link

pczolee commented Aug 26, 2023

i made some changes to naming of the Climate Entity in the code. HA does not show this error message anymore.

Thank you! The binary in you repo is the final version? Can I upload and update from the web in 1.22?

it is based on latest FAS version.

Yes it it clear. But I tried to update from the web, and the resoult is this:
Screenshot_20230826_154023_Android System

So, something is wrong...

@hakspiel
Copy link

for my thermostat it worked, when i was flashing over FAS 1.22. Can you descride your configuration?

@pczolee
Copy link

pczolee commented Aug 26, 2023

i made some changes to naming of the Climate Entity in the code. HA does not show this error message anymore.

Thank you! The binary in you repo is the final version? Can I upload and update from the web in 1.22?

it is based on latest FAS version.

Yes it it clear. But I tried to update from the web, and the resoult is this:
Screenshot_20230826_154023_Android System

So, something is wrong...

for my thermostat it worked, when i was flashing over FAS 1.22. Can you descride your configuration?

Nothing special in the config. I have more but everyone have the same problem. Are there any way to export the config, or debug what happening?

fashberg added a commit that referenced this issue Aug 26, 2023
@andreas-bulling
Copy link

andreas-bulling commented Oct 22, 2023

@MJP-76 Thanks a lot for your ESPHome example - I am trying to use it with a "Moes WHT-NV-GB-WH-M" thermostat and at first I thought it is all working fine. What's strange, however, is that activating the heading mode does not work reliably. Is it possible that the thermostat only heats the floor if the target temperature is above the room temperature?

I essentially can switch on the thermostat (power switch) but it doesn't start heating - although HA shows it to be in heating mode. I saw it once in "idle" mode but no idea how/why that was. I can't reproduce it so far.

That's what the Tuya component outputs:

[19:45:31][C][tuya:041]: Tuya:
[19:45:31][C][tuya:056]:   Datapoint 1: switch (value: ON)
[19:45:31][C][tuya:054]:   Datapoint 101: raw (value: 00.06.28.00.08.1E.1E.0B.1E.1E.0D.1E.00.11.2C.00.16.1E.00.06.28.00.08.28.1E.0B.28.1E.0D.28.00.11.28.00.16.1E.00.06.28.00.08.28.1E.0B.28.1E.0D.28.00.11.28.00.16.1E (54))
[19:45:31][C][tuya:062]:   Datapoint 4: enum (value: 1)
[19:45:31][C][tuya:056]:   Datapoint 5: switch (value: OFF)
[19:45:31][C][tuya:058]:   Datapoint 2: int value (value: 48)
[19:45:31][C][tuya:058]:   Datapoint 3: int value (value: 49)
[19:45:31][C][tuya:058]:   Datapoint 102: int value (value: 39)
[19:45:31][C][tuya:056]:   Datapoint 6: switch (value: OFF)
[19:45:31][C][tuya:062]:   Datapoint 103: enum (value: 0)
[19:45:31][C][tuya:056]:   Datapoint 104: switch (value: ON)
[19:45:31][C][tuya:076]:   Product: '{"p":"4jdveazecxcrdbgq","v":"1.0.0","m":2,"mt":2562}'

(103 is the unit of temperature)

@andreas-bulling
Copy link

@ardenking I have also tried your code (which is similar to the one from @MJP-76 but I thought I'd give it a try anyway.

The thermostat is working in principle. What's strange though is that when the target temperature is 20 degrees (the eco temp in my case) and the floor has a temperature of, say, 16 degrees, then the thermostat will only switch the relay once I set the target to 24 degrees - below it'd wouldn't start heating.

Is that also true for you/do you observe the same behaviour? Or do you have any idea why that is?

@andreas-bulling
Copy link

I think I found a solution. It seems the thermostat heats with respect to the room temperature (why? no idea - doesn't make sense in my opinion). But the thermostat luckily offers a "system function" menu through which internal settings can be accessed. One setting is about the internal and external temperature sensor. I've set that to "external only" and this seems to do the trick.

Copy link

Message to comment on stale issues. If none provided, will not mark issues stale

@github-actions github-actions bot added the Stale label Jan 25, 2024
@Bl00d-B0b
Copy link

Hello,

maybe you have answer for question above?
The "Datapoint 104: switch": Do you know about the function?

Device BH-002, default value is ON after reboot.

Ed

@github-actions github-actions bot removed the Stale label Jan 28, 2024
Copy link

Message to comment on stale issues. If none provided, will not mark issues stale

@github-actions github-actions bot added the Stale label Apr 27, 2024
@github-actions github-actions bot closed this as not planned Won't fix, can't repro, duplicate, stale May 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

8 participants