seiferta / emonitor Goto Github PK
View Code? Open in Web Editor NEWClient-Server application with map view
License: Other
Client-Server application with map view
License: Other
Im Admin-Bereich sollte eine OnlineHilfe zur Verfügung stehen, die Erklärungen zu den einzelnen Funktionen bietet.
Es sollte eine Möglichkeit geben, Mitteilungen/Inhalte/Informationen auf dem Monitor anzeigen zu lassen.
Denkbar sind:
Nach dem ersten Start des Emonitor unter 32bit Linux mit mysql erhalte ich folgende Fehlermeldung:
ERROR:emonitor.communication:error telegram INFO:emonitor.communication:2 Communicator(s) loaded: telegram, mail INFO:emonitor.observer:observe folder ./data/income/ with watchdog observer Traceback (most recent call last): File "run.py", line 5, in <module> from emonitor import app File "/home/tobiby/eMonitor/emonitor/__init__.py", line 8, in <module> app = create_app() File "/home/tobiby/eMonitor/emonitor/app.py", line 84, in create_app configure_blueprints(app, DEFAULT_BLUEPRINTS) File "/home/tobiby/eMonitor/emonitor/app.py", line 225, in configure_blueprints blueprint.init_app(app) File "/home/tobiby/eMonitor/emonitor/modules/__init__.py", line 82, in init_app m = eval('m.%sModule' % str(name).title())(app) File "/home/tobiby/eMonitor/emonitor/modules/messages/__init__.py", line 51, in __init__ Messages.initMessageTrigger() File "/home/tobiby/eMonitor/emonitor/modules/messages/messages.py", line 182, in initMessageTrigger job = scheduler.add_job(Messages.doMessageTrigger, name="messages", id="messages", trigger=MessageTrigger(Messages.getActiveMessages(), minutes=60)) File "/home/tobiby/eMonitor/emonitor/modules/messages/messages.py", line 175, in getActiveMessages return Messages.query.filter(Messages.state > 0).filter(Messages.startdate <= datetime.datetime.now()).filter(Messages.enddate >= datetime.datetime.now()).order_by(Messages.startdate.asc()).all() File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2398, in all return list(self) File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2515, in __iter__ return self._execute_and_instances(context) File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2530, in _execute_and_instances result = conn.execute(querycontext.statement, self._params) File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute return meth(self, multiparams, params) File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection return connection._execute_clauseelement(self, multiparams, params) File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement compiled_sql, distilled_params File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context context) File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1332, in _handle_dbapi_exception exc_info File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause reraise(type(exception), exception, tb=exc_tb) File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context context) File "/home/tobiby/.local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 442, in do_execute cursor.execute(statement, parameters) File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 226, in execute self.errorhandler(self, exc, value) File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler raise errorvalue sqlalchemy.exc.ProgrammingError: (_mysql_exceptions.ProgrammingError) (1146, "Table 'emonitor.messages' doesn't exist") [SQL: u'SELECT messages.monitors AS messages_monitors, messages.type AS messages_type, messages.attributes AS messages_attributes, messages.id AS messages_id, messages.name AS messages_name, messages.remark AS messages_remark, messages.startdate AS messages_startdate, messages.enddate AS messages_enddate, messages.state AS messages_state \nFROM messages \nWHERE messages.state > %s AND messages.startdate <= %s AND messages.enddate >= %s ORDER BY messages.startdate ASC'] [parameters: (0, datetime.datetime(2016, 6, 26, 21, 53, 41, 987084), datetime.datetime(2016, 6, 26, 21, 53, 41, 987182))]
Nachdem ich die Tabelle manuell erzeugt habe funktioniert der Emonitor einwandfrei.
Es muss ein Kommunikationsmodul erstellt werden, das über E-Mail und Messenger-Dienste kommunizieren kann.
Im Adminbereich führt das Speichern des Konfigurationsparameters für "Einsatz abschließen" zu einem Fehler und es wird None gespeichert.
Mitteilungsmodul mit Kartendarstellung und der Möglichkeit Symbole auf der Karte zu platzieren sinnvoll, um beispielsweise Straßensperren wegen Baustellen anzuzeigen.
Bei der Nutzung des Script-Moduls treten Fehler bei der Verarbeitung auf.
Wenn bei einem Einsatzobjekt die Ausrückeordnung wieder gelöscht wurde, werden keine Fahrzeuge mehr beim Alarm für diese Einsatzobjekt genutzt.
Importe der Flask-Module haben sich für die Flask-Version > 0.10.1 geändert und werfe "deprecation warnings"
Ein generischer FaxChecker sollte mittels RegEx-Ausdrücken die Felder innerhalb eines Faxes definieren lassen und anschließend daraus einen passenden Einsatz erzeugen.
Somit wird es möglich, dass ein Faxchecker alle Layouts unterstützen kann. Über Konfigurationsfiles können dann die Konfigurationen für die verschiedenen Leitstellen ausgetauscht werden und bei Bedarf die richtige Leitstelle in das eMonitor-System geladen werden.
Bei der Anzeige der Standard-Ausrückeordnung werden keine Fahrzeuge angezeigt
Umgebung: MySQL
Nach dem Anlegen eines Orts werden alle Straßen des Orts geladen. Allerdings können die Hausnummern der einzelnen Straßen nicht geladen werden.
Im eMonitor-error.log habe ich folgenden Eintrag gefunden:
2015-09-04 07:49:29,884 - ERROR - cherrypy.error - [04/Sep/2015:07:49:29] ENGINE ValueError('could not convert string to float: ',)
Als Beispiel dient diese OSM Straße: http://www.openstreetmap.org/way/74863178
Beim Klicken auf das Icon für das Löschen einer Meldung eines Alarms werden alle Meldungen des Alarms gelöscht.
Außerdem ist die Datumsangabe falsch.
Auf der Monitoranzeige für den Client wird kein Marker dargestellt, falls die Adresse nicht mit einer Hausnummer vergeben ist.
In der HTML-Ansicht funktioniert der Button zum Löschen der Einsatz-Typdefinition nicht, er wird überlagert durch den "Detail-Link"
Im Admin Interface gibt es Probleme mit Schlagworten mit Umlauten. Bei der Steuerung kann nicht zu den Werten mit Umlauten navigiert werden, der Anker unterstützt keine Umlaute,
Die Scrolleisten im Broweser werden nicht korrekt angezeigt.
Scrollen mit Mausrad nicht möglich./ Scrolleiste nicht vorhanden
Jedoch mit makieren des Textes.
Mac OSX 10.1 / Safari 8.0
Hallo,
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/apscheduler/executors/base.py", line 108, in run_job
retval = job.func(_job.args, *_job.kwargs)
File "/home/kevin/Schreibtisch/emonitor/emonitor/observer.py", line 30, in observeFolder
if not os.path.exists(path):
File "/usr/lib/python2.7/genericpath.py", line 18, in exists
os.stat(path)
TypeError: coercing to Unicode: need string or buffer, NoneType found
Folgende Fehlermeldung erhalte ich bei einem Start von eMonitor.
Angaben zur Umgebung:
Gastsystem: Ubuntu 12.04 via VirtualBox
Folgende Schritte habe ich ausgeführt:
installation python, apt-get upgrade, pip -r req... .txt, python main.py -p 80 -t
Ich bin mir nicht ganz sicher ob es sich hierbei um einen Bedienerfehler handelt, wenn ja, lasse ich mich gerne aufklären, a
Um Hilfe wäre ich dankbar.
Kameradschaftlichen Gruß
-Name gelöscht-
wenn die Datumsrückgabe im Wetter-Widget kein korrektes Datum liefert, wird der komplette Message-Bereich nicht angezeigt und es fliegt eine Fehlermeldung im Hintergrund.
2015-11-01 15:41:38,516 - ERROR - cherrypy.error - [01/Nov/2015:15:41:38] ENGINE ValueError("time data 'Sun, 01 Nov 2015 2:58 p' does not match format '%a, %d %b %Y %I:%M %p'",)
Traceback (most recent call last):
File "c:\tools\python\lib\site-packages\cherrypy\wsgiserver\wsgiserver2.py", line 1353, in communicate
req.respond()
File "c:\tools\python\lib\site-packages\cherrypy\wsgiserver\wsgiserver2.py", line 868, in respond
self.server.gateway(self).respond()
File "c:\tools\python\lib\site-packages\cherrypy\wsgiserver\wsgiserver2.py", line 2267, in respond
response = self.req.server.wsgi_app(self.env, self.start_response)
File "c:\tools\python\lib\site-packages\cherrypy\_cptree.py", line 299, in __call__
return app(environ, start_response)
File "c:\tools\python\lib\site-packages\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "c:\tools\python\lib\site-packages\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "c:\tools\python\lib\site-packages\flask\app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "c:\tools\python\lib\site-packages\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "c:\tools\python\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "c:\tools\python\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "c:\tools\python\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "c:\tools\python\lib\site-packages\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\tools\emonitor\emonitor\monitor\monitor.py", line 90, in monitorContent
params = widget.addParameters(alarmid=alarmid, alarm=alarm, clientid=clientid, layout=layout)
File "C:\tools\emonitor\emonitor\modules\messages\message_base.py", line 45, in addParameters
content += '<div class="slide">%s%s</div>\n' % (message.type.getMonitorContent(**kwargs), pos)
File "emonitor/modules/messages/message_weather.py", line 39, in getMonitorContent
self.addParameters(**params)
File "emonitor/modules/messages/message_weather.py", line 87, in addParameters
self.data['lastBuildDate'] = datetime.datetime.strptime(self.data['lastBuildDate'][:-5], '%a, %d %b %Y %I:%M %p').strftime('%d.%m.%Y %H:%M')
File "c:\tools\python\lib\_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data 'Sun, 01 Nov 2015 2:58 p' does not match format '%a, %d %b %Y %I:%M %p'
Wenn in der Einsatztyp-Definition die Variablen nicht mit Werten belegt sind, wird bei der Einsatzerstellung kein korrektes Stichwort/Schlagwort gewählt und das aus dem FAX-erkannte überschrieben.
Für manche Adressen sind bestimmte Hinweise bekannt, die bei Alarmen zu dieser Adresse angezeigt werden sollten.
Dabei ist es aber nicht notwendig, dass das über eine eigenes Alarmobjekt erzeugt wird, sondern lediglich über einen Hinweise zu einer Straße + Hausnummer
Beim Starten mit einer leeren Datenbank werden einige Fehler im Hintergrund des Admin-Bereichs geschmissen, die eine vernünftige Erst-Konfiguration verhindern.
Seit dem neuesten Update lässt sich eMonitor nicht mehr starten und bringt folgenden Trace:
@alarmserver ~ # Traceback (most recent call last): :( File "./run.py", line 5, in
from emonitor import app
File "/root/eMonitor/emonitor/init.py", line 8, in
app = create_app()
File "/root/eMonitor/emonitor/app.py", line 82, in create_app
configure_extensions(app)
File "/root/eMonitor/emonitor/app.py", line 131, in configure_extensions
if alembic.migration_context.get_current_heads()[0] != current_app.config.get('DB_VERSION'): # update version
AttributeError: 'Alembic' object has no attribute 'migration_context'
Liegt das Problem evtl. an der Version von Alembic aus der "requirements.txt"? Mit der neuesten Version von Alembic bekomme ich jedoch den eMonitor auch nicht mehr zum Laufen.
eMonitor kann verschiedene Alarmtypen verarbeiten, die (theoretisch) über unterschiedliche Wege erstellt werden. Aktuell ist nur die Fax-Erkennung realisiert, denkbar sind aber auch z.B. E-Mail.
Für das Erstellen können für jedes Fax-Layout eigene Erkenner (faxchecker) genutzt werden, die anschließend Alarme erzeugen. Je faxchecker sollte eine unterschiedliche Anzeige möglich sein.
Der Download kann nicht ohne weiteres beendet werden.
Die Liste der Personen für die Geburtstagsliste wird nicht korrekt erzeugt zum Jahreswechsel.
Einsatzobjekte benötigen weitere Konfigurationsmöglichkeiten:
Einsatzobjekte sollten weitere Informationen zum Objekt speichern können.
Aktuell ist nur die Position des Objekts hinterlegt. Denkbar sind: BMA, Aufstellfläche, Besondere Hinweise, Einsatzpläne ...
Seit einiger Zeit reagiert die Verzeichnisüberwachung nicht mehr und beim Speichern eines neuen Überwachungsintervalls erscheint nur ein Error 500.
Folgenden Trace konnte ich der eMonitor-error.log entnehmen:
2016-08-25 15:41:08,788 - ERROR - eMonitor - Exception on /admin/settings [POST] Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception reraise(exc_type, exc_value, tb) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/root/eMonitor/emonitor/decorators.py", line 21, in decorated_function return f(*args, **kwargs) File "/root/eMonitor/emonitor/admin/admin.py", line 94, in adminContent return current_mod.getAdminContent(modules=admin.modules, current_mod=current_mod, user=User.getUsers(login.current_user.get_id() or -1), app_name=current_app.config.get('PROJECT'), app_version=current_app.config.get('APP_VERSION'),$ File "/root/eMonitor/emonitor/modules/settings/__init__.py", line 77, in getAdminContent return getAdminContent(self, **params) File "/root/eMonitor/emonitor/modules/settings/content_admin.py", line 153, in getAdminContent _jobserver = scheduler.get_jobs('observerinterval')[0] IndexError: list index out of range
Installed eMonitor on:
When starting eMonitor:
C:\eMonitorSrv>python run.py
DEBUG:emonitor.signals:add signal monitorserver.clientsearchstart
DEBUG:emonitor.signals:add signal monitorserver.clientsearchdone
DEBUG:emonitor.signals:add signal monitorserver.clientanswer
ERROR:emonitor.communication:error telegram
INFO:emonitor.communication:2 Communicator(s) loaded: telegram, mail
Nothing more...
Webinterface is not loading, firewall is off.
eMonitor-error.log does not say more than the error msg show above.
What else could I do?
Einsätze mit Alarmobjekten haben folgende Probleme:
AlsMitteilungsmodul ist ein Bild-Modul sinnvoll, das Bilder eines Verzeichnisses oder speziell hochgeladene Bilder akzeptiert
Diese Bilder sollen dann in einer Art Diashow dargestellt werden.
Unter Linux wird die IP-Adresse nicht korrekt an die Clients geliefert, dort wird immer 127.0.0.1 genommen, dadurch können die Clients die Seiten nicht vom Server abrufen.
Einfachste Lösung: Kofigurationsparameter "IP" ergänzen und für den Socket-Request verwenden, wenn nicht leer.
Wenn ein Einsatzobjekt für den Alarm vorliegt, muss die Monitoranzeige optimiert werden, dass auch in der Anzeige die Objektdetails angezeigt werden.
Die Reihenfolge der Tage in der Geburtstagsliste ist nicht chronologisch.
Falls am heutigen Tag ein Geburtstag ist, wird dieser als erstes dargestellt und nicht in der Mitte der Liste
Die Wetterdaten können nicht mehr über die aktuell implementierte Schnittstelle angeboten werden. Modul muss aktuell aus der Anzeige der Mitteilungen genommen werden, da sonst ein Fehler auftritt.
Lösung: Validierung einer passenden Wetteradresse.
eMonitor startet mit der aktuellen Version von Alembic (0.8.8) nicht mehr, sondern schmeißt einen Fehler:
File "D:\daten\python\eMonitor\emonitor\app.py", line 131, in configure_extensions if alembic.context.get_current_revision() != current_app.config.get('DB_VERSION'): # update version AttributeError: 'Alembic' object has no attribute 'context'
Für die digitale Alarmierung ist es nötig die Alarminformationen über eine seriel Konsole einzulesen und danach zu verarbeiten
Falls das Python-Modul 'watchdog' nicht installiert ist, wird beim Starten ein Fehler geworfen.
Im Kontextmenü des Frontends kann der Einsatz ausgedruckt werden, falls ein Drucklayout definiert wurde. Dabei wird dann immer die Anzahl an Kopien erzeugt, die konfiguriert wurde.
Wenn der Druck manuell angestoßen wurde, sollte aber immer nur ein Ausdruck erfolgen
Geburtstage in einem Schaltjahr ab 1. März werden falsch zugeordnet.
Die Reihenfolge der Fahrzeuge der Ausrückeordnung eines Einsatzobjektes wird beim Speichern nicht beibehalten, es wird alphabetisch sortiert.
Im Downloadmanager von OpenStreetMap fehlen die Zoombuttons, für eine schnellere Navigation
Im Testmodus der Alarmfaxe unter Linux wird im "Done"-Verzeichnis eine Datei erzeugt.
Unter Windows ist dieses Verhalten nicht zu beobachten.
Bei der Definition der Standardkarte muss darauf geachtet werden, dass immer nur eine Karte als Standardkarte eingetragen werden kann.
Aktuell kann man das frei auswählen, hier muss eine Kontrolle erfolgen.
Bei der Einsatzerstellung mit einem Einsatzobjekt wird die Ausrückeordnung nicht übernommen, wenn eine für das Objekt definiert wurde.
Die Farbauswahl funktioniert in keinem Modul
Einsätze werden nicht automatisch geschlossen nach der konfigurierten Zeit.
Für den Testupload einer Fax-Datei wird bisher im Formular fest auf folgende Dateiformate geprüft:
jpg, tif, pdf
Im Adminbereich kann man unter der Textverarbeitung die Formate frei definieren, die zugelassen sind.
Für den Testupload ist es sinnvoller, dass die Liste der konfigurierten Formate auch für den Testupload verwendet wird.
Wenn ein Port als Startparameter über die Kommandozeile mitgegeben wird, wird dieser Parameter nicht verwendet, sondern trotzdem der Port aus der Konfigurationsdatei verwendet.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.