Navigation

    M5Stack Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    1. Home
    2. marcvl
    M
    • Continue chat with marcvl
    • Start new chat with marcvl
    • Flag Profile
    • Profile
    • Following
    • Followers
    • Blocks
    • Topics
    • Posts
    • Best
    • Groups
    Save
    Saving

    marcvl

    @marcvl

    9
    Reputation
    28
    Posts
    149
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    marcvl Follow

    Posts made by marcvl

    • RE: Special character handling - MQTT error

      So my last comment provided the solution....

      The correct way of doing this is :

      1/ Specify the Unicode character in the payload with chr(186) where 186 is the character number (in this case representing MASCULINE ORDINAL INDICATOR - Unicode: U+00BA, UTF-8: C2 BA.

      2/ Ensure that your json.dumps applies utf-8 encoding before sending it to MQTT as follows:
      m5mqtt.publish(topic, json.dumps(payload).encode('utf-8'))

      Problem solved.

      posted in Micropython
      M
      marcvl
    • RE: Special character handling - MQTT error

      Ok, so I tried two alternatives:

      KEY_UNIT_OF_MEASUREMENT: chr(176) + "C",
      KEY_UNIT_OF_MEASUREMENT: chr(186) + "C",

      The first one represents 0xb0 and the second one 0xba.

      Both result in the same error message ([24400] MQTTException -> [Errno 104] ECONNRESET) and a missing } at the end of the JSON.

      Maybe the json.dumps function, which I'm using, needs a special parameter to indicate unicode characters?

      posted in Micropython
      M
      marcvl
    • RE: Special character handling - MQTT error

      How would I do that?

      My current code is: KEY_UNIT_OF_MEASUREMENT: "ºC",

      Also, I believe the correct Unicode character is 0xba, not 0xb0.

      I checked Mosquitto output to see exactly what Core2 is putting out. It's very strange. When I add the 'degree' symbol, the JSON is missing a closing parenthesis (which is why HA is complaining). I'm showing you below the Mosquitto output for the temperature sensor and the humidity sensor. Both are formatted in the same way. The temperature sensor has the degree symbol.

      homeassistant/sensor/core2/core2-temp/config {"avty_t": "~status", "pl_avail": "on", "val_tpl": "{{value_json.temperature}}", "dev_cla": "temperature", "unit_of_meas": "ºC", "~": "core2/env2/", "dev": {"mdl": "Core 2", "mf": "M5Stack", "name": "Core 2 Thermostat", "ids": ["12234"]}, "name": "Core2 Temperature", "stat_t": "~state", "pl_not_avail": "off", "uniq_id": "12234"
      homeassistant/sensor/core2/core2-humid/config {"avty_t": "~status", "pl_avail": "on", "val_tpl": "{{value_json.humidity}}", "dev_cla": "humidity", "unit_of_meas": "%", "~": "core2/env2/", "dev": {"mdl": "Core 2", "mf": "M5Stack", "name": "Core 2 Thermostat", "ids": ["12234"]}, "name": "Core2 Humidity", "stat_t": "~state", "pl_not_avail": "off", "uniq_id": "122347"}
      

      And here's the same Mosquitto output, when I remove the degree symbol.

      homeassistant/sensor/core2/core2-temp/config {"avty_t": "~status", "pl_avail": "on", "val_tpl": "{{value_json.temperature}}", "dev_cla": "temperature", "unit_of_meas": "C", "~": "core2/env2/", "dev": {"mdl": "Core 2", "mf": "M5Stack", "name": "Core 2 Thermostat", "ids": ["12234"]}, "name": "Core2 Temperature", "stat_t": "~state", "pl_not_avail": "off", "uniq_id": "12234"}
      homeassistant/sensor/core2/core2-humid/config {"avty_t": "~status", "pl_avail": "on", "val_tpl": "{{value_json.humidity}}", "dev_cla": "humidity", "unit_of_meas": "%", "~": "core2/env2/", "dev": {"mdl": "Core 2", "mf": "M5Stack", "name": "Core 2 Thermostat", "ids": ["12234"]}, "name": "Core2 Humidity", "stat_t": "~state", "pl_not_avail": "off", "uniq_id": "122347"}
      
      posted in Micropython
      M
      marcvl
    • Special character handling - MQTT error

      I'm getting following MQTT error when publishing to a topic with a payload that contains the 'degree' character (º
      MASCULINE ORDINAL INDICATOR - Unicode: U+00BA, UTF-8: C2 BA):

      [24941] MQTTException -> [Errno 104] ECONNRESET
      reconnect start ...
      reconnect finish ...
      

      The MQTT message goes to Home Assistant where it also generates an error:

      Logger: homeassistant.components.mqtt.discovery
      Source: components/mqtt/discovery.py:109
      Integration: MQTT (documentation, issues)
      First occurred: 6:04:58 PM (1 occurrences)
      Last logged: 6:04:58 PM*
      
      *Unable to parse JSON core2-temp: '{"avty_t": "~status", "pl_avail": "on", "val_tpl": "{{value_json.temperature}}", "dev_cla": "temperature", "unit_of_meas": "ºC", "~": "core2/env2/", "dev": {"mdl": "Core 2", "mf": "M5Stack", "name": "Core 2 Thermostat", "ids": ["12234"]}, "name": "Core2 Temperature", "stat_t": "~state", "pl_not_avail": "off", "uniq_id": "12234"'
      

      Strangely, the JSON seems to be missing closing "}" which might explain the HA error. My code has the right JSON formatting. Just removing the 'degree' symbol will solve the issue. So, there seems to be something strange with how special characters are handled. Or maybe I'm doing something wrong?

      posted in Micropython
      M
      marcvl
    • RE: Randomness ...

      Update on the randomness .... it's gone :-)

      Basically, I think my UIFlow project became too complex for the system to handle. So, I rewrote everything in micropython. The code runs very well, no more randomness.

      Github repository of my MQTT Thermostat running on Core2 is here.

      It's pretty cool. The thermostat supports various modes: off/auto/manual/heat/cool/fan. You can specify minimum cycle duration as well as set swing mode parameters. It automatically gets discovered by Home Assistant. You can set thermostat mode and target temperature in Home Assistant and they will automatically get reflected on the Core2 display.

      It currently relies on the ENVII module for temperature reading, and requires a WIFI connection and an active MQTT broker. I haven't had time to implement error handling, so if something goes wrong, it might be non-obvious to figure out why. More work to be done.

      posted in UIFlow
      M
      marcvl
    • RE: Newbie question - how to get started?

      Github repository of my MQTT Thermostat running on Core2 is here.

      It's pretty cool. The thermostat supports various modes: off/auto/manual/heat/cool/fan. You can specify minimum cycle duration as well as set swing mode parameters. It automatically gets discovered by Home Assistant. You can set thermostat mode and target temperature in Home Assistant and they will automatically get reflected on the Core2 display.

      It currently relies on the ENVII module for temperature reading, and requires a WIFI connection and an active MQTT broker. I haven't had time to implement error handling, so if something goes wrong, it might be non-obvious to figure out why. More work to be done.

      I couldn't figure out how to enable touch for a specific screen area without using visible buttons with M5stack_UI, so instead I used an lvgl button with invisible borders.

      posted in Micropython
      M
      marcvl
    • RE: Newbie question - how to get started?

      @ajb2k3 Yes, this is in micropython. I need to do a little bit more work but will post my code on Github soon.

      posted in Micropython
      M
      marcvl
    • RE: Newbie question - how to get started?

      Ok, this time I'm going to solve my own problem :-)

      The issue was that the m5mqtt.subscribe code was in the wrong place. You have to put it before mqtt.start(). In my case, I had inserted it after mqtt.start().

      Also round(topic_data) doesn't work because there's a type mismatch. round(float(topic_data)) did work.

      posted in Micropython
      M
      marcvl
    • RE: Newbie question - how to get started?

      On to the next issue.... I've been trying to get m5mqtt_subscribe to work and staring at the code for a few hours .... Maybe some fresh eyes can help pinpoint the problem.

      MQTT is set up correctly. M5 is publishing data to home assistant (through Mosquitto) without issues. However, I can't get the reverse to work (ie. Home Assistant publishing data to the M5).

      I have confirmed that HA is doing the right thing .... i.e. publishing data on an agreed topic. Example: here's what HA publishes to change the target temperature of the thermostat:

      core2/thermostat/temperature/command 21.11111111111111

      Here's my micropython code on the M5:

      DEFAULT_TOPIC_THERMOSTAT_PREFIX = "core2/thermostat/"
      TOPIC_TEMPERATURE_COMMAND = "temperature/command"
      m5mqtt.subscribe(DEFAULT_TOPIC_THERMOSTAT_PREFIX + TOPIC_TEMPERATURE_COMMAND, rcv_target_temp)
      
      def rcv_target_temp(topic_data):
          global target_temp
          m5mqtt.publish(DEFAULT_TOPIC_DEBUG,'Received target_temp: %f' % topic_data)
          target_temp = round(topic_data)
      

      The rcv_target_temp code never gets executed. No errors are being reported. What am I doing wrong?

      posted in Micropython
      M
      marcvl
    • RE: Newbie question - how to get started?

      @dario That's great. I figured out how to do it...

      Here's what I discovered:

      • It seems like the M5 set_align function is slightly different from the LVGL implementation. My understanding from the LVGL documentation is that set_align(ALIGN.CENTER) should center-align the text within the label. However, the M5 equivalent set_align(ALIGN_CENTER) also centers the entire label horizontally, ignoring the previous label position definition.

      • The M5 version of set_align however takes extra arguments to specify x and y offset. So you can say <lbl_name>.set_align(ALIGN_CENTER, 0, -10)

      • There is no auto-align feature as far as I can tell. LVGL has a function set_auto_realign(True), but I couldn't find the equivalent with M5. So every time I change the text in the label I have to re-run the alignment function.

      But, hey, it works. So I'm not complaining :)

      posted in Micropython
      M
      marcvl