[Projekt][ALFA] Der Community-Sensor MQTT für IOBroker

Diskussion über Hardware: CCU, Modbus, S7-CPU,...
mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

[Projekt][ALFA] Der Community-Sensor MQTT für IOBroker

Beitrag von mrmomba » 07.03.2018, 23:00

Hallo,

vielleicht kann sich jemand an mich in Facebook erinnern:
https://www.facebook.com/groups/4404991 ... 274823313/

Ich bin dabei, einen kleinen Sensor + Aktor zu bauen um einfach die kostspieligen und proprietären Systeme zu umgehen.
Leider habe ich bei Facebook nicht genug Untersützung erhalten und hoffe, dass ihr mir hier helfen könnt und wollt.
Da hier weniger die ständig wiederkehrenden Fragen kommen wie - welcher 433mhz sender - etc.

Sensor: Damit meine ich in diesem Fall eine Baugruppe, mit mehreren Sensoren ausgestattet.

Natürlich hat sich die Schaltung etwas verschlankt, da ich 2 Temperatursensoren + 1x DHT 22 einige Sensoren zu viel fand.
Ebenso sind meiner Meinung nach 2 versch. Lichtsensoren einer zu viel. Die Hardware ist jetzt auch kein Arduino.

Ich hatte mir mal Gedanken gemacht - was ICH für mich in jeden Raum erstmal wichtig fände:
- [Sensor] Temperatur
- [Sensor] Luftfeuchtigkeit
- [Sensor] Umgebungslicht
- [Sensor] Bewegungserkennung
- [Aktor] ein Nachtlicht Ausgang
- [GUI] Update 12.03.2018 - OLED Display 0.98

Die Hardware ist ein Wemos D1 mini
In meiner ersten Version dachte ich daran, das so zu bauen:
Bild

Jedoch bin ich jetzt im Final soweit:
Bild

Mittlerweile laufen die Funktionen sowie ich das mir in der ersten Version gedachte habe wie folgt:
- MQTT Client Publish
- Temperatur
- Humidity
- Umgebungslichtsensor
- Bewegung (Leider ist mein PIR-Sensor dafür uppe ..)

Was ich noch nicht gekauft habe waren Summer, MQ-Sensoren und die LEDs habe ich noch nicht angeschlossen.

Womit ich leider mein größtes Problem habe:

Ich habe keine Chance, dass ich die Werte vom MQTT-Broker abgerufen bekomme. Hier brauche ich vor allem Hilfe - vielleicht mag mir das einer erörtern.
Oder gar eine Lösung zur Verfügung stellen...
DENN:
Ich will gerne ein Flag auf dem Broker setzen (Buzzer an, Licht an etc...)
und dann mittels MQTT dem Sensor mitteilen, was er tun soll.

Download:
https://www.facebook.com/groups/4404991 ... cation=ufi

=> Ziel des ganzen:
Eine fertige Anleitung - was wo auf welchen PIN angeschlossen wird.
Ein fertiges Sketch - für Copy&Paste + gut Kenntlichgemachte Variablen die man selber ändern muss.
Ein komplettes Communityprojekt

-------------
Российские разработчики приветствуют
Я не говорю по-русски
исследование в течение трех недель
maybe we can write in english?

_____________________
Gruß
Christian
Zuletzt geändert von mrmomba am 21.05.2018, 16:22, insgesamt 4-mal geändert.

Thisoft
professional
Beiträge: 673
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von Thisoft » 08.03.2018, 00:10

Hallo,

die Idee des Projekts gefällt mir. Meine Überlegung wäre vielleicht statt des Summers einen kleinen Lautsprecher zu verbauen um da etwas flexibler in der Tonausgabe zu sein.

Was hast du vor in Bezug auf Platine und Gehäuse? Man will sich ja kein Steckbrett an die Wohnzimmerdecke kleben ;)

Einen Sketch kann ich zu gegebener Zeit beisteuern. Ich habe einige ESP8266 über MQTT an ioBroker angebunden.
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 08.03.2018, 18:45

Hallo thisoft,

das stimmt, ein Lautsprecher o.Ä. würde das etwas flexibler gestalten Oder ggf. noch mit Sprache?
Hintergrund eines einfachen Summers oder einer Tonausgabe ist die, dass ich den Sensor zusätzlich zu den Feuermelder mit Alarmieren lassen will.
DENN: Die vorgeschriebenen Frequenzen sind von Kindern bis 12 Jahre im Schlaf i.d.R. nicht Hörbar. Daher wollte ich ein Brummer, der Tiefer ist, verbauen. Ein Lautsprecher würde es natürlich noch weiter Verbessern - mit der Ansage ALARM ... aber ok, das wäre dann vielleicht für Version 2 oder 3 ;-)

