Smart Home Energy Monitor by Fusion Energy

Just purchased a 16 sensor meter from Amazon for half the price of Emporia. No integration currently, but will be fun to see if it can either be flashed with EspHome or building an integration. More to follow.

2 Likes

I remember looking at this a year or so ago and couldn’t remember why I never pulled the trigger. In searching around more, I think I had determined that it was integrated with Huawei and chose not to pursue it further, however I may have mistaken Fusion Solar for Fusion Energy. Either way, let me know what you see, I’d definitely be interested in this if it’s able to work without ever touching a cloud.

Since it only communicates with 45.77.120.52 and that is a datacenter in California, I think there are now 3 options.

  1. Make the DNS name they are looking up point to Home Assistant and make a custom integration to catch the data and update home assistant.

  2. Flash the device like Emporia Vue. It is supposedly and ESP32 device, need to verify that.

  3. Write a custom integration to read from the cloud service. I already started a python client that logs in to the api, and there are only 2 other calls. This would still be cloud connected, but follows the same thing as GitHub - magico13/ha-emporia-vue: Home Assistant Integration for Emporia Vue Energy Monitor. I am familiar with this api because I wrote a c# port of GitHub - magico13/PyEmVue: Python Library for the Emporia Vue Energy Monitor in a few days. Shouldn’t be too hard to transform the integration to work with the data of another energy monitor.

3 Likes

@pcartwright81 Were you able to confirm that it is an ESP32 based device? I am thinking about buying the same unit (currently $110 at Amazon with 16 consumption channels).
My thinking is around disabling the internal CPU and wiring in a new ESP32 unless it is easy to figure out the schematics and create a new ESPHome based firmware.

I also found another unit at Amazon currently for $120 ($150 - $30 coupon). Unfortunately no information about HA compatibility is available.
Smart Home Energy Monitor with 16 50A and 2-200A Circuit Level Sensors, Real-Time Accurate Energy Consumption Tracking, WiFi Meter Solar/Net Metering, 2.4 GHz WiFi: Amazon.com: Industrial & Scientific

And then there is the Refoss option which claims to be HA compatible with the latest firmware. It is $170 ($200 - $30 coupon).
Refoss Smart Home Energy Monitor Supports Home Assistant, Real-Time Accurate Energy Consumption Tracking, Electricity Usage Monitor with 16x60A Circuit Sensors, 36-Month History, Solar Metering, 2.4G - Amazon.com

Confirmed ESP32-C3. Other than verifying I have not had much time to do much exploration. I did study the traffic going to the server, the traffic in the Android App, Vue local, and Vue HA Integration.

1 Like

Great photos. Remarkable similarities to the Emporia Vue 2 (previous version). Notably the Vue 2 has a few different chips so no guarantee the same esphome config will work. If you do decide to flash or backup the firmware, take a closer look at J22 which is closer to where the Vue 2 gets flashed.

Good point. Those are the same pins I am used to on the Treatlife devices I flash with a 3d printed pogo pin adapter. Unfortunately the GPIO0 pin is under the glue. Tried poking a needle through it. but still can not get it to connect. Possibly my TTL adapter is too weak, or I am not making a connection. I don’t think that there is an fcc filing for this device, and every tp I see is not GPIO0. On another note this device has built in usb according to the specs, so might be able to do it that way.



Home Assistant including local MQTT is now supported.

https://vs.tumblevd.com/SEM/homeasistant.html

Instructions and other information was provided by support.

1 Like

Thanks! Looks like you can enable a local MQTT server in the vendor’s (Fusion Energy?) smartphone app without flashing a custom firmware? Good on them. Curious if it would still work on a private LAN that cannot access the Internet.

Looks like you did the hard word to reverse engineer the JSON data to extract all the fields, but would it be possible to paste your MQTT config (or link to a non-image file) defining all the sensors and share all that fine work? Thanks again.

The MQTT config was provided by the company in instructions under configuration.yaml mqtt demo code.

https://vs.tumblevd.com/SEM/semmeter_configuration.yaml

Mine are still the generic names and all I did was replace the MAC address with the one found in the app.

I’m considering buying one of these also. How often does usage data get published to MQTT? is it relatively quickly (every second/minute), or only hourly?

I’m also curious if you’ve tried sandboxing it so that it doesn’t have cloud access and whether the local mqtt still works.

30 second intervals based on the counter.


I don’t have MQTT set up, and I am currently using the app in tandem.

I installed this unit yesterday. I was able to use the app to assign an IP on a sandboxed vlan with no internet access, and confirm that it is posting data to my local mqtt server.

I haven’t setup the YAML entities yet, instead I’m working on a script to send autodiscovery messages so the entities can all be listed under a single mqtt device. Will post my code if I get it working.

Below is the script I am using to publish the entities for this meter instead of defining them in YAML. Obviously enter your device’s MAC address at the top. This will need to be called by an automation on every HA startup, or you can change “retain” to true for every message to keep them in your MQTT broker. I’m not a code wizard so pardon my ignorance if this could be even more streamlined.

I left out Phase C since I am not using it, but it should be straightforward to add it in. I made three sensors per channel (current, power, and energy) which might be overkill; the Emporia esphome config only tracks power and energy on each channel. Note also I had to add a 1-second delay in the loop because HA wasn’t keeping up with messages arriving too fast, so this takes 16s to run.

