(Tasmota) Berry Skript

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

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

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.

ShutterDriver
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)

Request for Comments

Loading comments...