Also, was und wie will ich das lösen, da das Steckbrett nun kein WAF hat.

Ich dachte mir das erstmal so, das es eine fertige Anleitung, Einkaufsliste und die Software geben soll. So dass es dann eben wirklich nur noch nachgebaut werden muss und über die Arduino IDE hochgeladen werden soll.

Zum Thema Gehäuse und Platine dachte ich mir, dass man da erstmal jedem das selbst überlässt - dennoch will ich eins oder zwei Vorlagen für ein 3D Druck vorbereiten. Vielleicht auch noch ein Vorschlag für eine Lochrasterplatine.

Wenn du mir dabei helfen magst, wäre ich dir wirklich dankbar. Unabhängig davon, das mein Programmier-Style vermutlich wirklich sehr grauenhaft ist, ist aktuell mein größter Bug die Sache, dass ich keine Infos mittels MQTT vom Broker abrufen kann und Funktionen am Sensor zu aktivieren :-)
Ich bin auch kein gelernter Programmierer :-(

Aktuell habe ich folgende Informationen die von den Sensor an den Broker gesendet und empfangen werden. Die roten Werte soll der Sensor abrufen.
Mangels Hardware sind noch nicht alle Werte drin, aber man kann es ja noch immer erweitern...

So sieht es erstmal aus:
Übermittlung der Infos (Leider ist die IP.Adresse noch murks):
Bild

Webgui
Bild

Thisoft
professional
Beiträge: 673
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von Thisoft » 08.03.2018, 22:49

Ich vermute mal dass dein Downloadlink bei Facebook deinen bisher vorhandenen Code für den Wemos enthält? Wenn ich mir den mal anschauen und ergänzen soll müßtest du den schon mal hier posten (oder woanders verlinken) weil ich mich nicht extra im Gesichtsbuch anmelden werde ;)

Das was du unten als Webgui gepostet hast wird bereits vom Wemos bereitgestellt?
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
TomT
professional
Beiträge: 211
Registriert: 22.08.2017, 08:11
Wohnort: Weyerbusch RLP

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von TomT » 09.03.2018, 06:26

Hallo,
ich könnte mich da auch mit einbringen.
Allerdings arbeite ich komplett properitär und nutze die normalen Möglichkeiten ohne MQTT.

Momentan werkeln hier einige Temperatursensoren seit Monaten im Dauertest und auch die Obi Steckdose auf Basis ESP8266.
Muss es denn MQTT sein?

Hier mein Projekt :
http://forum.iobroker.net/viewtopic.php?f=34&t=12125

Grüße
Tom
~~~ Never Change a running System ~~~
PI3B > Raspimatic / Opi+2 > ioBroker / ESP8266

if (System == "running") {finger = "weg";} else {lastAction = "Rückgängig";}

[Obi-Funksteckdose ESP8266]

Thisoft
professional
Beiträge: 673
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von Thisoft » 09.03.2018, 07:38

TomT hat geschrieben:Hallo,
ich könnte mich da auch mit einbringen.
Allerdings arbeite ich komplett properitär und nutze die normalen Möglichkeiten ohne MQTT.

Momentan werkeln hier einige Temperatursensoren seit Monaten im Dauertest und auch die Obi Steckdose auf Basis ESP8266.
Muss es denn MQTT sein?

Grüße
Tom
Was verstehst du unter proprietär? Wie überträgst du die Sensordaten an ioBroker?
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
TomT
professional
Beiträge: 211
Registriert: 22.08.2017, 08:11
Wohnort: Weyerbusch RLP

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von TomT » 09.03.2018, 12:55

Der ESP ruft direkt die Datenpunkte im IoBroker über den simpleAPI Adapter auf.
Mittels setBulk Command werde diese dann (Temp und Feucht) gemeinsam übermittelt

Grüße
Tom
~~~ Never Change a running System ~~~
PI3B > Raspimatic / Opi+2 > ioBroker / ESP8266

if (System == "running") {finger = "weg";} else {lastAction = "Rückgängig";}

[Obi-Funksteckdose ESP8266]

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 09.03.2018, 20:49

Hallo tomT,

danke für das Angebot.
Seit dem mich mein Kumpel - er hat aber nur darüber gelesen - mir etwas über MQTT erzählt hat, bin ich von der Einfachheit eigentlich sehr überzeugt.
Ich bin nicht zwingenst auf MQTT angewiesen, habe aber damit quasi die ALFA Version aufgebaut und als Herzstück gesehen, würde auf Grund der leichten Konfig davon auch nur wirklich ungern weggehen.
Dein Steckdosenfred habe ich gesehen.

Ich danke jeden, der mir dabei helfen mag!
(In irgendeiner Version xyz hätte ich ja gerne OTA und vollautomatisch alles - so dass ich dann ein Hotspot habe und alles über eine Webgui konfigurieren kann)

@Thisoft
Im Anhang habe ich eine 7zip Datei mit den Qäulcode.
=> dass man nicht freiwillig in Facebook rein will kann ich durchaus verstehen ;-)
Ich weiß auch nicht, was mich vor Jahren dazu geritten hatte.
Dateianhänge
IOmqttSensors_ALFA2.7z
(8.95 KiB) 12-mal heruntergeladen
Zuletzt geändert von mrmomba am 09.03.2018, 23:24, insgesamt 1-mal geändert.

Wal
starter
Beiträge: 68
Registriert: 14.04.2017, 22:08

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von Wal » 09.03.2018, 21:20

Für den Sound gibt es ein billiges Soundmodul mit dem man mp3 files abspielen kann.
Kannst dir's ja mal anschauen. Soundmodul Multifunktion FN-M16P http://www.voicemodul.de/index.htm
Gruß
Walter

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 11.03.2018, 21:58

Hallo,

ja wenn ich mir das so ansehe ist das schon in Ordnung, aber irgendwann sprengt es den Rahmen von Low-Budget. Ziel sollte es ja sein, einen passablen Multisensor zu bauen, der sehr günstig ist und mit der Anleitung relativ Narrensicher sein soll.
Ich habe mir auch die Sache mit den MQ-Sensoren angeschaut.
Die kosten zwar alle mi Schnitt nur 3€ ABER es bringt zu einem viel mehr Overhead mit sich und zum anderen aber auch wieder wesentlich mehr Bauteile - glaube ich... Ich weiß halt nicht ob die ich die 1. mit 3 Volt laufen lassen kann und 2. zu viel Strom gezogen wird.
ODER ob ich das am Datapin einfach mit einem Spannungsteiler hin bekomme.
Was wiederum dem Low-Cost entgegen steht - wobei ein CO und Gassensor nicht unbedingt verkehrt ist. Die meiste Irritation habe ich jetzt dadurch, dass ich bein einigen gelesen habe
Das der MQ2 sensor CO Gas ebenfalls erkennt, an andere Stelle steht davon nichts :-(
So eben noch ein paar Änderungen siehe Bild ...

Was sagt ihr?
@TomT
@tisoft?
Hattet einer von euch schon zeit mein Script durchzusehen?
Oder ist der sowas von Grauenhaft :D
Dateianhänge
version3.PNG
version3.PNG (179.05 KiB) 637 mal betrachtet
Zuletzt geändert von mrmomba am 11.03.2018, 23:40, insgesamt 2-mal geändert.

Benutzeravatar
TomT
professional
Beiträge: 211
Registriert: 22.08.2017, 08:11
Wohnort: Weyerbusch RLP

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von TomT » 11.03.2018, 22:26

Ne, hatte noch keine Zeit...
Ich schau die Woche mal danach.
Zieh dir doch mal meine BETA V1.0.0.zip Version von der Obi Steckdose runter.
Da ist OTA drin, vielleicht hilft es dir schon mal weiter.
Und ein Wifi Setup für den ersten Start, damit du nicht den Code editieren musst....

Grüße
Tom
~~~ Never Change a running System ~~~
PI3B > Raspimatic / Opi+2 > ioBroker / ESP8266

if (System == "running") {finger = "weg";} else {lastAction = "Rückgängig";}

[Obi-Funksteckdose ESP8266]

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 11.03.2018, 23:41

Ich schau mir das mal an
es ist aber nicht der Wifimanager am Start oder?
(werde ich dann sehen)

Viel Script und Unglaublich übersichtlich.
Ok ich habe nicht alles Verstanden, fällt aber fast! nicht schwer.
*lüg*
Wie ich sehe, kannst du das EEPROM schreiben - damit würde mich die Initialkonfig natürlich komplett weg vom QUÄL-Code
bringen und zur dynamischen Konfig hin :-)

