Wenn du absolut keine Ahnung von den Programmiersprachen C bzw. C++ hast, ist es etwas gewagt, ein solches Programm für deine Zwecke anzupassen.
Prinzipiell sind deine notierten Zeilen geeignet, die du einzufügen hast, aber
- In Zeile 5 ist im Topic (Der Text zwischen den Anführungszeichen) ein Verdreher - Realis -> Ralais. So kann es nicht funktionieren. Bitte korrigieren!
- Die Zeilen 5 bis 8 müssen innerhalb MQTTCallback stehen, was sie vermutlich auch tun.
- Zeile 12 muss innerhalb reconnect stehen, ...
"Innerhalb" bedeutet: an passenden Stellen zwischen der ersten geschweiften Klammer auf nach dem Funktionsnamen (hier MQTTCallback und reconnect) und der schließenden geschweiften Klammer am Ende der jeweiligen Funktion.
Ich kenne die Klasse Servo nicht. ServoObject1 bis ServoObject3 sind jedenfalls 3 verschiedene Objekte dieser Klasse. Diese Klasse verfügt über mindestens zwei Methoden, attach und write.
- attach ordnet dem jeweiligen Servo Objekt einen Ausgang des µC (Mikrocontroller) zu.
- write dürfte einen Wert seriell über den zugeordneten Ausgang an die Servo Elektronik ausgeben. Dieser Wert ist hier eine Ganzzahl (Typ int) und stellt offensichtlich den Zielwinkel dar.
Zum schalten eines Relais ist ein solches Objekt nicht vorgesehen und vermutlich auch nicht geeignet. Welche "Anweisungen" zur Verfügung stehen, findest du unter https://www.arduino.cc/reference/en. Für deine Zwecke sind pinMode() und digitalWrite() zweckmäßig/erforderlich. Hierfür suchst du dir einen noch freien Ausgang deines µC Boards aus, analysierst das zu schaltende Relais und schließt es passend an den ausgesuchten Ausgang an. Dazu braucht man zwei Leitungen. Die zweite Leitung ist, je nach Relaisschaltung, entweder mit Masse (GND) oder mit Vcc (+5V oder +3,3V) zu verbinden.
Für die Pflegbarkeit "deines" Programms ist es zweckmäßig, einen Bezeichner für den Ausgang zu deinem Relais zu definieren, bspw. per
#define Relais 5 oder als Konstante const int Relais = 5; Beides führt dazu, dass im weiteren Quelltext Relais statt 5 verwendet werden kann.
Die Funktion setup() wird immer nur einmal nach einem Neustart des µC abgearbeitet. Darin werden einmalige Initialisierungen untergebracht. Das ist hier der Aufruf von pinMode(Relais, OUTPUT), wobei Relais die zuvor definierte Pinnummer des Ausgangs zum schalten des Relais ist. OUTPUT stellt den Pin auf Ausgabe.
Nun sind noch die Aktivitäten des Subscribers (client) zum schalten des Relais zu erweitern. Dazu ist die Ausgabeanweisung digitalWrite(Pinnummer, HIGH) oder digitalWrite(Pinnummer, LOW) in MQTTCallback einzubauen - am besten statt HIGH und LOW die Payload verwendend, bspw. so:
if(strcmp(topic, "ServoControl/Relais/OnOff") == 0) // prüft, ob das MQTT Topic ServoControl/Relais/OnOff lautet.
{
digitalWrite(Relais, angle); // Hierfür muss die MQTT Payload entweder "0" oder "1" sein, damit es so funktioniert.
}
Es ist nicht schön, hier als Payload-Wert Variable angle zu verwenden, weil ein Relais nicht per Winkelwert geschaltet wird. Ich würde statt angle die Benennung value oder Payload nehmen.
Die MQTT Nachricht muss lauten:
Topic = ServoControl/Relais/OnOff, Payload = 0 zum ausschalten oder 1 zum einschalten.
Dies ist die kürzest mögliche Variante. Es geht besser und letztlich flexibler, wenn in MQTTCallback zuerst an Hand des Topic geprüft wird, ob die Payload ein Winkelwert für die Servos oder ein Wahrheitswert für das Relais ist. Damit verschone ich dich aber besser jetzt.
Noch etwas sehr wichtiges:
Damit die Kommunikation per MQTT gelingt, braucht es irgendwo einen MQTT Broker als zentralen Kommunikationsserver. Die Daten (IP Adresse und Portnummer) dieses Servers sind hier einzutragen:
const char* mqtt_server = "XXX"; // <- IP Adresse des Brokers
const int mqtt_port = XXX; // <- Portnummer, Standard ist 1883
Ich weiß nicht, ob ioBroker eine Art MQTT Broker Plugin nutzt, ich verwende weder ioBroker noch FHEM noch openHAB. Ich arbeite "bodenständig" mit Mosquitto (MQTT Broker) und NodeRED auf einem Raspberry Pi 3, der 24/7 läuft.
Falls du den gesamten Quellcode von mir haben möchtest, gegen Gebühr von 1234,56 € , dann musst du dich noch einmal entsprechend äußern. Allerdings gehören zum endgültig lauffähigen Programm noch die genaue Kenntnis deiner Schaltung und die MQTT Daten deines Netzwerks.
Wer eine schnelle und billige Lösung will, muss mit Folgeproblemen rechnen.