Schaltzustände am ESP8266 per MQTT senden

Sagen wir es in meinem Fall geht es mit anderem Gehäuse zur Not. Ist ein Abzweigkasten der Firma Hensel. Gibt es in x Größen. Auch welche die Breiter sind aber von der Höhe Identisch. Aber ich geb bescheid, wenn ich Teile habe und wie es dann aussieht.

Ok, das verstehe ich und bin gespannt wie es letztendlich ausgeht.

Ich auch.

Hab das mit dem Zähler vorhin endlich hin bekommen. Miele sei dank :wink:

Zur Hintergrundinfo: Ich arbeite in einem Krankenhaus als Elektriker und bei der Reperatur von Spülmaschinen gibt es verschiedene Baugruppen, wo Reedkontakte drin sind. z.B. Durchflussmengenzähler (Nennt Miele das Teil zumindest) und da sind immer wieder kleine Platinen dran mit Reedkontakten und die habe ich seit meiner Ausbildung (vor 15 Jahren) immer wieder gesammelt und letztens wieder gefunden. Waren nach letzten Umzug ins eigene Haus "verschwunden" in einem Umzugskarton in der letzten Ecke ;-).

Und mit einem dieser Reedkontakte habe ich den Impuls des Gaszählers auslesen können. Nun geht es nur noch an die Steuerung dafür. Aber das ist ein Projekt für danach. Erstmal das aktuelle abschließen.

Gutes Stichwort.
Bei mir werkelt ein ESP8266-01 seit ein paar Monaten mit einem Reedkontakt am Gaszähler. Der überträgt den Wert per UDP an einen weiteren ESP8266 (Server) zur Auswertung und Anzeige.

Das muss ich mir unbedingt mal näher angucken, wenn ich dazu komme. Ich wollte zwar bei mqtt bleiben, aber die Art und Weise der Übertragung ist ja eigentlich egal. Ich bin mir nur noch nicht ganz schlüssig, wie ich das am Idealsten mache. Also zum einen muss ich Daten Tracken und verschicken, zum anderem am Gegenstück irgendwie "auswerten". Also als das große Mastermind in meinem Smarthome werkelt ein Server mit ioBroker als Basis für alles, wo eigentlich die Daten dann abgelegt werden sollen.

Aber dazu muss ich mir noch mal gedanken mache. Eigentlich soll der ESP lediglich Daten Sammeln und weiter leiten, den es kann so einer auch mal aussetzen bzw. kaputt gehen und da wollte ich nicht, dass z.B. der Zählerstand im ESP liegt, sondern sollte schon im ioBroker liegen.

Aber dazu muss ich mir nochmal ein paar Gedanken machen.

Endlich komme ich mal wieder zum werkeln und wollte mal anfangen mit dem Reed Kontakt an einem ESP. Die Frage ist, sendest du jeden Impuls oder nur alle "x" Sekunden? Ich denke die Zeit zwischen 2 Impulsen sollte lang genug sein, dass diese an einen Server gesendet werden können und dort verarbeitet werden.

Ich wollte beim MQTT gerne bleiben und als Server soll ein ioBroker sein, da dieser eh schon im Einsatz ist und so die Daten alle Zentral verwaltet werden.

Muss nur gucken wie ich das mache. Wollt gleich mal was probieren und gucken ob das vernünftig läuft.

Michael

Ich habe noch einen recht alten Zähler, der gibt nicht so viele Impulse aus. Somit zähle ich jeden Impuls und sende dann das Ergebnis per UDP in mein SmartHome. Das bleibt alles bei mir im Netz,

Okay, ist bei mir auch alles im Netz. Aber halt andere Hardware.

Impulse Zählen klappt auch nun auch, jedoch klappt es noch nicht im ioBroker mit dem "Zählen" aber ich denke da bin ich im Forum für ioBroker besser aufgehoben. <- diesen Punkt hab ich gerade durch bisschen rumspielen scheinbar gelöst. Nun heißt es erstmal testen und ggf. in den Zähler mit heißkleber oder so fixieren. Und im Anschluß mal testen. Und gucken was passiert.

Was in Zukunft noch dazu kommen soll, sind ein paar Statisitikwerte im ioBroker (Verbauch am Tag, Woche, Monat) oder so ähnlichn.

Wenn der Probeaufbau dran ist kann ich mich im Anschluß um Kanidat 2 kümmern. Der Stromzähler oder Wasseruhr.

Und warum zählst du nicht auf dem ESP und überträgt das Ergebnis ?

Wenn ich den ESP mal "Update" oder so von der Software her, müsste ich Ihm jedes mal den Aktuellen Zählerstand übergeben und über den Weg des ioBrokers muss ich im Notfall nur eine "Korrektur" des Aktuellen Wertes vornehmen. Denke so ist das einfacher.

Ja, Ok.
Das stimmt so. Da hat fips auf seiner Seite ein gute Beispiel für diese Prozedur.
Und per OTA-Update vorher Wert speichern, danach wieder abfragen.

Mein Code will ich aber natürlich nicht verheimlichen.

Hier Arduino:

#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>
#include <PubSubClient.h>

WiFiClient espClient; 
PubSubClient client(espClient); 


const char* ssid = "SSID";
const char* password = "WIFI PAssword";

IPAddress ip(192,168,178,230); // 192.168.178.xxx = freie IP Adresse, ggf. müsst ihr auch die anderen Zahlen anpassen; schaut am besten in euren Router
IPAddress gateway(192,168,178,1);
IPAddress subnet(255,255,255,0);
IPAddress dns(8, 8, 8, 8);

const char* otaHostname = "OTA Name";               // OTA Hostname
const char* otaPassword = "OTA Pass";                    // OTA Zugangscode

