Rolladensteuerung: wie Zeitsteuerung einrichten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Community,

    ich habe gerade mein erstes Projekt zum größten Teil erfolgreich gemeistert:

    Rolläden per Web steuern.

    Es handelt sich hier um 17 Jarolift Funkempfänger, die über eine Fernbedienung sich bedienen ließen.
    Ich habe eine PHP Seite erstellt, über die 3 Relaisschalter sich steuern lassen. Danach habe ich auf der Fernbedienung 6 Lötpunkte angesetzt, um 3 Tasten zu steuern: hoch, stopp und runter. Danach noch ein Passwort auf die Webseite gesetzt. Die einfachen Befehle für alle Rolläden gehen seit gestern :lol:

    Jetzt zu meiner Frage:

    Sehr gerne würde ich das herunterfahren der Rolläden so setzen, dass diese fahren wenn es dunkel wird.
    Habt Ihr da Tipps bzw. Idee für mich? Optimal wäre die Umsetzung natürlich in PHP.

    Bin gespannt auf die Beiträge...

  • Zunächst muss dein Pi wissen, wann es dunkel ist. Dazu entweder einen entsprechenden Sensor einsetzen, oder die Infos zum Sonnenuntergang von einer Webseite parsen und daraufhin den Schließbefehl ausführen.

    Am einfachsten wäre eine echte Zeitsteuerung. Dazu einfach nur den Schließbefehl in deine Crontab aufnehmen.

  • Ich würde ein unabhängiges Script via crontab jede Minute ausführen lassen, welches dann Sonnen- Aufgang/Untergang von einer, oder zwei, Wetterseite abruft und dann die Befehle ausführt.

    Falls das Abrufen der Wetterseite nicht funktioniert, weil das Internet mal nicht geht, würde ich zusätzlich abhängig der Jahreszeit eine ungefähre Zeit festlegen, die dann ruhig so liegt wo es bereits dunkel ist (jetzt zB um 19Uhr)

  • Der Sonnenuntergang läßt sich mit den eigenen Geodaten berechnen. Es ist somit nur eine tägliche Berechnung nötig.

    Siehe folgende Links

    Bash Script

    http://www.anginf.de/?p=138

    Da bei diesem Programm tagewise nicht von 60 Minuten auf die volle Stunde gerundet wurde habe ich folgende Zeilen von "12-(" auf "12.005(" geändert.


    aufgang=$(echo "12.005-(${zeitdiff})-(${zeitgleich})-(${posLaenge}/15)${zoneinfo:0:3}" | bc -l)
    untergang=$(echo "12.005+(${zeitdiff})-(${zeitgleich})-(${posLaenge}/15)${zoneinfo:0:3}" | bc -l)

    Python 3

    http://kukulkanpi.blogspot.de/2014/01/berech…fgangs-und.html


  • ... alle Rolläden gehen seit gestern

    :thumbs1:

    Nur per Sensor ist Mist, habe mich auf diese Art schon mal ausgesperrt :auslachen:

    Auf die geodaten Idee bin ich noch nicht gekommen und parse api.openweathermap.org.
    Zusätzlich werden die regionalen DWD-Unwetterwarnungen abgefragt und Dach/Wohnzimmerrollos bei starkem Hagel/Sturm-Warnung geschlossen.

    Auch rockte bei mir mal die "Uhr", seither erfolgt ein Abgleich date/rtc/i-Net/UMTS und erst wenn sich 3 davon im gleichen Zeitfenster (Minutengenau) befinden wird ein event ausgeführt.

    Den Lichtsensor setze ich jetzt als Sonnenschutz ein, wenn die Zimmertemp. ansteigend die 30 Grad Grenze erreicht, kein Handy im Router eingebucht ist, Heizung/Kamin aus sind, gehen die Rolladen auf Lücke.

    Bye

    Jürgen

  • Danke für die vielen Antworten.
    Jetzt weiß ich gar nicht, auf welches System ich setzen soll ;)

    Vielleicht der Beitrag von Rosty, sorry für doofe Fragen:
    - wie gehe ich bei Bash Programmierung vor? Muss was installiert werden?
    (bisher habe ich in PHP geschrieben und dabei Python aufgerufen)
    - in welcher Zeile hast du von 12-( auf 12.005( geändert?


    An meigrafd:
    Wenn ich es richtig verstehe, ist crontab dafür gedacht, in gewissen Zeitabständen gewisse Dinge zu tun.
    Frage:
    - wo kann ich bei crontab die Scripte legen?
    - wie würde so ein Beispielscript aussehen, wo legt man den Zeitabstand und wo/wie legt man ein Befehl fest?


  • ... wo legt man den Zeitabstand und wo/wie legt man ein Befehl fest?

    Dafür gibt es was nettes - at - (daemon)

    Code
    sudo apt-get install at

    Am Ende der bash/script kannst Du einen Befehl mit - echo 'befehl' | at Uhrzeit - übergeben

    Code
    echo 'reboot' | at 17:00


    führt einen reboot um 17:00 Uhr aus.
    Die Uhrzeit kann auch als string übergeben werden und der Befehl kann natürlich auch ein bash/script sein.
    Die at daemon schlummert so lange bis die Uhrzeit erreicht ist oder händisch per atrm x (x= Jobnummer) gekillt wird, mit atq werden die noch ausstehenden Jobs angezeigt.
    Path der schlummernden Aufträge: /var/spool/cron/atjobs/.......

    Bye

    Jürgen

    Einmal editiert, zuletzt von rpivpn (11. Dezember 2014 um 16:47)

  • Auf das oben aufgeführte bash/script bezogen könnte at wie folgt angewendet werden:

    Hier nur Sonnenuntergang:

    Code
    sunsethh=${untergang:0:2}
    sunsetmm=`echo "(${untergang} - ${untergang:0:2}) * 60" | bc | xargs printf "%02.0f\n"`
    echo "Weltuntergang ;-))  um $sunsethh":"$sunsetmm  Uhr"
    echo 'Rolladen_schliessen' | at $sunsethh":"$sunsetmm

    Der Befehl: Rolladen_schliessen muss durch deine Rolladen-Steuerungs-Lösung ersetzt werden.

    Bye

    Jürgen

    PS:

    Ups, beinahe vergessen....die Rolladen sollen z. B. 10 Minuten vor Sonnenuntergang schliessen:

    Code
    echo 'Befehl' | at $sunsethh":"$sunsetmm" - 10 minutes"

    Einmal editiert, zuletzt von rpivpn (11. Dezember 2014 um 18:17)

  • Hi,

    ich kann zwar zur Programmierung nichts beitragen, aber kennst du die Hausautomatisierungssoftware fhem? Ich denke deine Ideen, plus einiges mehr, würden sich damit realisieren lassen. Es gibt auch jemanden, der bereits den Wechselcode für diesen Hersteller implementiert hat: link. Vielleicht rückt er ihn raus.

    Gruß

    Michael

  • Langsam, bin noch bei den Basics.
    Bash habe ich mit dem Befehl:

    sudo apt-get install at installiert.

    Die Bashdateien haben die Endung sh.

    Wie kann ich diese aufrufen, wenn ich sie in var/www/bash/ lege wie z.B.

    Dateiname: Test.sh

    Inhalt:
    #!/bin/bash

    echo "Starting"
    sleep 1
    echo "Ok here we go"

    Nachtrag:
    mit bash Test.sh rufe ich die Datei auf.
    Bei dem Sleep kommt bei mir:
    ungültiges Zeichenintervall "2/r"

    Echo klappt :D


    Hi,

    ich kann zwar zur Programmierung nichts beitragen, aber kennst du die Hausautomatisierungssoftware fhem? Ich denke deine Ideen, plus einiges mehr, würden sich damit realisieren lassen. Es gibt auch jemanden, der bereits den Wechselcode für diesen Hersteller implementiert hat: link. Vielleicht rückt er ihn raus.

    Gruß

    Michael

    Hi,
    sehr guter Ansatz, aber derjenige rückt den Code nicht raus bzw. der Google Gruppe kann man nicht mehr beitreten, um irgendwas zu fragen.
    Habe den Artikel bereits früher entdeckt. Natürlich wäre das eleganter wie per Relais das ganze zu steuern, aber das ist ein Thema für sich. Jetzt bin ich erst mal froh, dass die Rolläden per Web fahren :)

    Einmal editiert, zuletzt von AndyKL (11. Dezember 2014 um 19:36)


  • Wie kann ich diese aufrufen, wenn ich sie in var/www/bash/ lege wie z.B.
    Dateiname: Test.sh

    Moin,

    üblicherweise im path: /usr/local/bin . Der ist auch im "Suchpath" eingebunden, somit muss in der Regel nur xyz.sh angegeben werden zu Ausführen.

    Wie schaut es mit bc aus, muss gegebenfalls nachinstalliert werden.

    Code
    sudo apt-get install bc

    Neue Datei erstellen oder bestehende editieren:

    Code
    sudo nano /usr/local/bin/test.sh

    den vorher kopierten code mit rechter Maustaste einfügen.

    Speichern mit STRG + x , j , Enter

    Ausführbar machen:

    Code
    sudo chmod u+x /usr/local/bin/test.sh

    Aber vorher noch eine Frage, wie schaltest Du das Relais, mittels wiringPi und gpio-i/o-Schweinebacke :angel: und Zeitfenster oder hängt ein Switch/Sensor an einem GPIO und signalisiert die Endlage?

    Stelle doch bitte einmal den code ein mit dem Du das Relais ansteuerst.

    Bye

    Jürgen

    PS:

    Was für ein encoder chip SC/HX/PT.... ist in der FB verbaut?

    Einmal editiert, zuletzt von rpivpn (11. Dezember 2014 um 20:26)

  • Langsam, bin noch bei den Basics.

    Dann am besten nicht von Anfang an falsch lernen :)

    Bash habe ich mit dem Befehl:

    sudo apt-get install at installiert.

    Damit hast du das Paket at installiert.
    bash ist bereits vorinstalliert, ebenso wie sh oder zsh oder was auch immer... Es gibt unzählige sog. Shell's

    Standardmäßig ist die Konsole eine bash Shell. Kannst du mit folgendem Befehl herausfinden:

    Code
    echo $SHELL

    Oder auch mit:

    Code
    ps -p$$ -ocmd=

    Die Bashdateien haben die Endung sh.

    Jein. Die Dateiendung spielt für Shell Scripte keine Rolle. Die Dateiendung sh bezieht sich nicht auf bash oder sh (die 'sh' Shell ist älter als bash und kann auch weniger. man sollte daher immer 'bash' bevorzugen).

    Beispielsweise das Raspbian Standard Script raspi-config ist ein sh Script, hat aber keine Dateiendung.

    Wie kann ich diese aufrufen, wenn ich sie in var/www/bash/ lege wie z.B.

    Dateiname: Test.sh

    Wo die Datei liegt spielt ebenfalls zunächst mal keine Rolle.
    Es gibt aber bestimmte Pfade in der standardmäßig nach 'ausführbare Befehle' gesucht wird sofern man den Pfad nicht angibt. Diese sind in $PATH hinterlegt:

    Code
    echo $PATH

    Ausgabe:

    Code
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/vc/bin

    Wenn du also einfach nur Test.sh eingibst, sucht Linux erst im Verzeichnis /usr/local/sbin/ , anschließend in /usr/local/bin/ , danach in /usr/sbin usw. Findet er dort keine Ausführbare Datei wirft er eine Fehlermeldung aus.

    Soweit sogut.

    Nun gibt es eben noch 2 Dinge zu beachten:
    Solch eine Datei ist zunächst nur eine ganz normale Textdatei. Wenn in dieser Textdatei Code drin steht der verarbeitet werden soll, muss man dies einem sog. Interpreter übergeben, also einem Programm welches den Code verarbeiten kann..
    Das erreicht man entweder indem man die Datei direkt an den Interpreter übergibt: bash /var/www/Test.sh
    Oder man fügt ganz oben in der Datei einen sog. Shebang ein und gibt der Datei Ausführrechte:

    Code
    chmod +x /var/www/Test.sh

    Anschließend kann man die Datei direkt ausführen.

    Direkt ausführen wiederum kann man auch wieder über 2 Möglichkeiten.
    Entweder man wechselt in das jeweilige Verzeichnis und verwendet dann ./<datei> also zB:

    Code
    cd /var/www
    ./Test.sh


    Oder man gibt den vollständigen Pfad zur Datei ein:

    Code
    /var/www/Test.sh

    Würdest du dein Script also in einer der PATH Verzeichnisse ablegen könntest du es direkt ausführen:

    Code
    Test.sh


    Zu deinem Problem mit dem sleep fällt mir aber gerade nichts ein, normalerweise sollte das funktionieren.

    Bash (und auch sh) hat aber Probleme damit mit Decimal Zahlen zu rechnen, dafür benötigt man zusätzliche Programme wie das von rpivpn erwähnte bc.

    Das hat aber eigentlich nichts mit dem sleep Befehl zu tun, das kann auch mit Decimal Zahlen umgehen... Was mich allerdings wundert ist wo "2/r" her kommt?


    PS: Wenn du Code postest dann bitte im CODE Tag (oben im Editor dieses Forums auf das # Symbol klicken)

  • Hallo,
    danke für die ausführliche Erläuterung über den Einstieg in Bash.

    Dennoch überlege ich auf ein fertiges Produkt wie z.B. FHEM zu setzen, weil man sich so manche Programmierarbeit erspart. Gerne würde ich nach dem die Rolläden richtig laufen, weitere Projekte (Steckdosen schalten, Fussbodenheizung steuern) angehen und mit FHEM lässt sich das einfacher gestalten.

    Einmal editiert, zuletzt von AndyKL (12. Dezember 2014 um 09:09)


  • Aber vorher noch eine Frage, wie schaltest Du das Relais, mittels wiringPi und gpio-i/o-Schweinebacke :angel: und Zeitfenster oder hängt ein Switch/Sensor an einem GPIO und signalisiert die Endlage?

    Hier kann ich vielleicht was beitragen. Die Endstellungen sollte man den Rollladenmotoren überlassen. Wenn du so einen Motor einbaust, musst du die jeweilige Oben- und Unten-Endstellung einrichten. Das ist bei jedem Hersteller mehr oder weniger kompliziert beschrieben, kommt aber immer auf das Selbe raus. Du kannst dann so lange auf den Runterfahrknopf drücken, wie du willst, ist die definierte Endstellung erreicht, dreht sich nichts mehr. Und so soll es sein.

    Meine Rollladen brauchen z.B. 30s für eine vollständige Fahrt. Also aktiviere ich mittels GPIO das für eine Fahrtrichtung zuständige Relais für 32s (etwas Reserve für Eventualitäten).

    Das hat eigentlich nur einen kleinen Nachteil, mit dem ich aber leben kann:
    Also ich habe das so programmiert, dass (außer wenn ein Mensch mittels Handtaster schaltet) immer nur ein Rollo fahren kann. Wenn nun aber ein Rollo schon halb unten ist, dauert es trotzdem 32s, bis das nächste Rollo fahren kann, obwohl der eigentliche Runterfahrvorgang schon nach 15s fertig ist. Aber man kanns auch übertreiben... ;)

    Achso, noch in diesem Zusammenhang:
    ich habe für mich entschieden, dass alles, was mit Sicherheit zu tun hat, nicht per Funk geschieht. Rollläden zähle ich dazu.
    Wenn man die Rollläden elektrisch nachrüstet, das machen sicher die meisten hier, muss man eh ein Stromkabel zu den Motoren verlegen (die Funkwellenenergie reicht nicht aus, die Motore zu betreiben ;) ).
    Also habe ich die Motorkabel bis zu einem zentralen Punkt verlängert, wo der RasPi und das Relaismodul versteck ist. Und das Modul hängt dann 230Vseitig am Stromnetz.
    Etwas Anderes ist natürlich, wenn man bereits Strom im Rollladenkasten hat, dann wäre Funksteuerung zumindest eleganter...

    Viele Grüße
    DocAdams

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

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!