Sorry, ich bin etwas von C und C++ geprägt. Der Vergleich des Statuswertes in den Rules wird mit einem einfachen Gleichheitszeichen codiert:
Vielleicht werden Zeichenkettenwerte (Strings) per == verglichen - ich wusste das mal, als ich mich eingehend mit den Rules beschäftigte. 
Du kannst auch mal nur mit dem Ereignis "button1#state", also ohne Vergleich experimentieren.
Die Rules sind Ereignis gesteuert. Die Struktur einer einzelnen Rule ist prinzipiell:
on Ereignis do Anweisung endon
bzw. für mehrere auszuführende Anweisungen bei eintretendem Ereignis
on Ereignis do backlog Anweisung1; Anweisung2; Anweisung3; ... endon
In meinen Prinzipbeispielen ist "Ereignis" ein Platzhalter für ein bestimmtes Ereignis wie power1#state ...
Eine Rule beginnt also immer mit EINEM Ereignis und kann mehrere Anweisungen enthalten. Vor diesem Hintergrund ist deine Zeile ungeeignet, weil "rules#timer=1" ein Ereignis und keine Anweisung ist. "rules#timer=1" bedeutet, dass der ruletimer 1 abgelaufen ist und muss demzufolge hinter einem "on" stehen. Aus deiner Zeile wird dann folgendes:
on button1#state=1 do backlog power1 1; ruletimer1 %mem1% endon
on rules#timer=1 do power1 0 endon
Bei den button state Werten bin ich wenig bewandert und müsste diese selbst testen. In den Tasmota Dokus sind diese afaik aber auch zumindest beispielhaft aufgeführt.
Eine Anweisung kann auch ein Ereignis auslösen.
on Ereignis do backlog ...; event e endon
on event#e do ...
"e" ist der Name bzw. der Trigger des Ereignisses und kann durch einen beliebigen syntaxgerechten Namen ersetzt werden. Das braucht man bspw. dann, wenn der Inhalt einer Variablen manipuliert werden soll. Wird bspw. der Variablen var1 ein Wert zugewiesen, was ein Ereignis ist, und soll dieser Wert verdreifacht sowie schließlich 4 addiert werden, so gelingt das folgendermaßen.
on var1#state do backlog mult1 3; event add4to1 endon
on event#add4to1 do add1 4 endon
Hm, es könnte sein, dass in Zeile 1 mult1 3 das Ereignis var1#state auslöst. Dann ergäbe dies ein endlos wiederholt eintretendes Ereignis. In diesem Fall muss etwas aufwändiger codiert werden. Am Grundverständnis ändert das aber nichts.
Hilfreich ist das Auslösen eines Ereignisses per Anweisung auch dann, wenn Anweisungen bei eintreten verschiedener Ereignisse auszuführen sind.
on event#p1 do publish lampe1/ist/geschaltet %var5% endon
on Ereignis1 do backlog ...; var5 1; event p1 endon
on Ereignis2 do backlog ...; var5 0; event p1 endon
Ereignis p1 sendet eine MQTT Nachricht mit dem Topic "lampe1/ist/geschaltet" und als Payload (Wert) der Inhalt von var5. Die Tasmota Doku bezeichnet #p1 auch als Trigger.
Sowohl Ereignis1 als auch Ereignis2 veranlassen nach spezifischen Anweisungen, hier als ... dargestellt, das Senden der Nachricht.
Falls dir MQTT nichts sagt, kannst du stattdessen irgendetwas anderes einsetzen, wie das Schalten einer Lampe.
Ich hoffe, dass ich hiermit ein paar grundlegende Sachverhalte ein wenig aufhellen konnte.
Nicht verzagen ... 