Neues Modul: Rolladensteuerung

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

Vorheriges Thema - Nächstes Thema

willybauss

kleines Missversständnis: ich bin nicht der Modulauthor, nur Anwender. Insofern kann ich Dir über die Interna des Moduls nichts konkretes erzählen.

Ich wusste nichts von dem RPI_GPIO Modul. Das macht die Sache natürlich einfacher als gedacht. Die spannendste Frage wird sein, wie ich das auf mehr GPIO's erweitere, als der Raspi hat. Ich dachte da an sowas: http://pridopia.co.uk/pi-23017-8-lp.html


attr Rollo_Down active_low yes

Das Relais hängt also an +3,3V und am GPIO?
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Frank_Huber

GPIO Ausgänge oder EIngänge?
für Ausgänge hab ich die hier: http://www.ebay.de/itm/222036668945

laufen sehr gut.
Hab die nie als Eingang getestet. dazu kann ich nix sagen.

willybauss

Wie kann fhem zwischen den beiden 32-Kanal-Blöcken wechseln? Kann das RPI_GPIO-Modul das?

PS:
Sorry für OT; wenn das länger wird müssen wir per PN weiter diskutieren.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Invers

attr Rollo_Down active_low yes
Ich hatte gedacht, dass das Relais dann "angezogen" ist, wenn kein Strom vom GPIO kommt. So funktioniert es eigentlich auch. Vorher hatte ich high, dann waren die Relais bei bei GPIO high angezogen. Da dann aber im Leerlauf die Kontgroll-LEDS der Relais leuchteten, habe ich das geändert. Entlastet ja den Pi.
Ich bin da leider nicht so der Fachmann,  also alles unter Vorbehalt.
Auf jeden Fall leuchten die LEDs nun bei on und nicht bei off. Somit sind alle LEDs im Normalfall dunkel.

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

jazzor

Zitat von: Invers am 27 März 2017, 15:01:49
Wäre es ein grosser Aufwand, die Kanalsteuerung mit ins Modul aufzunehmen?
Hallo Invers, du sprichst mir aus der Seele!
Ich habe - wie du - eine 15-Kanal Fernbedienung, die ich über Relais schalte.
Die Kanalauswahl habe ich über eine Funktion in der 99_myUtils gelöst, die immer am Anfange eines Befehles up/down/stop ausgeführt wird.

Allerdings bekomme ich es nicht hin, die Befehle sauber schnell hintereinander an die Fernbedienung zu übergeben.
Genauer gesagt weiß die Funktion nicht, ob ich komplett öffne oder komplett schließe (beidesmal kein Stopp notwendig) oder eine Zwischenposition anfahre (Stopp notwendig).
Dadurch ist der Waf momentan sehr gering. Wie hast du das gelöst?
@Modulentwickler: Gibt es eine Möglichkeit, dass immer nur ein Rollo aktiv ist?

Invers

#455
Ich habe GPIO so angesteuert für Kanal Minus:
defmod Rollo_Minus RPI_GPIO 17
attr Rollo_Minus active_low yes
attr Rollo_Minus comment Pin   11 \
gpio  17\
Relais 1
attr Rollo_Minus direction output
attr Rollo_Minus eventMap /on-for-timer 0.1:push/
attr Rollo_Minus room Rollo
attr Rollo_Minus webCmd push




Selbiges für alle anderen Befehle (je 1 Relais).

In der myUtils dann folgendes:



sub Kanal_einstellen($$)
{
    my ($kanalSoll,$befehl) = @_;
    my $kanalIst = ReadingsVal("DU_ZV","KanalAktuell","0");
    my $aktiv = 0;
     
    if (ReadingsVal("DU_FB_aktiv","state","0") eq "on") {$aktiv = 1}; #ein Push zusätzlich, um FB mit Relais zu aktivieren
    if ($kanalSoll == $kanalIst)
      {
      my $cmd;
      $cmd.= "sleep 1; set Rollo".$kanalSoll." ".$befehl . "; ";
      fhem $cmd;
      }

    if ($kanalSoll > $kanalIst)
      {
      my $cmd;
      foreach my $i ($kanalIst..$kanalSoll-$aktiv)
        {
        $cmd .= "sleep 0.7;" if ($cmd);
        $cmd .= "set Rollo_Plus push; set DU_FB_aktiv on-for-timer 1; ";
        }
      $cmd.= "setreading DU_ZV KanalAktuell " . $kanalSoll . "; ";
      $cmd.= "sleep 1; set Rollo".$kanalSoll." ".$befehl . "; ";
      fhem $cmd;
      }

    if ($kanalSoll < $kanalIst)
      {
      my $cmd;
      foreach my $i ($kanalSoll..$kanalIst-$aktiv)
        {
        $cmd .= "sleep 0.7;" if ($cmd);
        $cmd .= "set Rollo_Minus push; set DU_FB_aktiv on-for-timer 1; ";
        }
      $cmd.= "setreading DU_ZV KanalAktuell " . $kanalSoll . "; ";
      $cmd.= "sleep 1; set Rollo".$kanalSoll." ".$befehl . "; ";
      fhem $cmd;
      }

}




