Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Edomi und Synology oder Hikvision (2042) .. wer hat da was ?
vento66 .. oh.. das hat sich jetzt überschnitten...
Cool danke.. meine Version triggert auf E1... in E6 trag ich vorab die ID ein.. hmm.. deine Idee mit dem Trigger auf dem Event ist
aber eigentlich auch sehr schlau !!
werd das mal umbauen..
Gruß Martin
Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.
Simone
ich sehe gerade Du hast den Code von Nils. Mir hat er nicht geantwortet, wahrscheinlich ist er genervt wenn mehrere den Code wollen.
Von der Kommunikation (API) her bin ich durch - kein Problem. Die Push Geschichte blicke ich noch nicht ganz.
Kannst Du ihn mir mal senden ?
Bedenke aber, die Alarme der Hikvision können niemals einen Bewegungsmelder wie den Steinel ersetzen. Von daher bin ich eigentlich schon wieder auf dem Rückzug...
Das muesste eigentlich der Code sein von dem alle reden
Code:
[LIST][*][*] class knxuf_12296_hikvison_alerts(object):
BASE="/ISAPI/Event/notification/alertStream"
def __init__(self,local):
import re
self.logik = local.get("pItem")
self.MC = self.logik.MC
EN = local.get("EN")
self.outputs = local.get("AN")
self._thread = None
self.host = EN[1]
self.user = EN[2]
self.password = EN[3]
self.deadtime = EN[4]
self._regex = re.compile("<eventType>(?P<type>.*?)</eventType>")
self.motion = 0
self.linecrossing = 0
self.intrusion = 0
self.url = "https://{0}{1}".format(EN[1],self.BASE)
self.run()
def run(self):
import threading
_cthread = threading.Thread(target=self._connect,name='hikvision_connect_{0}'.format(self.host))
_cthread.setDaemon(True)
_cthread.start()
def _connect(self):
import urllib2
import socket
import ssl
import time
self.connect_error = 0
_connect_wait_time = { 0:0, 1:15, 2:30, 3:45, 4:30, 5:30, 6:60, 7:60, 8:120, 9:120 }
p_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
p_mgr.add_password(None,self.url,self.user,self.password)
auth = urllib2.HTTPBasicAuthHandler(p_mgr)
if hasattr(ssl,"create_default_context"):
_ssl_context = ssl.create_default_context()
_ssl_context.check_hostname = False
_ssl_context.verify_mode = ssl.CERT_NONE
opener = urllib2.build_opener(urllib2.HTTPSHandler(context=_ssl_context),auth)
else:
opener = urllib2.build_opener(auth)
urllib2.install_opener(opener)
while True:
try:
self._read(opener.open(self.url,timeout=1))
except (urllib2.URLError,socket.timeout,ssl.SSLError):
pass
except:
self.MC.Debug.setErr(__import__('sys').exc_info(),"")
self.send_to_output(4,0)
self.connect_error += 1
time.sleep(_connect_wait_time.get(self.connect_error,360))
def _read(self,sockfile):
self.send_to_output(4,1)
_connectmsg = True
self.connect_error = 0
_msg = ""
while True:
_line = sockfile.readline()
if _line.startswith("<EventNotificationAlert"):
_msg = ""
_msg += _line
if _line.startswith("</EventNotificationAlert>"):
#if _msg.find("videoloss")== -1:
self.parse(_msg)
_msg = ""
def parse(self,msg):
_match = self._regex.search(msg)
if _match:
_type = _match.group("type")
if _type == "VMD":
self.set_output(1,1)
elif _type == "linedetection":
self.set_output(2,1)
elif _type == "fielddetection":
self.set_output(3,1)
def set_output(self,output,value):
if value == 1:
if self.outputs[output] != value:
self.send_to_output(output,value)
self.set_timer(output,self.deadtime)
self.outputs[output] = value
return value
## send_out: Wert auf einen Ausgang senden
## Parameter out: Ausgang auf den gesendet werden soll analog zu AN[x]
## Parameter value: Wert der an den Ausgang gesendet werden soll
def send_to_output(self,out,value):
import time
out -= 1 ## Intern starten die Ausgänge bei 0 und nicht bei 1
## Sendeintervall wird beachtet
if self.logik.SendIntervall == 0 or time.time() >= self.logik.Ausgang[out][0]:
## Wert an allen iKOs an den Ausgängen setzen
for iko in self.logik.Ausgang[out][1]:
self.logik.MC.TagList.setWert(FLAG_EIB_LOGIK,iko, value)
## Wenn value nicht 0 / "" / None etc ist dann die Befehle ausführen
if value:
for cmd in self.logik.Ausgang[out][2]:
cmd.execBefehl()
## Direkte Verbindungen und Connectoren
for con in self.logik.Ausgang[out][3]:
self.logik.MC.LogikList.ConnectList.append(con + [ value ])
## Wenn Sendeintervall gesetzt, nächste mögliche Ausführungszeit setzen
if self.logik.SendIntervall > 0:
self.logik.Ausgang[out][0] = time.time() + self.logik.SendIntervall
## Ausgangswert auch in der Logik setzen
self.logik.OutWert[out] = value
## set_timer: Einen Timer der schon definiert wurde in der Logik setzen
## Parameter offset: Timernummer analog zu OC[x]
## Parameter seconds: Sekunden bis zur Ausführung des Timers
## Parameter value (optional): Wert der ON[x] enthalten soll
def set_timer(self,offset,seconds,value=None):
import time
##
offset -= 1
_nextstart = time.time() + seconds
self.logik.OutOfset[offset][0] = _nextstart
self.logik.OutOfset[offset][1] = value
_min = min(filter(lambda x: x[0] > 0,self.logik.OutOfset) + [_nextstart])
if _min > 0 and self.logik.NextStart <> _min:
self.logik.NextStart = _min
self.logik.MC.ZyklusTimer.addTimerList(self.logik,self.logik.NextStart)[*][/LIST]
Gracie, Michael.
Im Moment arbeite ich noch an den "Feinheiten" des Ekeys und dann schau ich mir das mal an.
Glücklicherweise habe ich den HS nie erlebt, wenn ich das so sehe....
Dejavu -> smarthome.py
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar