Forum

Bitte oder Registrieren, um Beiträge und Themen zu erstellen.

[Anleitung] Verwendung in FHEM mit dem ROLLO Modul

Seite 1 von 3Nächste

Hallo!
Es ist ja noch nicht offiziell das auch Empfangene Daten als JSON-String via MQTT übermittelt werden. Daher erstmal nur hier eine Anleitung:

Einrichten der Rolladen, wie auch im WIKI (Kanal muss angepasst werden!):

defmod Rollo_BueroMQTT MQTT_DEVICE

attr Rollo_BueroMQTT IODev mqtt

attr Rollo_BueroMQTT devStateIcon UP:shutter_open DOWN:shutter_closed SHADE:shutter_halfopen STOP:shutter_halfopen

attr Rollo_BueroMQTT eventMap UP:UP DOWN:DOWN SHADE:SHADE STOP:STOP UPDOWN:UPDOWN LEARN:LEARN

attr Rollo_BueroMQTT publishSet UP DOWN STOP SHADE UPDOWN LEARN cmd/jarolift/shutter/8

attr Rollo_BueroMQTT stateFormat state

attr Rollo_BueroMQTT subscribeReading_state stat/jarolift/shutter/8

attr Rollo_BueroMQTT webCmd UP:DOWN:STOP:SHADE:UPDOWN:LEARN

Hiermit sollten sich die Rolladen bereits steuern lassen.

Das ROLLO-Modul in FHEM ist eigentlich nur eine Steuerung. Werden die Fahrbefehle über das Modul gesendet wird über einen Timer bestimmt, wo (in etwa) der Rolladen gerade steht.

defmod Rolladen_Buero ROLLO

attr Rolladen_Buero userattr rx_devices rx_channels

attr Rolladen_Buero autoStop 0

attr Rolladen_Buero commandDown set Rollo_BueroMQTT DOWN

attr Rolladen_Buero commandStop set Rollo_BueroMQTT STOP

attr Rolladen_Buero commandUp set Rollo_BueroMQTT UP

attr Rolladen_Buero devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop position-100:fts_shutter_100:open position-90:fts_shutter_80:closed position-80:fts_shutter_80:closed position-70:fts_shutter_70:closed position-60:fts_shutter_60:closed position-50:fts_shutter_50:closed position-40:fts_shutter_40:open position-30:fts_shutter_30:open position-20:fts_shutter_20:open position-10:fts_shutter_10:open position-0:fts_shutter_10:closed

attr Rolladen_Buero excessBottom 0

attr Rolladen_Buero excessTop 2

attr Rolladen_Buero resetTime 30

attr Rolladen_Buero rx_channels 0

attr Rolladen_Buero rx_devices 9af00

attr Rolladen_Buero secondsDown 30

attr Rolladen_Buero secondsUp 35

attr Rolladen_Buero switchTime 1

attr Rolladen_Buero type normal

attr Rolladen_Buero webCmd open:closed:half:stop:position

Wichtig dabei ist die Anpassung der Fahrbefehle "attr Rolladen_Buero commandDown set Rollo_BueroMQTT DOWN" etc. Hier muss der Name des Rolladen-Devices (siehe oben) eingetragen werden.

Abweichend vom reinen ROLLO-Modul habe ich hier 2 Userattribute hinzugefügt.
rx_devices: Liste (mit Leerzeichen getrennt) von Fernbedienungen, auf die das Modul reagieren soll. Hier nur die ersten 5 Zeichen (also ohne den sendenden Kanal) eintragen
rx_channels: Liste (mit Leerzeichen getrennt) des Kanals der Fernbedienung, auf das das Modul reagieren soll.
Also Beispielsweise:
rx_devices 9af00 xxx00 yyy000
rx_channels 3 4 8
Dann wird bei der Fernbedienung 9af00 auf Kanal 3 reagiert, bei xxx00 auf Kanal 4 etc.

Die Zeiten müssen selbst auf die Fahrtzeiten angepasst werden. Siehe auch ROLLO-Modul.

Wenn alles bis hierhin richtig ist, ist das ROLLO-Modul bereits lauffähig und die Positionen sollten angefahren werden können.

Um den Empfang umzusetzen muss noch etwas mehr Arbeit geleistet werden. Zuerst benötigen wir ein MQTT_DEVICE für den Empfang:

defmod MQTT_Rollo_Empfang MQTT_DEVICE

attr MQTT_Rollo_Empfang IODev mqtt

attr MQTT_Rollo_Empfang autoSubscribeReadings stat/jarolift/config/.*

attr MQTT_Rollo_Empfang publishSet sendconfig cmd/jarolift/sendconfig

attr MQTT_Rollo_Empfang publishSet_config cmd/jarolift/sendconfig

attr MQTT_Rollo_Empfang room mqtt

attr MQTT_Rollo_Empfang stateFormat transmission-state

attr MQTT_Rollo_Empfang subscribeReading_1 stat/jarolift/config/1

attr MQTT_Rollo_Empfang subscribeReading_received stat/jarolift/received

attr MQTT_Rollo_Empfang webCmd getConfig

Hier habe ich auch gleich die Möglichkeit geschaffen, ein getConfig abzusetzen...

Um den Empfangenen JSON-String gleich in Readings umzusetzen gibt es "expandJSON". Sehr praktisch:

defmod ej_Rollo_Empfang expandJSON MQTT_Rollo_Empfang.*:.*:.{.*}

Nun muss natürlich noch bei Empfangenen Daten etwas passieren. Ich habe das Ganze derzeit in einem DOIF umgesetzt:

defmod MQTT_Rollo_Empfang_DOIF_1 DOIF ([MQTT_Rollo_Empfang:"^rx_disc_low:..*$"]) ({\

my $Empf_Device = "MQTT_Rollo_Empfang";;\

my $serial = ReadingsVal("$Empf_Device", "serial", ".");; \

my $function = ReadingsVal("$Empf_Device", "rx-function", ".");; \

my $disclow = ReadingsVal("$Empf_Device", "rx_disc_low", ".");; \

my $dischigh = ReadingsVal("$Empf_Device", "rx_disc_high", ".");; \

\

##Kanäle:\

my $disclowbin = sprintf ("%08b", $disclow);;\

Log 5, "disclow: $disclow";;\

Log 5, "disclowbin: $disclowbin";;\

my $dischighbin = sprintf ("%08b", $dischigh);;\

Log 5, "disclow: $dischigh";;\

Log 5, "disclowbin: $dischighbin";;\

##Devices die angesteuert werden sollen:\

my @Rollos = devspec2array("Rolladen_.*");;\

foreach(@Rollos) {\

my $rx_devices = AttrVal($_, "rx_devices", undef);;\

my $RolloDev = $_;;\

next if (!defined($rx_devices));;\

next if ($rx_devices eq "");;\

my @rx_devicesList = split ' ', $rx_devices;;\

Log 5, "Device: $_ rx_devices: @rx_devicesList";;\

\

my $rx_channels = AttrVal($_, "rx_channels", undef);;\

next if (!defined($rx_channels));;\

next if ($rx_channels eq "");;\

my @rx_channelsList = split ' ', $rx_channels;;\

Log 5, "rx_channels: @rx_channelsList";;\

\

my $rx_serial = substr $serial, 0, -2 ;;\

my $i = 0;;\

foreach(@rx_devicesList){\

if ($rx_serial eq $_ ){\

my $DeviceChannel = $rx_channelsList[($i)];;\

Log 5, "found: $_ with Channel $DeviceChannel";;\

\

##Prüfen, ob der Channel gesetzt ist\

my $sollfahren = 0;;\

if ($DeviceChannel < 9){\

my $value = substr $disclowbin, ($DeviceChannel * (-1)), 1;;\

if ($value eq "1"){\

Log 5, "SOLL FAHREN!!!";;\

$sollfahren = 1;;\

}\

} else {\

my $value = substr $dischighbin, (($DeviceChannel-8) * (-1)), 1;;\

if ($value eq "1"){\

Log 5, "SOLL FAHREN!!!";;\

$sollfahren = 1;;\

}\

}\

if ($sollfahren == 1){\

##rx-function:\

##4 -> STOP\

##8 -> HOCH\

##2 -> RUNTER\

##a -> Hoch/Runter\

if ($function eq "4"){\

fhem("set $RolloDev extern stop")\

} elsif ($function eq "8"){\

fhem("set $RolloDev extern open")\

} elsif ($function eq "2"){\

fhem("set $RolloDev extern closed")\

} elsif ($function eq "a"){\

##keine funktion\

}\

}\

}\

$i++;;\

}\

\

}\

})

attr MQTT_Rollo_Empfang_DOIF_1 do always

Hier ist erstmal wichtig, das Empfänger-Device anzugeben ("MQTT_Rollo_Empfang"). Zusätzlich ist es wichtig, das alle Rolläden vom ROLLO-Modul mit "Rolladen_.*" gefunden werden können. 

