class BaseLoop: daemon command SET implemented.

This commit is contained in:
Roland Jax
2014-05-04 21:53:19 +02:00
parent b6ec718d34
commit 6a5bdd28c5
5 changed files with 75 additions and 21 deletions
+1
View File
@@ -95,6 +95,7 @@ get;vwxhw;TankTemp;Speichertemperatur IST;MS;08;B509;3;0D0000;2;temp;sd;1,2;d2c;
get;vwxhw;TankTypePipe;Speichertyp ist Rohr;MS;25;B509;3;0DCD01;1;-;sd;1;uch;-;-;-;-;;;;;;;;;;;;;;;;;;;;;;;; get;vwxhw;TankTypePipe;Speichertyp ist Rohr;MS;25;B509;3;0DCD01;1;-;sd;1;uch;-;-;-;-;;;;;;;;;;;;;;;;;;;;;;;;
get;vwxmk;CoolingOperatingMode;Kühlung Betriebsart;MS;50;B509;3;0D8C01;1;-;sd;1;uch;-;-;-;-;;;;;;;;;;;;;;;;;;;;;;;; get;vwxmk;CoolingOperatingMode;Kühlung Betriebsart;MS;50;B509;3;0D8C01;1;-;sd;1;uch;-;-;-;-;;;;;;;;;;;;;;;;;;;;;;;;
get;vwxmk;DesiredTemp;Solltemperatur;MS;50;B509;3;0D3200;1;-;sd;1;d1c;1.0;°C;-;-;;;;;;;;;;;;;;;;;;;;;;;; get;vwxmk;DesiredTemp;Solltemperatur;MS;50;B509;3;0D3200;1;-;sd;1;d1c;1.0;°C;-;-;;;;;;;;;;;;;;;;;;;;;;;;
set;vwxmk;DesiredTemp;Solltemperatur;MS;50;B509;4;0E3200;1;-;sd;1;d1c;1.0;°C;-;-;;;;;;;;;;;;;;;;;;;;;;;;
get;vwxmk;DesiredTempLow;Absenktemperatur;MS;50;B509;3;0D3300;1;-;sd;1;d1c;1.0;°C;-;-;;;;;;;;;;;;;;;;;;;;;;;; get;vwxmk;DesiredTempLow;Absenktemperatur;MS;50;B509;3;0D3300;1;-;sd;1;d1c;1.0;°C;-;-;;;;;;;;;;;;;;;;;;;;;;;;
get;vwxmk;FloorProtectionTempLimit;Fußbodenschutz Temp > VF2;MS;50;B509;3;0D7B01;1;-;sd;1;uch;-;°C;-;-;;;;;;;;;;;;;;;;;;;;;;;; get;vwxmk;FloorProtectionTempLimit;Fußbodenschutz Temp > VF2;MS;50;B509;3;0D7B01;1;-;sd;1;uch;-;°C;-;-;;;;;;;;;;;;;;;;;;;;;;;;
get;vwxmk;FloorScreedDryingDay;Estrichtrocknung Tag;MS;50;B509;3;0D3B00;1;-;sd;1;uch;-;-;-;-;;;;;;;;;;;;;;;;;;;;;;;; get;vwxmk;FloorScreedDryingDay;Estrichtrocknung Tag;MS;50;B509;3;0D3B00;1;-;sd;1;uch;-;-;-;-;;;;;;;;;;;;;;;;;;;;;;;;
1 # type class cmd comment msg type ZZ PBSB NN D1D2D3 elements sub part position datatype factor unit valid comment sub part position datatype factor unit valid comment sub part position datatype factor unit valid comment sub part position datatype factor unit valid comment
95 get vwxhw TankTypePipe Speichertyp ist Rohr MS 25 B509 3 0DCD01 1 - sd 1 uch - - - -
96 get vwxmk CoolingOperatingMode Kühlung Betriebsart MS 50 B509 3 0D8C01 1 - sd 1 uch - - - -
97 get vwxmk DesiredTemp Solltemperatur MS 50 B509 3 0D3200 1 - sd 1 d1c 1.0 °C - -
98 set vwxmk DesiredTemp Solltemperatur MS 50 B509 4 0E3200 1 - sd 1 d1c 1.0 °C - -
99 get vwxmk DesiredTempLow Absenktemperatur MS 50 B509 3 0D3300 1 - sd 1 d1c 1.0 °C - -
100 get vwxmk FloorProtectionTempLimit Fußbodenschutz Temp > VF2 MS 50 B509 3 0D7B01 1 - sd 1 uch - °C - -
101 get vwxmk FloorScreedDryingDay Estrichtrocknung Tag MS 50 B509 3 0D3B00 1 - sd 1 uch - - - -
Binary file not shown.
+55 -3
View File
@@ -59,7 +59,6 @@ std::string BaseLoop::decodeMessage(const std::string& data)
std::ostringstream result; std::ostringstream result;
std::string cycdata; std::string cycdata;
int index; int index;
BusCommand* busCommand;
// prepare data // prepare data
std::string token; std::string token;
@@ -78,7 +77,6 @@ std::string BaseLoop::decodeMessage(const std::string& data)
break; break;
case get: case get:
case set:
if (cmd.size() < 3) { if (cmd.size() < 3) {
result << "format: type class cmd [sub]"; result << "format: type class cmd [sub]";
break; break;
@@ -96,7 +94,7 @@ std::string BaseLoop::decodeMessage(const std::string& data)
L.log(bas, event, " type: %s msg: %s", type.c_str(), ebusCommand.c_str()); L.log(bas, event, " type: %s msg: %s", type.c_str(), ebusCommand.c_str());
// send busCommand // send busCommand
m_ebusloop->addBusCommand(new BusCommand(type, ebusCommand)); m_ebusloop->addBusCommand(new BusCommand(type, ebusCommand));
busCommand = m_ebusloop->getBusCommand(); BusCommand* busCommand = m_ebusloop->getBusCommand();
if (busCommand->getResult().c_str()[0] != '-') { if (busCommand->getResult().c_str()[0] != '-') {
// decode data // decode data
@@ -107,6 +105,7 @@ std::string BaseLoop::decodeMessage(const std::string& data)
delete command; delete command;
} else { } else {
L.log(bas, error, " %s", busCommand->getResult().c_str());
result << busCommand->getResult().c_str(); result << busCommand->getResult().c_str();
} }
@@ -119,6 +118,59 @@ std::string BaseLoop::decodeMessage(const std::string& data)
break; break;
case set:
if (cmd.size() != 4) {
result << "format: type class cmd value";
break;
}
index = m_commands->findCommand(data.substr(0, data.find(cmd[3])-1));
if (index >= 0) {
std::string type = m_commands->getType(index);
std::string ebusCommand(A.getParam<const char*>("p_address"));
ebusCommand += m_commands->getEbusCommand(index);
// encode data
Command* command = new Command(index, (*m_commands)[index], cmd[3]);
std::string value = command->calcData();
if (value[0] != '-') {
ebusCommand += value;
} else {
L.log(bas, error, " %s", value.c_str());
delete command;
break;
}
std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower);
L.log(bas, event, " type: %s msg: %s", type.c_str(), ebusCommand.c_str());
// send busCommand
m_ebusloop->addBusCommand(new BusCommand(type, ebusCommand));
BusCommand* busCommand = m_ebusloop->getBusCommand();
if (busCommand->getResult().c_str()[0] != '-') {
// decode result
if (busCommand->getResult().substr(busCommand->getResult().length()-8) == "00000000")
result << "done";
else
result << "error";
} else {
L.log(bas, error, " %s", busCommand->getResult().c_str());
result << busCommand->getResult().c_str();
}
delete busCommand;
delete command;
} else {
result << "ebus command not found";
}
break;
case cyc: case cyc:
if (cmd.size() < 3) { if (cmd.size() < 3) {
result << "format: type class cmd [sub]"; result << "format: type class cmd [sub]";
+1
View File
@@ -16,6 +16,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with ebus-daemon. If not, see http://www.gnu.org/licenses/. * along with ebus-daemon. If not, see http://www.gnu.org/licenses/.
*/ */
#include "libebus.h" #include "libebus.h"
#include "logger.h" #include "logger.h"
#include "daemon.h" #include "daemon.h"
+1 -1
View File
@@ -25,8 +25,8 @@
#include "thread.h" #include "thread.h"
#include "notify.h" #include "notify.h"
#include "baseloop.h" #include "baseloop.h"
#include <unistd.h>
#include <list> #include <list>
#include <unistd.h>
class Connection : public Thread class Connection : public Thread
{ {