Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Support Modbus Meters #272

Open
wants to merge 32 commits into
base: master
Choose a base branch
from

Conversation

flyingflo
Copy link
Contributor

This is not done yet. Just wanted to show you the idea.

Todo

  • Add mocks/tests
  • Add CMake module for libmodbus and make this feature optional
  • Device support
  • Big Todo: Support Sunspec devices: Read and use Sunspec Models

@andig
Copy link
Contributor

andig commented Aug 6, 2016

Wow, great addition!


ssize_t MeterModbus::read(std::vector<Reading> &rds, size_t n) {
try {
rds = _regmap->read(_mbconn);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you check what happens if read(_mbconn) returns 3 values but n is smaller? I didn't check what the assign operator does in this case.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's not clean at the moment! Currently all the read functions (except this one) overwrite pre-constructed Reading objects in a vector. But this moves a new vector over the old one.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The background is, that I wondered why we pre-create empty Readings in the reading_thread and replace them in the Protocol::read. I assume it's left from the original C codebase. I think this makes no sense, so I am elaborating more C++ish read functions. Those return a vector with all their readings. The size is flexible, and everything would be less verbose. It would look like

std::vector<Reading> Meter::read();

The Readings are returned by value and moved (C++11 move) on return.

Just like the RegisterMap::read() method. However this is just an idea, and thus MeterModbus::read adapts it to the exisiting scheme in a hacky way ;)

A Reading can be created like

rds.push_back(Reading(value, new StringIdentifier("TotalExpWh")))

instead of

if (ret < n) {
    rds[ret].identifier(new ObisIdentifier("2.7.0"));
    rds[ret].value(get_record_value(record));
    rds[ret].time();
    ++ret;
 }

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I fully agree. This is the preferred solution. We should even get rid of this parameter "n" and change all read functions to properly add (push_back) their values.

@mbehr1
Copy link
Contributor

mbehr1 commented Aug 6, 2016

Good work! Let me know if you need help with the mocks.

@andig
Copy link
Contributor

andig commented Aug 24, 2017

ping @flyingflo would be nice to get this in, @mbehr has already offered his help. Any chance to complete this PR? I would love to see modbus support as this would allow moving my entire monitoring infrastructure to standard hardware without the need for S0.

@flyingflo
Copy link
Contributor Author

Hi, chances are high. I haven't touched the code since a while, but its running since then. I have to sort out my branches to update the PR to the latest version. Still, no mocks yet..

This is useful to create a sensible reading with current time in
one line.
This class is just a collection of functions, no data members.
Make the member functions static and save us the creation of a
useless object.
The what message must not be a automatic variable of the what()
function, of course.
On Modbus RTU connections and on Modbus TCP connecitons
multiple devices can be connected to one "connection".

In vzlogger, we must implement this in one Meter, because
access to the devices must be synchronized.
Depending on the meter connection, reading can take a significant part
of the interval time. Record the time spent with reading, and wait only
the time left until starting the next reading.
@flyingflo
Copy link
Contributor Author

flyingflo commented Sep 2, 2017

Updated with all patches on that topic that I currently have.

Todo

  • Add mocks/tests (at least don't break the existing)
  • Add CMake module for libmodbus and make this feature optional
  • Resolve conflicts

@flyingflo
Copy link
Contributor Author

flyingflo commented Sep 3, 2017

Todo

  • Add mocks/tests (at least don't break the existing)
  • Add CMake module for libmodbus and make this feature optional
  • Resolve conflicts

}
},
{
"enabled": false,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indents?

@@ -53,6 +53,7 @@ if( MBUS_FOUND )
target_link_libraries(vzlogger ${MBUS_LIBRARY})
endif( MBUS_FOUND )
target_link_libraries(vzlogger ${OCR_LIBRARIES})
target_link_libraries(vzlogger modbus)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Different from mbus_library?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, modbus and mbus have little in common, except the m and the bus ;)

@@ -72,6 +73,7 @@ static const meter_details_t protocols[] = {
#ifdef OMS_SUPPORT
METER_DETAIL(oms, OMS, "OMS (M-BUS) protocol based devices", 100, false), // todo what is the max. amount of reading according to spec?
#endif
METER_DETAIL(modbus, Modbus, "Modbus meter", 64, true),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surround with ifdef fpor modbus support throughout the vode?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It belongs to this todo to make the whole modbus stuff optional

  • Add CMake module for libmodbus and make this feature optional

Still open ..

@J-A-U
Copy link
Collaborator

J-A-U commented May 5, 2018

Add mocks/tests (at least don't break the existing)

I got a failure according to the tests. If I redo 9895172 the build gets succesfully completed.

Linking CXX executable mock_metermap
cd /home/pi/vzlogger/build/tests/mocks && /usr/bin/cmake -E cmake_link_script CMakeFiles/mock_metermap.dir/link.txt --verbose=1
/usr/bin/c++    -W -Wall -Wextra -Werror -Wnon-virtual-dtor -Wno-system-headers -Winit-self -Wmissing-include-dirs -Wno-pragmas -Wredundant-decls -Wno-unused-parameter -std=c++11 -fpermissive -Wno-error=redundant-decls -Wno-ignored-qualifiers -fprofile-arcs -ftest-coverage    CMakeFiles/mock_metermap.dir/mock_metermap.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Meter.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Options.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterD0.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterFile.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterExec.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterS0.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterRandom.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterSML.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterFluksoV2.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterW1therm.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterModbus.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Reading.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Obis.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/ltqnorm.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/MeterMap.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/threads.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Config_Options.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Buffer.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/Volkszaehler.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/MySmartGrid.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/Null.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/CurlIF.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/CurlCallback.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/CurlResponse.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/CurlSessionProvider.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/PushData.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/local.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterOMS.cpp.o  -o mock_metermap -rdynamic -lcurl -Wl,-Bstatic -lgnutls -lz -Wl,-Bdynamic -lp11-kit -Wl,-Bstatic -lgmp -lhogweed -lgmp -lnettle -ltasn1 -Wl,-Bdynamic -lp11-kit -Wl,-Bstatic -lz -Wl,-Bdynamic -lsasl2 -lgcrypt -lssl -lcrypto ../../gmock/src/googlemock-build/googlemock/gtest/libgtest.a ../../gmock/src/googlemock-build/googlemock/libgmock.a -lpthread /usr/local/lib/libjson-c.a -lrt -luuid -ldl -lmodbus -Wl,-Bstatic -lsml -Wl,-Bdynamic -lrt /usr/local/lib/libmbus.so -lm -Wl,-Bstatic -lgmp -lhogweed -lnettle -ltasn1 -Wl,-Bdynamic -lsasl2 -lgcrypt -lssl -lcrypto ../../gmock/src/googlemock-build/googlemock/gtest/libgtest.a ../../gmock/src/googlemock-build/googlemock/libgmock.a -lpthread /usr/local/lib/libjson-c.a -lrt -luuid -ldl -lmodbus -Wl,-Bstatic -lsml -Wl,-Bdynamic -lrt -luuid -ldl -lmodbus -Wl,-Bstatic -lsml -Wl,-Bdynamic /usr/local/lib/libmbus.so -lm -Wl,-rpath,/usr/local/lib
CMakeFiles/mock_metermap.dir/__/__/src/local.cpp.o: In function `handle_request(void*, MHD_Connection*, char const*, char const*, char const*, char const*, unsigned int*, void**)':
/home/pi/vzlogger/src/local.cpp:146: undefined reference to `MHD_lookup_connection_value'
/home/pi/vzlogger/src/local.cpp:215: undefined reference to `MHD_create_response_from_buffer'
/home/pi/vzlogger/src/local.cpp:218: undefined reference to `MHD_add_response_header'
/home/pi/vzlogger/src/local.cpp:223: undefined reference to `MHD_create_response_from_buffer'
/home/pi/vzlogger/src/local.cpp:226: undefined reference to `MHD_add_response_header'
/home/pi/vzlogger/src/local.cpp:231: undefined reference to `MHD_queue_response'
/home/pi/vzlogger/src/local.cpp:233: undefined reference to `MHD_destroy_response'
collect2: error: ld returned 1 exit status
tests/mocks/CMakeFiles/mock_metermap.dir/build.make:819: recipe for target 'tests/mocks/mock_metermap' failed
make[2]: *** [tests/mocks/mock_metermap] Error 1
make[2]: Leaving directory '/home/pi/vzlogger/build'
CMakeFiles/Makefile2:1384: recipe for target 'tests/mocks/CMakeFiles/mock_metermap.dir/all' failed
make[1]: *** [tests/mocks/CMakeFiles/mock_metermap.dir/all] Error 2
make[1]: Leaving directory '/home/pi/vzlogger/build'
Makefile:150: recipe for target 'all' failed
make: *** [all] Error 2

@J-A-U J-A-U closed this May 5, 2018
@J-A-U J-A-U reopened this May 5, 2018
Copy link
Collaborator

@J-A-U J-A-U left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not happy with the way the registers of value are adressed.

std::map<std::string, RegisterMap::Ptr (*)()> RegisterMap::maps = {
{ "ohmpilot", createMap<OpRegisterMap> },
{ "imemeter", createMap<IMEmeterRegisterMap> }
};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh. Oooooh...
Nice to have an "easy way" to adresse known type of meters, but:
This is inflexible! For every new meter or single parameter we need somebody to understand and change the code and users have to compile again.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I totally agree. Its inflexible. There would be a standard from Sunspec to describe Modbus registers in an xml format. However, this would pull in an xml parser requires much more work to be done correctly. Anyways, it would be a good idea to do.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we implement a standard register map, that would add support all compliant meters.

My two example devices don't follow any standard maps, they are totally custom.

void OpRegisterMap::read(std::vector<Reading>& rds, ModbusConnection::Ptr conn, unsigned id) {
uint16_t regs[10];

conn->read_registers(40799, 10, regs, id);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No variables...

uint16_t regs[reg_len];
int value;

conn->read_registers(reg_offset, reg_len, regs, id);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

...variables.
Pick one way and stick with it, please.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Easy fix, these constants are only used once..

conn->read_registers(40799, 10, regs, id);
rds.push_back(Reading(regs[9] / 10.0, new ModbusReadingIdentifier(id, "T")));
rds.push_back(Reading(regs[2], new ModbusReadingIdentifier(id, "P")));
rds.push_back(Reading(regs[8], new ModbusReadingIdentifier(id, "E")));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whats does T, P and E mean?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All this register maps only make sense if you know the device. In this case its Power, Temperature, Energy.

@flyingflo
Copy link
Contributor Author

cd /home/pi/vzlogger/build/tests/mocks && /usr/bin/cmake -E cmake_link_script CMakeFiles/mock_metermap.dir/link.txt --verbose=1
/usr/bin/c++    -W -Wall -Wextra -Werror -Wnon-virtual-dtor -Wno-system-headers -Winit-self -Wmissing-include-dirs -Wno-pragmas -Wredundant-decls -Wno-unused-parameter -std=c++11 -fpermissive -Wno-error=redundant-decls -Wno-ignored-qualifiers -fprofile-arcs -ftest-coverage    CMakeFiles/mock_metermap.dir/mock_metermap.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Meter.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Options.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterD0.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterFile.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterExec.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterS0.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterRandom.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterSML.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterFluksoV2.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterW1therm.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterModbus.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Reading.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Obis.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/ltqnorm.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/MeterMap.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/threads.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Config_Options.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/Buffer.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/Volkszaehler.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/MySmartGrid.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/Null.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/CurlIF.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/CurlCallback.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/api/CurlResponse.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/CurlSessionProvider.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/PushData.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/local.cpp.o CMakeFiles/mock_metermap.dir/__/__/src/protocols/MeterOMS.cpp.o  -o mock_metermap -rdynamic -lcurl -Wl,-Bstatic -lgnutls -lz -Wl,-Bdynamic -lp11-kit -Wl,-Bstatic -lgmp -lhogweed -lgmp -lnettle -ltasn1 -Wl,-Bdynamic -lp11-kit -Wl,-Bstatic -lz -Wl,-Bdynamic -lsasl2 -lgcrypt -lssl -lcrypto ../../gmock/src/googlemock-build/googlemock/gtest/libgtest.a ../../gmock/src/googlemock-build/googlemock/libgmock.a -lpthread /usr/local/lib/libjson-c.a -lrt -luuid -ldl -lmodbus -Wl,-Bstatic -lsml -Wl,-Bdynamic -lrt /usr/local/lib/libmbus.so -lm -Wl,-Bstatic -lgmp -lhogweed -lnettle -ltasn1 -Wl,-Bdynamic -lsasl2 -lgcrypt -lssl -lcrypto ../../gmock/src/googlemock-build/googlemock/gtest/libgtest.a ../../gmock/src/googlemock-build/googlemock/libgmock.a -lpthread /usr/local/lib/libjson-c.a -lrt -luuid -ldl -lmodbus -Wl,-Bstatic -lsml -Wl,-Bdynamic -lrt -luuid -ldl -lmodbus -Wl,-Bstatic -lsml -Wl,-Bdynamic /usr/local/lib/libmbus.so -lm -Wl,-rpath,/usr/local/lib
CMakeFiles/mock_metermap.dir/__/__/src/local.cpp.o: In function `handle_request(void*, MHD_Connection*, char const*, char const*, char const*, char const*, unsigned int*, void**)':
/home/pi/vzlogger/src/local.cpp:146: undefined reference to `MHD_lookup_connection_value'
/home/pi/vzlogger/src/local.cpp:215: undefined reference to `MHD_create_response_from_buffer'
/home/pi/vzlogger/src/local.cpp:218: undefined reference to `MHD_add_response_header'
/home/pi/vzlogger/src/local.cpp:223: undefined reference to `MHD_create_response_from_buffer'
/home/pi/vzlogger/src/local.cpp:226: undefined reference to `MHD_add_response_header'
/home/pi/vzlogger/src/local.cpp:231: undefined reference to `MHD_queue_response'
/home/pi/vzlogger/src/local.cpp:233: undefined reference to `MHD_destroy_response'
collect2: error: ld returned 1 exit status
tests/mocks/CMakeFiles/mock_metermap.dir/build.make:819: recipe for target 'tests/mocks/mock_metermap' failed
make[2]: *** [tests/mocks/mock_metermap] Error 1
make[2]: Leaving directory '/home/pi/vzlogger/build'
CMakeFiles/Makefile2:1384: recipe for target 'tests/mocks/CMakeFiles/mock_metermap.dir/all' failed
make[1]: *** [tests/mocks/CMakeFiles/mock_metermap.dir/all] Error 2
make[1]: Leaving directory '/home/pi/vzlogger/build'
Makefile:150: recipe for target 'all' failed
make: *** [all] Error 2

I think this is caused by minihttpd missing and the test code assuming that its there without any checks.

@andig
Copy link
Contributor

andig commented May 18, 2018

I totally agree. Its inflexible.

Ich bin seit einiger Zeit auch bei gosdm engagiert- da gibt es das gleiche Thema: gonium/gosdm630#41. Für GoSDM gibt es folgende Anforderungen an eine "meter definition":

  • Mapping Messwerttyp (im Prinzip OBIS KZ) -> Modbus Register
  • Definition Konvertierung für Modbus Ausleseergebnis (z.B. Int64 / 100 -> Float)
  • Definition Ausleseregister für den Zählertyp
  • Definition eines Registers dass nur dieser Zähler unterstützt um eine automatische Erkennung zu ermöglichen

@flyingflo wäre das auch für Deine Zähler machbar?

There would be a standard from Sunspec to describe Modbus registers in an xml format. However, this would pull in an xml parser requires much more work to be done correctly.

Bäh, XML :/

Wenn wir es geschickt machen könnten wir beide Projekte mit Definitionsdateien unterstützen, der Einfachheit JSON (kein zusätzlicher großer Parser) oder auch YAML.

GoSDM kann mittlerweile auch MQTT. Eine generelle Frage wäre ob wir immer noch mehr Geräte in den vzlogger einbauen müssen oder uns vielleicht noch eine MQTT -> Middleware (ggf. plus WebSocket/ Httpd/ Push) Bridge einfallen lassen wollen.

Alternativ vzlogger einen MQTT Client verpassen um die Aggregationsfunktionen zu nutzen. Das wäre eine schöne Diskussion für das Entwicklertreffen.

@andig
Copy link
Contributor

andig commented May 18, 2018

@flyingflo wenn Du magst können wir diese Zähler auch bei GoSDM hinzufügen.

@J-A-U
Copy link
Collaborator

J-A-U commented May 18, 2018

I think this is caused by minihttpd missing and the test code assuming that its there without any checks.

Before test of this PR i made sure the actual head:master is compiling and working fine. Libmicrohttpd-dev is installed.

@J-A-U
Copy link
Collaborator

J-A-U commented May 18, 2018

There would be a standard from Sunspec to describe Modbus registers in an xml format.

My first thought was a secondary config, too. But i don't want to push a solution because i will not be able to implement it.
My reaction to XML was not as bad as andig's but i would prefer JSON because we already have it in use.
I think there should be a possible solution to convert the XML to JSON.

My two example devices don't follow any standard maps, they are totally custom.

I noticed when i searched for doku of the ohmpilot registers.

@J-A-U
Copy link
Collaborator

J-A-U commented May 18, 2018

Ich bin seit einiger Zeit auch bei gosdm engagiert

Interessant. Muss ich mich mal einlesen...

@andig
Copy link
Contributor

andig commented May 18, 2018

Before test of this PR i made sure the actual head:master is compiling and working fine. Libmicrohttpd-dev is installed.

Please rebase on master. I think this has been only recently fixed.

@frankrichter
Copy link
Contributor

Wenn es durch das Register-Mapping kompliziert wird: könnte man das nicht erstmal weglassen? Wäre es nicht prinzipiell ausreichend (und maximal flexibel), die gewünschten Register und den Datentyp in der vzlogger.conf im Channel-Kontext anzugeben?

+1 für MQTT-Support, wäre imho sowohl für vzlogger als auch für die MW eine sehr sinnvolle Erweiterung.

@flyingflo
Copy link
Contributor Author

flyingflo commented May 24, 2018 via email

@andig
Copy link
Contributor

andig commented May 31, 2018

Wichtig ist noch, dass man einen sinnvollen Registerblock
als ganzes in einem Modbus Zugriff ausliest, und nicht jeden Eintrag im
Mapping extra, das geht sehr langsam.

Ups, da hast Du mich erwischt. Gosdm macht das einzeln. Es sollte allerdings nicht schwer sein aus einzelnen Registerdefinitionen sinnvolle Blöcke rauszusuchen die dann gelesen werden. Im Prinzip soviele Register bis eine Lücke auftaucht. Ich schau mal ob sich das für Gosdm sinnvoll basteln lässt.

@flyingflo
Copy link
Contributor Author

Hallo, nachdem der PR immer noch herumliegt..
Wollt ihr ihn integrieren?
Und was müssten wir vorher noch ändern, abgesehen von einem rebase auf den aktuellen master?
Verwendet das irgendwer außer mir?

@andig
Copy link
Contributor

andig commented Jan 17, 2019

@flyingflo erstmal vielen Dank für die Arbeit die Du in diesen PR gesteckt hast!

Ich bin dennoch kein Fan davon da wir damit vzlogger immer massiver machen. Gleichzeitig gibt es andere Projekte die in der Lage wären Datenerfassung und Volkszähler Anbindung zu modularisieren:

Der Vorteil von GoSDM ist dass bereits eine Reihe von Modbus Zählern und Wechselrichtern implementiert sind. Ich sehe keinen Wert darin diesen Aufwand nochmal in eine Parallelentwicklung in vzlogger zu investieren?

@andig
Copy link
Contributor

andig commented Jan 30, 2019

@flyingflo hast Du Dir mal gosdm angeschaut?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants