Tasmota auf Shelly

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Dainara
Beiträge: 6
Registriert: 20. Mär 2020 20:04

Re: Tasmota auf Shelly

Beitrag von Dainara »

Huhu,
hmmm dann lass ich das mal so, es funktioniert ja mit und ohne Werte. Die meisten Werte bekommt openHab sowieos alle 30 sekunden und wenn ich die Firmware abfrage sind alle Werte wider vorhanden, hab ich so eingestellt ^^

ich hab mir das mal angedsehen, mit Rules ist es möglich das mit dem Treppenhausrelai zu realisieren, aber ich denke dafür ein Welchen zu brauchen bis ich es verstanden hab und umsetzen kann :)

hab zumindest mal ne deutsche Übseretzung der Rules gefunden mit beispiele https://forum.creationx.de/lexicon/inde ... /24-rules/, dort ist auch ein Beispiel als Treppenhaus Automat vorhanden, nur müsste ich es um das blinken ergänzen
dafür kann ich denke den Befehl Buzzer nehmen, oder aber man macht noch ein paar Timer dran die aber dann in einer separaten rule laufen damit man wenn man im blink modus wider tastet der wider zur 1. rule springt und von vorne alles durchläuft,
muss ich mir mal Gedanken machen und mit einem test shelly herum experimentieren ^^

aber danke für die Hinweise

Dainara
Beiträge: 6
Registriert: 20. Mär 2020 20:04

Re: Tasmota auf Shelly

Beitrag von Dainara »

huhu,
hab nun meine erweiterte Treppenhausschaltung mit dem Shelly 1pm und Tasmota fast fertig
die Steuerung funktioniert bis auf einen kleinen Schönheitsfehler, evtl. kann mir dabei jemand helfen

Hier mal die Funktion
Wenn man im Openhab oder am Schalter (kein Taster) das Licht einschaltet, läuft ein Ruletimer von 10 Minuten wenn man in diesen 10 Minuten erneut den Schalter drückt oder im Openhab schaltet geht das Licht wider aus.
Wenn man nicht ausschaltet, blinkt nach diesen 10 Minuten das Licht 1x (geht einmal kurz aus und wider an) und brennt dann für weitere 10 Sekunden,
macht man nichts wird dieser Zyklus weitere 2x widerholt, danach geht das Licht aus.
Schaltet man in dieser Zeit wird erneut der 10 Minuten Ruletimer gestartet, also es beginnt von vorne.
(Das Blinken soll andeuten dass das Licht gleich aus geht und man es mit einem erneuten Druck verlängern kann)

Was ist der Schönheitsfehler?
Wenn man in Openhab das Licht einschaltet (Icon wird Grün Meldung geht auf ON und Schalter geht nach rechts) und man es dann mit dem Schalter ausschaltet, pasiert folgendes im OpenHab (Icon wird Rot Meldung geht auf OFF und Schalter bleibt rechts) der Schalter geht nicht mehr nach Links!


woran das genau liegt kann ich denke schildern, normalerweise wird im Thing der Schalter mit dem cmd POWER an und aus geschaltet, diese option geht aber durch die Regel nicht da sonst die Funktion gestört ist, damit würde aber der Schieberegler funktionieren
um dass die Regel auch mit openhab funktioniert wird eine variable var2 mit den befehlen on und off gesetzt, seit dieser Situation bleibt der Regler hängen, das ist aber nur dann wenn man EIN und AUS getrennt schaltet, schaltet man beides im Openhab oder beides am Schalter tritt dieser Schönheitsfehler nicht auf ausser dass es einmal gemischt gemacht wurde , dann ist der Schalter invertiert.

Hat jemand eine Idee wie man diesen Schönheitsfehler ausmerzen kann?

Hier die nötigen Einstellungen und daten:

Folgendes muss in der Tasmota Konsole einmalig per Hand eingegeben werden
mem1 off
BlinkCount 1
BlinkTime 3
SwitchMode 7
Rule1 1


hier die Regel, wird ebenfalls in die Konsole einmal eingefügt, so wie die da steht (nur im ganzen nicht zeilenweise)
Rule1
on var2#state do event toggle=%mem1%; endon
on Switch1#State do event toggle=%mem1%; endon
on Rules#Timer=1 do backlog RuleTimer1 10; add1 1; power1 3; mem1 OFF; mem2 OFF; endon
on var1#state=3.000 do backlog RuleTimer1 0; var1 0; power1 0; mem1 OFF; endon
on event#toggle=On do backlog mem1 OFF; POWER1 0; RuleTimer1 0; var1 0; endon
on event#toggle=OFF do backlog mem1 ON; POWER1 1; RuleTimer1 60; var1 0; endon


