kopia lustrzana https://github.com/martin-ger/esp_mqtt
113 wiersze
2.5 KiB
Plaintext
113 wiersze
2.5 KiB
Plaintext
![]() |
% Config params, overwrite any previous settings from the commandline
|
||
![]() |
config ap_ssid MQTTbroker
|
||
![]() |
config ap_password stupidPassword
|
||
![]() |
config ntp_server 1.de.pool.ntp.org
|
||
![]() |
config broker_user Martin
|
||
|
config broker_password secret
|
||
![]() |
config mqtt_host martinshome.fritz.box
|
||
|
config speed 160
|
||
|
|
||
|
% Now the initialization, this is done once after booting
|
||
|
on init
|
||
|
do
|
||
![]() |
% Device number
|
||
|
setvar $device_number = 1
|
||
![]() |
|
||
![]() |
% Status of the relay
|
||
|
setvar $relay_status=0
|
||
|
gpio_out 12 $relay_status
|
||
|
gpio_out 13 not ($relay_status)
|
||
![]() |
|
||
![]() |
% Blink flag
|
||
|
setvar $blink=0
|
||
![]() |
|
||
![]() |
% Command topic
|
||
|
setvar $command_topic="/martinshome/switch/" | $device_number | "/command"
|
||
![]() |
|
||
![]() |
% Status topic
|
||
|
setvar $status_topic="/martinshome/switch/" | $device_number | "/status"
|
||
|
|
||
|
publish local $status_topic $relay_status retained
|
||
|
publish remote $status_topic $relay_status retained
|
||
![]() |
|
||
![]() |
% local subscriptions once in 'init'
|
||
![]() |
subscribe local $command_topic
|
||
![]() |
|
||
|
% Now the MQTT client init, this is done each time the client connects
|
||
|
on mqttconnect
|
||
|
do
|
||
|
% remote subscriptions for each connection in 'mqttconnect'
|
||
![]() |
subscribe remote $command_topic
|
||
![]() |
|
||
|
% Now the events, checked whenever something happens
|
||
|
|
||
|
% Is there a remote command?
|
||
![]() |
on topic remote $command_topic
|
||
![]() |
do
|
||
|
println "Received remote command: " | $this_data
|
||
|
|
||
|
% republish this locally - this does the action
|
||
![]() |
publish local $command_topic $this_data
|
||
![]() |
|
||
|
|
||
|
% Is there a local command?
|
||
![]() |
on topic local $command_topic
|
||
![]() |
do
|
||
|
println "Received local command: " | $this_data
|
||
|
|
||
|
if $this_data = "on" then
|
||
![]() |
setvar $relay_status = 1
|
||
|
setvar $blink = 0
|
||
|
gpio_out 12 $relay_status
|
||
|
gpio_out 13 not ($relay_status)
|
||
![]() |
else
|
||
|
if $this_data = "off" then
|
||
![]() |
setvar $relay_status = 0
|
||
|
setvar $blink = 0
|
||
|
gpio_out 12 $relay_status
|
||
|
gpio_out 13 not ($relay_status)
|
||
![]() |
endif
|
||
![]() |
endif
|
||
|
if $this_data = "toggle" then
|
||
![]() |
setvar $relay_status = not ($relay_status)
|
||
|
gpio_out 12 $relay_status
|
||
|
gpio_out 13 not ($relay_status)
|
||
![]() |
endif
|
||
|
if $this_data = "blink" then
|
||
![]() |
setvar $blink = 1
|
||
![]() |
settimer 1 500
|
||
|
endif
|
||
|
|
||
![]() |
publish local $status_topic $relay_status retained
|
||
|
publish remote $status_topic $relay_status retained
|
||
![]() |
|
||
|
|
||
![]() |
% The local pushbutton
|
||
![]() |
on gpio_interrupt 0 pullup
|
||
|
do
|
||
|
println "New state GPIO 0: " | $this_gpio
|
||
|
if $this_gpio = 0 then
|
||
![]() |
setvar $blink = 0
|
||
|
publish local $command_topic "toggle"
|
||
![]() |
endif
|
||
|
|
||
|
|
||
|
% Blinking
|
||
|
on timer 1
|
||
|
do
|
||
![]() |
if $blink = 1 then
|
||
|
publish local $command_topic "toggle"
|
||
![]() |
settimer 1 500
|
||
|
endif
|
||
|
|
||
|
|
||
|
% Switch on in the evening
|
||
|
on clock 19:30:00
|
||
|
do
|
||
![]() |
publish local $command_topic "on"
|
||
![]() |
|
||
|
% Switch off at night
|
||
|
on clock 01:00:00
|
||
|
do
|
||
![]() |
publish local $command_topic "off"
|