| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- # -*- coding: utf-8 -*-
- # Alarmgeber MainCode
- # 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
- 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'],
- logger=log)
- tcall.mledblink(2000)
- # Modem einschalten
- tcall.mdmpwrsw()
- # 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'],
- 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
- 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):
- # p4 = Pin(4, Pin.IN, Pin.PULL_UP) # create input pin on GPIO4 aber Bitte PullUP, weil das hier ja ein Taster ist
- #print("Taster = " + str(p4.value())) # get value, 0 or 1
- #print("SIM is on TTY: " + str(sim.getTTY()))
- #sim.sendSMS(znr, atxt)
- #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)
|