("DU_ZV","KanalAktuell"); ist ein Dummy, wo ich den eingestellten Kanal (und noch viele andere Werte für fhem) speichere, um später den neuen ansteuern zu können.

Die Rollos habe ich so definiert mit Rollo1, Rollo2 usw.
der Aufruf erfolgt dann für Rollo1 mit {Kanal_einstellen 1,"half"} oder {Kanal_einstellen 1,"position 10"} u.s.w.

Da kann alles noch optimiert werden, weil ich noch Perl-Anfänger bin. Ich hatte da auch Hilfe, weil die Verzögerungen bei mir nicht geklappt haben.
Dafür nochmals an dieser Stelle meinen Dank.

Der Nachteil dieser Lösung ist, dass man die Steuerbefehle nicht durch Klick auf Rollo-Befehle absetzen kann, weil ja vorher immer der Kanal gewählt werden muss. Also muss man vermutlich über Dummys absetzen.
Es wäre natürlich eleganter, wenn man meine Routine in abgewandelter Form in das Modul einbauen könnte, aber dazu bin ich zu doof.

Wenn noch Fragen sind, gerne melden.
Falls jemand eine Verbesserung findet, bitte ich ebenfalls um Mitteilung.
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

Zitat von: jazzor am 30 März 2017, 08:45:12
Allerdings bekomme ich es nicht hin, die Befehle sauber schnell hintereinander an die Fernbedienung zu übergeben.

Habs jetzt nicht exakt verfolgt, aber vor dem Rollomodul hatte ich meine Fahrbefehle als Sequenz einzelner Befehle definiert, die alle hintereinander abgearbeitet werden. Würde das helfen?, also z.B.

define Rollo_Schiebetuer_Abends_nWE at *00:00:01 IF (!($we)) \
(\
set Rollo_1_EG released,\     ==> evtl. vorherigen Tastendruck beenden
sleep 2,\                     ==> 2 Sekunden warten
set Rollo_1_EG BI,\           ==> Taste "runter" drücken   =\
sleep 2,\                     ==> 2 Sekunden warten        ==> langer Tastendruck "runter"
set Rollo_1_EG released,\     ==> Taste loslassen          =/
sleep 40,\                    ==> 40 Sekunden warten
set Rollo_1_EG BI,\           =\
sleep 0.4,\                   ==> kurzer Tastendruck "runter" ==> Rollo stoppen
set Rollo_1_EG released,\     =/
sleep 2,\                     ==> 2 Sekunden warten
set Rollo_1_EG B0,\           =\
sleep 2,\                     ==> langer Tastendruck "hoch" ==> Rollo fährt hoch
set Rollo_1_EG released,\     =/
sleep 13,\                    ==> 13 Sekunden warten
set Rollo_1_EG B0,\           =\
sleep 0.4,\                   ==> kurzer Tastendruck "hoch" ==> Rollo stoppen
set Rollo_1_EG released,\     =/
{Log 1,"Rolladen runter und wieder halb hoch"}\
)\
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

jazzor

Zitat von: willybauss am 30 März 2017, 22:33:09
Habs jetzt nicht exakt verfolgt, aber vor dem Rollomodul hatte ich meine Fahrbefehle als Sequenz einzelner Befehle definiert, die alle hintereinander abgearbeitet werden. Würde das helfen?,
So ähnlich hab ich es auch.
Allerdings habe ich mich auch recht ungeschickt ausgedrückt (ich versuche es mal umzuformulieren):

Ich steuere (aktuell) aus ROLLO mit  KOmmandos für up/ down/ stopp eine Fernbedienung per Relais und GPIO an. Läuft auch soweit.
Problem machen die Kanalwechsel, aber nur, wenn ich zuerst:

  • das 1. Rollo auf 50%
  • 2. Rollo steuere
Sobald das erste Rollo sich in Bewegung setzt, wechselt mein Script den Kanal und führt den nächsten Befehl aus. Dadurch kommt das 'Stopp' signal für die 50% meistens nicht rechtzeitig, oder gleichzeitig mit anderen Befehlen, weil ROLLO das ja so nicht mitbekommt.
Ich bräuchte ne Idee/ Möglichkeit, die Befehlsabareitung für alle Typen ROLLO auszusetzen und anschließend abzuarbeiten, wenn das aktuelle Rollo nicht nur komplett geöffnet oder geschlossen wird.

