2022-02-23 18:40:31 +00:00
# include <logger.h>
# include "Task.h"
# include "TaskMQTT.h"
# include "project_configuration.h"
# include <ArduinoJson.h>
2022-02-24 15:02:02 +00:00
MQTTTask : : MQTTTask ( TaskQueue < std : : shared_ptr < APRSMessage > > & toMQTT ) : Task ( TASK_MQTT , TaskMQTT ) , _toMQTT ( toMQTT ) , _MQTT ( _client ) {
2022-02-23 18:40:31 +00:00
}
MQTTTask : : ~ MQTTTask ( ) {
}
2022-02-24 15:02:02 +00:00
bool MQTTTask : : setup ( System & system ) {
2022-02-23 18:40:31 +00:00
_MQTT . setServer ( system . getUserConfig ( ) - > mqtt . server . c_str ( ) , system . getUserConfig ( ) - > mqtt . port ) ;
return true ;
}
bool MQTTTask : : loop ( System & system ) {
if ( ! system . isWifiEthConnected ( ) ) {
return false ;
}
2022-02-24 15:02:02 +00:00
2022-02-23 18:40:31 +00:00
if ( ! _MQTT . connected ( ) ) {
connect ( system ) ;
}
if ( ! _toMQTT . empty ( ) ) {
std : : shared_ptr < APRSMessage > msg = _toMQTT . getElement ( ) ;
2022-02-24 15:02:02 +00:00
DynamicJsonDocument data ( 1024 ) ;
2022-02-24 15:52:52 +00:00
data [ " source " ] = msg - > getSource ( ) ;
data [ " destination " ] = msg - > getDestination ( ) ;
data [ " path " ] = msg - > getPath ( ) ;
data [ " type " ] = msg - > getType ( ) . toString ( ) ;
2022-02-24 15:02:02 +00:00
String body = msg - > getBody ( ) - > encode ( ) ;
body . replace ( " \n " , " " ) ;
2022-02-24 15:52:52 +00:00
data [ " data " ] = body ;
2022-02-24 15:02:02 +00:00
String r ;
serializeJson ( data , r ) ;
String topic = String ( system . getUserConfig ( ) - > mqtt . topic ) ;
if ( ! topic . endsWith ( " / " ) ) {
topic = topic + " / " ;
2022-02-23 18:40:31 +00:00
}
2022-02-24 15:02:02 +00:00
topic = topic + system . getUserConfig ( ) - > callsign ;
2022-03-20 09:56:06 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_DEBUG , getName ( ) , " Send MQTT with topic: '%s', data: %s " , topic . c_str ( ) , r . c_str ( ) ) ;
2022-02-24 15:02:02 +00:00
_MQTT . publish ( topic . c_str ( ) , r . c_str ( ) ) ;
2022-02-23 18:40:31 +00:00
}
_MQTT . loop ( ) ;
return true ;
}
2022-03-19 21:18:07 +00:00
bool MQTTTask : : connect ( System & system ) {
2022-03-20 09:56:06 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_INFO , getName ( ) , " Connecting to MQTT broker: %s on port %d " , system . getUserConfig ( ) - > mqtt . server . c_str ( ) , system . getUserConfig ( ) - > mqtt . port ) ;
2022-02-24 15:02:02 +00:00
if ( _MQTT . connect ( system . getUserConfig ( ) - > callsign . c_str ( ) , system . getUserConfig ( ) - > mqtt . name . c_str ( ) , system . getUserConfig ( ) - > mqtt . password . c_str ( ) ) ) {
2022-03-20 09:56:06 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_INFO , getName ( ) , " Connected to MQTT broker as: %s " , system . getUserConfig ( ) - > callsign . c_str ( ) ) ;
2022-02-23 18:40:31 +00:00
return true ;
2022-02-24 15:02:02 +00:00
}
2022-03-19 21:18:07 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_INFO , getName ( ) , " Connecting to MQTT broker failed. Try again later. " ) ;
2022-02-23 18:40:31 +00:00
return false ;
}