char* clientId = "Gaszaehler";

const char* mqtt_server = "MQTT Server";
const int mqtt_port = 8883;
const char* mqtt_user = "mqtt User";
const char* mqtt_password = "mqtt Pass";

char* msg = "";
char* msg_old = "start";

void setup() {
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet, dns);
  ArduinoOTA.setHostname(otaHostname);
  ArduinoOTA.setPassword(otaPassword);
  ArduinoOTA.begin();
  connectToMQTT();
  pinMode(16, INPUT);
}

void loop() {
  ArduinoOTA.handle();
  Zustand_lesen();
}

void Zustand_lesen() {
  if (digitalRead(16))
      {
        msg = "1";
      }
      else
      {
        msg = "0";
      }
      if (msg_old != msg) {
        connectToMQTT();
        client.publish("ESP/Keller/Gaszaehler", msg);
        msg_old = msg;
      }
}

void connectToMQTT() {
  client.setServer(mqtt_server, mqtt_port);//MQTT Server, - Port
  
  if (client.connect(clientId , mqtt_user, mqtt_password)) {
    Serial.println("connected");
  }
}

Hier das Blockly im ioBroker:

grafik

Erste Tests waren recht erfolgreich gewesen. Nun kommt später der richtige Einsatz.

Eine Frage am Rande, muss ich für die Externe Antenne am ESP-07 was am Modul ändern oder nur Antenne anschließen und fertig? Beim D1 Mini Pro musste ja ein 0 Ohm Widerstand umgelötet werden, nur zum ESP-07 finde ich gerade nichts.

Eine Beschreibung dazu findest du hier.

Okay, noch kleiner hätte man das teil nicht machen können. Ist glaub ich noch kleiner als beim Wemos D1 Mini Pro, oder zumindest umliegende gegend ist enger bebaut.

Bild vom Provisorium des Gaszählers, also die Steuerung und ein aktuelles Bild mit passendem Gehäuse für die Lichtüberwachung kommt auch gleich noch. Erstmal umlöten.

Naj....man muss ja auch alles unterkriegen. :wink:

Wenn ich die vorhandenen ESP-07 verbraucht habe kaufe ich mir einfach die S Module und spare mir das :wink:

Vor allem nutze ich lieber externe Antennen um sauberen Empfang zu haben.

Aber hier die Versprochenen Fotos, als erstes die Gaszählerplatine:

Ist aber erstmal nur ein Provisorium bis ich die anderen Zähler zumindest testweise auslesen kann. Bin da noch nicht weiter. Weil mir persönlich fehlen da irgendwie noch sowas wie Status LEDs und so. sollte aber erstmal einfach wie möglich sein, gut der DS18B20 könnte dieses "Ziel" übertreffen, aber so ist alles überwacht. Zum Glück kann man in Kabel knoten machen um aus 2 Einzelladern eine Doppelader zu machen, wenn man gerade nichts vernünftiges hat (man sieht da ein Knoten am Kabel im Bild. Also kein Versehen, sondern schon Absicht gewesen.) Den Wemos D1 Mini habe ich erstmal genommen, weil der zu meinen paar Testchips gehören, die erstmal alles testen müssen bevor andere Chips auf den richtigen Platinen zum Einsatz kommen.

Und hier die Platine im Gehäuse zur Lichtüberwachung:

Entgültige Montage im Keller erfolgt die Tage, wenn ich endlich dazu komme. Mit neuem größeren Gehäuse passt nun auch alles rein :wink: Also wie geplant :smiley:

1 Like

Der Empfang ist wichtig.
Bei mir im Haus reichen die Platinen-Antennen. Nur im Gartenhaus benötige ich eine externe Antenne. Da verwende ich den Wemos D1 mini Pro.

Und du hast ja eine Lösung mit dem Gehäuse gefunden.
Super.

Habe nur noch ein Feinsicherungshalter mit Feinsicherung ergänzt. Als Elektriker irgendwie fast unangenehm, dieses nicht gleich auf der Platine erledigt zu haben. Schließlich war unterhalb vom Netzteil noch Platz gewesen. Aber man lernt beim Platinendesignen dazu.

Nicht schön aber Funktioniert:

Also aktuelle Anschlußleitung ist nur meine Testleitung vom Arbeitsplatz. Aber nun läufts.

Musste nur im Program die Kanäle anpassen, ist mir vorher nicht aufgefallen, dass was auf der Platine als CH1 makiert war im Programm Kanal 4 :wink: und der Reihe nach weiter. Aber nun läuft es so zumindest soweit ohne Probleme. Finde ist schon ganz schön geworden.

Nur die Beschriftung für CH1 - CH4 hätte weiter nach unten gemusst und Platine in der Richtung ruhig etwas breiter. Restliche Beschriftung finde ich ganz gelungen.

Aber ich hab mir mal angefangen eine "Checkliste" für Platinen zu erarbeiten. Also wenn ich eine neue Platine erstelle, worauf ich achten muss, bzw. was ich in der Vergangenheit gerne vergessen habe :wink:

Ich hab gerade endlich geschafft mein Lichtboard zu installieren und habe festgestellt, ich muss den Datenverkehr reduzieren. Im Moment habe ich gerade mal kurz den MQTT.fx (hab den noch auf einem Laptop im Heimnetzwerk installiert gehabt ohne es zu wissen) den Traffic angeguckt und naja da kamen schon einige Meldungen in kürzester Zeit zusammen.

Ich muss gucken, wie ich den Code angepassen kann, dass der doch nur alle 30 - 120 Sekunden oder so alle Zustände Postet. Den das würde mehr als genug sein.

Nur so ganz hab ich das noch nicht geblickt. Delay wäre eine Möglichkeit, nur sicherlich nicht die schönste..

Michael