Hallo zusammen,
ich bin neu in der openhab welt und hab da gleich einmal eine kleine Verständnisfrage.
Aktuell nutze ich für meine Hausautomatisation den ioBroker. Nun bin ich aber wegen der fehlenden Google Home Anbindung testweise zu openhab gewechselt. Nach einigem hin und her habe ich es nun soweit zum laufen das ich zwei Lampen (Tasmota/Sonoff) schalten kann.
Bei dem nächsten wird es allerdings für mich etwas komplizierter. Ich habe einen Sonoff POW welcher den Strom für den TV nach 15min abschaltet wenn der aktuelle Verbrauch unter einer gewissen grenze ist. Ist dieser aus kann er über einen anderen Sonoff Basic EINgeschaltet werden jedoch über diesen nicht wieder ausgeschaltet werden (verhindert ungewolltes ausschalten).
Wie mache ich sowas über openhab ?
Habe schon einiges gelesen und würde spontan folgenden weg probieren:
1x Thing Sonoff Basic mit den Channels:
POWER ON|OFF|TOGGLE
1x Thing Sonoff POW mit den Channels:
POWER ON|OFF
VOLTAGE String
CURRENT String
4x Items für die oben genannten things
1x Virtuelles Item für on off
Nur weiß ich nun nicht mehr weiter. Wer schaltet nun was ?
Hat von euch zufällig jemand sowas schon realisiert ?
vielen Dank fürs lesen
Rigo
Verständnisfrage Openhab
- seppy
- Beiträge: 738
- Registriert: 24. Sep 2015 20:25
- Wohnort: Bonn
Re: Verständnisfrage Openhab
Hi,
dein Szenario lässt sich über Rules abbilden. Lies Dich dort mal etwas ein und dann können wir Dir weiterhelfen!
https://www.openhab.org/docs/configurat ... s-dsl.html
Hier ein bißchen PseudoCode
Vielleicht hilft Dir das beim Einstieg ...
Grüße,
Seppy
dein Szenario lässt sich über Rules abbilden. Lies Dich dort mal etwas ein und dann können wir Dir weiterhelfen!
https://www.openhab.org/docs/configurat ... s-dsl.html
Hier ein bißchen PseudoCode
Code: Alles auswählen
when
Item Sonoff POW changed
then
if (Sonoff POW < XX) {
TV.sendCommand(OFF)
}
TV würde ich zum Beispiel als Expire Item definieren.
Grüße,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren
- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung
- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung
-
- Beiträge: 3
- Registriert: 14. Jan 2019 10:06
Re: Verständnisfrage Openhab
Hallo Seppy,
danke für die Antwort und den Link. Habe den einmal als Grundlage genommen und mir etwas gebastelt.
Hoffe ich hab die beschreibung und die anderen Links richtig interpretiert. Gerade bei dem Timer und dem receive command bin ich mir da nicht ganz sicher.
gruß
Rigo
danke für die Antwort und den Link. Habe den einmal als Grundlage genommen und mir etwas gebastelt.
Code: Alles auswählen
//-----------
//.things file
//-----------
Thing topic SonoffPOWTV "Sonoff POW TV" @ "Wohnzimmer" {
Channels:
Type string : reachable "Reachable" [ stateTopic="tele/sonoff_pow_tv/LWT" ]
Type switch : power "Power" [ stateTopic="stat/sonoff_pow_tv/POWER", commandTopic="cmnd/sonoff_pow_tv/POWER" ]
Type number : powerload "Power load" [ stateTopic="tele/sonoff_pow_tv/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power"]
Type number : voltage "Line voltage" [ stateTopic="tele/sonoff_pow_tv/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Voltage"]
Type number : current "Line current" [ stateTopic="tele/sonoff_pow_tv/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Current"]
Type number : total "Total energy today" [ stateTopic="tele/sonoff_pow_tv/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Today"]
Type number : totalyest "Total energy yesterday" [ stateTopic="tele/sonoff_pow_tv/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Yesterday"]
Type number : rssi "WiFi Signal Strength" [ stateTopic="tele/sonoff_pow_tv/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
}
Thing topic SonoffBasicCouch "Sonoff Basic Couch" @ "Wohnzimmer" {
Channels:
Type string : reachable "Reachable" [ stateTopic="tele/sonoff_basic_couch/LWT" ]
Type switch : power "Power" [ stateTopic="stat/sonoff_basic_couch/POWER", commandTopic="cmnd/sonoff_basic_couch/POWER" ]
Type number : rssi "WiFi Signal Strength" [ stateTopic="tele/sonoff_basic_couch/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
}
//-----------
//.items file
//-----------
Group Sonoff_POW_TV "Sonoff POW TV" <sonoff_pow_tv> (Sonoff_POW_TV)
String Sonoff_POW_TV_Reachable "Reachable: [%s]" <contactable> (Sonoff_POW_TV) { channel="mqtt:topic:mosquitto:SonoffPOWTV:reachable" }
Switch Sonoff_POW_TV_Power "Power []" <sonoff_pow_tv> (Sonoff_POW_TV) { channel="mqtt:topic:mosquitto:SonoffPOWTV:power" }
Number Sonoff_POW_TV_Load "Power load [%.1f W]" <voltage> (Sonoff_POW_TV) { channel="mqtt:topic:mosquitto:SonoffPOWTV:powerload" }
Number Sonoff_POW_TV_Voltage "Line voltage [%.1f V]" <voltage> (Sonoff_POW_TV) { channel="mqtt:topic:mosquitto:SonoffPOWTV:voltage" }
Number Sonoff_POW_TV_Current "Line current [%.3f A]" <current> (Sonoff_POW_TV) { channel="mqtt:topic:mosquitto:SonoffPOWTV:current" }
Number Sonoff_POW_TV_Today "Total energy today [%.3f kWh]" <total_energy> (Sonoff_POW_TV) { channel="mqtt:topic:mosquitto:SonoffPOWTV:total" }
Number Sonoff_POW_TV_Yesterday "Total energy yesterday [%.3f kWh]" <total_energy> (Sonoff_POW_TV) { channel="mqtt:topic:mosquitto:SonoffPOWTV:totalyest" }
Number Sonoff_POW_TV_RSSI "WiFi Signal Strength [%d %%]" <wifi> (Sonoff_POW_TV) { channel="mqtt:topic:mosquitto:SonoffPOWTV:rssi" }
Group Sonoff_Basic_Couch "Sonoff Basic Couch" <sonoff_basic_couch> (Sonoff_Basic_Couch)
String Sonoff_Basic_Couch_Reachable "Reachable: [%s]" <contactable> (Sonoff_Basic_Couch) { channel="mqtt:topic:mosquitto:SonoffBasicCouch:reachable" }
Switch Sonoff_Basic_Couch_Power "Power []" <sonoff_basic_couch> (Sonoff_Basic_Couch) { channel="mqtt:topic:mosquitto:SonoffBasicCouch:power" }
Number Sonoff_Basic_Couch_RSSI "WiFi Signal Strength [%d %%]" <wifi> (Sonoff_Basic_Couch) { channel="mqtt:topic:mosquitto:SonoffBasicCouch:rssi" }
//-----------
//.rules file
//-----------
rule "TV-Schrank schalten"
when
Item Sonoff_Basic_Couch_Power receive command [TOGGLE]
then
if (Sonoff_POW_TV_Power.state == OFF) {
sendCommand(Sonoff_POW_TV, ON)
}
end
rule "TV-Schrank Timer"
TvTimer = createTimer(now.plusMinutes(15), [|
if (Sonoff_POW_TV_Power.state == ON) {
if (Sonoff_POW_TV_Current < 1.00) {
sendCommand(Sonoff_POW_TV, OFF)
} else {
TVTimer.reschedule(now.plusMinutes(15))
}
}
])
when
Item Sonoff_POW_TV receive command [ON]
then
TVTimer.reschedule(now.plusMinutes(15))
end
gruß
Rigo
Zuletzt geändert von seppy am 14. Jan 2019 14:12, insgesamt 1-mal geändert.
Grund: Code Tag eigefügt
Grund: Code Tag eigefügt
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Verständnisfrage Openhab
Also, Deine Rules sehen etwas seltsam aus.
Erstens heißt es received, also mit einem d hinten.
Zweitens ist mir die Schreibweise [TOGGLE] nicht bekannt.
Drittens kannst Du hier, da der Channel den Status empfängt nur ON oder OFF als Befehl empfangen. Auch das Item kennt nur drei verschiedene Zustände und nur zwei verschiedene Kommandos, ON, OFF und NULL als Status falls weder ON noch OFF zutreffen (z.B. beim Start von openHAB)
Diese Rule muss also so aussehen:
Die geschweiften Klammern spielen in diesem Fall keine Rolle, da es nur ein einzelner Befehl ist. Die Methode Item.sendCommand(Wert) ist sicherer als die Action sendCommand(Item,Wert)
Was ist dann da passiert? Der Code ist ja vollkommen durcheinander... Im when-Teil der Rule werden ausschließlich Trigger gelistet, im then-Teil der Rule steht der Code, der ausgeführt werden soll. Vor dem when-Teil darf nichts stehen (außer vielleicht ein // Kommentar)
Es ist essenziell, die Variable für die Verwendung als Timer zu initialisieren, ebenso sollte man vor Verwendung der Variablen sicherstellen, dass nicht bereits ein Timer mit der Variablen läuft, sonst passieren die lustigsten Dinge...
Weiterhin muss die Schreibweise exakt eingehalten werden, TVTimer ist eine andere Variable als TvTimer.

Code: Alles auswählen
rule "TV-Schrank schalten"
when
Item Sonoff_Basic_Couch_Power receive command [TOGGLE]
then
if (Sonoff_POW_TV_Power.state == OFF) {
sendCommand(Sonoff_POW_TV, ON)
}
end
Zweitens ist mir die Schreibweise [TOGGLE] nicht bekannt.
Drittens kannst Du hier, da der Channel den Status empfängt nur ON oder OFF als Befehl empfangen. Auch das Item kennt nur drei verschiedene Zustände und nur zwei verschiedene Kommandos, ON, OFF und NULL als Status falls weder ON noch OFF zutreffen (z.B. beim Start von openHAB)
Diese Rule muss also so aussehen:
Code: Alles auswählen
rule "TV-Schrank schalten"
when
Item Sonoff_Basic_Couch_Power received command ON
then
if (Sonoff_POW_TV_Power.state == OFF)
Sonoff_POW_TV.sendCommand(ON)
end
Code: Alles auswählen
rule "TV-Schrank Timer"
TvTimer = createTimer(now.plusMinutes(15), [|
if (Sonoff_POW_TV_Power.state == ON) {
if (Sonoff_POW_TV_Current < 1.00) {
sendCommand(Sonoff_POW_TV, OFF)
} else {
TVTimer.reschedule(now.plusMinutes(15))
}
}
])
when
Item Sonoff_POW_TV receive command [ON]
then
TVTimer.reschedule(now.plusMinutes(15))
end
Code: Alles auswählen
var Timer TvTimer = null
rule "TV-Schrank Timer"
when
Item Sonoff_POW_TV received command ON
then
TvTimer?.cancel
TvTimer = createTimer(now.plusMinutes(15), [|
if (Sonoff_POW_TV_Power.state == ON) {
if (Sonoff_POW_TV_Current < 1.00)
Sonoff_POW_TV.sendCommand(OFF)
else
TvTimer.reschedule(now.plusMinutes(15))
}
])
end
Weiterhin muss die Schreibweise exakt eingehalten werden, TVTimer ist eine andere Variable als TvTimer.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 3
- Registriert: 14. Jan 2019 10:06
Re: Verständnisfrage Openhab
vielen Dank für die ausführliche Antwort. Habe es mit der Hilfe nun hinbekommen und blicke jetzt schon was mehr durch 
