SubLink 1 SubLink 2 SubLink 3
ltspiceusers.ch

Zurück   ltspiceusers.ch > Alles was nicht LTspice betrifft > Mikrocontroller, Raspberry und Co.

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 01-10-2018, 22:42
Benutzerbild von spicer
spicer spicer ist offline
Administrator
 
Registriert seit: Jun 2015
Ort: Schweiz
Beiträge: 339
Abgegebene Danke: 69
Erhielt 75 Danke für 59 Beiträge
Standard Velux Dachrollo Steuerung

Hab die mit einem alten Raspberry A Rev2 realisiert.
Auf diesem läuft ein aktuelles Raspbian (stretch).

Als Aussensensor habe ich einen FWS-90 von pearl genommen.
Als Empfänger dient ein RF-5V.

Angesteuert wird das Velux Solar Rollo mit einer original KUX100 3-Tasten-Fernbedienung (wegen Rolling Code), welche ich auseinander genommen habe.
Die Tasten (welche gegen Masse schalten) werden mittels 2N7000 Kleinleistungs-FETs betätigt.
Anstelle der zwei 1.5V Batterien speise ich die FB-Platine mit den 3.3V des RPI.

Habe mit Target3001 eine 2-seitige Platine layoutet. Die Datei ist angefügt und auch 3D Ansichten davon.
Des Weitern habe ich 2 Videos vom fräsen und div Fotos angehängt.


Einen zweiten Kanal für eine weitere FB habe ich auch vorgesehn (RPI GPIO 3 und 4).


Notizen für die Installation der Aussensensor-Abfrage:



Code:
Tutorial:

http://www.bmetallica.de/index.php/433mhz-temperatur-auslesen/#comment-1160

chmod 777 /tmp/r-log
chmod 777 /tmp/Temperatur
chmod 777 /tmp/HUM


/etc/rc.local

sleep 15
service pilight start


Test:

pilight-receive


Sunset/Sunrise abfragen & weitere Pakete installieren:

sudo apt update
sudo apt upgrade
sudo apt install python-pip
sudo pip install astral
sudo apt install bc



Div Infos:



Code:
Aussensensor:
pearl.ch FWS-90

Befehls-Info:
gpio mode 6 out   P6 output
gpio mode 5 out   P5 output
gpio write 6 1    P6 auf 1 -- ab-befehl
gpio write 6 0    P6 auf 0 -- ab-befehl
gpio write 5 1    P6 auf 1 -- auf-befehl
gpio write 5 0    P6 auf 0 -- auf-befehl

P5 auf
P6 ab

Bedingungen:

AUF (P5) wenn nach sunset oder temp<20
AB  (P6) wenn nach sunrise und temp>20

Dateien in /home/pi :
ALARM, SIGNAL , HUM , Temperatur , r-log , last (enthält letzten Rollo-Befehl Auf oder Ab)

crontab -e
*/2 * * * * sudo /home/pi/auswerte.sh >/dev/null 2>&1
*/5 * * * * python /home/pi/sensor.py >/dev/null 2>&1
0 */4 * * * /home/pi/signal.sh >/dev/null 2>&1

01 03 * * * echo "Ab" > /home/pi/last                   <<< Diese Zeile nur, wenn ihr wollt, dass die Steuerung spätestens am nächsten Morgen das von Hand runtergefahrene Rollo wieder hochfährt, wenn die Temperatur =< 20°C ist

Von webIF werden dann die Scripte man_ab.sh bzw man_auf.sh ausgeführt.
So wird das Rollo nicht beim nächsten Durchlauf von sensor.py wieder in die alte Position gerückt.



auswerte.sh in /home/pi (777 Rechte):


Code:
#!/bin/sh
dienst=`ps -aux |grep pilight-receive|wc -l`
if [ "$dienst" -le 1 ]
    then
        pilight-receive > /home/pi/r-log 2>&1 &
        # echo Dienst wurde neu gestartet
fi