Kleine Idee für dein Script, übermittel doch die WIFI-Signalstärke, dann weißt du auch ob die Position der Steckdose evtl eine Störung mit sich bringen könnte.
Hier meine einfache MAP-Funktion:

Aufruf: int_fkt_WLANProzent(WiFi.RSSI())
Funktion:
int int_fkt_WLANProzent(int WLANProzent){
int int_var_wlaninProzent = map(WLANProzent, -100, -40, 0, 100);
return int_var_wlaninProzent;
}

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 12.03.2018, 22:03

Ich hab das script auf meiner Seite noch mal etwas geändert...
Bin aber noch nicht ganz zufrieden, denn er macht jetzt immer ein Subscripe obwohl es keine Änderung gab. (Oder ich habe es falsch verstanden)

Inhalt:
  1. Änderung des Scriptes neue Funktion
    Fehler bzw. Log
    Neue .ino Datei
##########################################################
#
# die neue Funktion zum Subscripen der Topics
#
##########################################################

Ich habe eine Funktion gebaut, wie folgt und diese wird dann in der Loop aufgerufen.
------------------------------------------------------- Aufruf
bool_fkt_Subscripe(Value9);
------------------------------------------------------- Funktion
bool bool_fkt_Subscripe(String Topic) {
Serial.print("*INFO:DO :Topic Check");
int int_var_Counter = 0;
while (int_var_Counter < 5){
client.subscribe(Topic.c_str());
client.loop();
int_var_Counter = int_var_Counter + 1;
}
Serial.print("*INFO:DONE:Topic Check");
}
-------------------------------------------------------

Ebenfalls ist es komisch, dass ich zwar die Werte zum Teil ausgelesen bekomme, aber das im Callback meine IF-Else nicht sauber läuft, das ist doof. (Er kann die Ausgelesenen Werte wohl nicht richtig im IF-Else auflösen)

##########################################################
#
# Ausgabe auf dem Serialinterface
#
##########################################################

Interessant ist auch, dass ich regelmäßig NULL - Werte habe:
Hier mal ein Mitschnitt:


*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A02_optischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A02_optischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DONE:Topic Check*INFO:DO :Topic Check*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A02_optischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A02_optischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DONE:Topic Check*INFO:DO :Topic Check*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A03_akkustischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A03_akkustischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A03_akkustischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DONE:Topic Check*INFO:DONE:CHECK MQTT PUSH / GET NEUE WERTE
############################################################################
############################################################################
*INFO:DO :RUN LOOP START JETZT
*INFO:DO :DHT Temperatur lesen
21.20
*INFO:DONE:DHT Temperatur lesen
*----------------------------------
*INFO:DO :DHT Humiditiy lesen
46.00
*INFO:DONE:DHT Humiditiy lesen
*----------------------------------
*INFO:DO :Umgebungslicht lesen
*Info: :Digitale Umrechnung
189
*Info: :Logische Umrechnung
0.59
*INFO:DONE:Umgebungslicht lesen
*----------------------------------
*INFO:DO :Bewegungserkennung
0
*INFO:DONE:Keine Bewegung
*INFO:DONE:Bewegungserkennung
*----------------------------------
*INFO:DO :CHECK MQTT PUSH / GET NEUE WERTE
*INFO:DO :Topic Check*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A03_akkustischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A03_akkustischerAlarm
***********Message:1
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DONE:Topic Check*INFO:DO :Topic Check*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A01_Nachtlicht
***********Message:
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A01_Nachtlicht
***********Message:
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A01_Nachtlicht
***********Message:
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DONE:Topic Check*INFO:DO :Topic Check*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A01_Nachtlicht
***********Message:
----------------------------------
*INFO:DONE:Payload Topic Check
*----------------------------------
*INFO:DO :Payload Topic Check
***********Message arrived in topic: haus01/wohnung01/Kueche/sensor01/A01_Nachtlicht
***********Message:

##########################################################
#
# NEUE .INO-DATEI einfach für Copy & Paste
#
##########################################################
#include "webgui.h"
#include "mqtt.h"
#include "wifi.h"
//#include "Timezone.h"

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <ESP8266mDNS.h>
#include <EEPROM.h>
#include "PubSubClient.h"
#include "DHT.h"

ESP8266WebServer server(80); // Initialisiere Webserver
WiFiClient wifiClient;
PubSubClient client(wifiClient);
/*
------------------------------------------------------------------------------------------------
[DE] Vervollständige hier die Variablen mit den Infos zu deinem Netzwerk
wie SSID, MQTT und Standort des Sensors.
[EN] complete the Variables with Infos for your Homenetwork
like SSID, MQTT und location from the Sensor.
------------------------------------------------------------------------------------------------
*/

// [DE] 1. Variable WLAN SSID | 2. Variable WLAN Passwort
//.... [EN] 1. Variable WLAN SSID | 2. Variable WLAN Password
const char* var_char_WLAN_SSID = " ";
const char* var_char_WLAN_PASS = " ";

// [DE] Logindaten MQTT-Broker | 1. IP/Hostname | 2. Port | 3. Benutzername | 4. Passwort
//.... [EN] Logincredentials MQTT-Broker | 1. IP/Hostname | 2. Port | 3. Userlogin | 4. Password
const char* var_char_mqtt_server = "172.16.1.6";
const int var_int_mqtt_port = 1883;
const char* var_char_mqtt_user = " ";
const char* var_char_mqtt_password = " ";

// [DE] Sensorstandpunkt angeben: Dabei ist das ganze herachisch für eine eindeutige Zuordnung
// Aufgebaut um mehere Gebäude mit mehreren Wohnungen auf einem Broker sauber Idenfizieren
// zu können. Daher Hausname(Oder Grundstücksname) Wohnung und Raummname usw.
//.... [EN] Specify sensor position: The whole position is written down herachic for a clear assignment.
// It's usable for around several buildings with several apartments for a clean idenfication
// on one MQTT Broker.
const char* var_char_sensor_hausName = "haus01"; // [DE] Bsp: Haus01, ID83374, Bäckerstraße 24b.... [EN] HomeOne, BackerStreet, eg.
const char* var_char_sensor_wohnungsName = "wohnung01"; //[DE] Mannys Wohnung, ID00023, Garten .... [EN] Mannys' Castle, ID0023, Garden
const char* var_char_sensor_raumName = "Kueche"; // [DE] Küche, Flur, Keller .... [EN] Kitchen, Floor, Storage
const char* var_char_sensor_sensorName = "sensor01"; // [DE] Sensor1, FlurSensor, NebenRauchMelder .... [EN] SensorOne, FloorSens, NextToSmokeDetector


/*
------------------------------------------------------------------------------------------------
[DE] Definiere Topics für den MQTT-Server !!! NICHTS MEHR ÄNDERN!
[EN] Define the Topics für MQTT-Broker !!! DONT CHANGE ANYTHING HERE!
------------------------------------------------------------------------------------------------
*/

String Value1 = str_fkt_topicpath() + "/S01_Temperatur";
String Value2 = str_fkt_topicpath() + "/S02_Luftfeuchtigkeit";
String Value3 = str_fkt_topicpath() + "/S03_Helligkeit";
String Value4 = str_fkt_topicpath() + "/S04_Bewegung";
String Value5 = str_fkt_topicpath() + "/D01_Batterie";
String Value6 = str_fkt_topicpath() + "/N01_IP";
String Value7 = str_fkt_topicpath() + "/S05_GAS";
String Value8 = str_fkt_topicpath() + "/S06_CO";
String Value9 = str_fkt_topicpath() + "/A01_Nachtlicht";
String Value10 = str_fkt_topicpath() + "/A02_optischerAlarm";
String Value11 = str_fkt_topicpath() + "/A03_akkustischerAlarm";
String Value12 = str_fkt_topicpath() + "/12_free";
String Value13 = str_fkt_topicpath() + "/D02_AkkuStand";
String Value14 = str_fkt_topicpath() + "/D03_AkkuBetrieb";
String Value15 = str_fkt_topicpath() + "/N02_WLAN-Signal";

/*
------------------------------------------------------------------------------------------------
[DE] Definiere Variablen für den MQTT-Server !!! NICHTS MEHR ÄNDERN!
[EN] Define the Variables für MQTT-Broker !!! DONT CHANGE ANYTHING HERE!
------------------------------------------------------------------------------------------------
*/
String string_var_Temperatur;
String string_var_Luftfeuchtigkeit;
String string_var_Umgebungslicht;
String string_var_Bewegungsmelder;
bool bool_var_NachtLicht_an;
bool bool_var_Notlicht_an;

