Warema Mobile System (WMS) mit WMS Stick?

Begonnen von FunkOdyssey, 14 August 2018, 09:25:38

Vorheriges Thema - Nächstes Thema

FunkOdyssey

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.

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.

h002

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.

h002

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.

FunkOdyssey

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.

h002

#4
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"

h002

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");
}
}

}

FunkOdyssey

Wie bist du denn an die Device ID und PANID gekommen?

h002

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.