Genau - es sah mir fast "zu" einfach aus
Daher hatte ich auch nachgefragt, ob ich ggf. ein Relais o.Ä. zum Schalten nehmen sollte, da Eisbaeeer sicherlich bessere Kenntnis im elektrotechnischen Bereich hat.
Den ESP8266 habe ich mit MicroPython geflasht: https://docs.micropython.org/en/latest/ … intro.html
Da ich den Wemos D1 nicht genau kenne, kann ich dir leider keine präzisen Antworten geben, aber mein MQTT Skript, welches auf dem ESP8266 läuft sieht wie folgt aus:
from umqtt.simple import MQTTClient
from machine import Pin
import machine
import ubinascii
import time
#Config Pin4 as Output for doorOpener
pin = machine.Pin(4, machine.Pin.OUT)
pin.off()
# Modify below section as required
CONFIG = {
# Configuration details of the MQTT broker
"MQTT_BROKER": "<addresse>",
"USER": "<username>",
"PASSWORD": "<password>",
"PORT": <port>,
"TOPIC": b"doorOpener",
# unique identifier of the chip
"CLIENT_ID": b"esp8266_" + ubinascii.hexlify(machine.unique_id())
}
# Method to act based on message received
def onMessage(topic, msg):
print("Topic: %s, Message: %s" % (topic, msg))
if msg == b"on":
pin.on()
time.sleep(1)
pin.off()
def listen():
#Create an instance of MQTTClient
client = MQTTClient(CONFIG['CLIENT_ID'], CONFIG['MQTT_BROKER'], user=CONFIG['USER'], password=CONFIG['PASSWORD'], port=CONFIG['PORT'])
# Attach call back handler to be called on receiving messages
client.set_callback(onMessage)
client.connect()
client.publish("test", "ESP8266 is Connected")
client.subscribe(CONFIG['TOPIC'])
print("ESP8266 is Connected to %s and subscribed to %s topic" % (CONFIG['MQTT_BROKER'], CONFIG['TOPIC']))
try:
while True:
msg = client.wait_msg()
#msg = (client.check_msg())
finally:
client.disconnect()
listen()</port></password></username></addresse>
Das Skript "Gerüst" findest du in der uMQTT Library description wenn ich mich recht erinner und musst es praktisch nur noch für deinen Bedarf anpassen.
Als weiteres Skript benötigst du zum Starten die main.py, die den Microcontroller mit deinem Internet verbindet,ggf. den AccessPoint beendet und das MQTT Skript startet:
import network
import time
sta_if = network.WLAN(network.STA_IF)
#Connect to Wi-Fi
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect('<ssid>', '<password>')
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
#Disable Access Point
ap_if = network.WLAN(network.AP_IF)
ap_if.active(False)
#Import MQTT script to start service
time.sleep(1)
import mqtt_listener</password></ssid>
Auf meinem Smartphone habe ich dann eine MQTT Dashboard App runtergeladen, ebenfalls mit cloudmqtt verbunden (siehe CONFIG Details) und publishe dort per Button die Message "on" unter dem Topic "doorOpener", welches den Pin 4 (bzw. "D2") für 1 Sekunde auf HIGH setzt.
Das etwas geloggt wird. o.Ä. wenn jemand klingelt habe ich bei mir nicht realisiert.
Eisbaeeer hat oben eine Anleitung geschrieben wie es funktionieren kann, wenn du bspw. über einen Optokoppler das Signal am Reed Relais abfängst und an einen Pin der als Input konfiguriert ist weitergibst.
Dann könntest du ja bspw. den Timestamp loggen und weisst so, wiespät jemand bei dir zuhause war
VG!