132 lines
3.1 KiB
C++
132 lines
3.1 KiB
C++
/*
|
|
* TODO:
|
|
* bestehende steuerung aus espcontroller übernehmen und testen
|
|
* topics und handler implementieren
|
|
*/
|
|
|
|
#include "Ethernet.h"
|
|
#include "PubSubClient.h"
|
|
|
|
String ip = "";
|
|
uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x06};
|
|
|
|
#define CLIENT_ID "Hal"
|
|
EthernetClient ethClient;
|
|
PubSubClient mqttClient;
|
|
|
|
#define PUBLISH_DELAY 10000
|
|
long last_send=0;
|
|
|
|
void setup() {
|
|
pinMode(LED_BUILTIN, OUTPUT);
|
|
digitalWrite(LED_BUILTIN,HIGH);
|
|
|
|
// setup serial communication
|
|
Serial.begin(9600);
|
|
while (!Serial) {};
|
|
Serial.println(F("MQTT Arduino Demo"));
|
|
|
|
// setup ethernet communication using DHCP
|
|
if (Ethernet.begin(mac) == 0) {
|
|
//Serial.println(F("Unable to configure Ethernet using DHCP"));
|
|
for (;;);
|
|
}
|
|
|
|
Serial.println(F("Ethernet configured via DHCP"));
|
|
Serial.print("IP address: ");
|
|
Serial.println(Ethernet.localIP());
|
|
Serial.println();
|
|
|
|
ip = String (Ethernet.localIP()[0]);
|
|
ip = ip + ".";
|
|
ip = ip + String (Ethernet.localIP()[1]);
|
|
ip = ip + ".";
|
|
ip = ip + String (Ethernet.localIP()[2]);
|
|
ip = ip + ".";
|
|
ip = ip + String (Ethernet.localIP()[3]);
|
|
//Serial.println(ip);
|
|
|
|
// setup mqtt client
|
|
mqttClient.setClient(ethClient);
|
|
mqttClient.setServer("10.0.0.1", 1883);
|
|
Serial.println(F("MQTT client configured"));
|
|
mqttClient.setCallback(callback);
|
|
|
|
|
|
Serial.println();
|
|
Serial.println(F("Ready to send data"));
|
|
last_send = millis();
|
|
|
|
|
|
|
|
}
|
|
|
|
void reconnect() {
|
|
// Loop until we're reconnected
|
|
while (!mqttClient.connected()) {
|
|
Serial.print("Attempting MQTT connection...");
|
|
// Attempt to connect
|
|
if (mqttClient.connect(CLIENT_ID)) {
|
|
Serial.println("connected");
|
|
mqttClient.publish("audiomixer/ip", ip.c_str()); //Publish own ip
|
|
mqttClient.subscribe("audiomixer/main/volume/set"); //subscribe to /set, republish without /set
|
|
} else {
|
|
Serial.print("failed, rc=");
|
|
Serial.print(mqttClient.state());
|
|
Serial.println(" try again in 5 seconds");
|
|
// Wait 5 seconds before retrying
|
|
delay(5000);
|
|
}
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
if (!mqttClient.connected()) {
|
|
reconnect();
|
|
}
|
|
|
|
if (millis() - last_send > PUBLISH_DELAY) {
|
|
//sendData();
|
|
last_send = millis();
|
|
}
|
|
|
|
mqttClient.loop();
|
|
}
|
|
|
|
void sendData() {
|
|
char msgBuffer[20];
|
|
float h = 50;
|
|
float testvalue = 42;
|
|
/*
|
|
Serial.print("testvalue: ");
|
|
Serial.print(testvalue);
|
|
Serial.println();
|
|
|
|
if (mqttClient.connect(CLIENT_ID)) {
|
|
mqttClient.publish("audiomixer/messwert/parameter", dtostrf(testvalue, 6, 2, msgBuffer));
|
|
//mqttClient.publish(DEVICENAME+"/br/nb/deur", (statusBD == HIGH) ? "OPEN" : "CLOSED");
|
|
}*/
|
|
}
|
|
|
|
void callback(char* topic, byte* payload, unsigned int length) {
|
|
Serial.print("Message arrived [");
|
|
Serial.print(topic);
|
|
Serial.print("] ");//MQTT_BROKER
|
|
for (int i = 0; i < length; i++) {
|
|
Serial.print((char)payload[i]);
|
|
}
|
|
Serial.println();
|
|
|
|
|
|
|
|
//if (strncmp((const char*)payload, "ON", 2) == 0) {
|
|
//}
|
|
|
|
if (strncmp((const char*)topic, "audiomixer/main/volume/set",sizeof(topic)) == 0) {
|
|
//Serial.println("republish");
|
|
mqttClient.publish("audiomixer/main/volume", payload, length );
|
|
}
|
|
|
|
|
|
}
|