thing:

Code: Alles auswählen

    Thing topic Shelly_KG_Treppe_Licht_Thing "KG_Treppe_Licht" {
    Channels:
        Type switch : PowerSwitch                             [ stateTopic="stat/Shelly_KG_Treppe_Licht/RESULT",  transformationPattern="JSONPATH:$.POWER", commandTopic="cmnd/Shelly_KG_Treppe_Licht/var2", on="ON", off="OFF" ]
        Type string : Version           "Version Shelly"      [ stateTopic="stat/Shelly_KG_Treppe_Licht/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Version"]
        Type string : IP                "IP vom Shelly"       [ stateTopic="stat/Shelly_KG_Treppe_Licht/STATUS5", transformationPattern="JSONPATH:$.StatusNET.IPAddress"]
        Type number : Temperature       "Temperatur Shelly"   [ stateTopic="tele/Shelly_KG_Treppe_Licht/SENSOR",  transformationPattern="JSONPATH:$.ANALOG.Temperature"]
        Type number : Leistung          "Energie Leistung"    [ stateTopic="tele/Shelly_KG_Treppe_Licht/SENSOR",  transformationPattern="JSONPATH:$.ENERGY.Power" ]
        Type number : Total             "Energie insgesamt"   [ stateTopic="tele/Shelly_KG_Treppe_Licht/SENSOR",  transformationPattern="JSONPATH:$.ENERGY.Total" ]
        Type number : Heute             "Energie Heute"       [ stateTopic="tele/Shelly_KG_Treppe_Licht/SENSOR",  transformationPattern="JSONPATH:$.ENERGY.Today" ]
        Type number : Gestern           "Energie Gestern"     [ stateTopic="tele/Shelly_KG_Treppe_Licht/SENSOR",  transformationPattern="JSONPATH:$.ENERGY.Yesterday" ]
      }
item:

Code: Alles auswählen

