@@ -59,30 +59,38 @@ std::vector<boost::shared_ptr<const yApi::historization::IHistorizable>> CProfil
5959 if (rorg != CRorgs::k4BS_Telegram)
6060 return {}; // Some valves send extra messages, ignore them
6161
62- YADOMS_LOG (trace) << " Message received from " + m_deviceId + " (A5-20-01) :" ;
63- YADOMS_LOG (trace) << " - CV , Current Value : " << bitset_extract (data, 0 , 8 );
64- YADOMS_LOG (trace) << " - SO , Service On : " << (bitset_extract (data, 8 , 1 ) ? true : false );
65- YADOMS_LOG (trace) << " - ENIE , Energy Input Enable : " << (bitset_extract (data, 9 , 1 ) ? true : false );
66- YADOMS_LOG (trace) << " - ES , Energy Storage : " << (bitset_extract (data, 10 , 1 ) ? true : false );
67- YADOMS_LOG (trace) << " - BCAP , Battery capacity : " << (bitset_extract (data, 11 , 1 ) ? true : false );
68- YADOMS_LOG (trace) << " - CCO , Contact Cover Open : " << (bitset_extract (data, 12 , 1 ) ? true : false );
69- YADOMS_LOG (trace) << " - FTS , Fail Temperature Sensor (out of range) : " << (bitset_extract (data, 13 , 1 ) ? true : false );
70- YADOMS_LOG (trace) << " - DWO , Detection, Windows Open : " << (bitset_extract (data, 14 , 1 ) ? true : false );
71- YADOMS_LOG (trace) << " - ACO , Actuator obstructed : " << (bitset_extract (data, 15 , 1 ) ? true : false );
72- YADOMS_LOG (trace) << " - TMP , Temperature : " << bitset_extract (data, 16 , 8 ) << " => " <<
73- byteToCelciusDegrees (bitset_extract (data, 16 , 8 )) << " °C" ;
74- YADOMS_LOG (trace) << " - LRNB , Learn bit : " << (bitset_extract (data, 28 , 1 ) ? true : false ) << " => " <<
75- (bitset_extract (data, 28 , 1 )
76- ? " data telegram"
77- : " teach-in telegram" );
62+ const auto cv = bitset_extract (data, 0 , 8 );
63+ const auto so = bitset_extract (data, 8 , 1 ) ? true : false ;
64+ const auto enie = bitset_extract (data, 9 , 1 ) ? true : false ;
65+ const auto es = bitset_extract (data, 10 , 1 ) ? true : false ;
66+ const auto bcap = bitset_extract (data, 11 , 1 ) ? true : false ; // true = change battery in the next days
67+ const auto cco = bitset_extract (data, 12 , 1 ) ? true : false ;
68+ const auto fts = bitset_extract (data, 13 , 1 ) ? true : false ;
69+ const auto dwo = bitset_extract (data, 14 , 1 ) ? true : false ;
70+ const auto aco = bitset_extract (data, 15 , 1 ) ? true : false ;
71+ const auto tmp = bitset_extract (data, 16 , 8 );
72+ const auto lrnb = bitset_extract (data, 28 , 1 ) ? true : false ;
7873
79- m_energyInputEnable->set (bitset_extract (data, 9 , 1 ) ? true : false );
80- m_battery->set (bitset_extract (data, 10 , 1 ) || bitset_extract (data, 11 , 1 ) ? 100 : 10 );
81- m_coverOpen->set (bitset_extract (data, 12 , 1 ) ? true : false );
82- m_temperatureFailure->set (bitset_extract (data, 13 , 1 ) ? true : false );
83- m_windowOpen->set (bitset_extract (data, 14 , 1 ) ? true : false );
84- m_actuatorObstructed->set (bitset_extract (data, 15 , 1 ) ? true : false );
85- m_internalSensorTemperature->set (byteToCelciusDegrees (bitset_extract (data, 16 , 8 )));
74+ YADOMS_LOG (trace) << " Message received from " + m_deviceId + " (A5-20-01) :" ;
75+ YADOMS_LOG (trace) << " - CV , Current Value : " << cv;
76+ YADOMS_LOG (trace) << " - SO , Service On : " << so;
77+ YADOMS_LOG (trace) << " - ENIE , Energy Input Enable : " << enie;
78+ YADOMS_LOG (trace) << " - ES , Energy Storage : " << es;
79+ YADOMS_LOG (trace) << " - BCAP , Battery capacity : " << bcap;
80+ YADOMS_LOG (trace) << " - CCO , Contact Cover Open : " << cco;
81+ YADOMS_LOG (trace) << " - FTS , Fail Temperature Sensor (out of range) : " << fts;
82+ YADOMS_LOG (trace) << " - DWO , Detection, Windows Open : " << dwo;
83+ YADOMS_LOG (trace) << " - ACO , Actuator obstructed : " << aco;
84+ YADOMS_LOG (trace) << " - TMP , Temperature : " << tmp << " => " << byteToCelciusDegrees (tmp) << " °C" ;
85+ YADOMS_LOG (trace) << " - LRNB , Learn bit : " << lrnb << " => " << (lrnb ? " data telegram" : " teach-in telegram" );
86+
87+ m_energyInputEnable->set (enie);
88+ m_battery->set (es ? 100 : (bcap ? 10 : 50 ));
89+ m_coverOpen->set (cco);
90+ m_temperatureFailure->set (fts);
91+ m_windowOpen->set (dwo);
92+ m_actuatorObstructed->set (aco);
93+ m_internalSensorTemperature->set (byteToCelciusDegrees (tmp));
8694
8795 if (m_pendingCommand.empty ())
8896 {
@@ -153,10 +161,10 @@ void CProfile_A5_20_01::sendCommand(const std::string& keyword,
153161 m_pendingCommand.reset ();
154162
155163 bitset_insert (m_pendingCommand, 0 , 8 , m_setPointModeIsTemperature
156- ? (m_useInternalSensor ? 0 : celciusDegreesToByte (m_temperatureSetPoint->get () ))
164+ ? celciusDegreesToByte (m_temperatureSetPoint->get ())
157165 : m_valvePosition->get ());
158166 bitset_insert (m_pendingCommand, 21 , 1 , m_setPointModeIsTemperature);
159- bitset_insert (m_pendingCommand, 8 , 8 , 255 - celciusDegreesToByte (m_externalSensorTemperature->get ()));
167+ bitset_insert (m_pendingCommand, 8 , 8 , m_useInternalSensor ? 0 : ( 255 - celciusDegreesToByte (m_externalSensorTemperature->get () )));
160168 bitset_insert (m_pendingCommand, 23 , 1 , false );
161169 bitset_insert (m_pendingCommand, 16 , 1 , false );
162170 bitset_insert (m_pendingCommand, 17 , 1 , false );
@@ -182,5 +190,5 @@ double CProfile_A5_20_01::byteToCelciusDegrees(const unsigned int byte)
182190
183191std::uint8_t CProfile_A5_20_01::celciusDegreesToByte (const double degrees)
184192{
185- return static_cast <std::uint8_t >(std::round (m_temperatureSetPoint-> get () * 255.0 / 40.0 ));
193+ return static_cast <std::uint8_t >(std::round (degrees * 255.0 / 40.0 ));
186194}
0 commit comments