Difference between revisions of "Beaglebone Black/Mosquitto"

From Teknologisk videncenter
Jump to: navigation, search
m
m
Line 6: Line 6:
 
#apt-get install libsystemd-dev
 
#apt-get install libsystemd-dev
 
#apt install libcjson1 libcjson-dev
 
#apt install libcjson1 libcjson-dev
 +
#cd 
 
#git clone https://github.com/eclipse/mosquitto.git
 
#git clone https://github.com/eclipse/mosquitto.git
 
#cd mosquitto
 
#cd mosquitto
Line 14: Line 15:
 
#ln /usr/local/lib/libmosquitto.so.1 /usr/lib/arm-linux-gnueabihf/
 
#ln /usr/local/lib/libmosquitto.so.1 /usr/lib/arm-linux-gnueabihf/
 
#Da vi er på debian en systemd implementation øsnker vi at installere service under systemd
 
#Da vi er på debian en systemd implementation øsnker vi at installere service under systemd
##(DONE)Apt-get install libsystemd-dev
 
##(DONE)vi config.mk – set WITH_SYSTEMD:=yes
 
 
##cp /home/debian/mosquitto/service/systemd/mosquitto.service.simple /etc/systemd/system/mosquitto.service
 
##cp /home/debian/mosquitto/service/systemd/mosquitto.service.simple /etc/systemd/system/mosquitto.service
 
##ln /usr/local/sbin/mosquitto /usr/sbin/
 
##ln /usr/local/sbin/mosquitto /usr/sbin/
Line 32: Line 31:
 
*MQTT Broker: 188.177.229.190
 
*MQTT Broker: 188.177.229.190
 
<source lang=c>
 
<source lang=c>
#include <stdio.h>
 
#include <string.h>
 
#include <stdlib.h>
 
#include <mosquitto.h>
 
 
 
//Author: heth@mercantec.dk
 
//Author: heth@mercantec.dk
 
//Date..: 19. nov 2020
 
//Date..: 19. nov 2020
//Ver...: 0.1 beta
+
//Ver...: 0.2 beta
 
//
 
//
 +
//Modification:
 +
//  01/04/2022 - Simplified: Only one mosquitto struct used in main()
 
//
 
//
 
//INFORMATION
 
//INFORMATION
Line 55: Line 51:
  
 
     if(!result){
 
     if(!result){
         mosquitto_subscribe(mosq, NULL, "#", 0);
+
         mosquitto_subscribe(mosq, NULL, "henrik/cputemp/fahrenheit", 0);
 
     }else{
 
     }else{
 
         fprintf(stderr, "%s\n", mosquitto_connack_string(result));
 
         fprintf(stderr, "%s\n", mosquitto_connack_string(result));
Line 85: Line 81:
 
         number++;
 
         number++;
  
         //mosquitto_publish(mosq, NULL, "user/henrik/english", strlen(txtpoi2), txtpoi2,  message->qos, message->retain);
+
         mosquitto_publish(mosq, NULL, "user/henrik/english", strlen(txtpoi2), txtpoi2,  message->qos, message->retain);
 
         free(txtpoi2);
 
         free(txtpoi2);
 
         free(txtpoi);
 
         free(txtpoi);
Line 92: Line 88:
 
int main(int argc, char *argv[])
 
int main(int argc, char *argv[])
 
{
 
{
     struct mosquitto *mosq1, *mosq2;
+
     struct mosquitto *mosq1;
 
     int version[3];
 
     int version[3];
 
     number = 1; // Init mesage number
 
     number = 1; // Init mesage number
Line 100: Line 96:
 
     printf("Mosquitto library version. %i.%i.%i\n", version[0], version[1], version[2]);
 
     printf("Mosquitto library version. %i.%i.%i\n", version[0], version[1], version[2]);
  
     mosq2 = mosquitto_new(NULL, true, NULL);
+
     mosq1 = mosquitto_new(NULL, true, NULL);
    mosq1 = mosquitto_new(NULL, true, mosq2);
 
  
 
     mosquitto_connect_callback_set(mosq1, on_connect1);
 
     mosquitto_connect_callback_set(mosq1, on_connect1);
 
     mosquitto_message_callback_set(mosq1, on_message1);
 
     mosquitto_message_callback_set(mosq1, on_message1);
  
    mosquitto_connect(mosq2, "localhost", 1883, 60);  // Replace localhost with IP address of broker
+
     mosquitto_connect(mosq1, "188.177.229.190", 1883, 60);  // Replace localhost with IP address of broker
     mosquitto_connect(mosq1, "localhost", 1883, 60);  // Replace localhost with IP address of broker
 
  
    mosquitto_loop_start(mosq2);
 
  
 
     mosquitto_loop_forever(mosq1, -1, 1);
 
     mosquitto_loop_forever(mosq1, -1, 1);
  
 
     mosquitto_destroy(mosq1);
 
     mosquitto_destroy(mosq1);
    mosquitto_destroy(mosq2);
 
  
 
     mosquitto_lib_cleanup();
 
     mosquitto_lib_cleanup();
Line 120: Line 112:
 
     return 0;
 
     return 0;
 
}
 
}
 +
 
</source>
 
</source>

Revision as of 17:43, 1 April 2022

Install from git

  1. apt-get update # Better safe than sorry
  2. apt-get install libssl-dev
  3. apt-get install docbook docbook-xml docbook-xsl
  4. apt-get install xsltproc
  5. apt-get install libsystemd-dev
  6. apt install libcjson1 libcjson-dev
  7. cd
  8. git clone https://github.com/eclipse/mosquitto.git
  9. cd mosquitto
  10. vi config.mk – set WITH_SYSTEMD:=yes
  11. make all
  12. make install
  13. adduser –system mosquitto # Bemærk det er ”-”-”system
  14. ln /usr/local/lib/libmosquitto.so.1 /usr/lib/arm-linux-gnueabihf/
  15. Da vi er på debian en systemd implementation øsnker vi at installere service under systemd
    1. cp /home/debian/mosquitto/service/systemd/mosquitto.service.simple /etc/systemd/system/mosquitto.service
    2. ln /usr/local/sbin/mosquitto /usr/sbin/
    3. > /etc/mosquitto/mosquitto.conf # Opret tom config fil (se eksempel fil)
    4. systemctl enable mosquitto.service
    5. service mosquitto start
    6. service mosquitto status
    7. Genstart og se den er startet automatisk
    8. Check grundlæggende installation
    9. mosquitto –v # i en terminal (Brooker)
    10. mosquitto_sub -h localhost –t "temperatur/sommerhus/stue" # i anden terminal (client/subscriber) brug evt -d for debug (Se alle feltet)
    11. mosquitto_pub -h localhost -t "temperatur/sommerhus/stue" -m "24" # i tredje terminal (client/publisher)


Example

  • MQTT Broker: 188.177.229.190
//Author: heth@mercantec.dk
//Date..: 19. nov 2020
//Ver...: 0.2 beta
//
//Modification:
//   01/04/2022 - Simplified: Only one mosquitto struct used in main()
//
//INFORMATION
//Mosquitto docementation:
//   - https://mosquitto.org/documentation/
//   - https://github.com/eclipse/mosquitto (Se under exanples)
//Compile with : gcc mqtt_ex1.c -lmosquitto -o mqtt_ex1

int number;

void on_connect1(struct mosquitto *mosq, void *obj, int result)
{
    int rc = MOSQ_ERR_SUCCESS;

    if(!result){
        mosquitto_subscribe(mosq, NULL, "henrik/cputemp/fahrenheit", 0);
    }else{
        fprintf(stderr, "%s\n", mosquitto_connack_string(result));
    }
}

void on_message1(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message)
{
    struct mosquitto *mosq2 = (struct mosquitto *)obj;
        char *txtpoi, *txtpoi2;
        printf("struct mosquitto_message contains:\n");
        printf("  mid (int).............: %i\n", message->mid );
        printf("  topic (* char)........: %s\n", message->topic );
        printf("  payload (* void)......: %p", message->payload );
        txtpoi = malloc(message->payloadlen + 1);
        if ( txtpoi == 0 ) {
                fprintf( stderr, "Malloc error\n");
        } else {
                strncpy(txtpoi, message->payload, message->payloadlen);
                txtpoi[message->payloadlen] = 0;
                printf("  Message: [%s]\n", txtpoi);
        }
        printf("  payloadlen (int)......: %i\n", message->payloadlen );
        printf("  qos (int).............: %i\n", message->qos );
        printf("  retain (int)..........: %i\n", message->retain );

        txtpoi2 = malloc( message->payloadlen + 20);
        sprintf(txtpoi2, "#%i:%s", number, txtpoi);
        number++;

        mosquitto_publish(mosq, NULL, "user/henrik/english", strlen(txtpoi2), txtpoi2,  message->qos, message->retain);
        free(txtpoi2);
        free(txtpoi);
}

int main(int argc, char *argv[])
{
    struct mosquitto *mosq1;
    int version[3];
    number = 1; // Init mesage number

    mosquitto_lib_init();
    mosquitto_lib_version(&version[0],&version[1],&version[2]);
    printf("Mosquitto library version. %i.%i.%i\n", version[0], version[1], version[2]);

    mosq1 = mosquitto_new(NULL, true, NULL);

    mosquitto_connect_callback_set(mosq1, on_connect1);
    mosquitto_message_callback_set(mosq1, on_message1);

    mosquitto_connect(mosq1, "188.177.229.190", 1883, 60);  // Replace localhost with IP address of broker


    mosquitto_loop_forever(mosq1, -1, 1);

    mosquitto_destroy(mosq1);

    mosquitto_lib_cleanup();

    return 0;
}