Dependencies:   mbed-mqtt-GSOE1

Dependents:   mqtt_Autofaehrschiff MQTT_Nucleo_dht11 mqtt_Testprogramm_FritzBox mqtt_TestprogrammWorkshop ... more

Committer:
jack1930
Date:
Tue Aug 17 16:40:44 2021 +0000
Revision:
4:1c121432898d
Parent:
3:d8582413a5a1
publish mit qos und retain

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jack1930 0:a655fd59ed71 1 #include "PubSubClient.h"
jack1930 0:a655fd59ed71 2
jack1930 2:08ce999855c3 3
jack1930 0:a655fd59ed71 4 void PubSubClient::init()
jack1930 0:a655fd59ed71 5 {
jack1930 1:9fe5f14ea493 6 DigitalOut ch_pd(MBED_CONF_APP_ESP_CH_PD_PIN);
jack1930 1:9fe5f14ea493 7 DigitalOut rst(MBED_CONF_APP_ESP_RST_PIN);
jack1930 1:9fe5f14ea493 8 ch_pd=1;
jack1930 1:9fe5f14ea493 9 rst=0;
jack1930 1:9fe5f14ea493 10 HAL_Delay(100);
jack1930 1:9fe5f14ea493 11 rst=1;
jack1930 0:a655fd59ed71 12 static TCPSocket socket1;
jack1930 0:a655fd59ed71 13 socket=&socket1;
jack1930 2:08ce999855c3 14 Timer tim;
jack1930 1:9fe5f14ea493 15
jack1930 0:a655fd59ed71 16 static ESP8266Interface esp1(MBED_CONF_APP_ESP_TX_PIN, MBED_CONF_APP_ESP_RX_PIN);
jack1930 0:a655fd59ed71 17 esp=&esp1;
jack1930 0:a655fd59ed71 18 int ret = esp->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
jack1930 2:08ce999855c3 19 static MQTTClient client1(&socket1);
jack1930 2:08ce999855c3 20 client=&client1;
jack1930 0:a655fd59ed71 21 if(ret != 0)
jack1930 0:a655fd59ed71 22 {
jack1930 0:a655fd59ed71 23 printf("\nConnection error\n");
jack1930 0:a655fd59ed71 24 }
jack1930 0:a655fd59ed71 25 else
jack1930 0:a655fd59ed71 26 {
jack1930 0:a655fd59ed71 27 printf("\nConnection success\n");
jack1930 0:a655fd59ed71 28 }
jack1930 0:a655fd59ed71 29 esp->get_ip_address(&deviceIP);
jack1930 0:a655fd59ed71 30 printf("IP via DHCP: %s\n", deviceIP.get_ip_address());
jack1930 1:9fe5f14ea493 31 if (MBED_CONF_APP_HOSTNAME==true)
jack1930 1:9fe5f14ea493 32 // Use with DNS
jack1930 1:9fe5f14ea493 33 {
jack1930 1:9fe5f14ea493 34 esp->gethostbyname(MBED_CONF_APP_MQTT_BROKER_HOSTNAME, &MQTTBroker);
jack1930 1:9fe5f14ea493 35 printf("\nMQTTBroker %s\n",MQTTBroker.get_ip_address());
jack1930 1:9fe5f14ea493 36 MQTTBroker.set_port(MBED_CONF_APP_MQTT_BROKER_PORT);
jack1930 1:9fe5f14ea493 37 }
jack1930 1:9fe5f14ea493 38 else
jack1930 0:a655fd59ed71 39 // Use with IP
jack1930 2:08ce999855c3 40 //SocketAddress MQTTBroker(MBED_CONF_APP_MQTT_BROKER_IP, MBED_CONF_APP_MQTT_BROKER_PORT);
jack1930 2:08ce999855c3 41 {
jack1930 2:08ce999855c3 42 MQTTBroker.set_port(MBED_CONF_APP_MQTT_BROKER_PORT);
jack1930 2:08ce999855c3 43 MQTTBroker.set_ip_address(MBED_CONF_APP_MQTT_BROKER_IP);
jack1930 2:08ce999855c3 44 if (MQTTBroker.get_ip_version()== nsapi_version::NSAPI_IPv4) printf("IP-Version IPV4");
jack1930 2:08ce999855c3 45 }
jack1930 0:a655fd59ed71 46 msg.qos = MQTT::QOS0;
jack1930 0:a655fd59ed71 47 msg.retained = false;
jack1930 0:a655fd59ed71 48 msg.dup = false;
jack1930 0:a655fd59ed71 49
jack1930 0:a655fd59ed71 50 printf("\n socket open: %d\n",socket->open(esp));
jack1930 0:a655fd59ed71 51 printf("\n socket connect: %d\n",socket->connect(MQTTBroker));
jack1930 0:a655fd59ed71 52 }
jack1930 0:a655fd59ed71 53
jack1930 0:a655fd59ed71 54 PubSubClient::PubSubClient()
jack1930 0:a655fd59ed71 55 {
jack1930 0:a655fd59ed71 56 init();
jack1930 0:a655fd59ed71 57 }
jack1930 0:a655fd59ed71 58
jack1930 0:a655fd59ed71 59 bool PubSubClient::connect(char* clientName)
jack1930 0:a655fd59ed71 60 {
jack1930 0:a655fd59ed71 61 int ret=0;
jack1930 3:d8582413a5a1 62 data = MQTTPacket_connectData_initializer;
jack1930 0:a655fd59ed71 63
jack1930 2:08ce999855c3 64 data.MQTTVersion = 4;
jack1930 0:a655fd59ed71 65 char *id = clientName;//MBED_CONF_APP_MQTT_ID;
jack1930 0:a655fd59ed71 66
jack1930 0:a655fd59ed71 67 data.clientID.cstring=id;
jack1930 0:a655fd59ed71 68
jack1930 0:a655fd59ed71 69 printf("\n ID=%s\n",clientName);
jack1930 0:a655fd59ed71 70
jack1930 0:a655fd59ed71 71 ret=client->connect(data);
jack1930 0:a655fd59ed71 72 printf("\n client connect: %d\n",ret);
jack1930 0:a655fd59ed71 73
jack1930 0:a655fd59ed71 74 return ret==0;
jack1930 0:a655fd59ed71 75 }
jack1930 0:a655fd59ed71 76
jack1930 0:a655fd59ed71 77 int PubSubClient::publish(const char* topic, const char* buf)
jack1930 0:a655fd59ed71 78 {
jack1930 0:a655fd59ed71 79 msg.payload = (void*)buf;
jack1930 4:1c121432898d 80 msg.qos=QOS0;
jack1930 4:1c121432898d 81 msg.retained=false;
jack1930 0:a655fd59ed71 82 msg.payloadlen = strlen(buf);
jack1930 0:a655fd59ed71 83 int ret=client->publish(topic, msg);
jack1930 0:a655fd59ed71 84 return ret;
jack1930 2:08ce999855c3 85 }
jack1930 2:08ce999855c3 86
jack1930 4:1c121432898d 87 int PubSubClient::publish(const char* topic, const char* buf, MQTT::QoS qos)
jack1930 4:1c121432898d 88 {
jack1930 4:1c121432898d 89 msg.payload = (void*)buf;
jack1930 4:1c121432898d 90 msg.qos=qos;
jack1930 4:1c121432898d 91 msg.retained=false;
jack1930 4:1c121432898d 92 msg.payloadlen = strlen(buf);
jack1930 4:1c121432898d 93 int ret=client->publish(topic, msg);
jack1930 4:1c121432898d 94 return ret;
jack1930 4:1c121432898d 95 }
jack1930 4:1c121432898d 96
jack1930 4:1c121432898d 97 int PubSubClient::publish(const char* topic, const char* buf, MQTT::QoS qos, bool retain)
jack1930 4:1c121432898d 98 {
jack1930 4:1c121432898d 99 msg.payload = (void*)buf;
jack1930 4:1c121432898d 100 msg.qos=qos;
jack1930 4:1c121432898d 101 msg.retained=retain;
jack1930 4:1c121432898d 102 msg.payloadlen = strlen(buf);
jack1930 4:1c121432898d 103 int ret=client->publish(topic, msg);
jack1930 4:1c121432898d 104 return ret;
jack1930 4:1c121432898d 105 }
jack1930 2:08ce999855c3 106
jack1930 2:08ce999855c3 107 int PubSubClient::subscribe(const char* topicFilter, MQTT::QoS qos, MQTTClient::messageHandler mh)
jack1930 2:08ce999855c3 108 {
jack1930 2:08ce999855c3 109 int ret=client->subscribe(topicFilter, qos, mh);
jack1930 2:08ce999855c3 110 return ret;
jack1930 2:08ce999855c3 111 }
jack1930 2:08ce999855c3 112
jack1930 3:d8582413a5a1 113 int PubSubClient::yield(unsigned long timeout_ms)
jack1930 2:08ce999855c3 114 {
jack1930 3:d8582413a5a1 115
jack1930 3:d8582413a5a1 116 return client->yield(timeout_ms);
jack1930 3:d8582413a5a1 117
jack1930 2:08ce999855c3 118 }
jack1930 2:08ce999855c3 119
jack1930 3:d8582413a5a1 120 int PubSubClient::loop(unsigned long timeout_ms)
jack1930 2:08ce999855c3 121 {
jack1930 2:08ce999855c3 122
jack1930 3:d8582413a5a1 123 return client->yield(timeout_ms);
jack1930 3:d8582413a5a1 124
jack1930 2:08ce999855c3 125 }
jack1930 2:08ce999855c3 126
jack1930 3:d8582413a5a1 127 string PubSubClient::gibPayload(MessageData& mymessage)
jack1930 3:d8582413a5a1 128 {
jack1930 3:d8582413a5a1 129 string ret;
jack1930 2:08ce999855c3 130
jack1930 3:d8582413a5a1 131 for (int i=0;i<(int)(mymessage.message.payloadlen);i++)
jack1930 2:08ce999855c3 132 {
jack1930 3:d8582413a5a1 133 ret[i]=((char*)(mymessage.message.payload))[i];
jack1930 2:08ce999855c3 134 }
jack1930 3:d8582413a5a1 135 return ret;
jack1930 3:d8582413a5a1 136 }