Invers

Genau daran tüftle ich gerade.
Eine Lösung wird nicht so einfach sein, wenn das Rollo-Modul nicht mitbekommt, dass der Kanalwechsel aktiv war/ist.
Ich benötige im Rollo-Modul halt ein Reading, welches das Ende der Modulaktion meldet.

Könnte man die GPIOs ohne die Relais schalten, wäre alles viel einfacher, weil der Kanalwechsel dann sehr schnell wäre.
Die Fernbedienung von SIRO läuft ja nur mit 3 Volt. Kann man denn den Tastenschalter nicht direkt mit GPIO und GMD am Pi verbinden? Da hängt ja keine Last dran. Ich habe schon Google befragt, aber ohne Ergebnis.
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

Zitat von: Invers am 30 März 2017, 23:09:20
Könnte man die GPIOs ohne die Relais schalten, wäre alles viel einfacher, weil der Kanalwechsel dann sehr schnell wäre.
Schon mal an Optokoppler statt Relais gedacht? Das will ich demnächst für meine Lichtschalter probieren. Ich habe bei Reichelt vereinzelt Optokoppler gefunden, für die der Strom aus den GPIOs (8mA) ausreichen könnte.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

KernSani

#460
Zitat von: KernSani am 22 März 2017, 00:30:35
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...

Mir sind zwei weitere Kleinigkeiten aufgefallen:
1.) Das autoStop-Attribut funktioniert genau entgegengesetzt meiner Erwartung (und der Doku im Quellcode). Wenn autoStop == 1 sendet ROLLO ein stop Kommando, bei nicht gesetztem Attribut läuft der ROLLO bis er selbst stoppt.
2.) Bei mir kommen manchmal Kommandos nicht beim Rollladen an. ROLLO steht dann z.B. auf closed, der physiche Rollladen ist aber noch auf position 0. Ein weiteres "closed" Kommando wird aber nicht ausgeführt, da die aktuelle ROLLO position mit der gewünschten übereinstimmt. In dem angehängtem patch habe ich ein Attribut "forceDrive" eingeführt. Ist dieses gesetzt, werden "open" bzw. "closed" auch ausgeführt, wenn laut ROLLO aktuelle und Zielposition übereinstimmen (dies gilt nur für die positionen 0 und 100 - alles zwischendrin würde nur Chaos verursachen)
3.) Die originale Implementierung des "tue nichts" ist im Grunde auch nicht ganz sauber, da trotzdem Zeiten wie "excessTop" und "excessBottom" berücksichtigt werden - das ist zumindest in meinem Fall aber unerheblich, daher habe ich es nicht angepasst.

Grüße,

Oli

EDIT: Das mit dem autostop habe ich kaputt gemacht...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Invers

Zitat1.) Das autoStop-Attribut funktioniert genau entgegengesetzt meiner Erwartung (und der Doku im Quellcode). Wenn autoStop == 1 sendet ROLLO ein stop Kommando, bei nicht gesetztem Attribut läuft der ROLLO bis er selbst stoppt.

Das ist eigenartig, denn bei mir funktioniert es so, wie es sollte. Habe ich jetzt gerade noch einmal probiert.
Deine angehängte Version habe ich noch nicht installiert.
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

KernSani

Zitat von: Invers am 02 April 2017, 23:41:19
Deine angehängte Version habe ich noch nicht installiert.
Die ist auch eher für den Modulautor gedacht (der aber irgendwie sehr still ist)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Invers

ZitatDie ist auch eher für den Modulautor gedacht
Ja, sorry, aber es stimmt ja trotzdem und ich dachte, es könnte dich interessieren. Es sollte ja einen Grund dafür geben, dass es bei mir funktioniert und bei dir nicht.
Zitat(der aber irgendwie sehr still ist)
Das bedaure ich auch sehr, da ich die Hoffnung hatte, mit meinem kleinen Wunsch unterstützt zu werden. Wirklich schade. Vielleicht hat er sich ja einen Urlaub gegönnt.
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

KernSani

Zitat von: Invers am 03 April 2017, 00:07:48
Ja, sorry, aber es stimmt ja trotzdem und ich dachte, es könnte dich interessieren. Es sollte ja einen Grund dafür geben, dass es bei mir funktioniert und bei dir nicht.
Würde mich auch interessieren... ich wwrde heute abend mal checken, ob ich da irgendwas bei mir kaputt modifiziert habe...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...