int main()
{
	printf("Starting the demo\n");

	struct pico_mqtt* mqtt = pico_mqtt_create();

	if(pico_mqtt_set_client_id( mqtt, "12345"))
	{
		printf("An error occured while setting the client_id\n");
	}

	if(pico_mqtt_set_username( mqtt, "my_name"))
	{
		printf("An error occured while setting the username\n");
	}

	if(pico_mqtt_set_password( mqtt, "secret"))
	{
		printf("An error occured while setting the password\n");
	}

	if(pico_mqtt_connect(mqtt,"localhost", "1883", 10))
	{
		printf("An error occured during connecting\n");
	}

	sleep(5);

	pico_mqtt_destroy( mqtt );

	return 0;
}
/**
 * @brief: the start of the MQTT client program
 * @usage: To publish "garden/humidity" data: ./PROG_NAME [yourName] random
 *         To consume "garden/humidity" data: ./PROG_NAME [yourName] interactive
 */
int main( int argc, char* argv[] )
{
    struct pico_mqtt* mqtt = NULL;
    program_t activeProgram = program_invalid;
    char* sensor_name = argv[1];
    char client_id[128];

    /***************************************************************************
     * Parse program arguments
     **************************************************************************/
    if (argc != 3)
    {
        help(argv[0]);
        return -1;
    }

    if (strcmp(argv[2],"random") == 0)
    {
        activeProgram = program_simple_humidity_sensor;
    }
    else if (strcmp(argv[2], "interactive") == 0)
    {
        activeProgram = program_interactive_humidity_sensor;
    }
    else
    {
        help(argv[0]);
        return -1;
    }

    // Install signal handler on ^C
    if (signal(SIGINT, sig_handler) == SIG_ERR)
    {
        printf("\ncan't catch SIGINT\n");
    }

    /***************************************************************************
     * [MQTT] Connect this client to the MQTT server on the network
     **************************************************************************/
    printf("Starting the MQTT client\n");

    mqtt = pico_mqtt_create();

    strncpy(client_id, "sensor", 128);
    strncat(client_id, sensor_name, 128);
    if(pico_mqtt_set_client_id( mqtt, client_id))
    {
        printf("An error occurred while setting the client_id\n");
    }

    if(pico_mqtt_set_username( mqtt, USER))
    {
        printf("An error occurred while setting the username\n");
    }

    if(pico_mqtt_set_password( mqtt, PWD))
    {
        printf("An error occured while setting the password\n");
    }

    if(pico_mqtt_connect(mqtt, HOSTNAME, PORT, 10))
    {
        printf("An error occured during connecting\n");
    }

    printf("clientId: %s successfully connected to server %s:%s\n", client_id, HOSTNAME, PORT);


    /***************************************************************************
     * [MQTT] Start an MQTT program (while loop)
     **************************************************************************/
    switch(activeProgram)
    {
    case program_simple_humidity_sensor:
        printf("Starting the simple humidity sensor\n");
        //This will start an endless loop
        main_humidity_sensor( mqtt, sensor_name );
        break;
    case program_interactive_humidity_sensor:
        printf("Starting the interactive humidity sensor\n");
        // This will read humidity sensor data, print it and publish sprinkler data
        main_better_humidity_sensor( mqtt, sensor_name );
        break;
    default:
        // An error occurred
        break;
    }


    /***************************************************************************
     * [MQTT] Break connection and clear resources
     **************************************************************************/
    pico_mqtt_disconnect( mqtt );
    pico_mqtt_destroy( mqtt );

    return 0;
}