suche einfache Rolladensteuerung via GPIO und Relais

  • Hallo,


    die Rollladenbedienung an 4 Fenstern übernimmt, wenn wir nicht zu Hause sind, derzeit noch die Oma. Das wird aber nicht ewig so sein. Das könnte aber eine gute Aufgabe für einen RasPi sein. Da die Fenster, die Stromversorgung für die (nachträglich einzubauenden) Motoren und die Lage des RasPis relativ nahe beieinander sind, dachte ich an eine Steuerung via GPIO und einer vorhandenen Relaiskarte.


    Nun bin ich auf der Suche nach einem ähnlichen Projekt. Was ich bisher so an Projekten gefunden habe, war zumeist eine Steuerung via Funk, Licht an/aus via Handy oder für mich arg überdimensionierte Suiten (z.B. FHEM).


    Was ich suche ist eine einfache Steuerung in der Art:
    "Schalte Relais 1 für 20sek ein, und zwar täglich 30min nach Sonnenuntergang, spätestens aber 20.30 Uhr" (Rollo runter). Und "Schalte Relais 2 für 20sek, und zwar 60min nach Sonnenaufgang, frühestens aber 7.05 Uhr" (Rollo hoch).
    Gut wäre vielleicht noch eine Kontrolle jeweils eine Minute später, ob das Rollo dort steht, wo es dann sein soll, evtl. über Magnetsensoren an den Endpunkten des Rollos. Lieber wäre mir eine 1-wire-Lösung, aber da bin ich erst am Anfang meiner Ideensammlung.


    Gibt es so etwas außerhalb der teuren Fertiglösungen? Da meine Programmiererfahrungen vor über 20 Jahren mit BASIC endeten, müsste ich auf ein vorhandenes Projekt zurückgreifen können, das ich dann sicher anpassen kann.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Naja, eigentlich wollte ich eben nicht auf die Funkstrecke. Auch aus Kostengründen, aber nicht nur.


    Außerdem löst das mein derzeitiges Hauptproblem nicht, nämlich eines entsprechenden Programms zur Steuerung.


    Ich hatte schon überlegt, die GPIOs mittels Cron-Jobst zu steuern. Aber das kleinste Zeitraster ist wohl 1 Minute, außerdem müssten die alle paar Wochen angepasst werden. Und wenn ich nicht da bin, kann das keiner weiter übernehmen.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,


  • Naja, eigentlich wollte ich eben nicht auf die Funkstrecke. Auch aus Kostengründen, aber nicht nur.


    ??? das musst du mir erklären



    Außerdem löst das mein derzeitiges Hauptproblem nicht, nämlich eines entsprechenden Programms zur Steuerung.


    die sind doch schon fertig für den PI Rolladenschalter werden genauso angesteuert wie die Intertechno Funksteckdosen



    Ich hatte schon überlegt, die GPIOs mittels Cron-Jobst zu steuern. Aber das kleinste Zeitraster ist wohl 1 Minute


    reicht das nicht ?



    außerdem müssten die alle paar Wochen angepasst werden. Und wenn ich nicht da bin, kann das keiner weiter übernehmen.


    Astro und Sonnenaufgang und Untergang kann man im Netz auslesen und danach steuern



    manuell per GPIO und Relais oder besser SSD !!! geht natürlich auch

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Edited once, last by jar ().

  • Als Steuerungsinterface kannst du dir mal fhem anschauen. Damit kannst du wenn alles läuft komfortabel und idiotensicher schalten, auch automatisiert. Allerdings kann ich dir da zur Einrichtung nicht wirklich weiterhelfen.

  • [font="Tahoma, Verdana, Arial, sans-serif"]> Ich hatte schon überlegt, die GPIOs mittels Cron-Jobst zu steuern.[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Passt doch[/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]> Aber das kleinste Zeitraster ist wohl 1 Minute[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Na und, das gibt doch bloss den Startpunkt vor.[/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]> außerdem müssten die[/font][font="Tahoma, Verdana, Arial, sans-serif"] alle paar Wochen angepasst werden.[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Noeh[/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]Ich wuerde es mal mit einem Shell-Script probieren, so nach der Idee:[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]* cron startet das Script zu einem bestimmten Zeitpunkt als Background-Prozess[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]* das Script aktiviert das GPIO[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]* das Script macht ein sleep 140[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]* das Script deaktiviert das GPIO[/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]Und nun kommt sicher der Einwand mit der unterschiedlichen Startzeit ;)[/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]Auch kein Problem: das Script kann das aktuelle Datum lesen und vor dem[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Ablauf entsprechend warten. Relativ einfach waere das wenn nur der Monat[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]beruecksichtigt wird. Wenn das zu einfach ist, mal checken ob date die aktuelle[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Woche liefern kann ...[/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]Der Sonnenauf- und Untergang kann uebrigens auch berechnet werden, aber dafuer[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]habe ich C++ genommen. Mit der Shell wuerde ich das nicht machen.[/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]Laeuft prima in vielen hundert Rolladensteuerungen :D[/font]

  • Hallo und vielen Dank für eure Tipps.

    Quote


    ??? das musst du mir erklären


    Naja, 4x 29€ sind schon mal rund 120€..... Hinzu kommen da ja noch die eigentlichen Schalter, wenn ich das recht verstanden habe.
    Außerdem, ich muss noch die Fenster mit Elektromotoren nachrüsten. Weiß noch nicht ganz konkret, wie ich das mit den Kabeln und Schaltern mache. Es wird mit Sicherheit keine Unterputz-Verlegung geben. Und da dachte ich, statt des normalen Schalters, den wir für "Zwischendurchsteuerung" schon noch brauchen werden, 2 normale Relais parallel zu der RasPi-Steuerung zu bauen. Diese beiden Relais pro Fenster werden dann zentral über kleine Taster gesteuert.
    Eine händische Steuerung via Laptop oder Handy lässt sich in der Familie nicht durchsetzen :-/


    FHEM hatte ich mir schon, zugegeben nur mal kurz, angeschaut. Aber wie das so mit den eierlegenden Wollmilchsäuen so ist, sie sind recht komplex... Außerdem habe ich da nur Funklösungen gesehen.


    @ Tell: Ja, genau solch ein Shell-Script suche ich. Aber ich will nicht nur das Rad nicht neu erfinden, ich _kann_ es auch nicht. Das würde bestenfalls dreieckig werden, wenn überhaupt. Darum ja meine Frage, ob euch soetwas ähnliches schon mal über den Weg gelaufen ist. :)

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • Hier ist ein Hilfe fuer den Anfang.


    Ich habe GPIO4 genommen weil das gerade das einfachste war.
    Wenn das nicht passt, einfach die Zahlen aendern.


    Das Script soll rolldown heissen und hat folgenden Inhalt:



    Nach dem Speichern ausfuehrbar machen mit chmod 755 rolldown


    Bevor das Script laufen kann, braucht es noch etwas Vorbereitung.
    Diese drei Zeilen muessen in /etc/rc.local, vor dem exit:


    echo "4" > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio4/direction
    chmod 666 /sys/class/gpio/gpio4/value


    Neu starten und der erste Versuch kann losgehen:


    ./rolldown


    Weil jetzt die 50. Woche ist, wartet das Script 50 Sekunden und aktiviert dann das Relais.
    Es wartet 20 Sekunden und schaltet es wieder aus.


    Aufgaben fuer den Anwender:
    * Fruehesten Zeitpunkt zum herunterfahren bestimmen
    * Tabelle mit den Wartezeiten fuer den Standort der Anlage berechnen (Wartezeit nach dem Startpunkt)
    * rolldown in die crontab eintragen (beim Startpunkt)
    * Und natuerlich ein passendes rollup bauen

  • Mannnn, hast du das jetzt aus dem Hut gezaubert?
    Ich kann es kaum erwarten, nach hause zu kommen...


    Komisch, alle nehmen GPIO4, nur da hängt der Datenimport meines 1wire-Temperatursensors dran.
    Aber das müsste ja ohnehin für insgesamt 8 Relais gemacht werden.


    Nur für mein Verständnis: wozu die anfängliche Wartezeit (diese Woche 50sec)? Und warum als Variable?

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • [font="Tahoma, Verdana, Arial, sans-serif"]Also nochmal, ausfuehrlich:[/font]


    [font="Arial"]1. Berechne fuer jede Woche im Jahr die Zeit wo der Rolladen heruntergelassen werden muss[/font]
    [font="Arial"] und numeriere die Zeiten von 0 bis 53[/font]
    [font="Arial"]2. Such Dir die frueheste Zeit heraus und merk sie Dir[/font]
    [font="Arial"]3. In die Woche mit der fruehesten Zeit kommt die 0[/font]
    [font="Arial"]4. Fuer alle anderen Wochen[/font]
    [font="Arial"] * berechne die Differenz zwischen der Zeit fuer diese Woche und der fruehesten Zeit in Sekunden[/font]
    [font="Arial"] * Trage diese Zahl in die Tabelle delay ein[/font]
    [font="Arial"] - Anstelle der 0 kommt die Differenz fuer die Woche 0[/font]
    [font="Arial"] - Anstelle der 1 kommt die Differenz fuer die Woche 1
    [/font]

    [font="Arial"] .[/font]
    [font="Arial"] .[/font]
    [font="Arial"] .[/font]
    [font="Arial"] - Anstelle der 53 kommt die Differenz fuer die Woche 53[/font]
    [font="Arial"]5. Trage das Script fuer die frueheste Zeit in die crontab ein und setze ein & dahinter[/font]


    [font="Arial"]6. Kopiere das Script und nenne es rollup[/font]
    [font="Arial"]7. Aendere den Ausgang fuer das Auf-Relais[/font]
    [font="Arial"]8. Berechne fuer jede Woche die Zeit wo der Rolladen hoch soll[/font]
    [font="Arial"]9. Mach oben bei 3. weiter[/font]


    [font="Arial"]Reboot -> und laeuft[/font]


    [font="Arial"]> Aber das müsste ja ohnehin für insgesamt 8 Relais gemacht werden.[/font]
    [font="Arial"]Warum ?[/font]
    [font="Arial"]Gehen die Rolladen nicht zur gleichen Zeit hoch und runter ?


    [/font]
    [font="Arial"]> Nur für mein Verständnis: wozu die anfängliche Wartezeit (diese Woche 50sec)? Und warum als Variable?
    [/font]

    [font="Arial"]Wir sind in der Woche 50 und ich habe die Zahlen 0 bis 50 in die Tabelle eingetragen weil ich das[/font]
    [font="Arial"]beschriebene Prozedere nicht fuer Dich machen wollte...[/font]

    Edited once, last by Tell ().

  • Ahhh, die delay-Matrix ist nur der Platzhalter für die konkrete Verzögerung.
    Naja, dauert etwas bei mir. Danke für den Tipp.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • Hallo,
    muss leider das Thema noch mal hoch holen. Ich komme erst jetzt dazu, mich ernsthaft mit dem Thema zu beschäftigen.


    Ich habe zunächst das Skript mit Ausnahme des GPIOs 1 zu 1 übernommen.
    Leider kommt dann folgende Fehlermeldung:

    Quote


    pi@fhem ~/skripte/fhem $ ./rolldown
    ./rolldown: Zeile 16: 09: Der Wert ist zu groß für die aktuelle Basis. (Fehlerverursachendes Zeichen ist \"09\").


    Zeile 16 ist diese:

    Quote


    sleep ${delay[week]}


    Habe schon versucht, die Delay-Matrix zu ändern, z.B. doppelte Leerzeichen weg, alles in eine Zeile...
    Hilft aber nichts.
    Offiziell sind wir in der 10. Kalenderwoche, das fehlerverursachende Zeichen 09 kann also eigentlich auch nicht mit der Woche gemeint sein.


    Ich weiß nicht mehr weiter.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • Die aktuelle Woche wird mit 09 angegeben. Von 0 her gezaehlt ist das die 10 ...


    Vermutlich schaut die Bash das als ungueltige Oktalzahl an :(


    Ich schau mir das spaeter mal an.
    [hr]

    Code
    week=$(date +%-U)


    Scheint das Problem zu loesen

    Edited once, last by Tell ().

  • Vielen Dank, das Minus vor dem U hat gefehlt. Wobei ich nicht verstanden habe, was es bewirkt.

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • Ich poste hier mal ein Verbesserungsvorschlag rein :)


    [hr]


    Willst du die beweglichen Feiertage jedes Jahr manuell neu eintragen?
    Es gibt zwar feste Feiertage aber auch bewegliche - das hast du ja auch schon bemerkt ;) Aber leider auch abhängig vom Bundesland... Siehe http://de.wikipedia.org/wiki/Feiertage_in_Deutschland


    Die Beweglichen Feiertage können anhand Ostersonntag berechnet werden. (steht auch auf Wiki)


    Du kannst den Code aus folgendem Beitrag etwas abändern: https://debianforum.de/forum/v…php?f=34&t=144038#p946417



    Dabei lässt du dann halt in der letzten Zeile die Tage weg die du nicht brauchst wenn ich das richtig sehe je den Sonntag, also einfach diese Zeile:

    Code
    for t in "-48 Rosenmontag" "-2 Karfreitag" "+0 Ostersonntag" "+1 Ostermontag" "+39 Christi Himmelfahrt" "+49 Pfingstsonntag" "+50 Pfingstmontag" "+60 Fronleichnam"; do
       echo "$( date -d ${o}${t%% *}days "+%d.%m." ) ${t#* }"
    done

    ändern in:

    Code
    for t in "-2 Karfreitag" "+1 Ostermontag" "+39 Christi Himmelfahrt" "+50 Pfingstmontag"; do
       echo "$( date -d ${o}${t%% *}days "+%d.%m." ) ${t#* }"
    done


    Beziehungsweise möchtest du ja nur TAG.MONAT. ohne den Feiertags-Namen:

    Code
    for t in "-2 Karfreitag" "+1 Ostermontag" "+39 Christi Himmelfahrt" "+50 Pfingstmontag"; do
       echo "$( date -d ${o}${t%% *}days "+%d.%m." )"
    done


    Ausgabe:

    Code
    03.04.
    06.04.
    14.05.
    25.05.




    Vollständiger Verbesserungsvorschlag:


    Alt:


    Neu:



    ..ich weiß, ist etwas mehr Code, aber dafür flexibel und wartungsfrei ;)

  • Vielen Dank für das ausführliche Tut, eigentlich viel zu schade, um in meiner Fragestunde unter zu gehen.
    Rosenmontag ist vorbei, hat aber bei uns eh keine große Bedeutung. Aber vor Karfreitag ist es eingepflegt ;)

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

  • EDIT:
    Tschuldigung, ich ziehe die Frage hier zurück und stelle sie besser im Programmierforum.



    Hallo,
    ich möchte die Feiertagsregelung endlich realisieren und habe nun folgendes Phänomen.
    Ich habe den Code

    Code
    for t in "-2 Karfreitag" "+1 Ostermontag" "+39 Christi Himmelfahrt" "+50 Pfingstmontag"; do
        echo "$( date -d ${o}${t%% *}days "+%d.%m." )"
     done


    zunächst einmal 1:1 übernommen und bekomme dieses Ergebnis:

    Code
    25.03.
    28.03.
    05.05.
    16.05.


    Das sind aber die Feiertage von 2016. Mein Systemdatum ist aber korrekt:

    Code
    pi@fhem2 ~/skripte/test $ date
    Fre M▒r 27 19:20:43 CET 2015


    Hmmm....

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

    Edited once, last by docadams ().