alias: Create Fusion Power Device Sensors
variables:
  macaddr: YOURMACALLCAPS
  topic: SEMMETER/{{macaddr}}/HA
  device_block: >-
    "device":{ "identifiers": ["{{macaddr}}"], "manufacturer": "Fusion Energy","model": "SEM METER", "name": "sem-meter" }
  current_sensor: >-
    "state_class":"measurement","device_class":"current","unit_of_measurement":"A","icon":"mdi:current-ac","state_topic":"{{topic}}",
  voltage_sensor: >-
    "state_class":"measurement","device_class":"voltage","unit_of_measurement":"V","icon":"mdi:flash","state_topic":"{{topic}}",
  power_sensor: >-
    "state_class":"measurement","device_class":"power","unit_of_measurement":"W","icon":"mdi:power-plug","state_topic":"{{topic}}",
  energy_sensor: >-
    "state_class":"total_increasing","device_class":"energy","unit_of_measurement":"kWh","icon":"mdi:counter","state_topic":"{{topic}}",
sequence:
  - action: mqtt.publish
    data:
      retain: false
      topic: homeassistant/sensor/{{macaddr}}_total_power/config
      payload: >-
        {"name": "Total Power", "unique_id":"SEM{{macaddr}}_total_power","value_template": "{% raw %}{{ (value_json.sense[16][2] | float | multiply(0.01) +  value_json.sense[17][2] | float | multiply(0.01) + value_json.sense[18][2] | float | multiply(0.01)) | round(3) }}{% endraw %}", {{power_sensor}} {{device_block}} }
  - action: mqtt.publish
    data:
      retain: false
      topic: homeassistant/sensor/{{macaddr}}_total_energy/config
      payload: >-
        {"name": "Total Energy", "unique_id":"SEM{{macaddr}}_total_energy", "value_template": "{% raw %}{{ (value_json.sense[16][3] | float | multiply(0.001) +  value_json.sense[17][3] | float | multiply(0.001) + value_json.sense[18][3] | float | multiply(0.001)) | round(3) }}{% endraw %}", {{energy_sensor}} {{device_block}} }
  - action: mqtt.publish
    data:
      retain: false
      topic: homeassistant/sensor/{{macaddr}}_phase_a_voltage/config
      payload: >-
        {"name": "Phase A Voltage", "unique_id":"SEM{{macaddr}}_phase_a_voltage", "value_template": "{% raw %}{{ value_json.sense[16][0] | float | multiply(0.1) | round(3) }}{% endraw %}", {{voltage_sensor}} {{device_block}} }
  - action: mqtt.publish
    data:
      retain: false
      topic: homeassistant/sensor/{{macaddr}}_phase_b_voltage/config
      payload: >-
        {"name": "Phase B Voltage","unique_id":"SEM{{macaddr}}_phase_b_voltage", "value_template": "{% raw %}{{ value_json.sense[17][0] | float | multiply(0.1) | round(3) }}{% endraw %}", {{voltage_sensor}} {{device_block}} }
  - action: mqtt.publish
    data:
      retain: false
      topic: homeassistant/sensor/{{macaddr}}_phase_a_current/config
      payload: >-
        {"name": "Phase A Current", "unique_id":"SEM{{macaddr}}_phase_a_current",  "value_template": "{% raw %}{{ value_json.sense[16][1] | float | multiply(0.01) | round(3) }}{% endraw %}", {{current_sensor}} {{device_block}} }
  - action: mqtt.publish
    data:
      retain: false
      topic: homeassistant/sensor/{{macaddr}}_phase_b_current/config
      payload: >-
        {"name": "Phase B Current", "unique_id":"SEM{{macaddr}}_phase_b_current", "value_template": "{% raw %}{{ value_json.sense[17][1] | float | multiply(0.01) | round(3) }}{% endraw %}", {{current_sensor}} {{device_block}} }
  - repeat:
      until:
        - condition: template
          value_template: "{{ repeat.index == 16}}"
      sequence:
        - delay: 1
        - action: mqtt.publish
          data:
            retain: false
            topic: homeassistant/sensor/{{macaddr}}_channel_{{repeat.index}}_current/config
            payload: >-
              {"name": "Channel {{repeat.index}} Current",  "unique_id": "SEM{{macaddr}}_channel_{{repeat.index}}_current", "value_template": "{% raw %}{{ value_json.sense[{% endraw %}{{repeat.index-1}}{% raw %}][1] | float | multiply(0.01) | round(3) }}{% endraw %}", {{current_sensor}} {{device_block}} }
        - action: mqtt.publish
          data:
            retain: false
            topic: homeassistant/sensor/{{macaddr}}_channel_{{repeat.index}}_power/config
            payload: >-
              {"name": "Channel {{repeat.index}} Power",  "unique_id": "SEM{{macaddr}}_channel_{{repeat.index}}_power", "value_template": "{% raw %}{{ value_json.sense[{% endraw %}{{repeat.index-1}}{% raw %}][2] | float | multiply(0.01) | round(3) }}{% endraw %}", {{power_sensor}} {{device_block}} }
        - action: mqtt.publish
          data:
            retain: false
            topic: homeassistant/sensor/{{macaddr}}_channel_{{repeat.index}}_energy/config
            payload: >-
              {"name": "Channel {{repeat.index}} Energy",  "unique_id": "SEM{{macaddr}}_channel_{{repeat.index}}_energy", "value_template": "{% raw %}{{ value_json.sense[{% endraw %}{{repeat.index-1}}{% raw %}][3] | float | multiply(0.001) | round(3) }}{% endraw %}", {{energy_sensor}} {{device_block}} }