Bauanleitung Steuerung analoge Kamera mit einem Raspi
Motivation
Das Feuerkugelnetzwerk betreibt an verschiedenen Standorten in Deutschland analoge Filmkameras. Deren mechanischer Auslöser wird durch einen elektromagnetischen Schalter für eine bestimmte Zeit nachts gedrückt und wieder losgelassen (Bulb-Modus). Der elektromagnetische Schalter wird durch eine vorher manuell zu programmierende Schaltuhr nachts ein- und wieder ausgeschaltet. Die Programmierung der Schaltuhr mußte einmal in der Woche manuell durchgeführt werden (für 7 Tage). Der Zeitplan für die Schaltungen wurde vom DLR an alle Stationen monatlich über e-Mail verschickt.
Meine Idee war, diese manuelle Programmierung der Schaltuhr durch eine vollautomatische Steuerung mittels Raspberry Pi und einem Relais zu ersetzen.
Realisierung
Der Pascal Compiler
Freundlicherweise hat mir Herr Dieter Heinlein vom DLR das Programm zur Berechnung der Schaltzeiten zukommen lassen.  Meine ersten Versuche, das Pascal-Programm vollständig neu in python zu implementieren schlugen fehl. Es ist einfach zu komplex. Glücklicherweise war der verwendete Pascal-Dialekt nicht zu fremdartig. Während einer Suche nach freien Pascal-Compilern fand ich dieses Paket für den Raspberry Pi: fp-compiler. Damit - und nach ein paar kleinen Änderungen im Quellcode - konnte ich das Pascalprogramm in einen Bytecode compilieren:
Free Pascal Compiler version 3.0.4+dfsg-22+rpi1 [2019/02/04] for arm
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for ARMHF
Compiling ensz015a.pas
Assembling ensz
Linking ensz015a
289 lines compiled, 1.7 sec
Als Ergebnis erhält man ein ausführbares Binary ensz015a, welches folgenden Inhalt ausgibt:
pi@raspi-io:~/ensz.temp $ ./ensz015a
V  01./02. 19:38  4:50 21: 4  3:24  0:22  7:55 21: 4  1:53 21:15  1:45
V  02./03. 19:40  4:48 21: 6  3:22  1:23  9: 0 21: 6  2:37 21:15  2:30
D  03./04. 19:41  4:46 21: 8  3:20  2: 7 10:14 21: 8  3:20 21:15  3:15
D  04./05. 19:43  4:44 21:10  3:17  2:40 11:30 21:10  3:17 21:15  3:15
D  05./06. 19:44  4:43 21:12  3:15  3: 5 12:44 21:12  3:15 21:15  3:15
N  06./07. 19:46  4:41 21:15  3:13  3:24 13:56 21:15  3:13 21:15  3:00
N  07./08. 19:48  4:39 21:17  3:10  3:40 15: 6 21:17  3:10 21:30  3:00
N  08./09. 19:49  4:38 21:19  3: 8  3:55 16:14 21:19  3: 8 21:30  3:00
N  09./10. 19:51  4:36 21:21  3: 6  4: 9 17:22 21:21  3: 6 21:30  3:00
N  10./11. 19:52  4:35 21:24  3: 4  4:24 18:29 21:24  3: 4 21:30  3:00
N  11./12. 19:54  4:33 21:26  3: 1  4:40 19:38 21:26  3: 1 21:30  3:00
N  12./13. 19:55  4:32 21:28  2:59  5: 0 20:46 21:28  2:59 21:30  2:45
N  13./14. 19:56  4:30 21:30  2:57  5:24 21:53 21:30  2:57 21:45  2:45
N  14./15. 19:58  4:29 21:32  2:55  5:54 22:55 21:32  2:55 21:45  2:45
N  15./16. 19:59  4:27 21:34  2:53  6:33 23:51 21:34  2:53 21:45  2:45
N  16./17. 20: 1  4:26 21:37  2:50  7:23 99999 21:37  2:50 21:45  2:45
D  17./18. 20: 2  4:24 21:39  2:48  8:23  0:37 23:45  2:48  0:00  2:45
D  18./19. 20: 3  4:23 21:41  2:46  9:32  1:15 21:41  0:56 21:45  0:45
D  19./20. 20: 5  4:22 21:43  2:44 10:45  1:45 21:43  0:58 21:45  0:45
D  20./21. 20: 6  4:21 21:45  2:42 12: 3  2: 8 21:45  1: 0 22:00  1:00
V  21./22. 20: 7  4:20 21:47  2:40 13:22  2:29 21:47  1: 2 22:00  1:00
V  22./23. 20: 9  4:18 21:49  2:38 14:43  2:47 21:49  1: 4 22:00  1:00
V  23./24. 20:10  4:17 21:51  2:36 16: 7  3: 5 21:51  1: 6 22:00  1:00
V  24./25. 20:11  4:16 21:53  2:35 17:35  3:24 21:53  1: 8 22:00  1:00
V  25./26. 20:13  4:15 21:55  2:33 19: 5  3:46 21:55  1:10 22:00  1:00
V  26./27. 20:14  4:14 21:57  2:31 20:34  4:13 21:57  1:12 22:00  1:00
V  27./28. 20:15  4:13 21:59  2:29 21:58  4:49 21:59  1:14 22:00  1:00
V  28./29. 20:16  4:12 22: 1  2:28 23: 9  5:38 22: 1  1:16 22:15  1:15
V  29./30. 20:17  4:12 22: 3  2:26 99999  6:40 22: 3  1:18 22:15  1:15
V  30./31. 20:18  4:11 22: 4  2:25  0: 2  7:54 22: 4  1:10 22:15  1:00
V  31./01. 20:19  4:10 22: 6  2:23  0:40  9:12 22: 6  1:39 22:15  1:30
Die Filterung der Ausgabe
die benörigten Scripte:
so sieht dann zB eine Ausgabe aus, die an den "at" übergeben werden
EIN: 17:45 2022-12-08,
AUS: 20:45 2022-12-08,
EIN: 17:45 2022-12-09,
AUS: 20:45 2022-12-09,
EIN: 17:45 2022-12-10,
AUS: 20:45 2022-12-10,
EIN: 17:45 2022-12-11,
AUS: 20:45 2022-12-11,
EIN: 17:45 2022-12-12,
AUS: 20:45 2022-12-12,
EIN: 17:45 2022-12-13,
AUS: 21:30 2022-12-13,
EIN: 17:45 2022-12-14,
AUS: 23:30 2022-12-14,
EIN: 17:45 2022-12-15,
AUS: 00:45 2022-12-16,
EIN: 17:45 2022-12-16,
AUS: 02:00 2022-12-17,
EIN: 17:45 2022-12-17,
AUS: 03:15 2022-12-18,
EIN: 17:45 2022-12-18,
AUS: 06:45 2022-12-19,
EIN: 17:45 2022-12-19,
AUS: 06:45 2022-12-20,
EIN: 17:45 2022-12-20,
AUS: 06:45 2022-12-21,
EIN: 17:45 2022-12-21,
AUS: 06:45 2022-12-22,
EIN: 17:45 2022-12-22,
AUS: 06:45 2022-12-23,
EIN: 17:45 2022-12-23,
AUS: 06:45 2022-12-24,
EIN: 17:45 2022-12-24,
AUS: 06:45 2022-12-25,
EIN: 17:45 2022-12-25,
AUS: 06:45 2022-12-26,
EIN: 17:45 2022-12-26,
AUS: 06:45 2022-12-27,
EIN: 17:45 2022-12-27,
AUS: 06:45 2022-12-28,
EIN: 17:45 2022-12-28,
AUS: 06:45 2022-12-29,
EIN: 22:45 2022-12-29,
AUS: 06:45 2022-12-30,
EIN: 00:15 2022-12-31,
AUS: 06:45 2022-12-31,
EIN: 01:30 2023-01-01,
AUS: 06:45 2023-01-01,
Die jobs sehen dann so aus
atq|sort
1356	Thu Dec  8 17:45:00 2022 a pi
1357	Thu Dec  8 20:45:00 2022 a pi
1358	Fri Dec  9 17:45:00 2022 a pi
1359	Fri Dec  9 20:45:00 2022 a pi
1360	Sat Dec 10 17:45:00 2022 a pi
1361	Sat Dec 10 20:45:00 2022 a pi
1362	Sun Dec 11 17:45:00 2022 a pi
1363	Sun Dec 11 20:45:00 2022 a pi
1364	Mon Dec 12 17:45:00 2022 a pi
1365	Mon Dec 12 20:45:00 2022 a pi
1366	Tue Dec 13 17:45:00 2022 a pi
1367	Tue Dec 13 21:30:00 2022 a pi
1368	Wed Dec 14 17:45:00 2022 a pi
1369	Wed Dec 14 23:30:00 2022 a pi
1370	Thu Dec 15 17:45:00 2022 a pi
1371	Fri Dec 16 00:45:00 2022 a pi
1372	Fri Dec 16 17:45:00 2022 a pi
1373	Sat Dec 17 02:00:00 2022 a pi
1374	Sat Dec 17 17:45:00 2022 a pi
1375	Sun Dec 18 03:15:00 2022 a pi
1376	Sun Dec 18 17:45:00 2022 a pi
1377	Mon Dec 19 06:45:00 2022 a pi
1378	Mon Dec 19 17:45:00 2022 a pi
1379	Tue Dec 20 06:45:00 2022 a pi
1380	Tue Dec 20 17:45:00 2022 a pi
1381	Wed Dec 21 06:45:00 2022 a pi
1382	Wed Dec 21 17:45:00 2022 a pi
1383	Thu Dec 22 06:45:00 2022 a pi
1384	Thu Dec 22 17:45:00 2022 a pi
1385	Fri Dec 23 06:45:00 2022 a pi
1386	Fri Dec 23 17:45:00 2022 a pi
1387	Sat Dec 24 06:45:00 2022 a pi
1388	Sat Dec 24 17:45:00 2022 a pi
1389	Sun Dec 25 06:45:00 2022 a pi
1390	Sun Dec 25 17:45:00 2022 a pi
1391	Mon Dec 26 06:45:00 2022 a pi
1392	Mon Dec 26 17:45:00 2022 a pi
1393	Tue Dec 27 06:45:00 2022 a pi
1394	Tue Dec 27 17:45:00 2022 a pi
1395	Wed Dec 28 06:45:00 2022 a pi
1396	Wed Dec 28 17:45:00 2022 a pi
1397	Thu Dec 29 06:45:00 2022 a pi
1398	Thu Dec 29 22:45:00 2022 a pi
1399	Fri Dec 30 06:45:00 2022 a pi
1400	Sat Dec 31 00:15:00 2022 a pi
1401	Sat Dec 31 06:45:00 2022 a pi
1402	Sun Jan  1 01:30:00 2023 a pi
1403	Sun Jan  1 06:45:00 2023 a pi
Cronjob
cronjob zum Erzeugen der Schaltzeiten, immer am 1. des Monats um 12 Minuten nach Mitternacht:
0 12 1 * * /home/pi/ensz.neu/generate_jobs.sh
Hardware
die Hardware, die wir verwendet haben:


Risiken
- Ausfall WLAN, keine Verbindung mehr zum Raspi (aber die Schaltungen werden weiterhin ausgeführt)
- Absturz Raspi (Todo: watchdog einrichten)
- Uhrzeit muß exakt stimmen während des Betriebs (jobs) und bei der Berechnung der Schaltzeiten
 Suhler Sternfreunde
              
    Suhler Sternfreunde