Shelly 2.5

Eine neue WLAN Schalter Möglichkeit als Alternative zu den sonoff’s

Da mir immer wichtig ist, dass die verwendeten WLAN devices ihre Informationen nicht in irgendeine Cloud schicken, sondern im eigenen WLAN bleiben, war es an der Zeit sich ein shelly device genauer anzuschauen und es ins openHAB einzubinden.

Die shelly devices gibt es bei semaf httpss://electronics.semaf.at/ zu kaufen. Der shelly 2.5 ist ein Doppelrelaisschalter mit Rolladenfunktion und kann bis 2x10A schalten.

Das schöne ist die einfache Konfiguration. Nach dem Anschließen an den Strom baut der shelly einen Access Point auf. Einfach verbinden und über den WebBrowser die Werte setzten, wie SSID des zu verwendeten WLANs. Achtung der Eintrag ist case-sensitiv

Das wirklich schöne aber ist die offene Schnittstelle. Ich verwende MQTT um die Daten vom device zum openHAB und umgekehrt zu übertragen. Eine genaue Beschreibung der einzelnen Funktionen findet man hier: httpss://shelly-api-docs.shelly.cloud/#shelly2-5

Was brauchen wir auf der openHAB Seite, damit wir mit dem shelly über MQTT kommunizieren können.
Wir können die beiden Kanäle ein- und ausschalten, bekommen die gerade verbrauchte Leistung und auch die aktuelle Temperatur des shelly.

things:
Bridge mqtt:broker:mosquitto "MQTT Broker mosquitto"
[host="localhost",port=1883,secure=false,clientID="openHAB2"]{Thing topic shelly1 "Shelly 2.5" {
 Channels:
 Type switch:sh1Power0 "Power 0"
 [stateTopic="shellies/shelly1/relay/0/", 
  commandTopic="shellies/shelly1/relay/0/command", 
  on="on", off="off"]        
 Type number:sh1Watt0 "Leistung 0"
  [stateTopic="shellies/shelly1/relay/0/power"]
 Type number:sh1Energy0 "Energy 0"
  [stateTopic="shellies/shelly1/relay/0/energy"]
   
 Type switch:sh1Power1 "Power 1"
  [stateTopic="shellies/shelly1/relay/1/", 
   commandTopic="shellies/shelly1/relay/1/command", 
   on="on", off="off"]        
 Type number:sh1Watt1 "Leistung 1"
  [stateTopic="shellies/shelly1/relay/1/power"]
 Type number:sh1Energy1 "Energy 1"
  [stateTopic="shellies/shelly1/relay/1/energy"]
     
 Type number:sh1Temp "Temperature"
  [stateTopic="shellies/shelly1/temperature"]
 Type switch:sh1OverTemp  "Overtemperature" 
  [stateTopic="shellies/shelly1/overtemperature"]
 }} 
items:
/ Shelly 2.5
Switch sh1Power0 "power"                  
{channel="mqtt:topic:mosquitto:shelly1:sh1Power0"}
Number sh1Watt0 "Watt"                           
{channel="mqtt:topic:mosquitto:shelly1:sh1Watt0"}
Number sh1Energy0 "Energy"                         
{channel="mqtt:topic:mosquitto:shelly1:sh1Energy0"}
Switch sh1Power1 "power"                  
{channel="mqtt:topic:mosquitto:shelly1:sh1Power1"}
Number sh1Watt1 "Watt"                           
{channel="mqtt:topic:mosquitto:shelly1:sh1Watt1"}
Number sh1Energy1 "Energy"                         
{channel="mqtt:topic:mosquitto:shelly1:sh1Energy1"}
Number sh1Temp "Temperature"                    
{channel="mqtt:topic:mosquitto:shelly1:sh1Temp"}
Switch sh1OverTemp "Overtemp"                
{channel="mqtt:topic:mosquitto:shelly1:sh1OverTemp"}

Tipps & Tricks

Normalerweise (tasmota firmware) werden MQTT Informationen so alle 5 Minuten aktualisiert und gesendet. Beim Shelly passiert das permanent. Da sich der Stromverbrauch bei eingeschalteten Verbraucher immer leicht ändert, bekommt man sehr viele Nachrichten im openHAB über Änderungen des item, was sich wiederum in einer Menge an log Einträgen in der events.log Datei niederschlägt. Diese Einträge müllen das log-file voll und bringen keinen Mehrwert, daher die Lösung, wie man es schafft diese Änderungen nicht in die events.log Datei zu schreiben.

Für das Schreiben in die log Dateien sind Einstellungen im file log4j2.xml verantwortlich, das normalerweise unter /var/lib/openhab/etc liegt und ab openHAB 3 gilt.
Dort den RegexFilter Teil hinzufügen und anpassen.

<!-- Event log appender -->
<RollingRandomAccessFile 
fileName="${sys:openhab.logdir}/events.log" 
filePattern="${sys:openhab.logdir}/events.log.%i" 
name="EVENT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5.5p] [%-36.36c] - %m%n"/>
<RegexFilter regex=".*(sh1Watt1|sh1Energy1|Date).*"
onMatch="DENY" onMismatch="ACCEPT"/>
....
</RollingRandomAccessFile>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Begin typing your search above and press return to search. Press Esc to cancel.