Hallo,
ich arbeite mich langsam an das Thema WAREMA Mobile System ran.
Aktuell sind Handsender und eine Wetterstation vorhanden, die auf 2,4 Ghz direkt mit einem Markisenmotor kommunizieren.
Bei der Recherche bin ich darüber gestolpert, dass es einen Warema WMS Stick (1002775) gibt, den man vielleicht sogar als CUL einsetzen könnte.
In OpenHAB und ioBroker macht man aktuelle scheinbar auch Fortschritte mit dem WMS.
- OpenWMS Binding (https://github.com/zeezee300/openwms)
- ioBroker mit Warema WMS Web Control (https://forum.iobroker.net/viewtopic.php?t=7755)
Es hat nicht zufällig schon jemand das Warema Mobile System über FHEM (oder NodeRed, MQTT, etc.) anzapfen können, oder?
Kann mir jemand mit mehr Erfahrung sagen, ob eine Schnittstelle überhaupt eine Chance hat?
Vielen Dank.
Hallo, bist du bei diesem Thema schon weiter gekommen?
Mein Versuch den Stick bei OpenHAB automatisch anzulernen, scheiterte leider. Auch der Versuch den Stick manuell einzubinden schlug fehl, da ich keine Ahnung habe, wie ich an die PANID komme. Das Auslesen des Traffics vom Stick mittels Wireshark habe ich nicht hinbekommen, da ich nicht das wie im ioBroker beschriebene Paket gefunden habe.
Auch ich würde gerne in FHEM den Stick einbinden wollen.
Mit openHAB2 konnte ich nun endlich meine Markise über WMS ansteuern (https://github.com/zeezee300/openwms). Dort konnte ich das entsprechende Binding anlegen und einen "shutter" zum Hoch- und Runterfahren definieren. Allerdings möchte ich bei FHEM bleiben und suche einen Weg, diesen "shutter" von FHEM aus zu steuern. Ist es möglich, diesen Schalter in openHAB2 von FHEM aus zu bedienen? Eine direkt Integration von WMS in FHEM scheint es ja derzeitig nicht zu geben.
Kann man das Gerät in OpenHAB nicht per MQTT an FHEM weiterreichen?
Ich habe mich bisher vor dieser komplexen Lösung gestreubt Aber es scheint darauf hinauszulaufen.
Ich versuche es jetzt über die REST API von openHAB, um den Warema WMS Stick zu steuern und in ein FHEM-Device einzubinden.
Beispiel
curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "DOWN" "http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter"
curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "UP" "http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter"
curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "STOP" "http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter"
#Statusabfrage
curl -X GET --header "Accept: text/plain" "http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter/state"
Scheint alles zu funktionieren. Folgendes habe ich gemacht:
1. openHAB2 auf einem Raspberry installiert und gemäßt der Anleitung von https://github.com/zeezee300/openwms OpenWMS Binding installiert
2. Den Warema WMS Stick per USB direkt am Raspberry angeschlossen und das OpenWMSBindung in openHAB2 eingerichtet. Es war anschließend sofort online.
3. Den OpenWMS Blind Actuator konfiguriert. Wichtig ist hier die korrekte Hinterlegung der Device ID und PANID.
4. In openHAB2 (Paper UI) unter Add-ons -> User Interfaces "REST Documentation" installiert, damit ich an die CURL-Kommandos komme.
5. Auf der Startseite von openHAB2 (http://openhab.local:8080/start/index) "REST API" selektiert und mir die CURL-Kommandos zusammen gesucht (geht dort sehr komfortabel)
6. Ein dummy-Device, DOIF und eine kleine Subroutine angelegt. Wenn unter 2 und 3 alles online ist, geht alles aus FHEM aus anzusteuern.
Mal sehen wie stabil dies läuft.
DUMMY-Device
Internals:
CFGFN
FUUID 5f3e3247-f33f-8b20-aef7-ad198fc3bb3ebe6c
NAME WaremaMarkise
NR 42150
STATE up
TYPE dummy
READINGS:
2020-08-20 17:05:54 state up
2020-08-20 17:05:51 statusWaremaBlind online
2020-08-20 17:05:51 statusWaremaTransceiver online
Attributes:
room Wohnzimmer
webCmd status:up:down:stop
DOIF
Internals:
CFGFN
DEF ([WaremaMarkise] eq "status")
({switchWarema("status")})
##(set WaremaMarkise {(qx("curl -X GET --header 'Accept: text/plain' 'http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter/state'"))})
DOELSEIF ([WaremaMarkise] eq "down")
("curl -X POST --header 'Content-Type: text/plain' --header 'Accept: application/json' -d 'DOWN' 'http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter'")
DOELSEIF ([WaremaMarkise] eq "up")
("curl -X POST --header 'Content-Type: text/plain' --header 'Accept: application/json' -d 'UP' 'http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter'")
DOELSEIF ([WaremaMarkise] eq "stop")
("curl -X POST --header 'Content-Type: text/plain' --header 'Accept: application/json' -d 'STOP' 'http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter'")
DOELSEIF ([06:00-23:00,+:30])
({switchWarema("status")})
FUUID 5f3e3686-f33f-8b20-2545-f972aaacc19452ad
MODEL FHEM
NAME switchWaremaDOIF
NOTIFYDEV global,WaremaMarkise
NR 42301
NTFY_ORDER 50-switchWaremaDOIF
STATE cmd_3
TYPE DOIF
VERSION 22588 2020-08-12 19:25:15
READINGS:
2020-08-20 17:05:54 Device WaremaMarkise
2020-08-20 17:05:54 cmd 3
2020-08-20 17:05:54 cmd_event WaremaMarkise
2020-08-20 17:05:54 cmd_nr 3
2020-08-20 17:05:54 e_WaremaMarkise_STATE up
2020-08-20 14:53:24 mode enabled
2020-08-20 17:05:54 state cmd_3
2020-08-20 14:53:24 timer_01_c05 21.08.2020 06:00:00
2020-08-20 14:53:24 timer_02_c05 20.08.2020 23:00:00
2020-08-20 17:00:00 timer_03_c05 20.08.2020 17:30:00
Regex:
accu:
cond:
WaremaMarkise:
0:
&STATE ^WaremaMarkise$
1:
&STATE ^WaremaMarkise$
2:
&STATE ^WaremaMarkise$
3:
&STATE ^WaremaMarkise$
4:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::InternalDoIf($hash,'WaremaMarkise','STATE') eq "status"
1 ::InternalDoIf($hash,'WaremaMarkise','STATE') eq "down"
2 ::InternalDoIf($hash,'WaremaMarkise','STATE') eq "up"
3 ::InternalDoIf($hash,'WaremaMarkise','STATE') eq "stop"
4 ::DOIF_time($hash,0,1,$wday,$hms)
days:
do:
0:
0 {switchWarema("status")}
1:
0 "curl -X POST --header 'Content-Type: text/plain' --header 'Accept: application/json' -d 'DOWN' 'http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter'"
2:
0 "curl -X POST --header 'Content-Type: text/plain' --header 'Accept: application/json' -d 'UP' 'http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter'"
3:
0 "curl -X POST --header 'Content-Type: text/plain' --header 'Accept: application/json' -d 'STOP' 'http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter'"
4:
0 {switchWarema("status")}
5:
helper:
DEVFILTER ^global$|^WaremaMarkise$
NOTIFYDEV global|WaremaMarkise
event up
globalinit 1
last_timer 3
sleeptimer -1
timerdev WaremaMarkise
timerevent up
triggerDev WaremaMarkise
DOIF_eventa:
cmd_nr: 3
cmd: 3
cmd_event: WaremaMarkise
cmd_3
DOIF_eventas:
cmd_nr: 3
cmd: 3
cmd_event: WaremaMarkise
state: cmd_3
timerevents:
up
timereventsState:
state: up
triggerEvents:
up
triggerEventsState:
state: up
internals:
all WaremaMarkise:STATE
interval:
0 -1
1 0
intervalfunc:
2 ::DOIF_time($hash,0,1,$wday,$hms)
intervaltimer:
0 2
1 2
localtime:
0 1597982400
1 1597957200
2 1597937400
readings:
realtime:
0 06:00:00
1 23:00:00
2 17:30:00
time:
0 06:00:00
1 23:00:00
2 +:30
timeCond:
0 4
1 4
2 4
timer:
0 0
1 0
2 0
timers:
4 0 1 2
trigger:
triggertime:
1597937400:
localtime 1597937400
hash:
1597957200:
localtime 1597957200
hash:
1597982400:
localtime 1597982400
hash:
uiState:
uiTable:
Attributes:
do always
room Schalter,Wohnzimmer
Routine
sub switchWarema($){
my ($WaremaMarkise) = @_;
if ($WaremaMarkise eq "status"){
my $statusWaremaPosition = qx"curl -X GET --header 'Accept: text/plain' 'http://openhab.local:8080/rest/items/OpenWMSBlindActuator_Shutter/state' 2>/dev/null";
fhem("set WaremaMarkise $statusWaremaPosition");
my $statusWaremaBlind = qx"curl -X GET --header 'Accept: application/json' 'http://openhab.local:8080/rest/things/openwms%3Ablind%3A7d316735/status' 2>/dev/null";
if ($statusWaremaBlind =~ m/ONLINE/){
fhem("setreading WaremaMarkise statusWaremaBlind online");
}else{
fhem("set Telegram message Warema prüfen! $statusWaremaBlind");
fhem("setreading WaremaMarkise statusWaremaBlind $statusWaremaBlind");
}
my $statusWaremaTransceiver = qx"curl -X GET --header 'Accept: application/json' 'http://openhab.local:8080/rest/things/openwms%3Abridge%3A6a304331/status' 2>/dev/null";
if ($statusWaremaTransceiver =~ m/ONLINE/){
fhem("setreading WaremaMarkise statusWaremaTransceiver online");
}else{
fhem("set Telegram message Warema prüfen! $statusWaremaTransceiver");
fhem("setreading WaremaMarkise statusWaremaTransceiver $statusWaremaTransceiver");
}
}
}
Wie bist du denn an die Device ID und PANID gekommen?
Als ich noch eine alte Version von dem Open WMS Binding hatte, konnte ich mittels Wireshark + Warema Studio die USB Daten aufzeichnen (https://forum.iobroker.net/topic/7336/iobroker-mit-warema-wms-web-control). Mit der neuen Version hat er die Fernbedienung in openHAB2 automatisch erkannt (mit Lerntaste) und die Daten übernommen.