Skip to content

Commit

Permalink
Add: -Updatechecker, -App: Statistik Vorjahre
Browse files Browse the repository at this point in the history
  • Loading branch information
Retschga committed Feb 10, 2021
1 parent b1004fb commit 9bc1e1b
Show file tree
Hide file tree
Showing 11 changed files with 279 additions and 107 deletions.
17 changes: 16 additions & 1 deletion .env - Leer
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
DEBUG=app,alarmManager,print,geocodeManager,calendar,fwvv,telegram,wss,database,httpsServer,appAPI
DEBUG=app,alarmManager,print,geocodeManager,calendar,fwvv,telegram,wss,database,httpsServer,appAPI,update

# Um Änderungen zu übernehmen muss das Programm neu gestartet werden

Expand Down Expand Up @@ -51,6 +51,15 @@ FOLDER_ARCHIVE=C:\Archiv
# Telegram Bilder automatisch in Diashow ohne man. Freigabe (true/false)
BOT_IMG_AUTOFREIGABE=true

# Pfad zu Tesseract (Raspberry: siehe 'which tesseract')
TESSERACT_PATH=C:/Program Files/Tesseract-OCR/tesseract.exe

# Pfad zu Ghostscript (Raspberry: siehe 'which ghostscript')
GHOSTSCRIPT_PATH=C:/Program Files/gs/gs9.53.3/bin/gswin64c.exe

# Fax Eingang Verzögerung (sek) (evtl bei Hylafax nötig ca. 30 ??)
FAX_INPUT_DELAY=0


######## STANDBY Bildschirm / Telegram Kalender ########

Expand Down Expand Up @@ -101,6 +110,12 @@ FWVV_DATENSICHERUNG=

######## DRUCKEN ########

#Orginalfax Drucken (true/false)
FAX_DRUCK=false

#Seitenzahl
FAX_DRUCK_SEITENZAHL=1

#Alarmdruck (true/false)
ALARMDRUCK=true

Expand Down
169 changes: 84 additions & 85 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
https://www.ghostscript.com/download/gsdnld.html
sudo apt-get install ghostscript


# FWMonitor
# FWMonitor

Diese Software kann bei Feuerwehren dazu verwendet werden, die Informationen des Alarmfax auf einem Bildschirm darzustellen.
Insbesondere werden die Informationen so aufbereitet, dass der Einsatzort auf einer Karte visualisiert wird.
Expand All @@ -13,37 +9,37 @@ Die Faxauswertung ist derzeit auf die ILS Rosenheim abgestimmt (kann aber am Anf

* Standby-Display mit Uhrzeit, Diashow, Kalender/Google Kalender, Verfügbarkeitsanzeige der Einsatzkräfte, DWD Warnungen
* Alarm-Display
* Alle relevanten Infos aus dem Alarmfax
* Kartenanzeige
* Rückmeldungen der Einsatzkräfte
* Alle relevanten Infos aus dem Alarmfax
* Kartenanzeige
* Rückmeldungen der Einsatzkräfte
* PDF-Display für Schulungspräsentationen etc.
* Telegram Messenger
* Alarminfo (Einstellbar für verschiedene Personengruppen: Fax, Schlagwort, ...)
* Rückmeldungen zum Alarm
* Kalender mit Terminerinnerungen (Einstellbar für verschiedene Personengruppen)
* Verfügbarkeits Anzeige/Einstellung
* Einsatzstatistik
* Hydrantenposition eintragen
* Alarminfo (Einstellbar für verschiedene Personengruppen: Fax, Schlagwort, ...)
* Rückmeldungen zum Alarm
* Kalender mit Terminerinnerungen (Einstellbar für verschiedene Personengruppen)
* Verfügbarkeits Anzeige/Einstellung
* Einsatzstatistik
* Hydrantenposition eintragen
* Installierbare WebApp für Android und IOS
* Alarminfo (Einstellbar für verschiedene Personengruppen: Fax, Schlagwort, ...)
* Rückmeldungen zum Alarm
* Kalender mit Terminerinnerungen (Einstellbar für verschiedene Personengruppen)
* Bearbeiten des Kalenders
* Verfügbarkeits Anzeige/Einstellung
* Verfügbarkeits Pläne (Wochentagsweise)
* Hydrantenkarte
* Einsatzstatistik
* Admin-Optionen
* Benutzereinstellungen
* Kalendergruppen
* Alarmgruppen
* Präsentationssteuerung
* Alarminfo (Einstellbar für verschiedene Personengruppen: Fax, Schlagwort, ...)
* Rückmeldungen zum Alarm
* Kalender mit Terminerinnerungen (Einstellbar für verschiedene Personengruppen)
* Bearbeiten des Kalenders
* Verfügbarkeits Anzeige/Einstellung
* Verfügbarkeits Pläne (Wochentagsweise)
* Hydrantenkarte
* Einsatzstatistik
* Admin-Optionen
* Benutzereinstellungen
* Kalendergruppen
* Alarmgruppen
* Präsentationssteuerung
* Kartenausdruck
* Adress-Koordinaten Suche über
* Bing
* Nominatim
* OSM Gebäudenamen
* Bahnübergänge
* Bing
* Nominatim
* OSM Gebäudenamen
* Bahnübergänge
* Kalender mit Erinnerungen und Gruppen
* Alarmdrucker Papierlevel-Warnung
* ...
Expand All @@ -53,40 +49,42 @@ Die Faxauswertung ist derzeit auf die ILS Rosenheim abgestimmt (kann aber am Anf
Raspberry PI:
- GIT installieren `sudo apt-get install git`
- CUPS installieren siehe https://www.elektronik-kompendium.de/sites/raspberry-pi/2007081.htm
- `sudo apt-get install printer-driver-cups-pdf`
- im Browser unter `127.0.0.1:631` CUPS konfigurieren (Login gleich wie Raspberry):
gewünschten Drucker als `Alarmdrucker` (Name) einrichten; PDF-Printer als `PDFPrint` (Name) einrichten
- https://wiki.ubuntuusers.de/CUPS-PDF/#ndern-des-Speicherorts - Archivordner einstellen (am besten als ganzer Pfad /home/pi/...)
gewünschten Drucker als `Alarmdrucker` (Name) einrichten;
- NodeJS installiern siehe https://www.w3schools.com/nodejs/nodejs_raspberrypi.asp
- Tesseract installieren `sudo apt-get install tesseract-ocr`
(Test mit: `tesseract -v`)
- Ghostscript installieren `sudo apt-get install ghostscript`
- `cd /home/pi/Desktop/`
- Faxeingang über Fritzbox: siehe https://strobelstefan.org/?p=5405 und https://pypi.org/project/pdf2image/ und https://github.com/windele/alarmdisplay-ffw/blob/master/infos/Installation_auf_Raspberry_Pi.md
- Faxeingang über USB Faxmodem: siehe https://wiki.ubuntuusers.de/HylaFAX/


Windows:
- Empfehlung: EM-OCR https://feuersoftware.com/forum/index.php?thread/2125-em-ocr-einsatzmonitor-pdf-tiff-txt-fax-konverter-mit-ordner%C3%BCberwachung/
Windows:
- NodeJS: https://nodejs.org/de/
- FoxitReader: https://www.foxitsoftware.com/de/pdf-reader/
- Git: https://git-scm.com/downloads
- Ghostscript: https://www.ghostscript.com/download/gsdnld.html
- Tesseract: https://digi.bib.uni-mannheim.de/tesseract/
Bei Installation auswählen: Additional Language Data > German


Bei beiden: In Konsole (Windows: Rechtsklick - Git Bash here) sudo unter Windows evtl. nicht notwendig:
- `git clone https://github.com/Retschga/FWMonitor.git`
Bei beiden: In Konsole (Windows: Rechtsklick - Git Bash here) (sudo unter Windows evtl. nicht notwendig):
- Aktuelle Version Datei unter Releases herunterladen, extrahieren
- `cd "FWMonitor"`
- `sudo npm install --unsafe-perm`
- `sudo npm i puppeteer`


## Update

- Einfach die Dateien nochmal herunterladen und die alten ersetzen
- .env (Ist-Stand) mit .env-leer (Soll-Stand) vergleichen, gegebenfalls Einträge hinzufügen/ändern/löschen
- Libraries updaten `npm install`
- Wenn nötig die verbundenen Geräte unter Einstellungen updaten
- Software neu starten
- Einfach die neue Version unter Releases herunterladen und die alten ersetzen (evtl. vorher Sicherungskopie anlegen)
- Achtung bei eigen veränderten Dateien, diese unter Umständen nicht überschreiben
- .env (Ist-Stand) mit .env-leer (Soll-Stand) vergleichen, gegebenfalls Einträge hinzufügen/ändern/löschen
- Libraries updaten `npm install`
- Wenn nötig die verbundenen Geräte unter Einstellungen updaten
- Software neu starten


## Einstellungen

Für den Server PC/Raspberry PI sollte eine feste IP-Adresse vergeben sein!
Expand Down Expand Up @@ -118,13 +116,13 @@ Veränderte Einstellungen erfordern immer einen Software Neustart!
- dann unten "Neue Freigabe", dann "MyFRITZ!-Freigabe" HTTPS-Server

- Windows:
- https://certbot.eff.org/lets-encrypt/windows-other befolgen
- Cert und Key von C:\Certbot\live\ unter .env als "HTTPS_KEY" und "HTTPS_CERT" eintragen
- https://certbot.eff.org/lets-encrypt/windows-other befolgen
- Cert und Key von C:\Certbot\live\ unter .env als "HTTPS_KEY" und "HTTPS_CERT" eintragen
- Raspberry Pi:
- `cd ~`
- `git clone https://github.com/letsencrypt/letsencrypt`
- `cd letsencrypt`
- `./letsencrypt-auto -d ERSTE_DOMAIN -d ZWEITE_DOMAIN --redirect -m DEINE_MAIL --standalone`
- `cd ~`
- `git clone https://github.com/letsencrypt/letsencrypt`
- `cd letsencrypt`
- `./letsencrypt-auto -d ERSTE_DOMAIN -d ZWEITE_DOMAIN --redirect -m DEINE_MAIL --standalone`

- Alternativ zu MyFritz kann auch ein anderer DynDNS Dienst oder eine feste IP verwendet werden

Expand All @@ -134,22 +132,23 @@ Veränderte Einstellungen erfordern immer einen Software Neustart!
- Werte in .env unter "VAPID" eintragen

- Auto Renew Let´s Encrypt
- Windows: Aufgabenplanung öffnen
- Eingache aufgabe erstellen (rechts)
- Name: certbot
- Wöchentlich
- Sonntag
- Programm Starten
- Programm/Skript: certbot
- Argumente hinzufügen: renew
- Raspberry Pi: `sudo crontab -e`
- `0 0 * * 0 ./letsencrypt-auto -d ERSTE_DOMAIN --redirect -m DEINE_MAIL --agree-tos --renew-by-default --standalone
- Windows: Aufgabenplanung öffnen
- Eingache aufgabe erstellen (rechts)
- Name: certbot
- Wöchentlich
- Sonntag
- Programm Starten
- Programm/Skript: certbot
- Argumente hinzufügen: renew
- Raspberry Pi: `sudo crontab -e`
- `0 0 * * 0 ./letsencrypt-auto -d ERSTE_DOMAIN --redirect -m DEINE_MAIL --agree-tos --renew-by-default --standalone


## Programmstart (manuell)

In Konsole (Windows: Rechtsklick - Git Bash here):
- `node app`
- Windows: `start.bat` oder `./start.bat`
- Raspberry: `sudo ./start.sh`

Nun im Webbrowser die IP-Adresse:8080 des Computers eingeben, auf dem FWmonitor läuft.
(Herauszufinden in Konsole: Windows: ipconfig; Raspberry: ifconfig; Eigener PC: 127.0.0.1)
Expand All @@ -158,22 +157,22 @@ Bsp: 192.168.2.153:8080 oder 127.0.0.1:8080
## Autostart / Installation des Displays

Raspberry:
- Benötigt min. Raspian buster
- `sudo apt-get update`
- `sudo apt-get upgrade`
- Server:
- `sudo crontab -e`; darin `@reboot PFAD_ZU_FWMONITOR/start.sh > /home/pi/Desktop/log.txt` hinzufügen
- Display:
IP_ADRESSE=IP Adresse des Servers, PORT=8080 außer wenn in .env geändert
- `wget IP_ADRESSE:PORT/scripts/installDisplay.sh`
- `sudo chmod +x installDisplay.sh`
- `sudo ./installDisplay.sh IP_ADRESSE:PORT CLIENT_NAME`
- Benötigt min. Raspian buster
- `sudo apt-get update`
- `sudo apt-get upgrade`
- Server:
- `sudo crontab -e`; darin `@reboot PFAD_ZU_FWMONITOR/start.sh > /home/pi/Desktop/log.txt` hinzufügen
- Display:
IP_ADRESSE=IP Adresse des Servers, PORT=8080 außer wenn in .env geändert
- `wget IP_ADRESSE:PORT/scripts/installDisplay.sh`
- `sudo chmod +x installDisplay.sh`
- `sudo ./installDisplay.sh IP_ADRESSE:PORT CLIENT_NAME`

Windows:
- Server:
- unter `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp` Verknüpfung zu start.bat erstellen
- Display:
- Um den Browser automatisch zu starten: siehe https://blog.moortaube.de/2017/02/21/google-chrome-im-fullscreen-%C3%B6ffnen/
- Server:
- unter `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp` Verknüpfung zu start.bat erstellen
- Display:
- Um den Browser automatisch zu starten: siehe https://blog.moortaube.de/2017/02/21/google-chrome-im-fullscreen-%C3%B6ffnen/

## Benutzer hinzufügen
Einfach dem erstellten Telegram-Bot /start schreiben.
Expand Down Expand Up @@ -217,9 +216,9 @@ Bei Fragen oder Anregungen einfach in GitHub oben unter Issues ein Issue erstell
* Bing Geocode
* openstreetmap - https://www.openstreetmap.org/fixthemap
* Hillshading - https://klokantech.github.io/dare-raster-tiles/hillshade/
* Overpass - https://wiki.openstreetmap.org/wiki/DE:Overpass_API
* OpenFireMap - https://wiki.openstreetmap.org/wiki/DE:OpenFireMap
* Nominatim Geocode - https://nominatim.openstreetmap.org/
* Overpass - https://wiki.openstreetmap.org/wiki/DE:Overpass_API
* OpenFireMap - https://wiki.openstreetmap.org/wiki/DE:OpenFireMap
* Nominatim Geocode - https://nominatim.openstreetmap.org/
* diff-match-patch - https://github.com/google/diff-match-patch
* Diashow - https://gist.github.com/mhulse/66bcbb7099bb4beae530
* Python Timer - https://gist.github.com/aeroaks/ac4dbed9c184607a330c
Expand All @@ -235,23 +234,23 @@ Bei Fragen oder Anregungen einfach in GitHub oben unter Issues ein Issue erstell
| Router |-----| USB-Modem |-----| Raspberry PI |-----| Monitor |
---------- | ------------- | Server | -----------
----------------------| Display |
| ----------- ----------------
| ----------- ----------------
----| Drucker |
-----------
-----------
------------ ------------------- ------------------------ -----------
| Fritzbox |-----| Win10 PC Server | ))) ((( | Raspberry PI Display |-----| Monitor |
------------ | ------------------- ------------------------ -----------
| -----------
| -----------
----| Drucker |
-----------
-----------
------------ ------------------- ------------------------ -----------
| Fritzbox | ))) ((( | Win10 PC Server | ))) ((( | Raspberry PI Display |-----| Monitor |
------------ | ------------------- ------------------------ -----------
| -----------
----| Drucker |
-----------
| -----------
----| Drucker |
-----------
```

## Authors
Expand Down
53 changes: 51 additions & 2 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ var webNotifications = require('./webNotifications');
var printer = require('./printer')();
const calendar = require('./calendar')();
const startupCheck = require('./startupCheck')();
const updateManager = require('./updateManager')();

// ---------------- Fehlerausgabe ----------------
process.on('uncaughtException', function (err) {
Expand All @@ -29,6 +30,7 @@ var ignoreNextAlarm = false;
var ignoreNextAlarm_min = 0;

process.env.VERSION = "2.2.0";
process.env.VERSION_REMOTE = '';



Expand Down Expand Up @@ -277,6 +279,9 @@ var checkInFolder = function() {

if(status != lastStatus) {

// Telegram
_bot[0].sendSoftwareInfo("Eingangsordner Status: " + (status ? "Verbunden" : "Getrennt") + "!");

// APP
var zeigeBis = new Date();
zeigeBis.setTime(zeigeBis.getTime() + (60 * 60 * 1000));
Expand All @@ -299,8 +304,49 @@ var checkInFolder = function() {
}, 60000 * 5 );
}

var checkForUpdate = async function() {
let infoSendt = false;
let check = async () => {
let ret = await updateManager.checkForUpdate();
if(ret.availible == true) {
process.env.VERSION_REMOTE = ret.version;
console.log();
console.log('UPDATE VERFÜGBAR:');
console.log('Version: ' + ret.version);
console.log('Info:\n' + ret.text);
console.log();

if(infoSendt == false) {
infoSendt = true;

// Telegram
_bot[0].sendSoftwareInfo("Update verfügbar! " + process.env.VERSION + ' -> ' + ret.version + '\n' + ret.text);

// APP
var zeigeBis = new Date();
zeigeBis.setTime(zeigeBis.getTime() + (60 * 60 * 1000));
webNotifications.notify(
"Software Information",
"Update verfügbar! " + process.env.VERSION + ' -> ' + ret.version + '\n' + ret.text,
zeigeBis,
false,
new Date(),
zeigeBis,
false,
[],
['softwareInfo']
);
}
}
}
let interval = setInterval(async () => {
check();
}, 60000 *60 *24 );
check();
}


async function main() {
async function main() {

await startupCheck.check();

Expand All @@ -310,7 +356,7 @@ async function main() {
console.log('');

// ---------------- PROGRAMMSTART ----------------
await db.updateDatabase();
await db.updateDatabase();

// ---------------- Module starten ----------------
_httpServer[0] = require('./httpServer')(_httpServer, _httpsServer, _bot, setIgnoreNextAlarm, getIgnoreNextAlarm);
Expand All @@ -336,6 +382,9 @@ async function main() {

global.startTime = new Date();

// Update Check
await checkForUpdate();


// ---------------- Verzeichnisüberwachung ----------------

Expand Down
Loading

0 comments on commit 9bc1e1b

Please sign in to comment.