ESP8266 - Tür und Fenster Sensor/Alarm mit sehr geringem Standby verbrauch (<1µA)

  • Hallo,


    also erst einmal ....Klasse Sache!
    Aber hier von mir mal ein kleiner Wunsch und Vorschlag:).
    Wie schaut denn mit einer MQTT Unterstützung aus.
    Könnte man da nicht noch ein kleines Modul einbinden?
    Also ich verwende hier MQTT in Verbindung mit ioBroker und Homematic.
    Ich nutze den ESP mit MQTT, allerdings programmiere ich meine Scripts mit der ArduinoIDE.

  • Hi,


    MQTT unterstützung kommt auf jeden Fall noch, muss nur noch schauen bis wann ich dazu komm.
    Ein einfaches Beispiel für die Arudino IDE wirds auch noch geben.


    Bis dahin könntest du es aber einfach mal selber versuchen. :)
    Beachten muss du nur zwei Dinge:
    1. Der Zustand des Schalters liegt am GPIO5 an
    2. Wenn der ESP fertig ist (die Nachricht also erfolgreich verschickt hat) muss er um sich selber (bzw. das ganze System) auszuschalten den GPIO4 kurz auf HIGH (min. 10ms) und anschließend wieder auf LOW setzen. Schon geht das System wieder in den Standby und wartet auf den nächsten auslöser.


    Mehr setzt das Setup nicht voraus. Alles andere ist optional.


    Hier mal ein sehr einfaches Arduino Beispiel das nichts weiter mach wie den Zustand des Schalters über den UART auszugeben und das System nach 3 Sekunden wieder abzuschalten:


    Vielleicht reicht dir das ja schon. :)
    Und darauf achten dass bei manchen ESP-12 Modulen GPIO4 und GPIO5 vertausch sind.

    DON'T PANIC!

  • Hallo,


    ich denke mal, das probiere ich einfach mal aus.
    Das Wichtigste, also das Shutdown habe ich ja somit.
    Einschalten und seine übliche Prozedur abarbeiten ist ja sozusagen Hardwareseitig extern gelöst.
    Klasse!
    Du hast da auch noch die Möglichkeit vorgesehen einen DS1820 zu installieren, auf welchem Pin ist der?


    Mal noch eine Frage...
    Was ist das für ein 3poliger Magnetkontakt den du da verwendest?
    Gibt es da einen Typ und evtl. eine Bezugsquelle?

  • Nochmal zur Kamera:
    Hier habe ich gerade etwas gefunden. Dort hat jemand ein Projekt zur Verwendung des ESP8266 mit einer Kamera vorgestellt.
    Die dort verwendete Kamera ist eine Arducam Mini, die es für unter 25 EUR gibt. So wie ich das sehe, können aber auch günstigere Module wie diese bereits vorgeschlagene Kamera genutzt werden (Obwohl, wie funktioniert das dann mit der Komprimierung?).

    Edited once, last by bird ().

  • Die Kamera für 7€ kannst du vergessen, Erstens hat die nur 0,3MP und zweitens brauchst du dann einen FPGA oder irgendetwas leistungsstärkeres als ein Arduino oder ein Esp8266.

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

    Edited once, last by petit_miner ().

  • Nettes Projekt, gefällt mir sehr. :thumbs1:


    Leider aber lassen sich die im Eingangsposting genannten Spannungsregler nirgends beschaffen. :no_sad:

  • Der AS1363 ist wirklich nicht einfach zu bekommen. Als "Free Sample" geht es kostenlos über den Hersteller. Der SPX3819 ist dann schon etwas leichter zu bekommen. Wenn Du einen SPX benötigst, aber nicht dran kommst, schreib mir eine PN.


    edit: Eine Platine von dem Projekt könnte ich auch noch abgeben.

  • Das ab ich bei der nächsten Version schon berücksichtigt, die nutzt den SPX3819.


    Man könnte das ganze aber auch leicht abändern und nicht den Spannungsregler selber als Schalter verwenden sondern einen P Kanal MOSFET (wie bspw. den irlml6402) der vor dem "normalen" Regler sitzt.
    Somit könnte man zum Beispiel auch einen AMS1117 verwenden.

    DON'T PANIC!

  • Im Eingangsposting steht:


    Quote

    [font="Thread-000017a0-Id-0000003e"]Fragen, Kritik, Verbesserungsvorschläge? Immer her damit. [/font]


    Ist das noch aktuell?
    Falls ja, würden mir ein paar gerne ein paar Anregungen vorbringen. ;)


  • Ja, gerne.


    Gibt es eine Möglichkeit, dem Attiny beizubringen, dass er, sagen wir mal einmal pro Stunde, den ESP aufweckt, um ein "is alive" zu senden?


    Anders gesagt, wenn sich am Eingang, innerhalb der vor eingestellten Zeit, keine Änderung gegeben hat, dann soll ein "Lebenszeichen" gesendet werden.


    Da ich kein Freund von Cloudcomputing bin und auch keine Gesichtsbücher habe und außerdem kein Vogel bin und somit auch nicht zwitschere, wäre es schön, wenn auch ein "Service" unterstützt werden würde, den man local auf einen (Linux-) Server installieren kann.


    Ich muss jetzt aber zugeben, dass ich mich bisher noch nicht damit befasst habe, aber wenn das richtig überflogen habe, soll so etwas wohl mit MQTT gehen?

    Edited once, last by 3PO ().

  • Ja, würde aber wenn der ATTiny das (per Watchdog) selber machen muss einen erhöhten Stromverbrauch im Standby bedeuten.
    Kann aber gar nicht sagen wie hoch genau. ich schätze so 20µA bis maximal 50µA.


    Genau für diesen Zweck hab ich aber auf der Platine (auch schon bei der ersten) die Möglichkeit vorgesehen ein DS3231 RTC Modul anzuschließen
    und den ATtiny damit aufzuwecken. Damit bleibt der Stromverbrauch im Standby so niedrig wie bisher.
    Zumindest was die belastung der Akkus/Batterien betrifft, die RTC selber braucht ja auch ein bischen Strom wird aber von der Knopfzelle
    die auf dem Modul verbaut ist versorgt. Allerdings ist die irgendwann auch leer sofern es keine Aufladbare ist. Lässt sich aber bestimmt
    auch irgendwie erkennen.


    Hab das aber noch gar nicht ausprobiert und es wird auch noch nicht vom Code unterstützt. Man müsste für die RTC Variante aber nur die ESP Seite
    anpassen, der ATtiny lässt sich jetzt schon über das RTC Modul wecken.


    Einmal pro Stunde aufwecken ist wie ich finde leicht übertrieben. Ich denke bei einem "bin noch am leben" eher an einmal pro Tag oder eigentlich
    sogar >= einmal pro Woche.
    Der eigentlich einzige Grund wieso der Sensor aufhört zu arbeiten ist wegen einem leeren Akku. Da die Akkuspannung aber sowieso mitgeschickt
    wird lässt sich das früh genug erkennen.


    Ich hab inwzischen so gut wie all meine Projekt von NodeMCU/Lua auf die Arduino IDE umgestellt. Meine Sensoren senden die Werte jetzt
    über MQTT an FHEM. Werd den Code demnächst mal aktualisieren.



    Mit ArrestDB ist es jetzt auch schon möglich das ganze lokal laufen zu lassen die Werte in einer Datenbank speichern zu lassen.
    Funkioniert allerdings nicht über MQTT sondern über eine einfache REST API und setzt einen Webserver voraus.


    Im Moment kann man aus folgenden wählen: IFTTT, Pushingbox, Thingspeak und ArrestDB
    Wobei ArrestDB kein Online Service ist sondern ein PHP Skript dass auf meinem Raspi läuft und eine einfache REST API zum lesen und schreiben von Datenbanken bereitstellt.

    DON'T PANIC!

  • Zum Thema "Lebenszeichen" würde mir auch noch folgendes einfallen:


    Um sicherzustellen dass das Gesendete auch angekommen ist, könnte doch der der Server ein Acknowledge zurückgeben.


    Quasi so:
    Event --> WakeUp --> Send State --> Wait for ACK
    Wenn ACK = OK --> sleep
    Wenn kein ACK zurückkommt --> Wait (30 sec.) --> Wiederholung (evtl. 5X)

  • Das ist dann aber doch kein Lebenszeichen sondern eine Empfangsbestätigung.


    Sichergehen dass der Raspi die Nachricht auch bekommen hat ist kein Problem.


    Bei den bisherigen Beispielen werden die Daten alle per HTTP verschickt, dabei
    antwortet der Server immer mit einem bestimmten HTTP Status Code im Header.
    Der Status Code "200 OK" beudeutet im Normalfall dass der Server die Daten bekommen
    hat und auch etwas damit anfangen kann.


    Im Fehlerfall wenn beispielsweise was mit der URL nicht stimmt, ein falscher Parameter, API key oder
    ähnliches angegeben wurde, der Server gerade zu ausgelstet ist, .. antwortet
    er mit einem Status Code ungleich 200.


    Hier der Teil in dem ich dem ich den Status Code prüfe:
    https://github.com/8n1/ESP8266…/arrestdb_request.lua#L63
    Und hier das mit den Wiederholungen im Fehlerfall:
    https://github.com/8n1/ESP8266…blob/master/init.lua#L160

    DON'T PANIC!

    Edited once, last by joh.raspi ().

  • Hallo joh.raspi,



    ich finde diesen Beitrag hier toll und möchte es nun nachbauen, bin leider Recht neu im Thema :D


    Könntest du mir bitte die Widerstände(vor Allem der beim Reed Switch v2., was hat eigentlich die R Angabe zu bedeuten?) und Kondensatoren (wie viel V?) auflisten welche du verwendet hast?
    Will demnächst einen Einkauf beim freundlichen Chinahändler aufgeben.



    Die "fertige" Platine ist natürlich toll, gibt es eine Möglichkeit diese zu erwerben ? :P



    Viele Grüße,


    David

    Edited once, last by echoDave ().

  • Hallo,


    hat von euch schon jemand die Version 3 der Platine getestet und kann mir sagen ob diese korrekt funktioniert?
    Im GIT steht das Version 3 ungetestet ist.


    Weil ich wollte das nachbauen und bin am überlegen, ob ich Version 1 oder 3 nehme...



    Grüße
    Mark

  • Hi all,


    ich baue die Schaltung gerade nach (20 Stück). Habe jetzt bei mehreren Exemplaren reproduzierbar das Problem festgestellt, dass nach einer längeren Ruhezeit (>= ca. 15 min) die erste Schalterbetätigung nicht zuverlässig zum Aufwecken und Start des ESP führt.


    - Umschalter Ruhepegel = 0 V am Attiny
    - beim ersten Betätigen bekommt der ESP kurz Spannung, der Attiny arbeitet aber scheinbar den Interrupt nicht sauber ab, sondern legt sich sofort wieder schlafen.


    alle folgenden Schalterbetätigungen werden einwandfrei erkannt.


    Ich habe nicht die geringste Idee, in welch eRichtung ich hier suchen könnte.

  • Habe den Fehler - wie man in die Irre laufen kann!


    Zuerst habe ich mich von dem Gedanken in die Irre leiten lassen, das wäre ein Fehler in der Interrupt Abarbeitung. (Jede Schalterbetätigung erzeugt einen Pegelwechsel, der einen Interrupt On Port Change auslöst).
    Weil in der Interruptroutine u.a. Timer nicht benutzt werden können, geht auch serial debugging nicht, und ich musste mir mit unterschiedlich getimten Pegelfolgen eine Art Morsecode erzeugen.



    Erkenntnis: Der Interrupt wird korrekt ausgelöst und bearbeitet, der Tiny startet aber nach kurzer Zeit komplett neu, also etwa dann, wenn der ESP anfängt Strom zu ziehen. Der Spannungseinbruch ist mit 50-100 mV nicht ungeheuer groß, reichte aber für Reset.


    Der Fehler ließ sich durch definiert erhöhten Innenwiderstand der Stromversorgung provozieren.
    Abhilfe: Neben einem 100 nF Kerko am Reset Pin (jaja, der gehört da eh immer hin) dicker 10 µF Kerko an Vcc. Jetzt geht die Schaltung bis 1 Ohm Ri. Ungelöst die Frage, warum der Fehler im Akkubetrieb immer nur ein mal aufrat. Akku-Chemie-Magie? Ri sinkt nach erster Strombelastung?

  • Erstmal nochmal vielen Dank für die Entwicklung. Mein Briefkastenmelder hat jetzt ein paar Jahre wunderbar funktioniert. Den 700mAh Akku musste ich nicht einmal laden.
    Meine Zugangsdaten zum Wlan haben sich geändert und ich wollte diese per ESPlorer anpassen. Leider verbindet sich der ESP seitdem nicht mehr mit dem Wlan. Ich habe hier drei verschiedene ESPs zu liegen und mit keinem funktioniert das.
    Einzig mit dem Arduino Sketch bekomme ich eine Verbindung hin. Leider funktioniert damit aber weder die Datums-/Zeitanzeige noch der Temperatursensor.
    Hast du eine Idee, woran die Verbindungsprobleme liegen könnten? Kann man den Arduino Sketch so anpassen, dass die Zeit abgerufen wird?


    Vielen Dank.

    Edited once, last by bird ().