Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
e39fa60
Add files via upload
Jouzer Feb 27, 2024
45fbe95
Add files via upload
Jouzer Feb 27, 2024
6d38ae1
Update Makefile.am
Jouzer Feb 27, 2024
f0359ca
Update mbus-serial-raw-send.c
Jouzer Feb 27, 2024
4520a59
Update mbus-serial-raw-send.c
Jouzer Feb 27, 2024
8396257
Update clean.sh
Jouzer Feb 27, 2024
257a94d
Update mbus-serial-raw-send.c
Jouzer Feb 27, 2024
1029107
Add files via upload
Jouzer Feb 27, 2024
85f5a90
Raw send is functional, added test-txt
Jouzer Feb 27, 2024
2ae2110
Again
Jouzer Feb 27, 2024
db9112f
Update mbus-protocol-aux.c
Jouzer Mar 1, 2024
b86de45
Update mbus-protocol-aux.h
Jouzer Mar 1, 2024
47c28ad
Test binary for new custom text Elvaco CMa10
Jouzer Mar 1, 2024
0401b63
Update mbus-serial-custom-text.c
Jouzer Mar 1, 2024
cd7e3c8
Update mbus-serial-custom-text.c
Jouzer Mar 1, 2024
8a133d4
Update README.md
Jouzer Mar 1, 2024
0c3580f
Update README.md
Jouzer Mar 1, 2024
e8ba0f5
Update README.md
Jouzer Mar 1, 2024
cb75087
Update Makefile.am
Jouzer Apr 3, 2024
2d23612
Update clean.sh
Jouzer Apr 3, 2024
cbe87f1
Update Makefile.am
Jouzer Apr 3, 2024
d1503ee
Missing file
Jouzer Apr 3, 2024
f22dfdb
Update mbus-protocol-aux.c
Jouzer Apr 9, 2024
a76892e
Update mbus-protocol-aux.h
Jouzer Apr 9, 2024
da501f0
Update README.md
Jouzer Apr 9, 2024
3452a1a
Update README.md
Jouzer Apr 9, 2024
75d3ae8
Create mbus-serial-send-global-aes128-key.c
Jouzer Apr 9, 2024
fbff56d
Create mbus-serial-send-global-aes128-key.1
Jouzer Apr 9, 2024
dce5779
Update Makefile.am
Jouzer Apr 9, 2024
b7d8c7b
Update mbus-protocol-aux.c
Jouzer Apr 9, 2024
57f45ec
Update mbus-serial.c
Jouzer May 2, 2024
79b1938
Update mbus-serial.c
Jouzer May 2, 2024
e921d47
Update README.md
Jouzer Jul 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ bin/mbus-tcp-scan
bin/mbus-tcp-scan-secondary
bin/mbus-tcp-select-secondary
bin/mbus-tcp-application-reset
bin/mbus-serial-raw-send
!*.c

# test binaries
Expand All @@ -76,4 +77,4 @@ _build/

# IDE
/.vscode/
CMakeLists.txt.user
CMakeLists.txt.user
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
This fork contains 3 new things

serial-mbus-send-raw binary (conversion from tcp)

function mbus_send_custom_text in mbus-protocol-aux.c/h
This works with the popular Elvaco CMa10, you can send text messages to the unit

function mbus_send_global_aes128_key in mbus-protocol-aux
This works with the Elvaco CMi-Box, you can send global AES128 decryption key to module. Note; the length isn't enforced, although the key should be 16 bytes. Doublecheck the key before sending it.

# libmbus: M-bus Library from Raditex Control (http://www.rscada.se) <span style="float:right;"><a href="https://travis-ci.org/rscada/libmbus" style="border-bottom:none">![Build Status](https://travis-ci.org/rscada/libmbus.svg?branch=master)</a></span>

libmbus is an open source library for the M-bus (Meter-Bus) protocol.
Expand Down
21 changes: 19 additions & 2 deletions bin/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ bin_PROGRAMS = mbus-tcp-scan mbus-tcp-request-data mbus-tcp-request-data-multi
mbus-serial-scan mbus-serial-request-data mbus-serial-request-data-multi-reply \
mbus-serial-select-secondary mbus-serial-scan-secondary \
mbus-serial-switch-baudrate mbus-tcp-raw-send mbus-tcp-application-reset \
mbus-serial-set-address
mbus-serial-set-address mbus-serial-raw-send mbus-serial-custom-text mbus-serial-send-global-aes128-key

# tcp
mbus_tcp_scan_LDFLAGS = -L$(top_builddir)/mbus
Expand Down Expand Up @@ -78,6 +78,20 @@ mbus_serial_set_address_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_set_address_LDADD = -lmbus -lm
mbus_serial_set_address_SOURCES = mbus-serial-set-address.c

mbus_serial_raw_send_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_raw_send_LDADD = -lmbus -lm
mbus_serial_raw_send_SOURCES = mbus-serial-raw-send.c

mbus_serial_custom_text_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_custom_text_LDADD = -lmbus -lm
mbus_serial_custom_text_SOURCES = mbus-serial-custom-text.c

mbus_serial_send_global_aes128_key_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_send_global_aes128_key_LDADD = -lmbus -lm
mbus_serial_send_global_aes128_key_SOURCES = mbus-serial-send-global-aes128-key.c



# man pages
dist_man_MANS = libmbus.1 \
mbus-tcp-scan.1 \
Expand All @@ -91,7 +105,10 @@ dist_man_MANS = libmbus.1 \
mbus-serial-request-data-multi-reply.1 \
mbus-serial-select-secondary.1 \
mbus-serial-scan-secondary.1 \
mbus-serial-switch-baudrate.1
mbus-serial-switch-baudrate.1 \
mbus-serial-raw-send.1 \
mbus-serial-custom-text.1 \
mbus-serial-send-global-aes128-key.1

.pod.1:
pod2man --release=$(VERSION) --center=$(PACKAGE) $< \
Expand Down
2 changes: 2 additions & 0 deletions bin/mbus-serial-custom-text.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.so man1/libmbus.1

149 changes: 149 additions & 0 deletions bin/mbus-serial-custom-text.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
//------------------------------------------------------------------------------
// Copyright (C) 2012, Robert Johansson, Raditex AB
// All rights reserved.
//
// rSCADA
// http://www.rSCADA.se
// info@rscada.se
//
//------------------------------------------------------------------------------

#include <string.h>

#include <stdio.h>
#include <mbus/mbus.h>

static int debug = 0;

//------------------------------------------------------------------------------
// Execution starts here:
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
mbus_frame reply, request;
mbus_frame_data reply_data;
mbus_handle *handle = NULL;

char *device, *addr_str, matching_addr[16], *text;
long baudrate = 9600;
int address, result;

memset((void *)&reply, 0, sizeof(mbus_frame));
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));

if (argc == 4)
{
addr_str = argv[1];
device = argv[2];
text = argv[3];
debug = 0;
}
else if (argc == 5 && strcmp(argv[1], "-d") == 0)
{
addr_str = argv[2];
device = argv[3];
text = argv[4];
debug = 1;
}
else if (argc == 6 && strcmp(argv[1], "-b") == 0)
{
baudrate = atol(argv[2]);
addr_str = argv[3];
device = argv[4];
text = argv[5];
debug = 0;
}
else if (argc == 7 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
{
baudrate = atol(argv[3]);
addr_str = argv[4];
device = argv[5];
text = argv[6];
debug = 1;
}
else
{
fprintf(stderr, "usage: %s [-d] [-b BAUDRATE] mbus-address device text \n", argv[0]);
fprintf(stderr, " optional flag -d for debug printout\n");
return 0;
}

if ((handle = mbus_context_serial(device)) == NULL)
{
fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str());
return 1;
}

if (debug)
{
mbus_register_send_event(handle, &mbus_dump_send_event);
mbus_register_recv_event(handle, &mbus_dump_recv_event);
}

if (mbus_connect(handle) == -1)
{
fprintf(stderr, "Failed to setup connection to M-bus gateway\n%s\n", mbus_error_str());
return 1;
}

if (mbus_serial_set_baudrate(handle, baudrate) == -1)
{
fprintf(stderr, "%s: Error: Failed to set baud rate [%ld].\n", __PRETTY_FUNCTION__, baudrate);
mbus_disconnect(handle);
mbus_context_free(handle);
return 1;
}

if (mbus_is_secondary_address(addr_str))
{
// secondary addressing
int ret;

ret = mbus_select_secondary_address(handle, addr_str);

if (ret == MBUS_PROBE_COLLISION)
{
fprintf(stderr, "%s: Error: The address mask [%s] matches more than one device.\n", __PRETTY_FUNCTION__, addr_str);
return 1;
}
else if (ret == MBUS_PROBE_NOTHING)
{
fprintf(stderr, "%s: Error: The selected secondary address does not match any device [%s].\n", __PRETTY_FUNCTION__, addr_str);
return 1;
}
else if (ret == MBUS_PROBE_ERROR)
{
fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str);
return 1;
}
address = MBUS_ADDRESS_NETWORK_LAYER;
}
else
{
// primary addressing
address = atoi(addr_str);
}

//
// send the request
//
if (mbus_send_custom_text(handle, address, text) == -1)
{
fprintf(stderr, "Send custom text error: %s\n", mbus_error_str());
return 1;
}

//
// this should be option:
//
if (mbus_recv_frame(handle, &reply) != MBUS_RECV_RESULT_OK)
{
fprintf(stderr, "Failed to receive M-Bus response frame: %s\n", mbus_error_str());
return 1;
}

mbus_disconnect(handle);
mbus_context_free(handle);
return 0;
}
2 changes: 2 additions & 0 deletions bin/mbus-serial-raw-send.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.so man1/libmbus.1

Loading