NEWS
MQTT mit Arduino Mega
-
Hallo,
setze gerne die Arduinos ein und betreibe sie zur Zeit über Cux-D. Da ich auf Homegear umstellen möchte, würde ich diese gerne entkoppeln und MQTT einsetzen.
Habe den Sketch von folgender Seite angepasst:
http://blue-pc.net/2014/10/15/mqtt-nach … en-senden/
Habe unter Instanzen folgende Einstellung gewählt:
Und erhalte folgende Fehlermeldung:
Der Monitor der Ardunio-Entwicklungsumgebung meldet den gesamten Verkehr - auch von den Homematic Geräten - also schein die Kommunikation schon halbwegs zu funktionieren!?
Hier ergeben sich einige Fragen:
1. Ist MQTT mit ccu.io und iobroker schon einsatzfähig?
2. Wie werden Variablen angelegt?
3. Kann ich das Schlüsselwort beliebig wählen? Hier z.B. iobroker
Gruß akamia
! ```
`#include <spi.h>
#include <ethernet.h>
#include <pubsubclient.h> // http://knolleary.net/arduino-client-for-mqtt/#include <onewire.h> // http://www.arduino.cc/playground/Learning/OneWire
#include <dallastemperature.h> // http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library
#define ONE_WIRE_BUS 7// MAC Adresse des Ethernet Shields
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };! // IP des MQTT Servers
byte server[] = { 192, 168, 1, 210 };
! // Ethernet Client zur Kommunikation des MQTT Clients
EthernetClient ethClient;
! // MQTT Client zur Kommunikation mit dem Server
// Server - Variable des Types byte mit Serveradresse
// 1883 - Ist der Standard TCP Port
// callback - Function wird aufgerufen wen MQTT Nachrichten eintreffen. Am ende des Sketches
// ethClient - Angabe des Ethernet Clients
PubSubClient mqttClient(server, 1883, callback, ethClient);// Einrichten des OneWire Bus um die Daten der Temperaturfühler abzurufen
OneWire oneWire(ONE_WIRE_BUS);
// Bindung der Sensoren an den OneWire Bus
DallasTemperature TempSensors(&oneWire);
// Variablen für die Temperatur
float tempC;
// Hilfsvariablen für die Convertierung der Temperatur in ein String
char tempBuffer[100];void setup()
{
// Initialisierung der Seriellen Schnittstelle
// zur Ausgabe der empfangenen Nachrichten
Serial.begin(9600);
// Initialisierung des Ethernets
Ethernet.begin(mac);
// Initialisierung der Temperaur Sensoren
TempSensors.begin();
}void loop()
{
// Aufbau der Verbindung mit MQTT falls diese nicht offen ist.
if (!mqttClient.connected()) {
mqttClient.connect("arduinoClient");
// Abonieren von Nachrichten mit dem angegebenen Topic
mqttClient.subscribe("/iobroker/Test_Switch1/#");
}// Auslesen der Temperatur
TempSensors.requestTemperatures();
// Bei Änderungen zum vorherigen Wert Publizieren
if (tempC != TempSensors.getTempCByIndex(0) ) {
tempC = TempSensors.getTempCByIndex(0);
// Publizierung des Wertes. Vorher Converierung vn float zu String.
mqttClient.publish("/iobroker/Test_Temp1",dtostrf(tempC, 1, 2, tempBuffer));
}
mqttClient.loop(); // Schleife für MQTT
}// ===========================================================
// Callback Funktion von MQTT. Die Funktion wird aufgerufen
// wenn ein Wert empfangen wurde.
// ===========================================================
void callback(char* topic, byte* payload, unsigned int length) {
// Zähler
int i = 0;
// Hilfsvariablen für die Convertierung der Nachricht in ein String
char message_buff[100];Serial.println("Message arrived: topic: " + String(topic));
Serial.println("Length: " + String(length,DEC));// Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0
for(i=0; i<length; i++)/{/message_buff[i]="payload[i];" }/;/konvertierung/der/nachricht/in/ein/string/msgstring="String(message_buff);" serial.println("payload:/"/+/msgstring);/<e=""></length;></dallastemperature.h></onewire.h></pubsubclient.h></ethernet.h></spi.h>`[/i][/i][/i] -
Hallo,
setze gerne die Arduinos ein und betreibe sie zur Zeit über Cux-D. Da ich auf Homegear umstellen möchte, würde ich diese gerne entkoppeln und MQTT einsetzen.
Habe den Sketch von folgender Seite angepasst:
http://blue-pc.net/2014/10/15/mqtt-nach … en-senden/
Habe unter Instanzen folgende Einstellung gewählt:
filename="MQTT-Einstellung.PNG" index="0">~~
Und erhalte folgende Fehlermeldung:
filename="MQTT.PNG" index="1">~~
Der Monitor der Ardunio-Entwicklungsumgebung meldet den gesamten Verkehr - auch von den Homematic Geräten - also schein die Kommunikation schon halbwegs zu funktionieren!?
Hier ergeben sich einige Fragen:
1. Ist MQTT mit ccu.io und iobroker schon einsatzfähig?
2. Wie werden Variablen angelegt?
3. Kann ich das Schlüsselwort beliebig wählen? Hier z.B. iobroker
Gruß akamia
! ```
`#include <spi.h>
#include <ethernet.h>
#include <pubsubclient.h> // http://knolleary.net/arduino-client-for-mqtt/#include <onewire.h> // http://www.arduino.cc/playground/Learning/OneWire
#include <dallastemperature.h> // http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library
#define ONE_WIRE_BUS 7// MAC Adresse des Ethernet Shields
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };! // IP des MQTT Servers
byte server[] = { 192, 168, 1, 210 };
! // Ethernet Client zur Kommunikation des MQTT Clients
EthernetClient ethClient;
! // MQTT Client zur Kommunikation mit dem Server
// Server - Variable des Types byte mit Serveradresse
// 1883 - Ist der Standard TCP Port
// callback - Function wird aufgerufen wen MQTT Nachrichten eintreffen. Am ende des Sketches
// ethClient - Angabe des Ethernet Clients
PubSubClient mqttClient(server, 1883, callback, ethClient);// Einrichten des OneWire Bus um die Daten der Temperaturfühler abzurufen
OneWire oneWire(ONE_WIRE_BUS);
// Bindung der Sensoren an den OneWire Bus
DallasTemperature TempSensors(&oneWire);
// Variablen für die Temperatur
float tempC;
// Hilfsvariablen für die Convertierung der Temperatur in ein String
char tempBuffer[100];void setup()
{
// Initialisierung der Seriellen Schnittstelle
// zur Ausgabe der empfangenen Nachrichten
Serial.begin(9600);
// Initialisierung des Ethernets
Ethernet.begin(mac);
// Initialisierung der Temperaur Sensoren
TempSensors.begin();
}void loop()
{
// Aufbau der Verbindung mit MQTT falls diese nicht offen ist.
if (!mqttClient.connected()) {
mqttClient.connect("arduinoClient");
// Abonieren von Nachrichten mit dem angegebenen Topic
mqttClient.subscribe("/iobroker/Test_Switch1/#");
}// Auslesen der Temperatur
TempSensors.requestTemperatures();
// Bei Änderungen zum vorherigen Wert Publizieren
if (tempC != TempSensors.getTempCByIndex(0) ) {
tempC = TempSensors.getTempCByIndex(0);
// Publizierung des Wertes. Vorher Converierung vn float zu String.
mqttClient.publish("/iobroker/Test_Temp1",dtostrf(tempC, 1, 2, tempBuffer));
}
mqttClient.loop(); // Schleife für MQTT
}// ===========================================================
// Callback Funktion von MQTT. Die Funktion wird aufgerufen
// wenn ein Wert empfangen wurde.
// ===========================================================
void callback(char* topic, byte* payload, unsigned int length) {
// Zähler
int i = 0;
// Hilfsvariablen für die Convertierung der Nachricht in ein String
char message_buff[100];Serial.println("Message arrived: topic: " + String(topic));
Serial.println("Length: " + String(length,DEC));// Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0
for(i=0; i<length; i++)/{/message_buff[i]="payload[i];" }/;/konvertierung/der/nachricht/in/ein/string/msgstring="String(message_buff);" serial.println("payload:/"/+/msgstring);/<e=""></length;></dallastemperature.h></onewire.h></pubsubclient.h></ethernet.h></spi.h>`
Hm.. Schwer zu sagen. Gibt es die Möglichkeit eine Wireshark Aufzeichnung zu machen. Dann wird es einiges klar.! Bin momentan ziemlich krank und kann nur partiell antworten.[/i][/i][/i]
``` ` -
Jetzt eine gute Besserung von mir[emoji40]
Gesendet von meinem Cynus T7 mit Tapatalk
-
Hi BlueFox,
Gesundheit geht vor. Ich wünsche Dir schnelle Genesung.
Werde mal WireShark starten und hoffen, dass ich die richtigen Filtereinstellungen finde.
Gruß
akamia
-
Hallo BlueFox,
Entwarnung! Die erste Temperatur vom Ardunio 1-wire kann ich jetzt sehen. Allerdings noch nicht unter den Objekten.
Habe den MQTT-Broker "mosquitto" auf dem Cubie installiert und mit der Java-App "mqtt-spy" die Verbindungen angeschaut. Hier wird Einiges klar. Nach dem die grundsätzliche Kommunikation steht, kann ich im nächsten Schritt die Inputs und Outputs in den Sketch einbauen. Bei mir kommen 10 Kabel mit jeweils 16 Adern aus der Wand. Diese Leitungen bildeten bisher eine Grundlage für die alte Alarmanlage. Neben den Reed-Kontakten für die Fenster- und Türsicherung sind dann noch viele Leitungen für Sensor- und Steuerungsaufgaben frei.
Die Server-Option im MQTT-Adapter habe ich noch nicht ausprobiert. Ggf. kann ich dann auf den "Mosquitto" verzichten?
Jetzt würde ich gerne VIS starten und mir das Ergebnis nicht nur in der Konsole anschauen. Leider ist das Update auf 0.2.2 schiefgegangen.
Gruß akamia
-
Entwarnung! Die erste Temperatur vom Ardunio 1-wire kann ich jetzt sehen. `
HurraAllerdings noch nicht unter den Objekten. `
Heißt es, du sieht es unter Zustände, aber nicht unter Objekten? Auch nach dem Browser-Refresh?Die Server-Option im MQTT-Adapter habe ich noch nicht ausprobiert. Ggf. kann ich dann auf den "Mosquitto" verzichten? `
So ist der Plan. MQTT- Adapter ist auf MOSCA https://github.com/mcollina/mosca basiert.Jetzt würde ich gerne VIS starten und mir das Ergebnis nicht nur in der Konsole anschauen. Leider ist das Update auf 0.2.2 schiefgegangen.
Gruß akamia `
Was genau hat nicht geklappt? Man kann immer noch manuell machen. Im ioBroker Verzeichnis:npm install iobroker.vis
-
Hi Bluefox,
habe noch etwas weiter experimentiert:
-
Der eingebaute mosca Mqtt-Server arbeitet gegenüber dem Mosquitto ebenfalls gut. Beim Starten gibt es noch Fehlermeldungen vom mosca (Error: write EPIPE), die aber mit der Zeit verschwinden. Diese deuten nach Durchsicht des mosca-Forums auf eine ältere Version hin ??? Egal es läuft erst einmal.
-
Unter "Zustände" werden die fünf Temperaturen (von 1-Wire) sauber angezeigt - unter "Ereignisse" sind die Temperaturen in Anführungsstriche gesetzt, alle anderen Werte von anderen Sensoren nicht. Woher kommen die? Unter Objekten würde ich einen Ordner "mqtt.0" erwarten. Dieser wird nicht automatisch angelegt. Somit sehe ich die Werte in VIS auch nicht. Hier drei Screenshots:
Hast Du noch eine Idee?
akamia
-
-
Hi akamia,
bist du mit Arduino und MQTT weitergekommen?
Ich bin in der Konzeptphase für eine Ladepumpensteuerung des Warmwasserboilers und plane diese mit einem Arduino zu realisieren. Diesen möchte ich über MQTT mit Vis und IOBroker.JS konfigurieren und visualisieren. Details über Deine bisherigen Erfahrungen würden mir sehr weiterhelfen.
Gruß xBit53
-
Hi xBit53,
hatte auch im russischen Forum gestöbert und die Temperaturen der 1-Wire Sensoren angezeigt bekommen. Dann bin ich auf die Idee gekommen, mir die zwei Erweiterungsplatinen von "funkleuchtturm" zu beschaffen. Super Sache. Endlich mal wieder etwas zu löten. Funktioniert ohne MQTT auch gut. Ich verstehe mittlerweile auch seinen Sketch, scheitere aber dran, diesem MQTT beizubringen.
Seit zwei Monaten sind wir in der Planungs- und Angebotsphase für unseren Hausumbau. Ab Montag haben wir die Handwerker im Hause, so dass ich erst wieder ab Oktober mich um dieses Thema kümmern kann.
akamia
PS: Wir wollten nur eine Wand versetzen - nun kommt eine neue Heizung, Umstellung auf Fußbodenheizung mit Fliesen in Holzoptik, Treppe wird neu geschnitten, Treppe aus Wohnzimmer, teils neue Elektrik und endlich die Rauhfaser raus. Ein integriertes Wandtablett ist jetzt auch mit eingeplant, wie auch elektrische Rollläden.
-
Hi akamia
die Kommunikation via MQTT zwischen iobroker und einem test Arduino UNO läuft inzwischen in beiden Richtungen.
Auch ich habe 2 IO-Shields von Eugen (Funkleuchturm) im Einsatz. Die Idee Eugens Sketches MQTT beizubringen hatte ich auch schon da ich mich mittelfristig von der CCU2 trennen möchte ( läuft nicht so stabil wie ich es von einer Haussteuerung erwarte ).
Da die Kommunikation zwischen iobroker und arduino reibungslos und schnell funktioniert hat sich das Pflichtenheft für die Ladepumpensteuerung gewaltig erweitert. Neuer Plan ist die gesamte Steuerung der Solarthermie inklusive Zuschaltung des Heizkessels wenn die Sonne nicht scheint und er Speicher leer ist durch einen Arduino, Parametrierung desselben und Visualisierung der Zustände mit vis. Wenn ich damit fertig bin werde ich versuchen Eugens Sketches so abzuändern dass sie über MQTT kommunizieren und somit ohne CCU auskommen. Das wird aber etwas dauern da ich die zur Verfügung stehende Zeit auf Arbeit, die beste aller Ehefrauen, 2 Enkel und das Hobby aufteilen muss.
mfg,
xBit53
-
Würde in unserem neuen Haus auch gerne auf ccu und HM wired verzichten und alle io über den arduino und Koppel Relais machen. Die wichtigsten direktveknüpfungen könnte man im sketch verankern, wenn der sauber geschrieben ist kann man da auch schnell mal was ändern.
Io broker muss dann halt nur wissen welcher Ausgang wie geschaltet ist und halt mit kriegen wenn ein Taster gedrückt wurde bzw. Selber Kommandos an den arduino senden
-
Hallo akamia,
Könntest du mal bitte deinen Sketch Posten.
Ich habe gestern mal mit mqtt rumgespielt und immer den Adapter zum Absturz gebracht weil der arduino permanent den Wert geschickt hat.
Vielleicht habe ich ja auch nur nen kleinen Fehler drin war schon sehr müde.
Habe den Adapter als Server laufen.
Wo kann man eigentlich seine topics bestimmen
-
Hallo akamia,
Könntest du mal bitte deinen Sketch Posten.
Ich habe gestern mal mit mqtt rumgespielt und immer den Adapter zum Absturz gebracht weil der arduino permanent den Wert geschickt hat.
Vielleicht habe ich ja auch nur nen kleinen Fehler drin war schon sehr müde.
Habe den Adapter als Server laufen.
Wo kann man eigentlich seine topics bestimmen `
Sehe gerade das du ihn Damals schon gepostet hast. Sorry -
Habe das auch mal alles soweit ausprobiert weil es für mich auch sehr interessant ist. Daten vom Arduino empfangen klappt auch wunderbar! Nur wie funktioniert es jetzt werte an den Arduino zu schicken? Ich möchte gerne mit der iobroker Visualisation arbeiten. Wie stelle ich jetzt z.B. bei einem Input Feld ein, dass der eingegebene Wert über MQTT publiziert wird?
-
Hallo,
vielleicht hilft ja folgender Link http://blue-pc.net/2014/10/15/mqtt-nach … en-senden/.
Überlege auch alle Tür und Fensterkontakte mit einem Arduino direkt zum MQTT-Server senden zu lassen und bin bei Google darauf gestossen.
Gruß
Holger
-
Leider bringt mich das nicht wirklich weiter, weil das Beispiel da mit OpenHab gezeigt wird. Arduinoseitig müsste bei mir alles funktionieren. Im Objektbaum von IOBroker werden mir ja die empfangenen Variablen der entsprechenden Topics angezeigt. Dort stehen aber nicht die Topics die der Arduino abonniert hat. Ich müsste die also erstmal im Objektbaum anlegen damit ich die einem Steuerelement der Visualisierung zuweisen kann. Nur wie?
-
Habs jetzt hinbekommen
Eigentlich total simpel man muss nur erstmal wissen wie das alles funktioniert mit iobroker.
Habe einfach in der Objektbaumansicht ein neues Objekt hinzugefügt mit den entsprechenden Einstellungen und dieses Objekt dann dem Eingabefeld der Visualisierung zugewiesen.
Gruß Maik