This commit is contained in:
nobbie2009 2022-07-07 07:02:39 +02:00 committed by GitHub
commit fda39cb05a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 145 additions and 1 deletions

View file

@ -228,7 +228,7 @@ mqtt = 0
# for developing - template-module
template = 0
2calendar = 1
[MySQL]
# MySQL configuration
@ -591,6 +591,9 @@ password = dummyPassword
commandFMS = set SteckdoseSchlafzimmerEinsatz on-for-timer 90
commandZVEI =
commandPOC =
[2calendar]
# Config-Daten des Kalenderplugins
filepath2calendar = #Pfad zur Kalenderdatei
[mqtt]
#Adress from MQTT-Broker

View file

@ -0,0 +1,141 @@
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Kalendereinträge für Alarmierungen
Erstellt eine Icalendar (ICS)-Datei, diese kann in Kalender wie Outlook etc. importiert werden.
Aktuell wird jeder Alarm der via Regex dieses Plugin anspricht, in eine "Gesamtdatei" geschrieben. Denkbar wäre aber auch
für jeden Filter eine seperate Datei anzulegen.
Auch wird aktuell nur ZVEI, aus mangel an Erfahrung, ausgewertet.
@author: Norbert Jahn
@author: Bastian Schroll
@requires: icalendar https://pypi.org/project/icalendar/
@requires: dateutil https://github.com/dateutil/dateutil/
@requires: pytz https://pypi.org/project/pytz/
"""
import logging # Global logger
import time
import requests
import re
from icalendar import Calendar, Event
from datetime import datetime, timedelta
import pytz
import os.path
from includes import globalVars # Global variables
from includes.helper import configHandler
##
#
# onLoad (init) function of plugin
# will be called one time by the pluginLoader on start
#
def onLoad():
"""
While loading the plugins by pluginLoader.loadPlugins()
this onLoad() routine is called one time for initialize the plugin
@requires: nothing
@return: nothing
"""
# nothing to do for this plugin
return
##
#
# Main function of Calendar-plugin
# will be called by the alarmHandler
#
def run(typ,freq,data):
"""
This function is the implementation of a Calendar-Plugin
It will write Alarms in an ics-File.
@type typ: string (FMS|ZVEI|POC)
@param typ: Typ of the dataset for sending to BosMon
@type data: map of data (structure see readme.md in plugin folder)
@param data: Contains the parameter for dispatch to BosMon.
@type freq: string
@keyword freq: frequency is not used in this plugin
@requires:
@return: nothing
"""
try:
if configHandler.checkConfig("2calendar"): #read and debug the config
try:
#
# Kalender instanzieren
#
cal = Calendar()
cal.add('proid', 'BOS')
cal.add('version', '2.0')
except:
logging.error("Kann Kalender nicht erstellen")
else:
try:
#
# Erstelle das Event
#
summary = ""
location = ""
msg = ""
enterEvent = False
if typ == "ZVEI":
summary = data["description"]
location = data["zvei"]
enterEvent = True
elif typ == "POC":
summary = data["description"]
location = data["ric"] + data["functionChar"]
msg = data["msg"]
enterEvent = True
else:
logging.warning("Nicht unterstützter Typ: %s", typ)
if enterEvent == True:
if os.path.exists(globalVars.config.get("2calendar", "filepath2calendar")+'alle.ics'):
g = open(globalVars.config.get("2calendar", "filepath2calendar")+'alle.ics','rb')
gcal = Calendar.from_ical(g.read())
for component in gcal.walk():
if component.name == "VEVENT":
event = Event()
event.add('summary', component.get('SUMMARY'))
event.add('dtstart', component.get('DTSTART'))
event.add('dtend', component.get('dtend'))
event.add('dtstamp', component.get('dtstamp'))
event.add('location', component.get('location'))
event['uid'] = component.get('UID')
cal.add_component(event)
g.close()
timestamp = datetime.fromtimestamp(data["timestamp"])
event = Event()
event.add('summary', summary)
event.add('dtstart',timestamp)
event.add('dtend',timestamp)
event.add('dtstamp',timestamp)
event.add('location', location)
event.add('description', msg)
event['uid'] = "{0}#{1}".format(timestamp,data["description"])
cal.add_component(event)
with open(globalVars.config.get("2calendar", "filepath2calendar")+'alle.ics', 'wb') as f:
f.write(cal.to_ical())
except:
logging.error("cannot Insert %s", typ)
logging.debug("cannot Insert %s", typ, exc_info=True)
return
except:
logging.error("unknown error")
logging.debug("unknown error", exc_info=True)