(Tasmota) Berry Skript
Allgemeines
Mit dem Tasmota fuer den ESP32 hat eine weitere Skriptsprache "Berry Skript" Einzug gehalten.
Berry language by Guan Wenliang https://github.com/Skiars/berry
Sie kommt mich nicht ganz so sperrig wie "normale" eine Skriptsprache vor und ist mit MicroPython (siehe Berry Introduction ganz am Ende) vergleichbar.
Die Dokumentation bei Tasmota beschraenkt sich auf
- [https://tasmota.github.io/docs/Berry/
- Berry Introduction (in 20 minutes or less)
- [https://github.com/berry-lang/berry/wiki/Reference
- [https://tasmota.github.io/docs/Berry-Cookbook/
Die Dokumentation erscheint mir nicht vollstaendig zu sein, oder es fehlen einfach zu oft Beispiele oder eine genaue vollstaendige Syntaxbeschreibung.
Die Beispiele auf die man zum besseren Verstaendnis zurueckgreifen kann sind noch Mangelware. Die Orginaldokumentation (s.o.) hat etwas mehr zu bieten.
Eines der besten Beispiele, das ich gefunden habe ist hier. Weitere bitte gerne in den Kommentar.
Meine Rollladenmotoransteuerung gibt's demnaechst auch auf Github. Hier schon mal vorab eine Beta.
import webserver # import webserver class
class MyButtonMethods : Driver
#- create a method for adding a button to the main menu -#
def web_add_main_button()
webserver.content_send("<p></p><button onclick='la(\"&m_toggle_main=1\");'>Toggle Main</button>")
end
def set_gpio(gpio1,gpio2)
gpio.digital_write(27,gpio1)
gpio.digital_write(14,gpio2)
end
#- As we can add only one sensor method we will have to combine them besides all other sensor readings in one method -#
def web_sensor()
import string
import persist
if persist.find("state",-1) == -1
gpio.digital_write(27,0)
gpio.digital_write(14,0)
persist.state=0
persist.save()
end
if webserver.has_arg("m_toggle_main")
log("Button pressed",2)
log(string.format("State before: %s",persist.state),2)
var rel1 = gpio.digital_read(27)
var rel2 = gpio.digital_read(14)
string.format("Relais 1: %s Relais 2: %s",rel1,rel2)
log(string.format("Relais 1: %s Relais 2: %s",rel1,rel2),2)
var set = false
if rel1 == 0 && rel2 == 0 && !set && persist.find("state") != 0 && persist.find("state") != 2 # wenn state und relaiszusand 'asynchron' sind
gpio.digital_write(14,0)
gpio.digital_write(27,0)
persist.state = 0
set = true
end
if rel1 == 0 && rel2 == 0 && !set
if persist.find("state") == 0
#gpio.digital_write(27,1)
tasmota.set_timer(1000, /->self.set_gpio(1,0))
persist.state = 1
set = true
end
if persist.find("state") == 2
#gpio.digital_write(14,1)
tasmota.set_timer(1000, /->self.set_gpio(0,1))
persist.state = 3
set = true
end
end
if rel1 == 1 && rel2 == 0 && !set
#gpio.digital_write(27,0)
tasmota.set_timer(0, /->self.set_gpio(0,0))
persist.state = 2
set = true
end
if rel1 == 0 && rel2 == 1 && !set
#gpio.digital_write(14,0)
tasmota.set_timer(0, /->self.set_gpio(0,0))
persist.state = 0
set = true
end
if rel1 == 1 && rel2 == 1 && !set # sollte niemals nie vorkommen !!!
#gpio.digital_write(14,0)
#gpio.digital_write(27,0)
tasmota.set_timer(0, /->self.set_gpio(0,0))
persist.state = 0
set = true
end
log(string.format("State now: %s",persist.state),2)
rel1 = gpio.digital_read(27)
rel2 = gpio.digital_read(14)
string.format("Relais 1: %s Relais 2: %s",rel1,rel2)
log(string.format("Relais 1: %s Relais 2: %s",rel1,rel2),2)
var msg = string.format(
"{s}Relais 1{m}%s{e}"..
"{s}Relais 2{m}%s{e}",
rel1, rel2)
tasmota.web_send(msg)
end #if
end #def
end #class
d1 = MyButtonMethods()
tasmota.add_driver(d1)