Difference between revisions of "Beaglebone Black/Mosquitto"

From Teknologisk videncenter
Jump to: navigation, search
(Created page with "=Install from git= • apt-get update # Better safe than sorry • apt-get install libssl-dev • apt-get install docbook docbook-xml docbook-xsl • apt-get install xsltproc...")
 
m
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
See also [[MQTT/Mosquitto]]
 +
 
=Install from git=
 
=Install from git=
apt-get update # Better safe than sorry
+
#apt-get update # Better safe than sorry
apt-get install libssl-dev
+
#apt-get install libssl-dev
apt-get install docbook docbook-xml docbook-xsl
+
#apt-get install docbook docbook-xml docbook-xsl
apt-get install xsltproc
+
#apt-get install xsltproc
• Apt-get install libsystemd-dev
+
#apt-get install libsystemd-dev
apt install libcjson1 libcjson-dev
+
#apt install libcjson1 libcjson-dev
git clone https://github.com/eclipse/mosquitto.git
+
#cd 
cd mosquitto
+
#git clone https://github.com/eclipse/mosquitto.git
 +
#cd mosquitto
 +
#vi config.mk – set WITH_SYSTEMD:=yes
 +
#make all (Der mangler sikkert en del dependicies - som skal installeres undervejs)
 +
#make install
 +
#adduser –system mosquitto # Bemærk det er ”-”-”system
 +
#ln /usr/local/lib/libmosquitto.so.1 /usr/lib/arm-linux-gnueabihf/
 +
#Da vi er på debian en systemd implementation ønsker vi at installere service under systemd
 +
##cp /home/debian/mosquitto/service/systemd/mosquitto.service.simple /etc/systemd/system/mosquitto.service
 +
##ln /usr/local/sbin/mosquitto /usr/sbin/
 +
##> /etc/mosquitto/mosquitto.conf  # Opret tom config fil (se eksempel fil)
 +
##systemctl enable mosquitto.service
 +
##service mosquitto start
 +
##service mosquitto status
 +
##Genstart og se den er startet automatisk ( service mosquitto restart )
 +
##Check grundlæggende installation
 +
##mosquitto –v # i en terminal (Brooker)
 +
##mosquitto_sub -v -h localhost –t "temperatur/sommerhus/stue" # i anden terminal (client/subscriber) brug evt -d for debug (Se alle feltet)
 +
##mosquitto_pub -h localhost -t "temperatur/sommerhus/stue" -m "24" # i tredje terminal (client/publisher)
 +
 
 +
 
 +
=Example=
 +
*MQTT Broker: 93.166.84.21
 +
<source lang=c>
 +
//Author: heth@mercantec.dk
 +
//Date..: 19. nov 2020
 +
//Ver...: 0.2 beta
 +
//
 +
//Modification:
 +
//  01/04/2022 - Simplified: Only one mosquitto instance 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
 +
#include <stdio.h>
 +
#include <mosquitto.h>
 +
#include <string.h>
 +
#include <stdlib.h>
 +
int number;
 +
 
 +
#define SUCCES 0
 +
void on_connect1(struct mosquitto *mosq, void *obj, int result)
 +
{
 +
    int rc = MOSQ_ERR_SUCCESS;
 +
 
 +
    if(result == SUCCES){
 +
        mosquitto_subscribe(mosq, NULL, "henrik/cputemp/fahrenheit", 0);  // NOTE: Change to published topic
 +
    }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/DIT_NAVN_HER_ELLER_WHATEVER/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, "127.0.0.1", 1883, 60);  // NOTE:  Replace localhost with IP address of broker
 +
 
 +
 
 +
    mosquitto_loop_forever(mosq1, -1, 1);
 +
 
 +
    mosquitto_destroy(mosq1);
 +
 
 +
    mosquitto_lib_cleanup();
 +
 
 +
    return 0;
 +
}
 +
</source>
 +
[[Category:Beagleboard Black]][[Category:MQTT]]

Latest revision as of 10:39, 27 October 2023

See also MQTT/Mosquitto

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 (Der mangler sikkert en del dependicies - som skal installeres undervejs)
  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 ønsker 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 ( service mosquitto restart )
    8. Check grundlæggende installation
    9. mosquitto –v # i en terminal (Brooker)
    10. mosquitto_sub -v -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: 93.166.84.21
//Author: heth@mercantec.dk
//Date..: 19. nov 2020
//Ver...: 0.2 beta
//
//Modification:
//   01/04/2022 - Simplified: Only one mosquitto instance 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
#include <stdio.h>
#include <mosquitto.h>
#include <string.h>
#include <stdlib.h>
int number;

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

    if(result == SUCCES){
        mosquitto_subscribe(mosq, NULL, "henrik/cputemp/fahrenheit", 0);  // NOTE: Change to published topic
    }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/DIT_NAVN_HER_ELLER_WHATEVER/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, "127.0.0.1", 1883, 60);  // NOTE:  Replace localhost with IP address of broker


    mosquitto_loop_forever(mosq1, -1, 1);

    mosquitto_destroy(mosq1);

    mosquitto_lib_cleanup();

    return 0;
}