Node-red van/naar mqtt en mbmd (Eastron kWh meter)

Pagina: 1
Acties:

  • imdos
  • Registratie: Maart 2000
  • Laatst online: 13:38

imdos

I use FreeNAS and Ubuntu

Topicstarter
Hi forumleden,

Ik heb hulp nodig om de input uit mqtt te integreren en er nuttige informatie van te maken voor mijn smarthome.

Het betreft een rPi4 die mosquitto gebruikt en diverse USB-sticks. 1 daarvan nu op basis van een CH341 chipset leest een modbus kWh-meter uit. Een Eastron SDM220. Het lukte me niet met SDM120C of andere software om output te krijgen uit de meter. Gelukkig was mbmd welwillend. Output o.a. via http-api en mqtt. Hierin zitten de volgende topics uit mqtt die ik wil gebruiken.

De Current (I), voor het aantal amperé. Het aantal volt, (V). Hierdoor kan ik het aantal watt berekenen. Verder het totale verbruik in Sum. Ik heb een 2de hands meter, dus er moet nog wat verbruik afgeteld worden voordat ik dit kan doorzetten.

Output moet naar domoticz.

debug output van NR voor de mqtt info die ik wil gebruiken.
code:
1
2
3
4
5
6
7
8
9
9/22/2024, 3:25:11 PMnode: debug 270
mbmd/sdm2201-1/Voltage : msg.payload : number
[b]237.915[/b]
9/22/2024, 3:25:11 PMnode: debug 270
mbmd/sdm2201-1/Current : msg.payload : number
[b]2.118[/b]
9/22/2024, 3:25:11 PMnode: debug 270
mbmd/sdm2201-1/Sum : msg.payload : number
[b]1562.167[/b]


Huidige functie die ik heb geschreven.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var msg1 = {};
var msg2 = {};
var msg3 = {};
var kWh = {};
var watts = {};
const idx = 259; 
// geen definities meer hierna.
if (msg.topic === "mbmd/sdm2201-1/Voltage") {
msg1.payload = msg.payload; //.Voltage;
msg1.topic = 'Voltage';
}
if (msg.topic === "mbmd/sdm2201-1/Current") {
msg2.payload = msg.payload; //.Current;
msg2.topic = 'Current'; 
}
if (msg.topic === "mbmd/sdm2201-1/Sum") {
msg3.payload = msg.payload; //.Sum;
}
// berekenen. 
watts = msg2.payload * msg1.payload;
kWh =  (msg3.payload - 1216,4) * 1000;
// bericht voorbereiden
msg.topic = "domoticz/in";
msg.payload = { "command": "udevice", "idx": idx, "svalue": watts + ";" + kWh }
return msg;
node.warn("my var kWh = " + kWh);
node.warn("my var watt = " + watts);


Hier wat screenshots om het duidelijk te maken.

NR flow
Afbeeldingslocatie: https://tweakers.net/i/aZEKKb_fpKNypHWXXl3PNyc__ow=/800x/filters:strip_exif()/f/image/egPs4GVBPgZpStllcc24JRPF.png?f=fotoalbum_large

NR input
Afbeeldingslocatie: https://tweakers.net/i/LlyRsEZn5j_ki_-qbRcTThJrsXU=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/YuvC69y2VAmcBgmfavCJa0hL.png?f=user_large

MQTT explorer overview.
Afbeeldingslocatie: https://tweakers.net/i/jaPEQRyS00uDf3sslp5B66AYWyQ=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/RHbvxfeNsamKQEH882tJAM73.png?f=user_large

NR join
Afbeeldingslocatie: https://tweakers.net/i/zTWT6Tw9VWbRGjYKtP30qvIHWf0=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/VdsIbxaGqWOOp8GMLByDUzK7.png?f=user_large

Ergens krijg ik het niet voor elkaar om de ruwe data in NR te krijgen zodat ik er mee kan werken. Ik heb al het e.e.a. geprobeerd. Met join, to json en andere manieren om data te formateren, maar ik krijg het niet voor elkaar.

pvoutput. Waarom makkelijk doen, als het ook moeilijk kan! Every solution has a new problem


  • FredvZ
  • Registratie: Februari 2002
  • Laatst online: 17:29
Je Join mist imho nog een instelling. Als je "After a number of message parts" instelt op 8 krijg je uit de join een bericht met alle 8 de items.

In function 99 wordt dan zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
var kWh = 0;
var watts = 0;
const idx = 259; 
// geen definities meer hierna.

watts = msg.payload[""mbmd/sdm2201-1/Voltage"] * msg.payload["mbmd/sdm2201-1/Current"];
kWh =  (msg.payload[""mbmd/sdm2201-1/Sum"] - 1216,4) * 1000;
// bericht voorbereiden
msg.topic = "domoticz/in";
msg.payload = { "command": "udevice", "idx": idx, "svalue": watts + ";" + kWh }
return msg;
node.warn("my var kWh = " + kWh);
node.warn("my var watt = " + watts);


Verder vraag ik me nog wel af of je de verschillende items van de meter goed interpreteert.
"sum" lijkt de som te zijn van zowel "Import" als "Export".
Als je alleen wil weten wat er buiten gaat, dan moet je "Export" gebruiken voor je kWh.

"Current" lijkt mij eerder het huidige vermogen (Watt) dan de stroom (A). Stroom meten met drie cijfers achter de komma is wel héél nauwkeurig.

Spel en typfouten voorbehouden


  • imdos
  • Registratie: Maart 2000
  • Laatst online: 13:38

imdos

I use FreeNAS and Ubuntu

Topicstarter
Thanks; die join met 8 deed het hem. En ook je functie code. Heb het zelf daarna verder kunnen bouwen.

Jeh bet gelijk wat betreft de Sum. Ik heb inderdaad de Export nodig.
Die current is wel daadwerkelijk het aantal ampere. Want die komt niet in de buurt van het aantal watt. De max is 10 á 12. Wat tezamen met 230 ~ 245 V aardig uitkomt met de max van de omvormer van 3000 watt. Het staat ook zo in de spec sheet van Eastron

pvoutput. Waarom makkelijk doen, als het ook moeilijk kan! Every solution has a new problem