/*
------------------------------------------------------------------------------------------------
SETUP für die Initialconfig
------------------------------------------------------------------------------------------------
*/
void setup() {
Serial.begin(115200); // Für Debuggingzwecke Ausgabe über Serielle Konsole
Serial.println("*INIT:DO :Starte Initialisierung");

bool var_bool_connection_status; // Setzte VAR für Wlanstatus
var_bool_connection_status = fkt_bool_WLAN_connect(var_char_WLAN_SSID, var_char_WLAN_PASS); // Fülle VAR mit WLANSTATUS

if (var_bool_connection_status) { //Wenn WLAN dann starte WebServer

Serial.println("*INIT:DO :Starte Webserver");
server.on ( "/", SITE_void_handleRoot );

const char * headerkeys[] = {"User-Agent", "Cookie"} ;
size_t headerkeyssize = sizeof(headerkeys) / sizeof(char*);
server.collectHeaders(headerkeys, headerkeyssize );
server.begin();
Serial.println("*INIT:DONE:Starte Webserver");
Serial.println("*----------------------------------");
}

if (var_bool_connection_status) { // Wenn WLAN dann MQTT Dienst
Serial.println("*INIT:DO :Baue Verbindung zum MQTT Broker auf");
client.setServer(var_char_mqtt_server, var_int_mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");//
if (client.connect(WiFi.macAddress().c_str(), var_char_mqtt_user, var_char_mqtt_password )) {
Serial.println("connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
string_var_Temperatur = String(float_fkt_getTemp());
string_var_Luftfeuchtigkeit = String(float_fkt_getHum());
string_var_Umgebungslicht = String(float_fkt_getLicht());
string_var_Bewegungsmelder = String(bool_fkt_getMotion());


client.publish(Value1.c_str(), string_var_Temperatur.c_str());
client.publish(Value2.c_str(), string_var_Luftfeuchtigkeit.c_str());
client.publish(Value3.c_str(), string_var_Umgebungslicht.c_str() );
client.publish(Value4.c_str(), string_var_Bewegungsmelder.c_str() );
client.publish(Value5.c_str(), "90%" );
client.publish(Value6.c_str(), WiFi.localIP().toString().c_str());
client.publish(Value7.c_str(), "0" );
client.publish(Value8.c_str(), "0" );
client.publish(Value15.c_str(), String(int_fkt_WLANProzent(WiFi.RSSI())).c_str());
client.publish(Value9.c_str(), "" ); // Nachtlicht
//client.subscribe(Value9.c_str()); // Nachtlicht
//client.subscribe(Value10.c_str()); // optischer Alarm
//client.subscribe(Value11.c_str()); // akkustuscher Alarm
//client.subscribe(Value14.c_str()); // Akkubetrieb
Serial.println("*INIT:DONE:Baue Verbindung zum MQTT Broker auf");
Serial.println("*---------------------------------------------");

}
}

/*
------------------------------------------------------------------------------------------------
BAUE eigenständige Funktionen im Zusammenhang mit dem Root
------------------------------------------------------------------------------------------------
*/

bool fkt_bool_is_authentified() {
Serial.println("Enter is_authentified");
if (server.hasHeader("Cookie")) {
Serial.print("Found cookie: ");
String cookie = server.header("Cookie");
Serial.println(cookie);
if (cookie.indexOf("ESPSESSIONID=1") != -1) {
Serial.println("Authentification Successful");
return true;
}
}
Serial.println("Authentification Failed");
return false;
}

String str_fkt_topicpath() {
String topicpath = var_char_sensor_hausName ;
topicpath += "/";
topicpath += var_char_sensor_wohnungsName ;
topicpath += "/";
topicpath += var_char_sensor_raumName ;
topicpath += "/";
topicpath += var_char_sensor_sensorName;

return topicpath;
}

void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("*INFO:DO :Payload Topic Check");
Serial.print("***********Message arrived in topic: ");
Serial.println(topic);

Serial.print("***********Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload);
if (strcmp(topic,"A01_Nachtlicht")) {
if ((char)payload == 1)) {
Serial.print("*INFO:DONE:Nachtlicht an");
bool_var_NachtLicht_an = 1;
} else {
Serial.print("*INFO:DONE:Nachtlicht aus");
bool_var_NachtLicht_an = 0;
}
}
}

Serial.println();
Serial.println("----------------------------------");
Serial.println("*INFO:DONE:Payload Topic Check");
Serial.println("*----------------------------------");

}

bool bool_fkt_Subscripe(String Topic) {
Serial.print("*INFO:DO :Topic Check");
int int_var_Counter = 0;
while (int_var_Counter < 5){
client.subscribe(Topic.c_str());
client.loop();
int_var_Counter = int_var_Counter + 1;
}
Serial.print("*INFO:DONE:Topic Check");
}

/*
------------------------------------------------------------------------------------------------
SETUP für die Webseiten
------------------------------------------------------------------------------------------------
*/

void SITE_void_handleRoot() {
Serial.println("*INFO:DO :Öffne RootWebseite");
String root_content = Index_Startseite;
root_content.replace("{v}", "Startseite");
root_content.replace("{h}", String(WiFi.macAddress()));
// root_content.replace("{setup_topicPathToValue}", str_fkt_topicpath());
root_content.replace("{infhas}", var_char_sensor_hausName);
root_content.replace("{infwos}", var_char_sensor_wohnungsName);
root_content.replace("{infrooms}", var_char_sensor_raumName);
root_content.replace("{infsens}", var_char_sensor_sensorName);
root_content.replace("{inftemp}", String(float_fkt_getTemp()));
root_content.replace("{infhum}", string_var_Luftfeuchtigkeit);
root_content.replace("{inflit}", String(float_fkt_getLicht()));
root_content.replace("{infbewg}", string_var_Bewegungsmelder);
root_content.replace("{infNalicht}", String(bool_var_NachtLicht_an).c_str());
root_content.replace("{infNoLicht}", String(bool_var_Notlicht_an).c_str());
root_content.replace("{ssmqqb}", var_char_mqtt_server);
root_content.replace("{smqqp}", String(var_int_mqtt_port));
root_content.replace("{smqqln}", var_char_mqtt_user);
root_content.replace("{smqqt}", str_fkt_topicpath());
root_content.replace("{snwlssid}", var_char_mqtt_user);
root_content.replace("{snwlIP}", WiFi.localIP().toString());
server.send(200, "text/html", root_content);
Serial.println("*INFO:DONE:Öffne RootWebseite");
Serial.println("*----------------------------------");
}


/*
------------------------------------------------------------------------------------------------
Looooooooping!
------------------------------------------------------------------------------------------------
*/
void loop() {
Serial.println("############################################################################");
Serial.println("*INFO:DO :RUN LOOP START JETZT");
String TMP_string_var_Temperatur = String(float_fkt_getTemp());
String TMP_string_var_Luftfeuchtigkeit = String(float_fkt_getHum());
String TMP_string_var_Umgebungslicht = String(float_fkt_getLicht());
String TMP_string_var_Bewegungsmelder = String(bool_fkt_getMotion());
String TMP_string_var_WLANProzent = String(int_fkt_WLANProzent(WiFi.RSSI()));

while (!client.connected()) {
Serial.println("*INFO:DO :MQTT CONNECT");
Serial.println("Connecting to MQTT...");//
if (client.connect(WiFi.macAddress().c_str(), var_char_mqtt_user, var_char_mqtt_password )) {
Serial.println("connected");
Serial.println("*INFO:DONE:CHECK MQTT CONNECTION - OK");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}


if (client.connected()) {
//client.setCallback(callback);
Serial.println("*INFO:DO :CHECK MQTT PUSH / GET NEUE WERTE");


if (string_var_Temperatur != TMP_string_var_Temperatur ) {
string_var_Temperatur = TMP_string_var_Temperatur;
client.publish(Value1.c_str(), string_var_Temperatur.c_str());
}

if (string_var_Luftfeuchtigkeit != TMP_string_var_Luftfeuchtigkeit) {
string_var_Luftfeuchtigkeit = TMP_string_var_Luftfeuchtigkeit;
client.publish(Value2.c_str(), string_var_Luftfeuchtigkeit.c_str());
}

if (string_var_Umgebungslicht != TMP_string_var_Umgebungslicht) {
string_var_Umgebungslicht = TMP_string_var_Umgebungslicht;
client.publish(Value3.c_str(), string_var_Umgebungslicht.c_str() );
}

if (string_var_Bewegungsmelder != TMP_string_var_Bewegungsmelder) {
string_var_Bewegungsmelder = TMP_string_var_Bewegungsmelder;
client.publish(Value4.c_str(), string_var_Bewegungsmelder.c_str() );
}

if ( String(int_fkt_WLANProzent(WiFi.RSSI())) != TMP_string_var_WLANProzent) {
TMP_string_var_Bewegungsmelder = String(int_fkt_WLANProzent(WiFi.RSSI()));
client.publish(Value15.c_str(), String(int_fkt_WLANProzent(WiFi.RSSI())).c_str());
}
//client.loop();
bool_fkt_Subscripe(Value9);
bool_fkt_Subscripe(Value10);
bool_fkt_Subscripe(Value11);

//client.publish(Value5.c_str(), "90%" );
//client.publish(Value6.c_str(), String(WiFi.localIP()).c_str());
//client.publish(Value7.c_str(), "0" );
//client.publish(Value8.c_str(), "0" );

//Serial.println(client.subscribe(Value10.c_str())); // optischer Alarm
//client.subscribe(Value11.c_str()); // akkustuscher Alarm
//client.subscribe(Value14.c_str()); // Akkubetrieb
Serial.println("*INFO:DONE:CHECK MQTT PUSH / GET NEUE WERTE");
}


server.handleClient();
delay(10000);
Serial.println("############################################################################");
}

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 13.03.2018, 23:04

Wie auch in Facebook unterhalte ich mich hier mal alleine :-)
===
Ich hab mein Subscribe am laufen.
Jetzt auch mit nur zwei Sekunden maximale Verzögerung:

Kann mein Fehler jemand bestätigen:
Ich habe alle client.subscribe() in den Loop plus die client.loop() in den loop() gepackt. Ich vermute, dass das der Fehler war!

Jetzt wo ich alle client.subscribe() im Setup habe läuft es auch wie es soll
und der client.loop() läuft in der normalen loop()

Dann kann ich mich jetzt ja weiter ans Werk machen. Hoffentlich kommen morgen die restlichen Bauteile :-)

