Go library (rscp) and command line utility (e3dc) to communicate with a E3DC system implementing the RSCP (Remote Storage Control Protocol).
Please be gentle with me, this is my first real go project and it's bigger than I thought ;)
There is still a lot to improve to be a good reusable library, but most works for my specific usecase using it as a command line utility.
Contributions are very welcome, see also the check TODO or search in the code for TODO:
comments.
All arguments can also be set as E3DC_
prefixed environment variable or in a config file like:
host 127.0.0.1
user myuser
password mypassword
key mykey
See cmd/example for a small example with different requests and responses.
Request sent, is always last argument or can be piped through stdin
as json string.
See the examples below for more information.
*Note: top element has always to be an array*
*Note: these examples assume you have the default .config
file setup or exported the environment variables.*
*Note: all example use the default output format, check the help ./e3dc -help
for other formats.*
Short tag only notation just request some information
./e3dc '[["EMS_REQ_START_MANUAL_CHARGE",0]]' | jq
Output:
{
"EMS_START_MANUAL_CHARGE": true
}
Short tag only notation just request some information
./e3dc '["INFO_REQ_MAC_ADDRESS", "INFO_REQ_UTC_TIME"]' | jq
Output:
{
"INFO_MAC_ADDRESS": "00:00:00:00:00:00",
"INFO_UTC_TIME": "1970-01-01T00:00:00.000000Z"
}
Tuple notation of tag's to request information
./e3dc '[["INFO_REQ_MAC_ADDRESS"], ["INFO_REQ_UTC_TIME"]]' | jq
Output:
{
"INFO_MAC_ADDRESS": "00:00:00:00:00:00",
"INFO_UTC_TIME": "1970-01-01T00:00:00.000000Z"
}
Tuple notation of tag's and values to send information (data type is inferred by the tag)
./e3dc '[["EMS_REQ_START_MANUAL_CHARGE", 3000]]' | jq
Output:
{
"EMS_START_MANUAL_CHARGE": true
}
Tuple notation of tag's and values to send information (with explicit data type)
Note: data type of the tag can be overriden by the user
./e3dc '[["INFO_REQ_MAC_ADDRESS","None",""], ["INFO_REQ_UTC_TIME"]]' | jq
Output:
{
"INFO_MAC_ADDRESS": "00:00:00:00:00:00",
"INFO_UTC_TIME": "1970-01-01T00:00:00.000000Z"
}
cmd/e3dc
rscp
Message
as interface and make the struct internal (would allow to move the complete cmd/e3dc specific json stuff out)cmd/e3dc
specific json marshalling out of rscp
to command line utility cmd/e3dc
cmd/e3dc
specific json unmarshaling out of rscp
to command line utility cmd/e3dc