NEWS
[Projekt][ALFA] Der Community-Sensor MQTT für IOBroker
-
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
-
Meine Sensoren habe grundsätzlich Oled.
-
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!</u8g2lib.h></acrobotic_ssd1306.h>
-
#include <adafruit_gfx.h>#include<adafruit_ssd1306.h></adafruit_ssd1306.h></adafruit_gfx.h>
-
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.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();
-
Alles klar, ich hab mein Fehler gefunden
-
Ich freue mich, dass ich euch jetzt die Beta auf den Weg geben darf:
Anschluss der Komponenten wie folgt:
#define DHTPIN 13 // Am WEMOS mini D1: D7
#define LDRPIN A0 // Am WEMOS mini D1: A0
#define MOTIONPIN 15 // Am WEMOS mini D1: D8
#define LED_Weiss 0 // Am WEMOS mini D1: D3
Funktionen die Vollständig funktionieren:
-
Bewegungserkennung
-
MQTT PUB/SUB
-
DHT22
-
Umgebungslicht
-
OLED mit 4 wechselnde Anzeigen:
(Uhrzeit, DHT-Werte, 2x Status wie SSID Signal Topic)
6321_iomqttsensors-beta1.7z
6321_smarthome-multisensor-stand_2018-mar-16_11-37-55pm-000_customizedview22139147982.jpg
6321_smarthome-multisensor-stand_2018-mar-16_11-38-14pm-000_customizedview6089617045.jpg
6321_smarthome-multisensor-stand_2018-mar-16_11-38-32pm-000_customizedview29171863816.jpg -
-
Hallo,
ich habe gerade ein interessantes Phänomen: Ständig wiederkehrende Probleme beim LOG über MQTT
(Siehe Screenshot)
Ok, was passiert hier?
Ich habe noch etwas am Script rumgebaut: Damals habe ich mir die Tages-Zeit über eine Libary direkt geholt. Problem: Die kannte keine Sommer & Winterzeit. Also will ich die Zeit über MQTT verteilen - das klappt:
Im Topic: info/SystemZeit lasse ich JEDE Minute die aktuelle Zeit einschreiben, das regelt ein Blockly im IOBroker für mich.
Im Topic: info/SystemDatum kommt der aktuelle Tag rein, ebenfalls ein Script im IOBROKER.
Das funktioniert auch OHNE Probleme. Die Werte sind jede Minute abrufbar - Überprüfung mittels MQTT.fx-Client.
Das Abrufen klappt auch IMMER nach dem Neustart des ESP8266 und auch einige Zeit nach dem Neustart. Aber irgendwann hört es auf
(Ich lasse mir die aktuelle Zeit auf OLED ausgeben UND zusätzlich als "zuletzt gesehen bzw. Timestamp" zurück geben) Und das verstehe ich nicht. Da die Callbackfunktion ja rennen müsste. (Timestamp)
Client.loop steht nachwievor in der Loop()
Callback hat folgendne Inhalt:
ODER
! void callback(char* topic, byte* payload, unsigned int length) {
! pinMode(BUILTIN_LED, OUTPUT);
! Serial.println("*INFO:DO :Payload Topic Check");
! Serial.print("***********Message arrived in topic: ");
! Serial.println(topic); // Zeige Topic auf Serial an.
! digitalWrite(BUILTIN_LED, LOW); // Interne LED bei CALLBACK an
! int PayloadLength = 0; // Payloadlänge = 0;
! Serial.print("***********Message:");
! for (int i = 0; i < length; i++) {
! Serial.print((char)payload__);
! PayloadLength = i; // Payloadlänge = Gezählt;
! }
! if (String(topic) == Value9){ // Wenn Topic xyz_Nachtlicht ist
! if ((char)payload[0] == '1') { // Wenn Wert im Topic xyz_Nachtlicht == 1 ist
! bool_var_NachtLicht_an = 1; // dann setze globale Variable auf 1;
! bool_fkt_getAktor_Nachtlicht(bool_var_NachtLicht_an); // und Rufe Funktion auf für PIN = HIGH
! } else { // ODER Wenn Wert im Topic xyz_Nachtlicht != 1 ist
! bool_var_NachtLicht_an = 0; // dann setze globale Variable auf 0;
! bool_fkt_getAktor_Nachtlicht(bool_var_NachtLicht_an); // und Rufe Funktion auf für PIN = LOW
! }
! }
! if (String(topic) == Value17){ // Wenn Topic SystenZeit ist
! Serial.println("*INFO:DO :SystemZeit Topic Check");
! char *cstringZeit = (char *) payload; // Dann Caste irgendwas (inet Tip: https://github.com/knolleary/pubsubclient/issues/105)
! cstringZeit[PayloadLength+1] = '\0'; // Arrayende
! string_var_SystemZeit = String(cstringZeit); // Schreibe in Globale Variable
! Serial.println(String(cstringZeit));
! }
! if (String(topic) == Value18){ // Wenn Topic SystenDatum ist
! Serial.println("*INFO:DO :System Datum Topic Check");
! char *cstringDatum = (char *) payload; // Dann Caste irgendwas (inet Tip: https://github.com/knolleary/pubsubclient/issues/105)
! cstringDatum[PayloadLength+1] = '\0'; // Arrayende
! string_var_SystemDatum = String(cstringDatum); // Schreibe in Globale Variable
! Serial.println(String(cstringDatum));
! }
! client.loop();
! Serial.println();
! digitalWrite(BUILTIN_LED, HIGH);
! Serial.println("INFO:DONE:Payload Topic Check");
! Serial.println("–--------------------------------");
! }__ -
Ich habe den Fehler noch immer nicht gefunden, habe aber z.B. eine Interessante Beobachtung gemacht - durch Zufall:
Mitten im Betrieb hat der ESP8266 einfach die Setuproutine erneut durchgelaufen…
Hat der sich aufgehangen?
Kann das Problem vielleicht darin liegen das ich millis() in einer Variable schreibe und die Vollläuft?
Auch frage ich mich, ob es schlau ist, die Variable AUSSERHALB der Loop zu initialisieren:
!
static unsigned long TMP_logn_var_TimeStamp = millis(); static unsigned long TMP_logn_var_TimeStampPublish = TMP_logn_var_TimeStamp; int int_var_MenueLevel = 1; void loop() { Serial.println("############################################################################"); Serial.println("*INFO:DO :RUN LOOP START JETZT");s //MUCH MORE FOLLOWS }; !
-
Das erste was ich kontrollieren würde ist die Stromversorgung des ESP.
Setup durchlaufen = Reset.
Du hast ja noch einige Sensoren dabei, die brauchen auch Strom….
Probleme durch mangelnde Versorgung sind weit häufiger als vermutet.
BAu mal einen großen Kondensator an den Anschluß des Netzteils.
Wenn die Variable überläuft, fängt sie von 0 an, das löst normalerweise keinen Reset des Controllers aus...
Grüße
Tom
-
Ich würde drauf tippen dass sich der Reset-Eingang des ESP irgendwas einfängt. Der sollte definiert beschalten werden wie z.B. hier beschrieben https://blog.thesen.eu/esp8266-reset-pr … -schalten/
-
Hallo,
<size size="150">vielen Dank an euch beiden.</size>
Ich habe mich der Versorgungsproblem mal angenommen, allerdings nicht wie da beschrieben, mangels Kondensatoren.
Nun hab ich es wie folgt umgesetzt:
USB-Kabel von einer defekten Tastatur abgeschnitten und auf den 5V Pin des ESPs gelegt. (Also 5V direkt vom Handyladegerät).
Parallel dazu ein 5V-3.3V LinearspannungsDingens mit 0.8A verbaut um die Versorgungsspannung aller 3.3V Komponenten zur Verfügung gestellt.
Ich habe die Resetempfindlichkeit getestet, ich kann mit meinen Finger / Metallprüfspitze dran patschen. passiert nichts.
Ist der resetpin identisch zum Resettbutton am WEMOS D1?
EBENFALLS habe ich noch etwas Code optimiert.
1. Ich habe z.B. für alle xyz-Sekunden mit Millis() gearbeitet - mehrmals im Loop - das fand ich Kacke.
Nun lasse ich Millis() in Sekunden umrechnen und ein (Sekunden)Counter hochzählen und nutze den - das heißt alle 4 Durchläufe wird Millis() 2x Benutzt. IRGENDWANN wird auch der CONST LONG mit Sekunden überlaufen, vermutlich aber bedeutend später als wenn da ein nackter millis()-Wert drin steht.
2. habe ich das Publishing der Werte auf 15 Sekunden gestellt (Wo Sinnvoll)
3. ich habe mehrfache Funktionsnutzungen in der Loop - wo sinvoll möglich - versucht zu reduzieren.
4. Funktionen wurden angepasst, schleifen und weitestgehend alle delays() entfernt.
Heute läuft das Ding super - Uptime seit 44434 Sekunden und letzter Timestamp ist genau in dieser Minute gewesen (Lass ich mir vom Sensor zurück geben)
So langsam läuft das Projekt Softwareseitig dem Ende entgegen. Ich habe aber durchaus auch ein paar Funktionen weggelassen, gestrichen, weil es sonst den Sensor meiner Meinung nach überlädt. Ich werde das alles noch einmal neu Skizzieren
-
Moin Zusammen,
ich habe mal eine Frage:
Darf ich den Wemos D1 Mini sowohl den 3,3V als auch den 5V Bereich von extern mit Strom versorgen?
Ich habe da so ein lustigen Effekt und ich weiß den noch nicht einzuordnen.
-
Wie meinst du denn das genau?
Meinst du 3,3V und 5 V aus komplett verschiedenen Netzteilen oder wie?
Ich versteh deine Frage nicht so genau…
Grüße
Tom
-
Hallo Zusammen, ich war schon kurz davor, meine Hardware in die Tonne zu schmeißen und hatte einen immensen Frust aufgebaut. Es lief und lief nicht so wie ich will / wollte.
Ich habe mich also nach über einen Monat mal wieder hingesetzt und weiter gearbeitet.
Es ist natürlich alles noch im ALFA-Status, kein Beta.
=> Was hat sich geändert?
-
DHT22 in die Tonne (nach Kurzschluss) geschmissen, und auf BME280 gewechselt, sau-geiles Teil!!! inkl. Barometer.
-
ausschließlich externe Stromversorgung.
Natürlich habe ich glatt wieder ein Problem, während in meinen einen Sketch der OLED ohne Kummer arbeitet, bekomme ich diesen nun wieder nicht zu laufen. Naja, was solls, erstmal muss der Rest laufen.
-
-
Hallo,
hab mal alles überflogen und frag mich wieso so umständlich. Ich mache gerade denke ich fast das selbe aber nur mit der Sonoff-Tasmota Firmware.
Ist doch eigentlich alles da drinnen was man an Modulen benötigt. Und mir fehlen leider noch paar Bauteile.
Bis jetzt läuft:
-RGB WS2812
-Infrarot Senden / Empfangen
-Temperatur über DHT11,Am2301,DS18x20
-halt normal Ansteuerung von Bewegungsmelder,Relais,Taster,Schalter,High / Low
Noch bin ich am 433Mhz da fehlen mir noch die Teile aus China
Würde denke auch alles mit ESP-Easy gehen.
-
Halle B3ta,
ich habe mit Tasmota auf dem Wemos rumgespielt, aber er übermittelt mir einfach nicht zuverlässig (oder eher gar nicht) die Werte. Ich bin nach meinem Frust zu ESP-Easy (GRAUENHAFTE UI) und Tasmota gewechselt.
Hier mal mein Leidensweg, bei Facebook beschildert:
-
Kann den Link leider nicht sehen da ich nicht in der FB gruppe bin.
-
achso, ich schau mal wie ich das zusammengefasst bekommen habe.
Aber,
ich werde wohl an diesem Projekt jetzt festhalten.
-
Und mal wieder mit einer neuen Version:
Was wird verwendet?
-
LDR auf AnalogIn
-
OLED Display
-
BMP280 Temp / humidity / Barrometer
-
Bewegungsmelder
Was wird benötigt?
- MQTT
einen Pfad im MQTT: "info/SystemZeit" der vom Iobroker über Blockly minütlich die neue Uhrzeit bekommt (Oder String: 00:00)
einen Pfad im MQTT: "info/SystemDatum" der vom Iobroker über Blockly Täglich Datum bekommt (Oder String 00.01.2002)
Was tut er:
-
<u>alle 10 Minuten</u> werden die Werte vom Sensor die Werte zum Brocker/Server geschickt
-
Bewegungserfassung wird sofort zum Brocker/Server geschickt
KLEINES UPDATE 09.07
Webserver implementiert. Allerdings nur mit rudimentärer Anzeige. Taugt sonst nicht weiter für mehr Informationen.
6321_iomgttsensor3-alfa.7z -