Thisoft
professional
Beiträge: 673
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von Thisoft » 14.03.2018, 09:15

Ja, ganz richtig. Alle .subscribes() gehören in die Setup-Routine.
Alle Publishes und das Client.loop() gehören in die Loop.
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 14.03.2018, 15:41

Top,

dann war das der Hacken an der Geschichte :-)
Lt. Amazon ist auch mein Packet schon da - 1x OLED und 1x ein neuer PIR.
Warum auf einmal OLED: Ganz einfach, ich habe nicht immer Lust mein Handy zu zücken oder zum Tablet gehen nur um Temperatur usw. abzulesen.
So geht das on-the-Fly beim vorbei gehen :-) (Und ich kann mir gleich noch die Uhrzeit anzeigen lassen)

Wenn das klappt und alles Fertig ist, kann ich mal groß in China bestellen :)

Wal
starter
Beiträge: 68
Registriert: 14.04.2017, 22:08

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von Wal » 14.03.2018, 15:57

Meine Sensoren habe grundsätzlich Oled.
DSC_0194.JPG
DSC_0194.JPG (42.26 KiB) 534 mal betrachtet
Dateianhänge
DSC_0107.JPG
DSC_0107.JPG (122.55 KiB) 534 mal betrachtet
Gruß
Walter

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 14.03.2018, 22:40

Hey, kannst du mir sagen, welche LIB du dafür verwendest?
Ich habe jetzt zwei Stück ausprobiert, aber bin mit keiner Glücklich

#include <ACROBOTIC_SSD1306.h> // Eigentlich SUPER! Schön Einfach, aber nur 2 versch. Schriftgrößen.
Ich hätte gerne was wie 14 oder 16

#include <U8g2lib.h> // Kann versch. Schriftgrößen, aber vom Rest her zu komplex und nervig. Schlimm auch das er
immer vom Buffer auf den Display schreiben muss...
Dann blinkt das Display - und es lässt das den ESP8266 auch mal hängen. Nervig!

Wal
starter
Beiträge: 68
Registriert: 14.04.2017, 22:08

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von Wal » 14.03.2018, 23:01

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Gruß
Walter

mrmomba
starter
Beiträge: 34
Registriert: 07.03.2018, 22:28

Re: [Projekt] Der Community-Sensor MQTT für IOBroker =Российские разработчики приветствуют =

Beitrag von mrmomba » 15.03.2018, 21:42

Hallo Walter,

danke für den Tipp.
Da ich aber mit Delays arbeite usw. habe ich das gleiche Verhalten wie bei der u8glib.
Das Display flackert beim Refresh.
Ok
UNFASSBAR wie viel Zeit man dafür Verschwenden kann! :-)

Ich habe folgendes Konsturk
loop(){
eigeneDisplayFKT();
}

Und die eigeneDisplayFKT hat folgenden Inhalt:
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello, world! Zeile1a");
display.println("Hello, world! Zeile2b");
display.println("Hello, world! Zeile3c");
display.println("Hello, world! Zeile4d");
display.display();

Antworten