-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetup.py
More file actions
134 lines (114 loc) · 6.35 KB
/
setup.py
File metadata and controls
134 lines (114 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import json
import os
import subprocess
def install_sudo():
print("sudo wird installiert...")
subprocess.check_call(["apt", "install", "sudo"])
def update_upgrade():
print("Führe apt update durch...")
subprocess.check_call(["sudo", "apt", "update"])
print("Führe apt upgrade durch...")
subprocess.check_call(["sudo", "apt", "upgrade"])
def check_and_install_module(module_name):
try:
__import__(module_name)
print(f"{module_name} ist bereits installiert.")
except ImportError:
print(f"{module_name} wird installiert...")
subprocess.check_call(["sudo", "apt", "install", f"python3-{module_name}"])
def check_and_install_modules(module_names):
for module_name in module_names:
check_and_install_module(module_name)
print("Alle erforderlichen Module sind installiert.")
def create_service():
current_directory = os.getcwd()
service_content = f'''[Unit]
Description=Divera WebSocket Dienst
After=network.target
[Service]
ExecStart=/usr/bin/python3 {current_directory}/main.py
WorkingDirectory={current_directory}
Restart=always
RuntimeMaxSec=86400
[Install]
WantedBy=multi-user.target
'''
with open("/etc/systemd/system/divera_websocket.service", "w") as f:
f.write(service_content)
# Reload systemd daemon
os.system("sudo systemctl daemon-reload")
# Starte den Dienst
os.system("sudo systemctl start divera_websocket")
print("Divera WebSocket Dienst erfolgreich gestartet!")
# Aktiviere den Dienst, um beim Booten zu starten
os.system("sudo systemctl enable divera_websocket")
print("Divera WebSocket Dienst aktiviert, um beim Booten zu starten!")
# Überprüfe den Status des Dienstes
os.system("sudo systemctl status divera_websocket")
def create_config():
config = {}
print("DIVERA 24/7 Setup Hilfe.")
print("Dieses Setup hilft dir die korrekte Config Datei für das Divera Script zu erstellen. Bitte trage deine Daten Schritt für Schritt ein.")
# Die folgende Zeile setzt den Standardwert auf "DEIN-API-KEY", falls keine Eingabe erfolgt
config["api_key"] = input("Bitte geben Sie den Privaten API-Schlüssel aus deinem Divera Account ein. (default: DEIN-API-KEY): ") or "DEIN-API-KEY"
print("Modus 1 = Wenn sich der Status von 6 auf != 6 oder von !=6 auf 6 eine Mitteilung senden.")
print("Modus 2 = Bei jeder Statusänderung eine Mitteilung senden.")
print("Modus 3 = Wenn in den wunsch Status gewechselt wird.")
# Die folgende Zeile setzt den Standardwert auf 2, falls keine Eingabe erfolgt
config["mode"] = int(input("Bitte wählen Sie einen Modus. (default: 1): ") or 1)
print("Bitte wählen deinen Ziel Status falls du Modus 3 gewählt hast.")
# Die folgende Zeile setzt den Standardwert auf 2, falls keine Eingabe erfolgt
config["destination_fms"] = int(input("Bitte geben Sie den Ziel-FMS-Status ein. (default: 2): ") or 2)
# Die folgende Zeile setzt den Standardwert auf False, falls keine Eingabe erfolgt
config["auto_archiv"] = input("Soll die Autoarchivierung für die Mitteilungen aktiviert werden? (true/false, default: false): ").lower() == "true"
# Die folgende Zeile setzt den Standardwert auf 1, falls keine Eingabe erfolgt
config["autoarchive_days"] = int(input("Bitte geben Sie die Anzahl der Tage für die Autoarchivierung ein. (default: 1): ") or 1)
# Die folgende Zeile setzt den Standardwert auf 0, falls keine Eingabe erfolgt
config["autoarchive_hours"] = int(input("Bitte geben Sie die Anzahl der Stunden für die Autoarchivierung ein. (default: 0): ") or 0)
# Die folgende Zeile setzt den Standardwert auf 0, falls keine Eingabe erfolgt
config["autoarchive_minutes"] = int(input("Bitte geben Sie die Anzahl der Minuten für die Autoarchivierung ein. (default: 0): ") or 0)
# Die folgende Zeile setzt den Standardwert auf 0, falls keine Eingabe erfolgt
config["autoarchive_seconds"] = int(input("Bitte geben Sie die Anzahl der Sekunden für die Autoarchivierung ein. (default: 0): ") or 0)
# Die folgende Zeile setzt den Standardwert auf True, falls keine Eingabe erfolgt
config["send_push"] = input("Soll das Senden von Push-Benachrichtigungen aktiviert werden? (true/false, default: false): ").lower() == "true"
# Die folgende Zeile setzt den Standardwert auf False, falls keine Eingabe erfolgt
config["send_mail"] = input("Soll das Senden von E-Mails aktiviert werden? (true/false, default: false): ").lower() == "true"
print("Benachrichtigungs ID")
print("3 = Ausgewählte Gruppen, 4 = Ausgewählte Benutzer")
# Die folgende Zeile setzt den Standardwert auf 4, falls keine Eingabe erfolgt
config["notification_type"] = input("Bitte geben Sie den Benachrichtigungstyp ein (default: 4): ") or "4"
# Die folgende Zeile setzt den Standardwert auf True, falls keine Eingabe erfolgt
config["private_mode"] = input("Soll der private Modus für die Mitteilung aktiviert werden? (true/false, default: false): ").lower() == "true"
# Die folgende Zeile setzt den Standardwert auf ["220053"], falls keine Eingabe erfolgt
config["users_primaerschluessel"] = [input("Bitte geben Sie den Primärschlüssel des Benutzers ein. (default: 220053): ") or "220053"]
# Die folgende Zeile setzt den Standardwert auf ["138728"], falls keine Eingabe erfolgt
config["groups_divera"] = [input("ID der Gruppe (bedingt Benachrichtigungstyp = 3). Bitte geben Sie die Divera-Gruppen-ID ein. (default: 138728): ") or "138728"]
# Die folgende Zeile setzt den Standardwert auf "Änderung Fahrzeugstatus!", falls keine Eingabe erfolgt
config["message_titel"] = input("ID des Benutzers (bedingt Benachrichtigungstyp = 4). Bitte geben Sie den Titel der Nachricht ein. (default: Änderung Fahrzeugstatus!): ") or "Änderung Fahrzeugstatus!"
config["status_dict"] = {}
with open("config.json", "w") as f:
json.dump(config, f, indent=4)
def main():
# Installiere sudo
install_sudo()
# Update und Upgrade
#update_upgrade()
# Überprüfe und installiere erforderliche Module
required_modules = [
"websockets",
"aiohttp",
"asyncio",
"json",
"logging",
"os",
"time",
"urllib",
"datetime"
]
check_and_install_modules(required_modules)
# Erstelle Konfigurationsdatei
create_config()
# Erstelle den Dienst
create_service()
if __name__ == "__main__":
main()