Vereinfacht gesagt wird hier nur geschaut, welche ROLLO-Module in Frage kommen. Ist eins (oder mehrere) dabei wird dem ROLLO-Modul nur gesagt, das extern gefahren wird (set $RolloDev extern xxx). Es wird also kein Fahrbefehl gesendet, sondern nur "bescheid" gegeben, das die Rolläden fahren.

Da ich die Gruppenkommandos (DiscLow/DiscHigh in der Binärform) verwende, ist es egal, welches der sendende Kanal ist. Ich habe nur Gruppen-Fernbedienungen...hier funktioniert es problemlos.

Viel Spaß damit. Verbesserungsvorschläge sind immer willkommen! Es kann auch gerne so oder in Auszügen ins WiKi gestellt werden...

Gruß
blondie

Oliver hat auf diesen Beitrag reagiert.
Oliver

HI!

Welchen Sketch nutzt du für die MQTT Steuerung?

 

 

Dank an den Verfasser für die Anleitung.

Hätte ich als Anfänger niemals hinbekommen.

 

Also mit dem aus´m Git geht´s. (Firmware 0.7)

Habe gestern mal  angefangen es einzurichten zum testen.

Läuft auch nur die Positionen vom Rollo-Modul passen bei mir natürlich noch nicht aber der Rolladen fährt.

Alles genau so übernommen außer den Channel vom Jarolift-Dongle den hab ich angepasst.

Umbenennen kann man es ja hinterher noch.

Eingerichtet hab ich bis es zu dem Empfang der Daten geht.

Muss mich noch informieren  wie ich über wlan ne telnet Verbindung zum Dongle herstellen kann damit ich auch sehe was ankommt.  Muss ja die rx_devices und channels auslesen.

 

Gruß

Hier in meinem Thread gehts um FHEM.

Wenn du Jarolift über FHEM nutzt, siehst du die Devices auch dort ohne Telnet.

Soweit mit bekannt geht Telnet nicht über Wlan. Klemm den Dongle einfach via USB an den Rechner und logge die via Putty über COM mit 115200 Baud ein. Da siehst du dann alles was du brauchst.

 

Meine Rollos laufen ganz normal über mqtt in FHEM.

Das hier ist eine Anleitung wie man sie ins Rollo-Modul integriert.

Also nochmal was anderes denke ich.

Wenn du nur über mqtt steuern möchtest steht alles im Wiki.

Mit 0.7 gehts auf jeden fall.

 

https://github.com/madmartin/Jarolift_MQTT/releases/tag/v0.7

 

Ist es denn nun möglich über diesen Weg in FHEM zu sehen, wenn ein Rolladen mit einer Fernbedienung (nicht mit dem Dongle) gesteuert wird?

Beispiel:
Ich schließe den Rolladen im Wohnzimmer manuell mit dem Wandsender.

Registriert dies MQTT / FHEM und zeigt den Rolladen dann auch als offen oder geschlossen an?

Das sollte mit der Anleitung funktionieren wenn ich sie richtig verstanden hab.

Vorausgesetzt der Wandsender ist ein Funksender. 🙂

 

 

Zitat von Banabas am 26. September 2018, 13:13 Uhr

Das sollte mit der Anleitung funktionieren wenn ich sie richtig verstanden hab.

Vorausgesetzt der Wandsender ist ein Funksender. ?

Danke für deine Rückantwort...

Nutzt du FHEM nicht?

Ich hatte Kontakt zu Martin, dieser sagte mir, dass bisher die Readings für die Funksender außer dem Dongle noch nicht erkannt werden.

Diese Anleitung hier nutzt ja die 0.7 von ihm...

Auf der anderen Seite wird davon gesprochen, dass die Funksender mit eingetragen werden können, was dafür sprechen würde, dass es funktioniert.

Evtl. könnt sich ja @Blondie dazu melden

 

 

 

Ja das wäre super.

Komme mit meinen ausgelesenen Sachen auch nicht weiter.

Wie kann ich das rx_device ermitteln?

 

CC1101_RSSI 74

serialnumber: 0x0209xxxx // function code: 0x04 // disc: 0x80

devicekey low: 0x217dxxxx // high: 0x6281xxxx // decoded: 0x0100xxxx

 

Wäre klasse wenn man mir da weiterhelfen könnte.

 

 

Flash dir für die ganzen Sachen zuerst den original Sketch von Steffen...

Dazu das FHEM Modul.

Alles hier zu finden:

Jarolift TDEF in fhem

Dort bekommst du alle Daten die du brauchst in FHEM.

Dann zurück auf die 0.7.....

Werde mir das alles auch mal nächste Woche ansehen, im Moment ist es knapp mi der Zeit

 

Seite 1 von 3Nächste