kopia lustrzana https://github.com/martin-ger/esp_mqtt
119 wiersze
2.7 KiB
Plaintext
119 wiersze
2.7 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 ("* 1" to make even "" a number)
|
|
setvar $device_number = @1 * 1
|
|
|
|
% @<num> vars are stored in flash and are persistent even after reboot
|
|
setvar $run = @2 + 1
|
|
setvar @2 = $run
|
|
println "This is reboot no "|$run
|
|
|
|
% 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
|
|
|
|
% 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
|
|
|
|
publish remote $status_topic $relay_status retained
|
|
|
|
% 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"
|