Jeg bruger Home Assistant til at styre en del automatik i hjemmet.
Det kører på en lille Intel NUC-computer under linux (Ubuntu).
Bl.a. måler jeg når der kommer post i postkassen, og igen
når postkassen tømmes. Det bliver vist på en lille
tablet i stuen der også viser alle mulige andre nyttige ting -
de næste dages vejr, temperaturen ude og inde, aktuelt strømforbrug
i huset, sidste døgns regnmængde og så videre.
Jeg har sat to kontakter fast inde i postkassen. Den ene brydes når
den smalle lem foroven i postkassen åbnes, altså når
der smides post i kassen. Jeg har brugt en kontakt med 3 ben, så
man kan få en forbindelse imellem to ben når kontakten ikke
trykkes ind, og så den afbrydes når den trykkes ind (hvis
man forbinder benene omvendt får man den modsatte måling,
som man normalt bruger en kontakt, men det skal vi ikke her).
Den anden kontakt sidder så den brydes når den store lem
i postkassen åbnes, den man åbner når man tømmer
postkassen.
Når der kommer post vækkes ESP'en og sender et "1"
til MQTT-brokeren i Home Assistant.
Når postkassen tømmes, så fungerer vores postkasse
sådan at den store klap (som man får posten ud af) også
åbner den lille klap (som posten kommer ind ad). Så når
vi tømmer kassen, så vækkes ESP'en igen, men nu er
den anden knap (til den store låge) sluttet idet ESP'en vækkes,
og det får den til at sende noget andet, nemlig et "0".
Det betyder selvfølgelig at mekanikken og programmet her er ret
så afhængigt af udformningen af postkassen...



Bemærk at for at forhindre at klappen til postindkast skal stå
og klapre når det blæser, så har jeg lavet et lille
snoretræk med et lod (en sten)...

Processoren, en ESP8266-01

Diagram:
Esp-processoren blev programmeret i Arduino IDE og brændt vha
en "USB adaptor to ESP8266 Serial Wireless Wifi Module CH340G".
Bemærk at for at bruge adapteren på billedet, så skal
man modificere den med en kontakt (google det eller se her: https://makeradvisor.com/esp8266-esp-01-usb-serial-programmer
)

Programmet der er lagt i ESP8266-01'en ser ud som følger:
/* 3/6 2019 Postkassefoeler
*
* ESP-01 (AI-Cloud) *
Måler om postkassen fyldes eller tømmes, og går i
deep sleep resten af tiden. Sender 1 eller 0 (fuld eller tom) til
*
mqtt-broker Mosquitto i Home Assistant (med retain-flaget sat, fordi
der sendes så sjældent) Settings i Arduino 1.8.9 IDE: Board:
Generic ESP8266 Module Upload Speed: 115200 CPU: 80 Crystal: 26! Flash
Size: 1M no SPIFF Flash mode: DIO Flash Frequency: 40 Reset Method:
ck Erase Flash: Only Sketch Postkasseklappen (øverst) kontakt
forbinder RST med stel - det vækker ESP'en fra deep sleep Nederste
låge (tømning) forbindes med GPIO2, der forbindes med GPIO0.
GPIO0 sættes som output og LOW i setup. Både GPIO0, GPIO2,
RST og CH_PD forbindes til 3V igennm hver sin 3K3 modstand ESP01 forsynes
med 2 1,5V batterier (3V) */ #include "ESP8266WiFi.h" #include <Wire.h>
#define SERIAL_BAUD 115200 #include <ESP8266mDNS.h> #include <WiFiUdp.h>
#include <ArduinoOTA.h> #include "EspMQTTClient.h" ADC_MODE(ADC_VCC);
//vcc read const char* ssid = "Your-WiFiSSID"; //String const char*
password = "Your-WiFiPassword"; String postkasseStatus = ""; //1 = Fuld,
0 = Tom. String postkasseBatteri = ""; int knapTom = 2; //Postkasselågen
(tømning) er på GPIO2 int knapFyld = 0; //Klappen (fyldning)
er på GPIO0 boolean knapTomStatus = LOW; // boolean knapFyldStatus
= LOW; WiFiClient wificlient; extern "C" { #include "gpio.h" } extern
"C" { #include "user_interface.h" } EspMQTTClient client( "Your-WiFiSSID",
// Wifi ssid "Your-WiFiPassword", // Wifi password "192.168.2.6", //
MQTT broker ip 1883, // MQTT broker port "MQTTusername", // MQTT username
"MQTTpassword", // MQTT password "Postkasse-sender", // Client name
sendMQTT, // Connection established callback true, // Enable web updater
true // Enable debug messages ); //////////////////////////////////////////////////////////////////
void setup() { Serial.begin(SERIAL_BAUD); // while (!Serial) {} // Wait
Serial.println("Woke up from sleep"); pinMode(0, OUTPUT); // Sætter
GPIO0 som output digitalWrite(0, LOW); // og tvinger den lav //LOW pinMode(2,
INPUT); //Postkasselågen (tømning) er på GPIO2 knapTomStatus = digitalRead(2);
if (knapTomStatus == LOW) { postkasseStatus = "0"; } else { postkasseStatus
= "1"; } Serial.println(postkasseStatus); postkasseBatteri = ESP.getVcc()
/ 1000.0; WiFi.begin ( ssid, password ); // Wait for connection while
( WiFi.status() != WL_CONNECTED ) { delay ( 10 ); } Wire.begin(); //
Pause for at varme lidt op igen Serial.println("Pause i 0.5 (0) sekunder");
delay(50); ArduinoOTA.handle(); client.loop(); delay(60000); // 30 sekunder
til evt omprogrammering Serial.println("Går i deep sleep for evigt,
indtil der kommer eller tømmes post igen (øverste klap
åbnes)"); ESP.deepSleep(0); // 0 = forever } void loop() { } void
sendMQTT() { client.publish("ude/postkasse", postkasseStatus, true);
//true = retain-flag, for at mqtt-brokeren holder værdien ved
client.publish("ude/postkasse/batteri", postkasseBatteri, true); //
evt genstart af hassio Serial.print("sendMQTT postkasseStatus: "); Serial.println(postkasseStatus);
}
I Home Assistant kører MQTT-brokeren Mosquitto. Det er dens
(og Home Assistants) IP-adresse der hedder "MQTT broker ip"
i koden. I HA's brugerflade, i Supervisor - Mosquitto broker, konfigurerer
man brugernavn og password.
Når der er post er sensor.postkasse's tilstand=1 og man kan vise det
i Home Assistant som f.eks sådan her: