(Tasmota) Berry Skript: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „=Allgemeines= Mit dem Tasmota fuer den ESP32 hat eine weitere Skriptsprache "Berry Skript" Einzug gehalten. Berry language by Guan Wenliang https://github.co…“) |
|||
Zeile 3: | Zeile 3: | ||
Berry language by Guan Wenliang https://github.com/Skiars/berry | Berry language by Guan Wenliang https://github.com/Skiars/berry | ||
+ | |||
+ | Sind kommt nicht mich nicht ganz so sperrig vor wie "normale" Skriptsprache und ist mit MicroPython (siehe Berry Introduction ganz am Ende) vergleichbar. | ||
+ | |||
+ | Die Dokumentation bei Tasmota beschraenkt sich auf | ||
+ | |||
+ | * [https://tasmota.github.io/docs/Berry/ | ||
+ | * [https://tasmota.github.io/docs/Berry-Introduction/ Berry Introduction (in 20 minutes or less)] | ||
+ | * [https://github.com/berry-lang/berry/wiki/Reference | ||
+ | * [https://tasmota.github.io/docs/Berry-Cookbook/ | ||
+ | |||
+ | Die Dokumentation kommt mir nicht vollstaendig vor, 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. | ||
+ | |||
+ | Eines der besten Beispiele das ich gefunden habe ist [https://github.com/Beormund/Tasmota32-Multi-Zone-Heating-Controller hier] zu finden. Weitere bitte gerne in den Kommentar. | ||
+ | |||
+ | Meine Rollladenmotoransteuerung gibt's demnaechst auch auf Github. Hier schon mal vorab eine Beta. | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:600px; overflow:auto;"> | ||
+ | <div style="font-weight:bold;line-height:1.6;">ShutterDriver</div> | ||
+ | <div class="mw-collapsible-content"> | ||
+ | <syntaxhighlight lang="python" line> | ||
+ | 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) | ||
+ | </syntaxhighlight> | ||
+ | </div></div> | ||
+ | |||
+ | =<span id="RFC"></span>Request for Comments= | ||
+ | |||
+ | <comments /> |
Version vom 2. August 2022, 11:03 Uhr
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
Sind kommt nicht mich nicht ganz so sperrig vor wie "normale" Skriptsprache 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 kommt mir nicht vollstaendig vor, 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.
Eines der besten Beispiele das ich gefunden habe ist hier zu finden. Weitere bitte gerne in den Kommentar.
Meine Rollladenmotoransteuerung gibt's demnaechst auch auf Github. Hier schon mal vorab eine Beta.
ShutterDriver
1 import webserver # import webserver class
2
3 class MyButtonMethods : Driver
4
5
6 #- create a method for adding a button to the main menu -#
7 def web_add_main_button()
8 webserver.content_send("<p></p><button onclick='la(\"&m_toggle_main=1\");'>Toggle Main</button>")
9 end
10
11 def set_gpio(gpio1,gpio2)
12 gpio.digital_write(27,gpio1)
13 gpio.digital_write(14,gpio2)
14 end
15
16
17 #- As we can add only one sensor method we will have to combine them besides all other sensor readings in one method -#
18 def web_sensor()
19 import string
20 import persist
21
22 if persist.find("state",-1) == -1
23 gpio.digital_write(27,0)
24 gpio.digital_write(14,0)
25 persist.state=0
26 persist.save()
27 end
28 if webserver.has_arg("m_toggle_main")
29 log("Button pressed",2)
30 log(string.format("State before: %s",persist.state),2)
31 var rel1 = gpio.digital_read(27)
32 var rel2 = gpio.digital_read(14)
33 string.format("Relais 1: %s Relais 2: %s",rel1,rel2)
34 log(string.format("Relais 1: %s Relais 2: %s",rel1,rel2),2)
35 var set = false
36 if rel1 == 0 && rel2 == 0 && !set && persist.find("state") != 0 && persist.find("state") != 2 # wenn state und relaiszusand 'asynchron' sind
37 gpio.digital_write(14,0)
38 gpio.digital_write(27,0)
39 persist.state = 0
40 set = true
41 end
42 if rel1 == 0 && rel2 == 0 && !set
43 if persist.find("state") == 0
44 #gpio.digital_write(27,1)
45 tasmota.set_timer(1000, /->self.set_gpio(1,0))
46 persist.state = 1
47 set = true
48 end
49 if persist.find("state") == 2
50 #gpio.digital_write(14,1)
51 tasmota.set_timer(1000, /->self.set_gpio(0,1))
52 persist.state = 3
53 set = true
54 end
55 end
56 if rel1 == 1 && rel2 == 0 && !set
57 #gpio.digital_write(27,0)
58 tasmota.set_timer(0, /->self.set_gpio(0,0))
59 persist.state = 2
60 set = true
61 end
62 if rel1 == 0 && rel2 == 1 && !set
63 #gpio.digital_write(14,0)
64 tasmota.set_timer(0, /->self.set_gpio(0,0))
65 persist.state = 0
66 set = true
67 end
68 if rel1 == 1 && rel2 == 1 && !set # sollte niemals nie vorkommen !!!
69 #gpio.digital_write(14,0)
70 #gpio.digital_write(27,0)
71 tasmota.set_timer(0, /->self.set_gpio(0,0))
72 persist.state = 0
73 set = true
74 end
75 log(string.format("State now: %s",persist.state),2)
76 rel1 = gpio.digital_read(27)
77 rel2 = gpio.digital_read(14)
78 string.format("Relais 1: %s Relais 2: %s",rel1,rel2)
79 log(string.format("Relais 1: %s Relais 2: %s",rel1,rel2),2)
80 var msg = string.format(
81 "{s}Relais 1{m}%s{e}"..
82 "{s}Relais 2{m}%s{e}",
83 rel1, rel2)
84 tasmota.web_send(msg)
85 end #if
86 end #def
87 end #class
88
89 d1 = MyButtonMethods()
90 tasmota.add_driver(d1)
Die automatische Aktualisierung der Kommentare aktivieren.