I’m getting my system (with NEOOM) next week, thanks a lot guys for your work! I hope I can get the data into HA too with only basic coding skills. ![]()
Do you have a beeam box in use? You can query this at no cost.
Unfortunately I could not reach anyone at neoom (telephone is not possible), but after contacting the local representative I got the update
.
Hi Marcel,
I got my BEAAM yesterday and copy pasted your yaml-lines from your post in my config.yaml … of course I changed the IP and token before. Unfortunately there are lots of errors when I want to save the config.yaml, like:
“end of stream or a document seperator is expected” in lots of lines. do I miss something? Do i have to add anything else into my config?
thanks for your input here!
Hi,
The yaml-lines are in a separate file which i called “rest.yaml”. In the configuration.yaml i added then the following lines:
# Sensoren hinzufuegen
rest: !include rest.yaml
I have done this so that the configuration.yaml does not become too large.
Hope this helps.
Came across this post and wanted to say thank you. i took your script and added some values for my heat pump and wallbox. also added some tapo smart plugs to monitor the rest of my electrical devices.
Just one question regarding the grid input and output. because i can’t get this to work correctly.
can you tell me how you configured this?
My parents decided to buy a neoom solar system. I made my own thread with a few questions. I hope that people that already use Neoom can help us. You guys seem to be able to use it in HA so I think that you might be able to answer the questions we have. Thanks!
Hi,
I’ve been using the Beaam for several months now, and data transmission has worked without any issues until yesterday. In my opinion, the Beaam received a firmware update to version 1.70 yesterday. I also noticed that for a while, no live data was available in the app. This seems to be working again in the app as of today, but in Home Assistant, the live data is still missing.
Cumulative data such as consumed_cal and energy_exported are still working. However, for values like power_production, I get the error that the entity is not provided by the REST sensor. When I manually query the API, I also receive “null” as the response.
BR
Daniel
I also have a PV with battery with the neoom beaam. Since it is very poor in functionality and expensive I do not use it anymore, but use the native PV-Integration, In my case “Solax Inverter Modbus”. This integration is working out of the box, is for free, quite powerful, did work all the time since 2 years, has reqular updates and is local and thus not dependend on internet or functioning of the cloud of a manufacturer.
When installing “Solax Inverter Modbus” you have to be aware, that just one instanve can be connected to modbus. Thus I did disconnect Neoom Beam (and never missed it). If you want to connect both you need to do this via a modbus multiplexer.
“Solax Inverter Modbus” supports several other brands as well, if yours is not supported I am pretty confident, that you will find an appropriate native integration for your PV-system.
My Inverter is in the same subnet, neoom beaam is currently connected to it via network. can you tell me, how home-assistant can access to inverter?
Neoom Beaam is configured for communicating over port 502/tcp, but solax integration does not work, either if port is chaning from 80 to 502.
The inverter remains at the same IP-address and Port. However as stated above only one instance of a modbus maste can be acive. Thus either neoom beaam or Solax Inverter Modbus Integration of Home Asistant can be active. I did remove Neoom Beaam from the TCP-IP Network at all as Neoom Beaam was of no use at all to me
The only way to connect both would be to add a modbus multiplexer (a piece of hardware.
My parents want to keep the Neoom App as they like it for convenience.
To the people that got it running via Rest-API: Does this still work? If yes… Can someone please share their working config? Thanks!
Hey Guys,
can you help me why are my “power_grid_input” have the same value than “power_grid_output”?
# Stromnetz (aktueller Netzbezug)
- name: "neoom_power_grid_input"
unique_id: "power_grid_input"
#value_template: "{{ value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first }}"
value_template: "{{ (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) * -1 if (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) < 0 else (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) }}"
unit_of_measurement: "Wh"
device_class: energy
state_class: total
icon: "mdi:TransmissionTower"
# Stromnetz (aktuelle Einspeisung)
- name: "neoom_power_grid_output"
unique_id: "power_grid_output"
#value_template: "{{ value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first }}"
#value_template: "{{ (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) * -1 if (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) < 0 else (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) }}"
value_template: "{{ (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first * -1) if (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) < 0 else 0 }}"
unit_of_measurement: "Wh"
device_class: energy
state_class: total
icon: "mdi:TransmissionTower"
same with template original from neeom:
# Stromnetz (aktueller Netzbezug in Watt)
- name: "neoom_power_grid_input"
unique_id: "power_grid_input"
value_template: "{{ (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) * -1 if (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) < 0 else (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) }}"
unit_of_measurement: "W"
device_class: power
state_class: total
icon: "mdi:TransmissionTower"
# Stromnetz (aktuelle Einspeisung in Watt)
- name: "neoom_power_grid_output"
unique_id: "power_grid_output"
value_template: "{{ (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first * -1) if (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_GRID') | map(attribute='value') | first) < 0 else 0 }}"
unit_of_measurement: "W"
device_class: energy
state_class: total
icon: "mdi:TransmissionTower"
Do you have any idea? In Energy Flow Chart it shows me the same input and output.
https://upload.adminforge.de/r/CqT0eSuq9f#BEt6d41P0A59VHnSd0SLv/cXVVxFGKqiVVXOMkgeCVs=
The real data from neoom is this:
https://upload.adminforge.de/r/dRUnppbejx#3OqE8H23c5lcRvKKb6LeiQ8tmEgtZGxe63zfCqtln4I=
Sorry I can´t upload media files as new user.
Thanks.
Yes, it’s still working. On my Beaam is currently the software version 1.74.2 installed - no problems.
Here my current sensors in the rest.yaml file:
# BEAAM Status
- resource: http://10.10.10.10/api/v1/site/state
headers:
Authorization: "Bearer sk_beaam_xxxxx" #Put your bearer token here, but do not delete Bearer at the beginning
Content-Type: "application/json"
method: GET
scan_interval: 15 # Intervall für API-Aufrufe in Sekunden
sensor:
# Batterie (aktueller Ladestand)
- name: "neoom_self_sufficiency"
unique_id: "self_sufficiency"
value_template: "{{ (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'SELF_SUFFICIENCY') | map(attribute='value') | first) }}"
unit_of_measurement: "%"
device_class: power
state_class: measurement
icon: "mdi:HomePercentOutline"
# Batterie (aktuelle Leistung in Watt)
- name: "neoom_storage_power_beaam"
unique_id: "storage_power_beaam"
value_template: "{{ (value_json['energyFlow']['states'] | selectattr('key', 'eq', 'POWER_STORAGE') | map(attribute='value') | first) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:home-battery"
# BEAAM Battery
- resource: http://10.10.10.10/api/v1/things/GUID/states
headers:
Authorization: "Bearer sk_beaam_xxxxx" #Put your bearer token here, but do not delete Bearer at the beginning
Content-Type: "application/json"
method: GET
scan_interval: 15 # Intervall für API-Aufrufe in Sekunden
sensor:
# Batterie (aktueller Output in Watt)
- name: "neoom_storage_output"
unique_id: "storage_output"
value_template: "{{ 0 if (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first) < 0 else (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:BatteryArrowDownOutline"
# Batterie (aktueller Input in Watt)
- name: "neoom_storage_input"
unique_id: "storage_input"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first * -1) if (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first) < 0 else 0 }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:BatteryArrowUpOutline"
# Batterie (Ladezustand)
- name: "neoom_state_of_charge"
unique_id: "state_of_charge"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'STATE_OF_CHARGE') | map(attribute='value') | first) }}"
unit_of_measurement: "%"
device_class: battery
state_class: measurement
icon: "mdi:BatteryHeartVariant"
# Batterie (aktuelle Leistung in Watt)
- name: "neoom_storage_power"
unique_id: "storage_power"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'POWER') | map(attribute='value') | first) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:home-battery"
# Batterie (aktuelle Leistung in Watt)
- name: "neoom_storage_active_power"
unique_id: "storage_active_power"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:home-battery"
# BEAAM Inverter
- resource: http://10.10.10.10/api/v1/things/GUID/states
headers:
Authorization: "Bearer sk_beaam_xxxxx" #Put your bearer token here, but do not delete Bearer at the beginning
Content-Type: "application/json"
method: GET
scan_interval: 15 # Intervall für API-Aufrufe in Sekunden
sensor:
# Stromproduktion alle Panel (aktuelle Leistung in Watt)
- name: "neoom_power_panels"
unique_id: "power_panels"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'INPUTS_POWER') | map(attribute='value') | first)[0] + (value_json['states'] | selectattr('key', 'eq', 'INPUTS_POWER') | map(attribute='value') | first)[1] }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:SolarPanel"
# Stromproduktion Panel West (aktuelle Leistung in Watt)
- name: "neoom_power_panelwest"
unique_id: "power_panelwest"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'INPUTS_POWER') | map(attribute='value') | first)[0] }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:SolarPanel"
# Stromproduktion Panel Osten (aktuelle Leistung in Watt)
- name: "neoom_power_paneleast"
unique_id: "power_paneleast"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'INPUTS_POWER') | map(attribute='value') | first)[1] }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:SolarPanel"
# BEAAM AC (Grid)
- resource: http://10.10.10.10/api/v1/things/GUID/states
headers:
Authorization: "Bearer sk_beaam_xxxxx" #Put your bearer token here, but do not delete Bearer at the beginning
Content-Type: "application/json"
method: GET
scan_interval: 15 # Intervall für API-Aufrufe in Sekunden
sensor:
# Stromnetz (aktueller Bezug in Watt)
- name: "neoom_power_grid_input"
unique_id: "power_grid_input"
value_template: "{{ 0 if (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first) < 0 else (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:TransmissionTower"
# Stromnetz (aktuelle Einspeisung)
- name: "neoom_power_grid_output"
unique_id: "power_grid_output"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first * -1) if (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first) < 0 else 0 }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:TransmissionTower"
# BEAAM Ladestation
- resource: http://10.10.10.10/api/v1/things/GUID/states
headers:
Authorization: "Bearer sk_beaam_xxxxx" #Put your bearer token here, but do not delete Bearer at the beginning
Content-Type: "application/json"
method: GET
scan_interval: 15 # Intervall für API-Aufrufe in Sekunden
sensor:
# Ladestation (aktueller Verbrauch in Watt)
- name: "neoom_car_charger"
unique_id: "car_charger"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'ACTIVE_POWER') | map(attribute='value') | first) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:EVStation"
# BEAAM Boiler - Strom
- resource: http://10.10.10.10/api/v1/things/GUID/states
headers:
Authorization: "Bearer sk_beaam_xxxxx" #Put your bearer token here, but do not delete Bearer at the beginning
Content-Type: "application/json"
method: GET
scan_interval: 15 # Intervall für API-Aufrufe in Sekunden
sensor:
# Boiler (aktueller Verbrauch in Watt)
- name: "neoom_boiler_power"
unique_id: "water_boiler_power"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'POWER') | map(attribute='value') | first) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: "mdi:WaterBoiler"
# BEAAM Boiler - Temperatur
- resource: http://10.10.10.10/api/v1/things/GUID/states
headers:
Authorization: "Bearer sk_beaam_xxxxx" #Put your bearer token here, but do not delete Bearer at the beginning
Content-Type: "application/json"
method: GET
scan_interval: 15 # Intervall für API-Aufrufe in Sekunden
sensor:
# Boiler (Temperatur 1)
- name: "neoom_boiler_temp01"
unique_id: "water_boiler_temp01"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'TEMPERATURES') | map(attribute='value') | first)[0] | round(0) }}"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
icon: "mdi:WaterBoiler"
# Boiler (Temperatur 2)
- name: "neoom_boiler_temp02"
unique_id: "water_boiler_temp02"
value_template: "{{ (value_json['states'] | selectattr('key', 'eq', 'TEMPERATURES') | map(attribute='value') | first)[1] | round(0) }}"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
icon: "mdi:WaterBoiler"
Replace the string “GUID” with the corresponding value, see the post up.
In the “Netzbezug” you calculate the value *-1, this you must do only for the “Einspeisung”:
Compare your value_template with my current configuration, I just posted the current one.
I have the same issue as @Dominik1 . power_grid_input” have the same value as “power_grid_output. Any idea how to get the right values there?

