Neues Modul: Rolladensteuerung

Begonnen von ThomasRamm, 11 Januar 2016, 00:00:21

Vorheriges Thema - Nächstes Thema

willybauss

So 100%ig verstanden habe ich dein PRoblem noch nicht, aber wenn Du nur ne Verzögerung brauchst: man kann auch im Ausführungsteil des DOIF mehrere Befehle hintereinander schreiben, durch Semikolon getrennt. Einer davon könnte "sleep xx" heißen. Ich hatte mal sowas (in der Zeit vor dem ROLLO-Modul):

define Rollo_Schiebetuer_Abends DOIF ([01:00:00|7] or [00:00:01|8] ({set Rollo_1_EG released; sleep 2; set Rollo_1_EG BI; sleep 2; set Rollo_1_EG released; sleep 40; set Rollo_1_EG BI; sleep 0.4; set Rollo_1_EG released; sleep 2; set Rollo_1_EG B0; sleep 2; set Rollo_1_EG released; sleep 13; set Rollo_1_EG B0; sleep 0.4; set Rollo_1_EG released;})
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

lukasbastelpeter

ja, aber ein "sleep" blockiert mir ja mein System, ich würde das lieber mit "Wait" erledigen...

Ich habe halt das Problem, dass das DOIF ausgeführt wird zum Zeitpunkt t=0, genau jetzt ändert sich der Wert vom Rollo, von "stop" auf "driving-up", das heisst mein DOIF wird ausgeführt, mein Status hat sich aber noch nicht geändert, denn der ist eine Reaktion auf die Ausführung und ist immer noch "driving-up=off".
Mein DOIF macht also die Prüfung, der Bedingung, stellt fest: Rollo soll hoch fahren, fährt aber nicht, springt also wieder zurück auf Stop im Status, ergo: Status hat sich nicht geändert.

Würde ich das DOIF jetzt aber die Bedingung 1s später prüfen, zum Zeitpunkt t=1, dann wäre der "aktuelle" Status schon auf  "driving-up=on" und alles wäre schön...
# Raspberry Pi
# Homematic, Z-Wave
# HUE, Tradfri
# Harmony
# ESP8266  Basteleien per MQTT

willybauss

und 1 Sekunde Blockade ist soooo schlimm ???
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

KernSani

Ein FHEM sleep blockiert übrigens nicht...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Jackeson

Hallo,
leider muß ich nochmal nachfragen vieleicht hilft mir doch einer? also ich hab ein Intertechno cmd500 für Rolladen das über das Rollomodul sehr gut funktioniert aber ich bekomme es nicht hin das der Rollo bzw.Jalousie sich nach ca 2 Sekunden abschaltet und die Pos fest behält.
mit at versucht geht nicht
set OG.BueroMichael_Rolladen off at +00:00:01 ; set OG.BueroMichael_Rolladen off at +00:00:02
mit on-for-timer 2 geht nicht was mach ich falsch? oder geht dies gar nicht?

ein set muß doch die zwei Befehle nacheinander ausführen ?
aller anfang ist schwer

C0mmanda

Zitat von: Jackeson am 18 März 2017, 15:23:36

set OG.BueroMichael_Rolladen off at +00:00:01 ; set OG.BueroMichael_Rolladen off at +00:00:02


Ich kenne es nur so:


define at_OG.Buroichael_Rolladen at +00:00:01 set OG.BueroMichael_Rolladen off


Oder eben:
sleep 1;set OG_BueroMichael_Rolladen off;

grtz

Jackeson

#441
Danke für deine Hilfe,

Ja Super aber ich muss ja das off zweimal senden damit er auch stehenbleibt off off ist dann Stop
deswegen dachte ich erst off danach ca.2Sek.später wieder ein off dann müsste er doch stehenbleiben?
und ich wär zufrieden

PS. habs Danke für deine Hilfe Juhu :)
define at_OG.Buroichael_Rolladen at +00:00:01 set OG.BueroMichael_Rolladen off ; set OG.BueroMichael_Rolladen off
aller anfang ist schwer

KernSani

Nachdem ich jetzt zwei Abende damit verbracht habe meine bestehende Rollladensteuerung inkl. haufenweise DOIFs, Dummies etc... auf ROLLO umzubauen bin ich hochzufrieden... ROLLO ist ein klasse Modul, das vieles sehr viel einfacher macht. Ein Problem habe ich aber noch...

Wenn ich einen Rollladen auf "blocked" setze und - ohne etwas zu tun - wieder auf unblocked setze, wird zwar das "blocked" reading zunächst auf "0" gesetzt und dann gelöscht, der state bleibt aber "blocked". Um genau zu sein, in der Set-Sub, denke ich müsste das Coding

  } elsif ($cmd eq "unblocked") {
    ROLLO_Stop($hash);
    readingsSingleUpdate($hash,"blocked","0",1);
    ROLLO_Start($hash);
    fhem( "deletereading $name blocked");
    return;
  }

folgendermassen angepasst werden:
  } elsif ($cmd eq "unblocked") {
    readingsSingleUpdate($hash,"blocked","0",1);
    ROLLO_Stop($hash);
    ROLLO_Start($hash);
    fhem( "deletereading $name blocked");
    return;
  }
dann sollte der state korrekt gesetzt werden (hab's nicht ausprobiert, keine Ahnung, ob das andere Seiteneffekte hätte).

Eine weiteres Verhalten im Zusammenhang mit blocked: Auch im blocked mode werden readings wie desired_position aktualisiert (wenn keine der Bedingungen für den blocked mode in ROLLO_Start zutrifft), was dazu führt, dass beim Setzen von "unblocked" der Rolladen irgendwo hinfährt... Ich fände es schön, wenn es z.B. ein Attribut gäbe, dass im "blocked" mode alle nicht erlaubten Befehle einfach ignoriert werden.

Danke,

Grüße,

Oli

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

stgeran

Gibt es bei Dir den Zusatz "ROLLO_Automatik"?
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

KernSani

Zitat von: stgeran am 20 März 2017, 21:31:43
Gibt es bei Dir den Zusatz "ROLLO_Automatik"?
Nein.

Oben beschriebene Coding-Änderung scheint das Problem mit dem doppelten "unblock" zu lösen, ich habe aber noch ein weiteres Problem festgestellt:
Bei "stop" wird die desired-position nicht auf die stop position gesetzt, also wenn ich z.B. "closed" setze, dann aber auf halben Weg stehen bleibe, bleibt desired position auf 100, position ist auf 50. Nun mache ich blocked/unblocked und der Rollo fährt unmotiviert los... M.E. sollte beim stop die desired-position auf die aktuelle position gesetzt werden.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

#445
ich habe mal die zuvor beschriebenen Probleme die in meinem Anwendungsfall auftreten angepasst. Möglicherweise habe ich damit irgendwas anderes kaputt gemacht, ich glaube aber nicht... Vielleicht kann der Modul-Autor ja mal einen Blick drauf werfen.

Edit: Heute morgen gingen nicht alle Rollläden so hoch, wie sie sollten... irgendwas hab ich wohl verpfuscht... muss ich mir heute abend nochmal ansehen...
EditEdit: Problem dass nicht alle so hoch gingen, wie sie sollten... Seit ich die Rollläden verzögert schalte und nicht alle auf einmal, klappt's...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

spi3845

Was ist eigentlich der Grund, dass das Modul nicht ein offizielles Modul wird? Rollladen/Jalousien-Steuerung ist nach Licht wahrscheinlich das häufigste Anwendungsszenario und die meisten werden Anwendungsfälle haben wie
- manuell auf/zu/irgend eine Position
- Timer auf/zu
- Anhalten durch Trigger (z. B. Tür offen oder öffnen)
- auf/zu durch Trigger (z. B. Wind)
- ...

Invers

Da dieser Thread hier schon recht umfangreich geworden ist, möchte ich nicht unbedingt alles lesen. Sollte sich allerdings herausstellen, dass dieses Modul für meine Zwecke geeignet ist, werde ich das gerne nachholen. Daher vorab erst einmal meine Frage, ob das Modul diese Rollos steuern könnte, oder ob ich da selber was stricken muss.

Mein Istzustand:

Ich habe (vorerst) ein Rollo mit einem Motor bestückt. Dieser Motor kann mit einer 15 Kanalfernbedienung gesteuert werden. Die 5 Tasten der Fernbedienung habe ich mit jeweils einem Relais gekoppelt, welches an den GPIO des Pi hängen.
Die Relais werden also über GPIO Ports gesteuert. So werden die fünf Funktionen Aufwärts, Stopp, Abwärts, Kanal minus und Kanal plus gesteuert.
Jedes Rollo hat einen Kanal. Somit ist es erforderlich, immer den Kanal mit umzuschalten. Zum Beispiel hat die Balkontür Kanal null und das Wohnzimmerfenster Kanal eins. Die Kanäle werden bei jedem Druck auf einen Taster gezählt. Bei Druck auf den Kanal minus Taster werden sie runter gezählt und bei Druck auf den Kanal Plus Taster natürlich hoch.
Es muss also immer zuerst der Kanal und dann die Funktion geschaltet werden.
Geht so etwas mit diesem Modul?

Sorry für die lange Frage und schönen Dank für die Antwort bereits im Voraus.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

willybauss

Die Rauf-Runter-Kanalwahl wird das Modul natürlich nicht hin bekommen. Das war dir sicher schon klar. Du müsstest das mit eigenem Code lösen. Danach kannst Du aus deinem Code heraus das Modul aufrufen, um die Rollläden damit zu steuern. Dein Code zur Ansteuerung der Relais muss halt in der Lage sein, von fhem aus aktiviert zu werden.

Das Modul merkt sich die Position jedes Rollos, um bei weiteren Fahrbefehlen "intelligent" reagieren zu können, z.B. ist dann ein Befehl möglich der Art "fahre von der aktuellen 20%-Stellung auf 30%"; der Motor bewegt sich somit nur um 10% runter. Deshalb wird es zwingend nötig sein, jedes Rollo im Modul separat zu definieren, obwohl der Fahrbefehl wohl immer derselbe sein wird. Das sollte aber kein Problem sein: unterschiedliche Rollo-Namen, aber immer derselbe Befehl.

PS:
An der Lösung mit den GPIO's mit Relaisansteuerung hätte ich Interesse. Ich brauche sowas ähnliches grade für ein paar Lichtschalter, die Eltako-Schalter ansteuern.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Invers

Erst einmal vielen Dank für die Infos.
Wäre es ein grosser Aufwand, die Kanalsteuerung mit ins Modul aufzunehmen?
Momentan löse ich das mit einem DOIF.
würdest du im Modul eine Stelle definieren, die eine User Sub auslösen kann, die meinetwegen "irgendwie" heisst?
Dann könnte ich selber eine Perl-Sub zu schreiben versuchen.

Das hätte auch den Vorteil, dass sich jeder noch selber helfen könnte, falls Sonderwünsche auftreten.


Was benötigst du denn an Infos?

Ich habe eine Relaisplatine mit 8 Relais direkt an die GPIOs des Pi angeschlossen die auch vom Pi versorgt werden.
Das ist unkritisch, da immer nur ein Relais für 0,25 Sekunden aktiv ist und keine Last von den Relais geschaltet wird.
Am anderen Ende der Relais habe ich dann direkt die Tasten der zum Rollo gehörenden Fernbedienung angeschlossen (gelötet). Genau genommen habe ich Kabel benutzt, an denen sich schon Stecker für die Pins befinden. Da habe ich auf einer Seite die Stecker abgemacht und die Enden an die FB gelötet.
An die Relais habe ich Stücke von einer Büroklammer geschraubt (statt Kabel) an die ich nun das andere Ende der Kabel stecken kann. Das hält bombig fest und hat den Vorteil, dass man die FB auch wieder leicht ohne Löten und Schrauben entfernen und benutzen kann. Das ist zur Erstprogrammierung der Rollos sehr praktisch, da man dafür an der Rückseite der FB noch zusätzliche Knöpfe drücken muss. Ausserdem kann man so zur Not auch noch ohne Pi steuern.

Die Definition sieht zum Beispiel so aus:

defmod Rollo_Down RPI_GPIO 22
attr Rollo_Down active_low yes
attr Rollo_Down comment Pin   15 \
gpio  22\
Relais 3
attr Rollo_Down direction output
attr Rollo_Down eventMap /on-for-timer 0.25:push/
attr Rollo_Down room 1
attr Rollo_Down webCmd push



Falls weitere Infos gewünscht sind, bitte melden.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2