Skip to content

Instantly share code, notes, and snippets.

@archi
Last active May 15, 2024 08:46
Show Gist options
  • Save archi/320d21923e26aedf49ebc2e34659f7da to your computer and use it in GitHub Desktop.
Save archi/320d21923e26aedf49ebc2e34659f7da to your computer and use it in GitHub Desktop.
MBMD+Home Assistant SDM630 Configuration

This is my config for using an SDM630 via MBMD with Home Assistant.

I did some slight adjustments for the general public, but you probably need to adjust some more things:

  1. Setup a proper MQTT user+pass and configure that in mbmd.yaml
  2. Adjust the serial device name. I recommend the by-id variant over /dev/ttyUSBx, especially if you have multiple devices (for me it's the RS485 interface and the Zigbee controller)
  3. Maybe adjust the serial device config (baudrate and comset)
  4. My mbmd is reachable via mbmd.server.lan, you probably want to adjust that in the sdm630.yaml

What I recommend:

  1. Put the api on something like 127.0.2.2:4000 (all of 127.0.0.0/16 acts like 127.0.0.1) and put it behind a reverse proxy with password protection. I've attached my nginx config; it's missing the includes, but the location directives are the interesting part to copy.

For testing you can run mbmd scan -a /dev/ttyUSBx. Mind the unexpected behaviour/bug: If you don't have permissions to access the device, the program will not throw an error, just find nothing.

# REST api, use 127.0.0.1 to restrict to localhost
api: 0.0.0.0:8080
# mqtt config
mqtt:
broker: 192.168.100.1:1883
topic: mbmd
user: mbmd
password: toomanysecrets
clientid: mbmd
qos: 0
# adapters are referenced by device
adapters:
- device: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AQ027PRP-if00-port0
baudrate: 9600
comset: 8N1 # "8E1" needs be quoted as string or will error
# list of devices
devices:
- name: sdm1
type: sdm
id: 1
adapter: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AQ027PRP-if00-port0
server {
listen 192.168.1.2:80;
server_name mbmd.server.lan;
include sites-available/inc/acme-fwd.conf;
}
server {
listen 192.168.1.2:443 ssl http2;
ssl_certificate /etc/nginx/ssl/mbmd.server.lan.crt;
ssl_certificate_key /etc/nginx/ssl/mbmd.server.lan.key;
include sites-available/inc/ssl.conf;
server_name mbmd.server.lan;
location / {
proxy_pass http://127.0.2.2:4000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ws {
proxy_pass http://127.0.2.2:4000/ws;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
#
# SDM 630 config for Home Assistant
# Adapt and put into your configuration.yaml
#
mqtt:
sensor:
##
## POWER
##
- name: "SDM1-1 Power"
device:
name: "Power Meter"
configuration_url: "https://mbmd.server.lan"
manufacturer: "Eastron"
model: "SDM630 Modbus v2"
identifiers:
- "sdm1-1"
device_class: power
state_class: measurement
state_topic: "mbmd/sdm1-1/Power"
unit_of_measurement: "W"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_power"
- name: "SDM1-1 Power L1"
device:
identifiers:
- "sdm1-1"
device_class: power
state_class: measurement
state_topic: "mbmd/sdm1-1/Power/L1"
unit_of_measurement: "W"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_powerL1"
- name: "SDM1-1 Power L2"
device:
identifiers:
- "sdm1-1"
device_class: power
state_class: measurement
state_topic: "mbmd/sdm1-1/Power/L2"
unit_of_measurement: "W"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_powerL2"
- name: "SDM1-1 Power L3"
device:
identifiers:
- "sdm1-1"
device_class: power
state_class: measurement
state_topic: "mbmd/sdm1-1/Power/L3"
unit_of_measurement: "W"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_powerL3"
##
## ENERGY from utility
##
- name: "SDM1-1 Import"
device:
identifiers:
- "sdm1-1"
device_class: energy
state_class: total_increasing
state_topic: "mbmd/sdm1-1/Import"
unit_of_measurement: "kWh"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_import"
- name: "SDM1-1 Import L1"
device:
identifiers:
- "sdm1-1"
device_class: energy
state_class: total_increasing
state_topic: "mbmd/sdm1-1/Import/L1"
unit_of_measurement: "kWh"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_importL1"
- name: "SDM1-1 Import L2"
device:
identifiers:
- "sdm1-1"
device_class: energy
state_class: total_increasing
state_topic: "mbmd/sdm1-1/Import/L2"
unit_of_measurement: "kWh"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_importL2"
- name: "SDM1-1 Import L3"
device:
identifiers:
- "sdm1-1"
device_class: energy
state_class: total_increasing
state_topic: "mbmd/sdm1-1/Import/L3"
unit_of_measurement: "kWh"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_importL3"
##
## ENERGY to utility
##
- name: "SDM1-1 Export"
device:
identifiers:
- "sdm1-1"
device_class: energy
state_class: total_increasing
state_topic: "mbmd/sdm1-1/Export"
unit_of_measurement: "kWh"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_export"
- name: "SDM1-1 Export L1"
device:
identifiers:
- "sdm1-1"
device_class: energy
state_class: total_increasing
state_topic: "mbmd/sdm1-1/Export/L1"
unit_of_measurement: "kWh"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_exportL1"
- name: "SDM1-1 Export L2"
device:
identifiers:
- "sdm1-1"
device_class: energy
state_class: total_increasing
state_topic: "mbmd/sdm1-1/Export/L2"
unit_of_measurement: "kWh"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_exportL2"
- name: "SDM1-1 Export L3"
device:
identifiers:
- "sdm1-1"
device_class: energy
state_class: total_increasing
state_topic: "mbmd/sdm1-1/Export/L3"
unit_of_measurement: "kWh"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_exportL3"
##
## Apparent Power
##
- name: "SDM1-1 Apparent Power"
device:
identifiers:
- "sdm1-1"
device_class: apparent_power
state_class: measurement
state_topic: "mbmd/sdm1-1/ApparentPower"
unit_of_measurement: "W"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_apparentPower"
##
## Reactive Power
##
- name: "SDM1-1 Reactive Power"
device:
identifiers:
- "sdm1-1"
device_class: reactive_power
state_class: measurement
state_topic: "mbmd/sdm1-1/ReactivePower"
unit_of_measurement: "W"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_reactivePower"
##
## VOLTAGE
##
- name: "SDM1-1 Voltage L1"
device:
identifiers:
- "sdm1-1"
device_class: voltage
state_class: measurement
state_topic: "mbmd/sdm1-1/Voltage/L1"
unit_of_measurement: "V"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_voltageL1"
- name: "SDM1-1 Voltage L2"
device:
identifiers:
- "sdm1-1"
device_class: voltage
state_class: measurement
state_topic: "mbmd/sdm1-1/Voltage/L2"
unit_of_measurement: "V"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_voltageL2"
- name: "SDM1-1 Voltage L3"
device:
identifiers:
- "sdm1-1"
device_class: voltage
state_class: measurement
state_topic: "mbmd/sdm1-1/Voltage/L3"
unit_of_measurement: "V"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_voltageL3"
##
## Frequency
##
- name: "SDM1-1 Frequency"
device:
identifiers:
- "sdm1-1"
device_class: frequency
state_class: measurement
state_topic: "mbmd/sdm1-1/Frequency"
unit_of_measurement: "Hz"
availability:
- topic: "mbmd/status"
payload_available: "connected"
payload_not_available: "disconnected"
unique_id: "sdm1-1_frequency"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment