mqtt on/off message on button press
-
for those who searched and need a simple sketch on how to send an ON/OFF MQTT message with a switch here it is:
Based on a GPY, commented are for WIFI, use accordingly.
enjoy.
from network import LTE from machine import Pin from umqtt import MQTTClient import machine import time is_pressed = False button = Pin("P10", mode=Pin.IN, pull=Pin.PULL_UP) def settimeout(duration): pass lte = LTE() # Modem does not connect successfully without first being reset. print("Resetting LTE modem ... ", end='') lte.send_at_cmd('AT^RESET') print("OK") time.sleep(1) print("Configuring LTE ", end='') lte.send_at_cmd('AT+CGDCONT=1,"IP","yourAPN"') print(".", end='') lte.send_at_cmd('AT!="RRC::addscanfreq band=2, 4, 5 dl-earfcn=9410"') print(".", end='') lte.send_at_cmd('AT+CFUN=1') print(" OK") if not lte.isattached(): print("Attaching to LTE network ", end='') lte.attach() while(True): if lte.isattached(): print(" OK") break print('.', end='') time.sleep(1) # Once attached, connect() should succeed. if not lte.isconnected(): print("Connecting on LTE network ", end='') lte.connect() while(True): if lte.isconnected(): print(" OK") break print('.', end='') time.sleep(1) lte.connect() while not lte.isconnected(): machine.idle() print("Connected to LTE\n") #wlan = WLAN(mode=WLAN.STA) #wlan.antenna(WLAN.EXT_ANT) #wlan.connect("yourwifi", auth=(WLAN.WPA2, "yourpass"), timeout=5000) #while not wlan.isconnected(): #print("Connected to Wifi\n") client = MQTTClient("joe", "yourMQTTbroker", port=1883) client.settimeout = settimeout client.connect() while True: if button() == 1 and not is_pressed: time.sleep(1) elif button() == 0 and not is_pressed: print("Button pressed") print("Sending ON") client.publish("/gpy", "ON") is_pressed = True time.sleep(1) elif button() == 1 and is_pressed: print("Button released") print("Sending OFF") client.publish("/gpy", "OFF") is_pressed = False time.sleep(1) else: pass -
@jupiter8 thx for your code :)
This is what I was looking for.
Is there a way to disconnect Lte to save power and only power up to send the message?
I did some adjustments to check connectivity but I can’t break
the loop.. so the Message is send again after a undefined period of time..
Next thing: the program exit on error 104 if the button debounce (reed contact)
Awesome would be something like:
In deepsleep wait for interrupt - if interrupted by button
Connect to lte > publish actual state of button/reed ( door locked / door unlocked & door closed / door open) + Rtc and battery (ok / low/ warning) > disconnect Lte > deepsleep. > wait for interrupt.Is this easy to develop or never can be handled by an newbie??
Kind regards
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login