Unterschied Verhalten Tasmota Rules und Kommandoeingabe

  • Ich will nach dem Start der Tasmota Software die per dhcp vergebene IP4 Adresse automatisch auf einem angeschlossenen Display ausgeben. Dazu habe ich eine Rule geschrieben, die jede Minute die IP4 Adresse aufs Display schreiben soll:

    rule3
    on time#minute do Status 5 endon
    on StatusNET#IPAddress do backlog var1 %value%; displaytext[zl2c5] IP-Adresse; displaytext[l3c4]%var1% endon

    rule3 1

    In der Konsole kann ich sehen, dass das Kommando "Status 5" jede Minute angestpßen wird, die folgende Zeile "on StatusNET..." jedoch nicht auslöst.

    Rufe ich "Status 5" in der Kommandozeile der Konsole auf, dann löst die Bedingung aus. Wird der Event bei automatische Auslösung nicht weitergereicht (eventuell nur an MQTT)?

    Die Rule modifiziert mit "switch#state" und angeschlossenem Schalter zeigt das gleiche Verhalten.

    Gelöst habe ich es, indem ich nach dem Booten eine Regel "backlog displaymode 1; displaymode 2" auslöse. Wenn ich hier nur "displaymode 2" auslöse, steht die IP4 Adresse immer auf 0.0.0.0

    Aber warum greift eine Folgeregel nicht nach einem automatisch ausgelöstem Kommando. :evil:

    • Offizieller Beitrag

    Hi

    Aber warum greift eine Folgeregel nicht nach einem automatisch ausgelöstem Kommando

    vermutlich weil statusnet#ipaddress kein gültiger trigger ist.

    Genauso wenig wie switch#state wenn der switchmode auf 0 steht ;)


    Ansonsten ist es schwer was dazu zu sagen wenn man den Konsolen-log nicht sieht und wie das JSON aussieht.

    EDIT:

    Wenn du Dein aktuell IP in einer Rule auslesen möchtest dann z.B. so:

    Code
    on time#minute do backlog ipaddress endon
    on ipaddress1 do backlog displaytext[zl2c5] IP-Adresse; displaytext[l3c4]%value% endon 
  • Habe jetzt die Hardware zur Verfügung, mit der IP Adresse ausgeben auf Display funktioniert nicht wie vorgeschlagen.

    Hier die Konsolenausgabe:

    19:58:14.375 CMD: rule1 on time#minute do backlog ipaddress endon;on ipaddress1 do backlog displaytext[zl2c5] IP-Adresse; displaytext[l2c2]%value% endon
    19:58:14.384 RUL: Stored uncompressed, would compress from 128 to 80 (-37%)
    19:58:14.387 RSL: RESULT = {"Rule1":{"State":"OFF","Once":"OFF","StopOnError":"OFF","Length":128,"Free":383,"Rules":"on time#minute do backlog ipaddress endon;on ipaddress1 do backlog displaytext[zl2c5] IP-Adresse; displaytext[l2c2]%value% endon"}}
    19:58:18.618 CMD: rule1 1
    19:58:18.624 RSL: RESULT = {"Rule1":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":128,"Free":383,"Rules":"on time#minute do backlog ipaddress endon;on ipaddress1 do backlog displaytext[zl2c5] IP-Adresse; displaytext[l2c2]%value% endon"}}
    19:58:18.926 RUL: TIME#MINUTE performs 'backlog ipaddress'
    19:58:18.972 RSL: RESULT = {"IPAddress1":"0.0.0.0 (192.168.178.90)","IPAddress2":"192.168.178.1","IPAddress3":"255.255.255.0","IPAddress4":"192.168.178.1","IPAddress5":"0.0.0.0"}

    Am angeschlossenen Display erscheint keine Ausgabe. Oder habe ich da was falsch erstanden bei der Rule?

    • Offizieller Beitrag

    Ah ja,

    mein Fehler. "Ipaddress" gibt die manuell vergebene IP raus. Falls DHCP aktiv ist dann ist das 0.0.0.0

    Dann doch über den status 5:

    Code
    on time#minute do backlog status 5 endon
    on statusnet#ipaddress do backlog displaytext[zl2c5] IP-Adresse; displaytext[l3c4]%value% endon 

    Edit:

    wichtig ist, das in der Bedingung time#minute das backlog verwendet wird, weil sonst der trigger statusnet nicht greift.