te=`cat /home/pi/r-log |grep '"id": 7,' -a --text -C 3|tail -n3|awk '{ print $2; }'|sed 's/,//g'`
TEMP=`echo $te |awk '{print $1}'`
HUM=`echo $te |awk '{print $2}'`
BAT=`echo $te |awk '{print $3}'`

var=$(cat /home/pi/r-log)
# echo $var

# TEMPALT="`cat /home/pi/Temperatur`"
# echo $TEMP" akt Temp"
# echo $TEMPALT" temp alt"

# Validierung ob Temperatur eine Fliesskomma-Zahl ist

check=`echo "$TEMP" | grep -E ^\-?[0-9]*\.?[0-9]+$`
if [ "$check" = '' ]; then    
    echo 0 > /home/pi/r-log
    exit
fi
check2=`echo "$HUM" | grep -E ^\-?[0-9]*\.?[0-9]+$`
if [ "$check2" = '' ]; then    
    echo 0 > /home/pi/r-log
    exit
fi

# Keine Weiterverarbeitung wenn Aussenfuehler ueber 55 Grad

if [ 1 -eq "$(echo "${TEMP} > 55" | bc)" ]; then
    echo 0 > /home/pi/r-log
    exit
fi

# Unterschied von mehr als 8 Grad seit letztem Lauf abfragen

# echo $TEMP - $TEMPALT | bc
# diff=$(echo "$TEMP - $TEMPALT" | bc)
# diff=${diff#-}
# echo $diff
# if [ -n "$TEMP" ] && [ 1 -eq "$(echo "${diff} < 8" | bc)" ]

echo $TEMP > /home/pi/Temperatur
echo $HUM > /home/pi/HUM

# fi

if [ "$BAT" != "1" ]
    then
        echo "Batterie tief" > /home/pi/ALARM
    else
        echo "Batterie ok" > /home/pi/ALARM
fi
echo 0 > /home/pi/r-log
exit



sensor.py Steuerprogramm in /home/pi (644 Rechte):



Code:
#!/usr/bin/python3

# Copyright 2018 by spicer

import sys, os, subprocess

try:
    fobj = open("/home/pi/Temperatur")  # Pfad anpassen!

except:
    #print "Datei nicht vorhanden!"
    exit()

for line in fobj:
    in1 = line.rstrip()
fobj.close()

try:
    inhalt = float(in1)
except:
    #print "Kein numerischer Wert oder kein Empfang"
    exit()

#print "Gespeicherte Temperatur =",inhalt
stat1 = open("/home/pi/ALARM")
for line2 in stat1:
    in11 = line2.rstrip()
stat1.close()
#print "Status =",in11
hum1 = open("/home/pi/HUM")
for line3 in hum1:
    in111 = line3.rstrip()
hum1.close()
#print "Luftfeuchtigkeit =",in111

from time import sleep

from datetime import date

import astral
import time

loc = astral.Location(('Bern', 'Switzerland', 46.95, 7.47, 'Europe/Zurich', 510))
# for event, time in loc.sun(date.today()).items():
#    print(event, 'at', time)
data =  loc.sun(date.today()).items()
sun1 = str(data[1])
zeit = sun1.split(', ')
# print current date and time
akttime = int(time.strftime("%H"))*60+int(time.strftime("%M"))
# print "Aktuelle Zeit in min =",akttime
# print zeit[4],":",zeit[5],"Uhr"
sunset = int(zeit[4])*60+int(zeit[5])-60   # Sonnenuntergang +/- Korrekturzeit in Min
# print "Sonnenuntergang inkl Korrektur",sunset

sun2 = str(data[3])
zeit2 = sun2.split(', ')
# print zeit2[4],":",zeit2[5],"Uhr"
sunrise = int(zeit2[4])*60+int(zeit2[5])+180   # Sonnenaufgang +/- Korrekturzeit in Min
#print "Sonnenaufgang inkl Korrektur =",sunrise

last2 = open("/home/pi/last")
for line5 in last2:
    in22 = line5.rstrip()
last2.close()

if in11 == "Batterie tief":
    # print "in11 =",in11
    # print "Batterie tief erkannt"
    sys.exit(0)

#if (float(inhalt) > 21 and sunrise < akttime and sunset > akttime) or (float(inhalt) < 0):  #Temperaturen hoch und tief (21 Grad / 0 Grad anpassen)
if float(inhalt) > 21 and sunrise < akttime and sunset > akttime:     # Temperaturen (21 Grad anpassen)
    if in22 == "Auf":
        os.system('sh /home/pi/ab.sh')
else:
    if in22 == "Ab":
        os.system('sh /home/pi/auf.sh')

last1 = open("/home/pi/last")
for line4 in last1:
    in1111 = line4.rstrip()
last1.close()
#print "Letzter Befehl =",in1111




signal.sh Script in /home/pi (774 Rechte):




Code:
#!/bin/sh

# Schreibt "Kein Signal" in SIGNAL, wenn immer noch gleicher Temperatur Wert seit letzter Ausführung

tempakt="`cat /home/pi/Temperatur`"
tempalt="`cat /home/pi/temp_alt`"

echo $tempakt > /home/pi/temp_alt

if [ $tempakt = $tempalt ]
    then
        echo "Kein Signal" > /home/pi/SIGNAL
    else
        echo "Signal ok" > /home/pi/SIGNAL
fi

exit




auf.sh Script in /home/pi (777 Rechte):



Code:
 #!/bin/sh
gpio mode 5 out
gpio write 5 1
sleep 0.6
gpio write 5 0
sleep 5
gpio write 5 1
sleep 0.6
gpio write 5 0
 echo "Auf" > /home/pi/last



ab.sh Script in /home/pi (777 Rechte):




Code:
#!/bin/sh
gpio mode 6 out
gpio write 6 1
sleep 0.6
gpio write 6 0
sleep 5
gpio write 6 1
sleep 0.6
gpio write 6 0
echo "Ab" > /home/pi/last



man_auf.sh Script in /home/pi (775 Rechte):




Code:
 #!/bin/sh
gpio mode 5 out
gpio write 5 1
sleep 0.6
gpio write 5 0
sleep 5
gpio write 5 1
sleep 0.6
gpio write 5 0



man_ab.sh Script in /home/pi (775 Rechte):




Code:
#!/bin/sh
gpio mode 6 out
gpio write 6 1
sleep 0.6
gpio write 6 0
sleep 5
gpio write 6 1
sleep 0.6
gpio write 6 0



man_auf2.sh Script in /home/pi (775 Rechte):




Code:
#!/bin/sh
gpio mode 3 out
gpio write 3 1
sleep 0.6
gpio write 3 0
sleep 5
gpio write 3 1
sleep 0.6
gpio write 3 0



man_ab2.sh Script in /home/pi (775 Rechte):




Code:
#!/bin/sh
gpio mode 4 out
gpio write 4 1
sleep 0.6
gpio write 4 0
sleep 5
gpio write 4 1
sleep 0.6
gpio write 4 0




Wenn alle Scripte in /home/pi sind, erst mal sh auf.sh in Terminal eingeben, damit alle Dateien für sensor.py vorhanden/verfügbar sind.


Über das webIF kann man von ausswärts auf die Steuerung zugreiffen.
Von da werden dann die Scripte man_ab.sh bzw man_auf.sh ausgeführt.
So wird das Rollo nicht beim nächsten Durchlauf von sensor.py wieder in die alte Position gerückt.
Mit den Scripts man_ab2.sh bzw man_auf2.sh wird das zweite Rollo angesteuert.
Miniaturansicht angehängter Grafiken
3d_front.png   3d_rueck.jpg   photo_2018-10-01_21-06-03.jpg   photo_2018-10-01_21-06-10.jpg   photo_2018-10-01_21-06-16.jpg  

photo_2018-10-01_21-06-26.jpg   photo_2018-10-01_21-06-31.jpg   photo_2018-10-01_21-06-40.jpg   photo_2018-10-01_21-06-44.jpg   photo_2018-10-01_21-06-50.jpg  

photo_2018-10-01_21-08-45.jpg   schema.png  
Angehängte Dateien
Dateityp: mp4 fraesen1.mp4 (14,96 MB, 5x aufgerufen)
Dateityp: mp4 fraesen2.mp4 (6,47 MB, 1x aufgerufen)
Dateityp: t3001 velux_2s.T3001 (84,7 KB, 2x aufgerufen)
__________________
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Mit Zitat antworten
  #2  
Alt 03-10-2018, 03:07
Benutzerbild von spicer
spicer spicer ist offline
Administrator
 
Registriert seit: Jun 2015
Ort: Schweiz
Beiträge: 339
Abgegebene Danke: 69
Erhielt 75 Danke für 59 Beiträge
Standard AW: Velux Dachrollo Steuerung

Hier mal ein php. Ist aber noch im beta Status.
Verbesserungsvorschläge sind natürlich immer willkommen.

Zuerst Webserver installieren:

sudo apt update
sudo apt upgrade
sudo apt install apache2 php

sudo chown -R pi:www-data /var/www/html/
sudo chmod -R 770 /var/www/html/


Bei Zugriff von Aussen, unbedingt eine .htaccess im Verzeichnis /var/www/html anlegen.
favicon.ico und favicon.png ins Verzeichnis /var/www/html


index.php (ins Verzeichnis /var/www/html)


Code:
<!DOCTYPE HTML> 
<html> 
<head>
<style>
body {
    background-color: #00B233
}
.buttons {
    border-radius: 12px;
}
 </style>
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"> 
<link rel="shortcut icon" href="/favicon.ico"> 
<link rel="icon" type="image/png" href="/favicon.png" sizes="32x32">

 <title>VelCont Velux Control</title> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=Edge"> 
<meta http-equiv="refresh" content="15; url=https://domainname:8083/"> 
</head> 
 
<body> 
 
<center> 
<table> 
Dachfenster 1 
<br> 
<tr> 
<a href="?function=switch1_on"><input type="submit" value="Auf" style="width: 120px; height: 120px; color: black; background-color: #99CC00" class="buttons"></a> 
<a href="?function=switch1_off"><input type="submit" value="Ab" style="width: 120px; height: 120px; color: black; background-color: #99CC00" class="buttons"></a> 
</tr> 
</table> 
<br> 
<table> 
Dachfenster 2 
<br> 
<tr> 
<a href="?function=switch2_on"><input type="submit" value="Auf" style="width: 120px; height: 120px; color: black; background-color: #99CC00" class="buttons"></a> 
<a href="?function=switch2_off"><input type="submit" value="Ab" style="width: 120px; height: 120px; color: black; background-color: #99CC00" class="buttons"></a> 
</tr> 
</table> 
<br> 
 
<?php 
 
// Funktionsvariable 
 
$function = $_GET['function']; 
 
// Auszuführende Commands / send Command 
 
if($function == 'switch1_on') 
{ 
system('sh /home/pi/man_auf.sh'); 
} 
if($function == 'switch1_off') 
{ 
system('sh /home/pi/man_ab.sh'); 
} 
if($function == 'switch2_on') 
{ 
system('sh /home/pi/man_auf2.sh'); 
} 
if($function == 'switch2_off') 
{ 
system('sh /home/pi/man_ab2.sh'); 
} 
 
$temp = file_get_contents("/home/pi/Temperatur"); 
$hum = file_get_contents("/home/pi/HUM"); 
$alarm = file_get_contents("/home/pi/ALARM");
$alarm2 = file_get_contents("/home/pi/SIGNAL"); 
$letzt = file_get_contents("/home/pi/last"); 
 
echo "<br>Die Aussentemperatur ist $temp °C"; 
echo "<br>Die Luftfeuchtigkeit ist $hum %"; 
echo "<br>Letzter automatischer Befehl: $letzt"; 
echo "<br>Batterie-Status: $alarm";
echo "<br>Empfangs-Status: $alarm2";
 
?>
 
</center> 
</body> 
</html>




Ich behandle das Dachfenster2 etwas stiefmütterlich hier, zumal ich selber da nichts angeschlossen habe.
Auch wird in meinem Scripts bei dem nichts automatisch gesteuert.
Miniaturansicht angehängter Grafiken
Auswahl_001.png  
Angehängte Grafiken
 
