You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

98 lines
2.5 KiB

#include "MyMQTT.h"
#include <AsyncMqttClient.h>
#include "hardware.h"
#include "shelf.h"
using namespace std;
extern Shelf* shelf;
MyMQTT::MyMQTT(void)
: host {mqtt_server},
port {mqtt_port},
username {mqtt_username},
password {mqtt_password}
{}
extern "C" {
static void onMqttMessageWrapper(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
// static_cast<MyMQTT*>(parm)->onMqttMessage(NULL);
Serial.println("test");
mqtt_ptr->onMqttMessage(topic, payload, properties, len, index, total);
}
static void onMqttSubscribe(uint16_t packetId, uint8_t qos) {
Serial.println("subscribe ack");
}
}
void MyMQTT::onMqttConnectWrapper(bool sessionPresent) {
// static_cast<MyMQTT*>(parm)->onMqttConnect(NULL);
mqtt_ptr->onMqttConnect(sessionPresent);
}
void MyMQTT::onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
Serial.print("incoming: ");
Serial.println(topic);
Serial.println(payload);
if (String(payload).equals("{'num':'0'}")) {
shelf->dispense(0);
} else if (String(payload).equals("{'num':'1'}")) {
shelf->dispense(1);
} else if (String(payload).equals("{'num':'2'}")) {
shelf->dispense(2);
} else if (String(payload).equals("{'num':'3'}")) {
shelf->dispense(3);
} else if (String(payload).equals("{'num':'4'}")) {
shelf->dispense(4);
} else if (String(payload).equals("{'num':'5'}")) {
shelf->dispense(5);
} else if (String(payload).equals("{'num':'6'}")) {
shelf->dispense(6);
}
}
void MyMQTT::onMqttConnect(bool sessionPresent) {
Serial.println("CONNECTED! callback works");
subscribe();
}
void MyMQTT::connect(void) {
mqtt_ptr = this;
Serial.print("MQTT connecting");
mqttClient.onConnect(&onMqttConnectWrapper);
mqttClient.onSubscribe(&onMqttSubscribe);
mqttClient.onMessage(&onMqttMessageWrapper);
mqttClient.setServer(host, port);
mqttClient.setCredentials(username, password);
//#if ASYNC_TCP_SSL_ENABLED
// mqttClient.setSecure(true);
//#endif
mqttClient.connect();
while(!mqttClient.connected()) {
Serial.print(".");
delay(500);
}
Serial.println("MQTT connected");
}
void MyMQTT::subscribe(void) {
uint16_t dispenseIdSub = mqttClient.subscribe("sensor/vendingmachine/dispense", 0);
mqttClient.publish("sensor/vendingmachine/alive", 0, true, "test");
}
void MyMQTT::publish(char* topic, char* payload) {
}
void MyMQTT::publish(char* topic, String payload) {
}