@ -24,10 +24,10 @@
# define TAG "MAIN"
# define TAG "MAIN"
# define SNTP_RETRIES 8
# define SNTP_RETRIES 8
# define API_QOS 2
# define HB_QOS 1
static const char * DEVICE_NAME_PREFIX = " mqtrigger- " ;
static const char * DEVICE_NAME_PREFIX = " mqt- " ;
extern const char ca_crt_start [ ] asm ( " _binary_ca_crt_start " ) ;
static void startWifi ( void ) ;
static void startWifi ( void ) ;
static void onWifiConnected ( void ) ;
static void onWifiConnected ( void ) ;
@ -38,6 +38,8 @@ static void onMqttDisconnected();
static void onMqttError ( ) ;
static void onMqttError ( ) ;
static void onMqttMessage ( const char * msg ) ;
static void onMqttMessage ( const char * msg ) ;
static void hbTask ( void * ) ;
static SystemSettings * systemSettings = NULL ;
static SystemSettings * systemSettings = NULL ;
static AppSettings * appSettings = NULL ;
static AppSettings * appSettings = NULL ;
static WifiSettings wifiSettings ;
static WifiSettings wifiSettings ;
@ -53,7 +55,7 @@ static const MqTriggerHttpCallbacks httpCallbacks = {
. postSysSet = nxApiUpdateSystemSettings ,
. postSysSet = nxApiUpdateSystemSettings ,
. getAppSet = nxApiGetAppSettings ,
. getAppSet = nxApiGetAppSettings ,
. postAppSet = nxApiUpdateAppSettings
. postAppSet = nxApiUpdateAppSettings
// .postCmd = nxApiHandleLed Cmd
// .postCmd = nxApiHandleCmd
} ;
} ;
void app_main ( void )
void app_main ( void )
@ -81,8 +83,6 @@ void app_main(void)
static void startWifi ( void )
static void startWifi ( void )
{
{
strcpy ( systemSettings - > wifiSsid , " cintra " ) ;
strcpy ( systemSettings - > wifiPassword , " fffefdfcfb " ) ;
systemSettings - > useStaticAddr = true ;
systemSettings - > useStaticAddr = true ;
systemSettings - > ip4addr [ 3 ] = 91 ;
systemSettings - > ip4addr [ 3 ] = 91 ;
@ -106,15 +106,22 @@ static void startWifi(void)
static void onWifiConnected ( void )
static void onWifiConnected ( void )
{
{
systemSettings - > deviceName = nxGetWifiDeviceName ( ) ;
nxInitSntpClient ( SNTP_RETRIES , systemSettings - > sntpAddr , systemSettings - > tzEnv ) ;
nxInitSntpClient ( SNTP_RETRIES , systemSettings - > sntpAddr , systemSettings - > tzEnv ) ;
strcpy ( mqttSettings . brokerAddr , appSettings - > mqttHost ) ;
strcpy ( mqttSettings . brokerAddr , appSettings - > mqttHost ) ;
strcpy ( mqttSettings . apiTopic , appSettings - > mqttApiUri ) ;
strcpy ( mqttSettings . apiTopic , appSettings - > mqttApiUri ) ;
strcpy ( mqttSettings . hbTopic , appSettings - > mqttHbUri ) ;
strcpy ( mqttSettings . hbTopic , appSettings - > mqttHbUri ) ;
strcpy ( mqttSettings . user , appSettings - > mqttUser ) ;
strcpy ( mqttSettings . user , appSettings - > mqttUser ) ;
strcpy ( mqttSettings . password , appSettings - > mqttPassword ) ;
strcpy ( mqttSettings . password , appSettings - > mqttPassword ) ;
strcpy ( mqttSettings . clientId , appSettings - > overrideDevName
? appSettings - > customDevName
: systemSettings - > deviceName ) ;
mqttSettings . hbIntervalSec = appSettings - > mqttHbIntervalSec ;
mqttSettings . hbIntervalSec = appSettings - > mqttHbIntervalSec ;
mqttSettings . caCrt = appSettings - > mqttUseTls ? ca_crt_start : NULL ;
mqttSettings . caCrt = appSettings - > mqttUseTls ? appSettings - > caCe rt : NULL ;
mqttSettings . messageCb = onMqttMessage ;
mqttSettings . messageCb = onMqttMessage ;
mqttSettings . connectedCb = onMqttConnected ;
mqttSettings . connectedCb = onMqttConnected ;
mqttSettings . disconnectedCb = onMqttDisconnected ;
mqttSettings . disconnectedCb = onMqttDisconnected ;
@ -147,8 +154,11 @@ static void onWifiError()
static void onMqttConnected ( )
static void onMqttConnected ( )
{
{
ESP_LOGI ( TAG , " MQTT CONNECTED " ) ;
ESP_LOGI ( TAG , " MQTT CONNECTED " ) ;
if ( nxMqttSubscribe ( appSettings - > mqttApiUri , API_QOS ) ) {
xTaskCreate ( & hbTask , " hb_task " , 2048 , NULL , 1 , NULL ) ;
nxUpdateStatus ( STATUS_OK ) ;
nxUpdateStatus ( STATUS_OK ) ;
}
}
}
static void onMqttDisconnected ( )
static void onMqttDisconnected ( )
{
{
@ -161,3 +171,32 @@ static void onMqttError()
ESP_LOGE ( TAG , " MQTT ERROR " ) ;
ESP_LOGE ( TAG , " MQTT ERROR " ) ;
nxUpdateStatus ( STATUS_APP_ERROR ) ;
nxUpdateStatus ( STATUS_APP_ERROR ) ;
}
}
static void hbTask ( void * param )
{
// UNUSED(param);
ESP_LOGI ( TAG , " Starting MQTT heartbeat task " ) ;
ESP_LOGI ( TAG , " hbIntervalSec: %d " , appSettings - > mqttHbIntervalSec ) ;
if ( appSettings - > mqttHbIntervalSec < 1 ) {
ESP_LOGI ( TAG , " Heartbeat interval < 1 sec, skipping " ) ;
vTaskDelete ( NULL ) ;
return ;
}
while ( 1 ) {
ESP_LOGI ( TAG , " Sending MQTT heartbeat " ) ;
char timeStr [ DT_FORMAT_LEN ] ;
nxGetTimeStr ( timeStr ) ;
char hbMessage [ DT_FORMAT_LEN + strlen ( nxGetWifiDeviceName ( ) ) + 2 ] ;
strcpy ( hbMessage , nxGetWifiDeviceName ( ) ) ;
strcat ( hbMessage , " " ) ;
strcat ( hbMessage , timeStr ) ;
nxMqttPublish ( appSettings - > mqttHbUri , HB_QOS , hbMessage , strlen ( hbMessage ) , 1 ) ;
vTaskDelay ( appSettings - > mqttHbIntervalSec * 1000 / portTICK_PERIOD_MS ) ;
}
}