Angehängte Dateien
Dateityp: ico favicon.ico (14,7 KB, 1x aufgerufen)
__________________
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Mit Zitat antworten
  #3  
Alt 05-10-2018, 22:39
Benutzerbild von spicer
spicer spicer ist offline
Administrator
 
Registriert seit: Jun 2015
Ort: Schweiz
Beiträge: 339
Abgegebene Danke: 69
Erhielt 75 Danke für 59 Beiträge
Standard AW: Velux Dachrollo Steuerung

Kleines Script, um SSL (https) zu installieren.
Angehängte Dateien
Dateityp: sh https_install.sh (1,5 KB, 1x aufgerufen)
__________________
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Mit Zitat antworten
  #4  
Alt 05-10-2018, 23:30
Benutzerbild von spicer
spicer spicer ist offline
Administrator
 
Registriert seit: Jun 2015
Ort: Schweiz
Beiträge: 339
Abgegebene Danke: 69
Erhielt 75 Danke für 59 Beiträge
Standard AW: Velux Dachrollo Steuerung

Weiss jemand, was ich an der Antenne verbessern könnte?
Der 173mm Draht empfängt den Aussensensor nur in einem Radius von ca 2m durch das Fenster.


Tests mit einem anderen Receiver-Modul ergeben einen viel besseren Empfang sogar ohne Antenne.
Scheinbar haben nicht alle Module die gleiche Qualität.
__________________
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Mit Zitat antworten
  #5  
Alt 10-10-2018, 06:08
Benutzerbild von spicer
spicer spicer ist offline
Administrator
 
Registriert seit: Jun 2015
Ort: Schweiz
Beiträge: 339
Abgegebene Danke: 69
Erhielt 75 Danke für 59 Beiträge
Standard AW: Velux Dachrollo Steuerung

Da der Empfang des Aussenfühlers manchmal falsche oder unkomplette Daten liefert, habe ich die höchst Temperatur auf 55 °C abgefangen. Darüber wird nichts an den gespeicherten Werten geändert.

In diesem Zusammenhang auch, wenn die Batterie als tief erkannt wird. Bei Falschdaten geht dieser Status temporär auf tief und es werden keine Aktionen durchgeführt. So fährt das Dachrollo nicht plötzlich in die andere Richtung, um 2 Minuten später wieder zurückzukehren.

"Signal ok" wird alle 4h abgefragt. Wenn der Temperaturwert nach diesen 4h immer noch gleich ist, wird der Status auf "kein Signal" gesetzt.



Für alle, die schon etwas runtergeladen haben: Letzte Anpassungen waren am 10.10.2018.
Also bitte nochmal laden. Vorallem die sh und py Scripts!
__________________
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Mit Zitat antworten
  #6  
Alt 19-10-2018, 18:02
Benutzerbild von spicer
spicer spicer ist offline
Administrator
 
Registriert seit: Jun 2015
Ort: Schweiz
Beiträge: 339
Abgegebene Danke: 69
Erhielt 75 Danke für 59 Beiträge
Standard AW: Velux Dachrollo Steuerung

Wenn jemand Interesse hat, ich habe 10 Platinen herstellen lassen.
Einfach PN an mich. Ich kann es in einem Brief versenden.
Miniaturansicht angehängter Grafiken
pcb_schwarz.jpg  
__________________
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Mit Zitat antworten
  #7  
Alt 21-10-2018, 09:10
Benutzerbild von spicer
spicer spicer ist offline
Administrator
 
Registriert seit: Jun 2015
Ort: Schweiz
Beiträge: 339
Abgegebene Danke: 69
Erhielt 75 Danke für 59 Beiträge
Standard AW: Velux Dachrollo Steuerung

Auf's neue Raspi passt es auch, vorausgesetzt man nehme den Distanzhalter von
https://www.play-zone.ch/de/gpio-hea...13-female.html
(wegen den Ausschnitten).
__________________
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:21 Uhr.
Powered by vBulletin®
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
LTspice ist ein Warenzeichen von © Linear Technology