|
|
@@ -4,44 +4,122 @@
|
|
|
# 2022-03-06 - devnull - initial
|
|
|
# 2022-03-25 - devnull - JSON Config
|
|
|
# - tcall Objekt
|
|
|
+# 2022-04-17 - devnull - Logger Objekt integriert
|
|
|
+# 2022-04-27 - devnull - ADC auslesen und auswerten
|
|
|
+# - ADC Anbindung an die Klasse tcall weitergereicht
|
|
|
+# 2022-04-29 - devnull - Alarmüberwachung eingebaut
|
|
|
|
|
|
-from machine import Pin
|
|
|
-from machine import Timer
|
|
|
import ujson
|
|
|
import sys
|
|
|
|
|
|
+from machine import Timer
|
|
|
+from machine import ADC
|
|
|
+from machine import Pin
|
|
|
+
|
|
|
+# Logging Klasse
|
|
|
+from logger import *
|
|
|
+
|
|
|
# Unsere Klassen für die Steuerung des Boards und des Modems
|
|
|
from tcall import *
|
|
|
from SIM import *
|
|
|
|
|
|
+ADCTim=Timer(3)
|
|
|
+ADCObj=None
|
|
|
+AlarmTimer=0
|
|
|
+AlarmSMS=False
|
|
|
+
|
|
|
# als erstes nach dem starten lesen wir die die config
|
|
|
with open('config.json','r') as cf:
|
|
|
try:
|
|
|
config = ujson.load(cf)
|
|
|
+
|
|
|
except:
|
|
|
sys.stderr.write("Fehler beim lesen der Config. Bitte die Datei config.json pruefen")
|
|
|
sys.exit(1)
|
|
|
|
|
|
+log=logger(debugIn = config['debug'],
|
|
|
+ verboseIn = config['verbose'],
|
|
|
+ errorIn = config['error'])
|
|
|
|
|
|
# tcall Objekt initialisieren und Maschinen LED einschalten
|
|
|
tcall = tcall(config['tcall']['MDM_PWR_PIN'],
|
|
|
config['tcall']['MDM_PWRKEY_PIN'],
|
|
|
config['tcall']['MDM_RST_PIN'],
|
|
|
- config['tcall']['MLED_PIN'])
|
|
|
+ config['tcall']['MLED_PIN'],
|
|
|
+ logger=log)
|
|
|
|
|
|
tcall.mledblink(2000)
|
|
|
|
|
|
# Modem einschalten
|
|
|
tcall.mdmpwrsw()
|
|
|
|
|
|
-# todo: SIM Objekt anlegen und starten
|
|
|
+# SIM Objekt anlegen und starten
|
|
|
sim = SIM(baud = 115200,
|
|
|
pintx = config['SIM']['MDM_TX_PIN'],
|
|
|
pinrx = config['SIM']['MDM_RX_PIN'],
|
|
|
simpin = config['SIM']['SIMPIN'],
|
|
|
- debug = config['debug'])
|
|
|
+ logger=log
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# Ab hier sollten wir nun beginnen, die Messwerte der Alarmanlage abzufragen
|
|
|
+
|
|
|
+
|
|
|
+# Die Callback Funktion die vom Timer ausgeführt wird
|
|
|
+# dies ist eine Wrapper Funktion die die eigentliche Funktion aufruft
|
|
|
+def callbackADC(timer=None):
|
|
|
+ global ADCObj
|
|
|
+ global AlarmTimer
|
|
|
+ global AlarmSMS
|
|
|
+
|
|
|
|
|
|
-# todo: Abfrage Callback erstellen
|
|
|
+ messwert=ADCObj.read_u16()
|
|
|
+
|
|
|
+ # wir prüfen, ob der AlarmTimer schon überschritten wurde
|
|
|
+
|
|
|
+ ## Messwerte der Honeywell HS300S Alarmdauer im Mittel (Sekunden)
|
|
|
+ ### Panikalarm 148s
|
|
|
+ ### Alarm 153,6s
|
|
|
+ ### Scharfschaltung -
|
|
|
+ ### Freischaltung -
|
|
|
+ ### Voralarm -
|
|
|
+
|
|
|
+
|
|
|
+ # todo: die Alarm-wartezeit muss ins Config-Objekt ... das brauchen wir hier nicht
|
|
|
+ if AlarmTimer > config['alarm']['dauer']:
|
|
|
+ log.verbose('Alarmueberwachung: Alarm erkannt')
|
|
|
+
|
|
|
+ ## wenn noch keine SMS gesendet wurde (StateMaschine SMS), dann schicken wir eine
|
|
|
+ if not AlarmSMS:
|
|
|
+ log.verbose('Alarmueberwachung: Alarmierung per SMS an ' + str(config['SIM']['ANR']))
|
|
|
+ ## SMS mit Configwerten versenden -> siehe config.json
|
|
|
+ sim.sendSMS(config['SIM']['ANR'], config['SIM']['ATXT'])
|
|
|
+ AlarmSMS = True
|
|
|
+
|
|
|
+ # hier kommt der Messwertzähler
|
|
|
+ ## wenn ein sehr hoher (nahe am Maximum) gemessen wird, dann zählen wir die Sekunden
|
|
|
+ if messwert > 65500:
|
|
|
+ log.debug('Alarmueberwachung: Alarmdauer ' + str(AlarmTimer))
|
|
|
+ AlarmTimer += 1
|
|
|
+
|
|
|
+ ## wenn ein niedriger Wert gemessen wird, dann gibt es wohl keinen Alarmton, dann gehen wir runter und setzen den
|
|
|
+ ## Timer und SNS Versand zurück
|
|
|
+ elif messwert < 65500:
|
|
|
+ log.debug('Alarmueberwachung: AlarmTimer zurueckgesetzt, AlarmSMS zurueckgesetzt')
|
|
|
+ AlarmTimer = 0
|
|
|
+ AlarmSMS = False
|
|
|
+
|
|
|
+# hier registrieren wir die Abfrage am ADC
|
|
|
+log.debug("Alarmueberwachung: ADC Anbindung an Pin " + str(config['alarm']['pin1']))
|
|
|
+ADCObj=ADC(Pin(config['alarm']['pin1']),atten=ADC.ATTN_11DB)
|
|
|
+
|
|
|
+# hier starten wir den notwendigen Timer zur Überwachung
|
|
|
+log.debug("Alarmueberwachung: Timer gestartet")
|
|
|
+ADCTim.init(period=1000, callback=callbackADC)
|
|
|
+
|
|
|
+# todo: Implementierung der ADC Abfragen
|
|
|
+# #todo: Abfrage Callback erstellen
|
|
|
# INPUT Callback Funktion
|
|
|
# GPIO4
|
|
|
#def INcheckCallback(t):
|
|
|
@@ -50,10 +128,12 @@ sim = SIM(baud = 115200,
|
|
|
#print("SIM is on TTY: " + str(sim.getTTY()))
|
|
|
#sim.sendSMS(znr, atxt)
|
|
|
|
|
|
-# todo: Abfrage Timer starten
|
|
|
+#adc=ADC(Pin(34),atten=ADC.ATTN_11DB)
|
|
|
+
|
|
|
+
|
|
|
+# #todo: Abfrage Timer starten
|
|
|
# das ist der Timer zur Tasterabfrage (in Klammern die ID)
|
|
|
#tim = Timer(1)
|
|
|
|
|
|
# periodic with 100ms period
|
|
|
#tim.init(period=500, callback=INcheckCallback)
|
|
|
-
|