//      Shelly_KG_Treppe_Licht          //
Switch          Shelly_KG_Treppe_Licht          "KG Treppe Licht"                       { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:PowerSwitch" }
String          Shelly_KG_Treppe_Licht_V        "Version Shelly [%s]"                   { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Version" }
String          Shelly_KG_Treppe_Licht_IP       "IP vom Shelly [%s]"                    { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:IP" }
Number          Shelly_KG_Treppe_Licht_T        "Temperatur Shelly [%s °C]"             { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Temperature" }
Number          Shelly_KG_Treppe_Licht_P        "Leistung [%s W]"                       { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Leistung" }
Number          Shelly_KG_Treppe_Licht_ET       "Energie insgesamt [%s kWh]"            { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Total" }
Number          Shelly_KG_Treppe_Licht_E        "Energie heute [%s kWh]"                { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Heute" }
Number          Shelly_KG_Treppe_Licht_Y        "Energie gestern [%s kWh]"              { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Gestern" }
sitemap:
nn

Code: Alles auswählen

//      Shelly_KG_Treppe_Licht          //
Switch          Shelly_KG_Treppe_Licht          "KG Treppe Licht"                       { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:PowerSwitch", autoupdate="true" }
String          Shelly_KG_Treppe_Licht_V        "Version Shelly [%s]"                   { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Version" }
String          Shelly_KG_Treppe_Licht_IP       "IP vom Shelly [%s]"                    { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:IP" }
Number          Shelly_KG_Treppe_Licht_T        "Temperatur Shelly [%s °C]"             { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Temperature" }
Number          Shelly_KG_Treppe_Licht_P        "Leistung [%s W]"                       { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Leistung" }
Number          Shelly_KG_Treppe_Licht_ET       "Energie insgesamt [%s kWh]"            { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Total" }
Number          Shelly_KG_Treppe_Licht_E        "Energie heute [%s kWh]"                { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Heute" }
Number          Shelly_KG_Treppe_Licht_Y        "Energie gestern [%s kWh]"              { channel="mqtt:topic:MQTT_Broker:Shelly_KG_Treppe_Licht_Thing:Gestern" }
PS: Es gäbe zu der Option mit der Var2 eine alternative in dem man es auf Power lässt, und man dafür eine Pulsetime setzt die 5 Sekunden länger als die Zeit im RuleTimer ist, das würde funktionieren, aber ich möchte eine 2. Regel erstellen die wie folgt funktioniert
Wenn man den Schalter 5 Sekunden gedrückt hällt, wird die erste Regel auser Kraft gesetzt und das Licht brennt dauerhaft bis man es mit einem 5 Sekunden Tastendruck wider ausschaltet, das würde mit dem Pulsetimer nicht gehen, es sei denn man tut diesen in der regel ebenfalls deaktivieren was ja auch machbar wäre
ich würde aber gerne die oben beschriebene Variante vorziehen, da damit auch die Ausschaltvorwarnung funktioniert.

renek74
Beiträge: 62
Registriert: 26. Nov 2020 08:00

Re: Tasmota auf Shelly

Beitrag von renek74 »

Ich hätte auch mal eine Frage und zwar wie ich an den Status von SW1 bzw. Switch1 komme.
In der Konsole sehe ich ja den Zustand auf dem Shelly.

06:00:18.425 MQT: tele/Tasmota_Shelly_FBH/SENSOR = {"Time":"2023-02-15T06:00:18","Switch1":"OFF","ANALOG":{"Temperature":39.7},"ENERGY":{"TotalStartTime":"2023-02-11T18:46:45","Total":0.000,"Yesterday":0.000,"Today":0.000,"Period":0,"Power":0},"TempUnit":"C"}

Den Zustand benötige ich für eine Rule. Hab schon einiges versucht, aber ohne Erfolg. Danke schonmal für Eure Hilfe.

Benutzeravatar
udo1toni
Beiträge: 13856
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Tasmota auf Shelly

Beitrag von udo1toni »

Benötigst Du wirklich den Zustand des Switches, oder nicht doch eher das Ereignis, dass der Kontakt geschlossen bzw. geöffnet wurde?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

renek74
Beiträge: 62
Registriert: 26. Nov 2020 08:00

Re: Tasmota auf Shelly

Beitrag von renek74 »

der Zustand wäre gut. Ich habe eine Fussbodenheizung dran. Der Reglerausgang geht auf den SW1 des Shelly. Ich möchte den Shelly bei PV Überschuss schalten aber dabei nicht den Fussboden überheizen. Sprich dann eine Rule, welche in Anhängigkeit PV und SW1 dann Power frei gibt...

Benutzeravatar
udo1toni
Beiträge: 13856
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Tasmota auf Shelly

Beitrag von udo1toni »

Es kommt etwas darauf an, wie der Shelly konfiguriert ist.
welcher Shelly Typ genau? Die Geräte unterscheiden sich ja in der Hardware, entsprechend muss man sie auch unterschiedlich konfigurieren.
Man kann über die Originalfirmware den Ausgang vom Eingang entkoppeln, das geht genauso auch über Tasmota, nur braucht es dazu die passenden Befehle und (ganz wichtig) die korrekte Vorlage (darüber wird bestimmt, welche GPIOs für welche Funktion zuständig sind)
Wenn alles korrekt ist, bekommst Du jedes Mal, wenn der Schalteingang mit L verbunden wird ein SENSOR Topic mit dem Inhalt Switch1="ON" und jedes Mal, wenn der Schalteingang von L getrennt wird das gleihce Toppic, nur mit Switch1="OFF".

Das Topic kannst Du dann mit JSONPATH einfach auswerten.
Der JSONPATH Transformation Service muss installiert sein. Du kannst das Topic in einem Switch Channel empfangen (stateTopic) und als ValueTransvormation JSONPATH:$.Switch1 angeben. Alternativ kannst Du auc hdas Topic in einem string Channel empfangen und den JSONPATH im Link zu einem Switch Item einrichten (dort JSONPATH auswählen und nur den Path angeben, also $.Switch1)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

renek74
Beiträge: 62
Registriert: 26. Nov 2020 08:00

Re: Tasmota auf Shelly

Beitrag von renek74 »

hab den Shelly 1PM mit Tasmota in der Standartkonfiguration....


Ich probiere mal heute Abend JSONPATH:$.Switch1 auszuwerten.
Danke
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

renek74
Beiträge: 62
Registriert: 26. Nov 2020 08:00

Re: Tasmota auf Shelly

Beitrag von renek74 »

sieht gut aus vielen Dank.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

renek74
Beiträge: 62
Registriert: 26. Nov 2020 08:00

Re: Tasmota auf Shelly

Beitrag von renek74 »

...irgentwie bekomme ich die Sache in der Rle nicht zum laufen. Obwohl z.Bsp. alle Bedingungen erfüllt sind, wurde nicht in die entsprechende if-Bedingung gesprungen.. Wo hab den Denkfehler???

Code: Alles auswählen

rule "FBH Bad unten"
when
    /*Item Tasmota_Shelly_FBH_Switch received update or */
    Item Tasmota_Shelly_FBH_SW1 received update or
    Item FBH_Bad_Freigabe received update or 
    Item AktuellerBatterieLadezustand_ValueasNumber received update or
    Item SMApowerout received update
then
    if((SMApowerout.state as Number > 800) && FBH_Bad_Freigabe.state == ON && 
      Tasmota_Shelly_FBH_SW1.state == ON && (AktuellerBatterieLadezustand_ValueasNumber.state as Number > 70)
      && Tasmota_Shelly_FBH_Switch == OFF
      )  
    {
      sendCommand(Tasmota_Shelly_FBH_Switch, ON) 
        logInfo("Fußbodenheizung Bad", "Fußbodenheizung Ein") 
    } 
    if(((((SMApowerout.state as Number).floatValue < 150) || FBH_Bad_Freigabe.state == OFF || 
      Tasmota_Shelly_FBH_SW1.state == OFF || ((AktuellerBatterieLadezustand_ValueasNumber.state as Number).floatValue < 60))
      && Tasmota_Shelly_FBH_Switch.state == ON)
      )  
    {
      sendCommand(Tasmota_Shelly_FBH_Switch, OFF) 
        logInfo("Fußbodenheizung Bad", "Fußbodenheizung Aus") 
    }  
    //logInfo("Fußbodenheizung Bad", "Fußbodenheizung nix passiert")  
end

Benutzeravatar
udo1toni
Beiträge: 13856
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Tasmota auf Shelly

Beitrag von udo1toni »

Also, den ersten Denkfehler hast Du schon beim formatieren Deines Codes :) insbesondere, wenn Du ihn hier postest. Immer dran denken, den Code auch als Code zu markieren...

Dann ist der Code ein wenig messy, in der Folge hast Du an einer Stelle ein .state vergessen. Hier mal "meine" Version:

Code: Alles auswählen

rule "FBH Bad unten"
when
    Item Tasmota_Shelly_FBH_SW1 changed or
    Item FBH_Bad_Freigabe changed or 
    Item AktuellerBatterieLadezustand_ValueasNumber changed or
    Item SMApowerout changed
then
    val nSMA = (SMApowerout.state as Number).floatValue
    val nBatt = (AktuellerBatterieLadezustand_ValueasNumber.state as Number).floatValue
    var soll = Tasmota_Shelly_FBH_Switch.state

    if(     FBH_Bad_Freigabe.state ==  ON && Tasmota_Shelly_FBH_SW1.state ==  ON && nSMA > 800 && nBatt > 70)
        soll =  ON
    else if(FBH_Bad_Freigabe.state == OFF || Tasmota_Shelly_FBH_SW1.state == OFF || nSMA < 150 || nBatt < 60) 
        soll = OFF

    if(Tasmota_Shelly_FBH_Switch.state != soll) {
        Tasmota_Shelly_FBH_Switch.sendCommand(soll.toString) 
        logInfo("groundHeatBath", "Fußbodenheizung {}schalten.",if(soll == ON) "ein" else "aus")
    } else
        logInfo("groundHeatBath", "Fußbodenheizung nix zu tun.")
end
Vergiss bitte received update als Trigger, den braucht es nur unter ganz bestimmten Umständen. Deine Rule muss nur dann triggern, wenn sich etwas geändert hat, entsprechend nutzt Du changed als Trigger.
Dann die Zahlenwerte... Mal mit, mal ohne .floatValue, das ist nicht gut. Abgesehen davon hättest Du (Item.state as Number) > xx schreiben müssen, nicht (Item.state as Number > xx).
Da die Werte mehrfach verglichen werden müssen, ist es sinnvoll, sie in eine lokale Konstante (oder auch Variable, aber hier reicht ja die Konstante) zu schreiben. Damit ist die Konsistenz sichergestellt.
Zu guter Letzt gibt es drei verschiedene Möglichkeiten, was passieren soll, aktiv einschalten, aktiv ausschalten, aktuellen Zustand beibehalten. Es ist also sinnvoll, den aktuellen Status zu Beginn einzusammeln (und in einer lokalen Variablen zu speichern) und anschließend mittels der Vorgaben zu entscheiden, ob soll aktiv auf ON oder OFF gesetzt werden muss.
Auf diese Weise kann abschließend geschaltet werden, falls sich der aktuelle Status vom Sollzustand unterscheidet.

Ich hoffe, die Idee hinter dem Code wird klar :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten