Hallo zusammen,
zunächst mal vielen Dank, dass es mit smarthomeNG weitergeht. Und es gibt schon echt ein paar coole Neuerungen. Nun bin ich auch auf das neue smarthomeNG umgezogen und habe meine Logiken natürlich vom bisherigen kopiert. Bei einer Logik für meine Kameras erhalte ich jedoch immer ein "Connection polling failed: [Errno 4] Unterbrechung während des Betriebssystemaufrufs" und kann dies nicht deuten. Vielleicht habt ihr eine Idee. Leider ist es natürlich eines meiner umfangreicheren Logiken.
Ich kann auch sagen, dass die Logik eigentlich genau das macht, was sie soll. Lediglich die Fehlermeldung stört mich.
Auszug aus dem Log
Hier ist die leider etwas längere Logik. Es wird von einem Bewegungsmelder getriggert und ruft sich dann selbst mehrfach über den Sheduler auf und macht Bilder von der zugehörigen Kamera in gewissen Abständen. Diese werden auch korrekt abgelegt. Lediglich die oben gezeigte Fehlermeldung irritiert mich.
Logic
Aus der Logik aufgerufenes Skript
Ich bin für jede Idee dankbar.
zunächst mal vielen Dank, dass es mit smarthomeNG weitergeht. Und es gibt schon echt ein paar coole Neuerungen. Nun bin ich auch auf das neue smarthomeNG umgezogen und habe meine Logiken natürlich vom bisherigen kopiert. Bei einer Logik für meine Kameras erhalte ich jedoch immer ein "Connection polling failed: [Errno 4] Unterbrechung während des Betriebssystemaufrufs" und kann dies nicht deuten. Vielleicht habt ihr eine Idee. Leider ist es natürlich eines meiner umfangreicheren Logiken.
Ich kann auch sagen, dass die Logik eigentlich genau das macht, was sie soll. Lediglich die Fehlermeldung stört mich.
Auszug aus dem Log
Code:
2016-09-16 21:41:28 DEBUG Rxx_BWM_Snapshots Triggering Rxx_BWM_Snapshots - by: Logic source: None dest: None value: /var/www/html/smartVISU/pages/loeser/pic at: 2016-09-16 21:41:28.550868+02:00 2016-09-16 21:41:28 DEBUG Rxx_BWM_Snapshots Triggering Rxx_BWM_Snapshots - by: Logic source: None dest: None value: /var/www/html/smartVISU/pages/loeser/pic at: 2016-09-16 21:41:30.551047+02:00 2016-09-16 21:41:28 DEBUG Rxx_BWM_Snapshots Triggering Rxx_BWM_Snapshots - by: Logic source: None dest: None value: /var/www/html/smartVISU/pages/loeser/pic at: 2016-09-16 21:41:32.551165+02:00 2016-09-16 21:41:28 DEBUG Rxx_BWM_Snapshots Triggering Rxx_BWM_Snapshots - by: Logic source: None dest: None value: /var/www/html/smartVISU/pages/loeser/pic at: 2016-09-16 21:41:34.551273+02:00 2016-09-16 21:41:28 DEBUG Rxx_BWM_Snapshots Triggering Rxx_BWM_Snapshots - by: Logic source: None dest: None value: /var/www/html/smartVISU/pages/loeser/pic at: 2016-09-16 21:41:36.551377+02:00 2016-09-16 21:41:28 DEBUG Rxx_BWM_Snapshots Triggering Rxx_BWM_Snapshots - by: Logic source: None dest: None value: /var/www/html/smartVISU/pages/loeser/pic at: 2016-09-16 21:41:38.551479+02:00 2016-09-16 21:41:28 DEBUG Rxx_BWM_Snapshots Triggering Rxx_BWM_Snapshots - by: Logic source: None dest: None value: /var/www/html/smartVISU/pages/loeser/pic at: 2016-09-16 21:41:48.551589+02:00 [COLOR=#FF0000]2016-09-16 21:41:28 ERROR Main Connection polling failed: [Errno 4] Unterbrechung während des Betriebssystemaufrufs Traceback (most recent call last): File "/usr/local/smarthome/bin/smarthome.py", line 331, in start self.connections.poll() File "/usr/local/smarthome/lib/connection.py", line 101, in poll for fileno, event in self._epoll.poll(timeout=1): InterruptedError: [Errno 4] Unterbrechung während des Betriebssystemaufrufs[/COLOR] 2016-09-16 21:41:30 DEBUG Main Triggering Rxx_BWM_Light - by: Item source: R93.BWM dest: None value: False 2016-09-16 21:41:30 DEBUG Main Triggering Rxx_BWM_Snapshots - by: Item source: R93.BWM dest: None value: False 2016-09-16 21:41:30 WARNING Rxx_BWM_Light Rxx_BWM_Light : Skript wurde aufgerufen aber ist gesperrt. Trigger: {'value': False, 'dest': None, 'source': 'R93.BWM', 'by': 'Item'} [COLOR=#FF0000]2016-09-16 21:41:30 ERROR Main Connection polling failed: [Errno 4] Unterbrechung während des Betriebssystemaufrufs Traceback (most recent call last): File "/usr/local/smarthome/bin/smarthome.py", line 331, in start self.connections.poll() File "/usr/local/smarthome/lib/connection.py", line 101, in poll for fileno, event in self._epoll.poll(timeout=1): InterruptedError: [Errno 4] Unterbrechung während des Betriebssystemaufrufs 2016-09-16 21:41:32 ERROR Main Connection polling failed: [Errno 4] Unterbrechung während des Betriebssystemaufrufs Traceback (most recent call last): File "/usr/local/smarthome/bin/smarthome.py", line 331, in start self.connections.poll() File "/usr/local/smarthome/lib/connection.py", line 101, in poll for fileno, event in self._epoll.poll(timeout=1): InterruptedError: [Errno 4] Unterbrechung während des Betriebssystemaufrufs 2016-09-16 21:41:34 ERROR Main Connection polling failed: [Errno 4] Unterbrechung während des Betriebssystemaufrufs Traceback (most recent call last): File "/usr/local/smarthome/bin/smarthome.py", line 331, in start self.connections.poll() File "/usr/local/smarthome/lib/connection.py", line 101, in poll for fileno, event in self._epoll.poll(timeout=1): InterruptedError: [Errno 4] Unterbrechung während des Betriebssystemaufrufs 2016-09-16 21:41:36 ERROR Main Connection polling failed: [Errno 4] Unterbrechung während des Betriebssystemaufrufs Traceback (most recent call last): File "/usr/local/smarthome/bin/smarthome.py", line 331, in start self.connections.poll() File "/usr/local/smarthome/lib/connection.py", line 101, in poll for fileno, event in self._epoll.poll(timeout=1): InterruptedError: [Errno 4] Unterbrechung während des Betriebssystemaufrufs 2016-09-16 21:41:38 ERROR Main Connection polling failed: [Errno 4] Unterbrechung während des Betriebssystemaufrufs Traceback (most recent call last): File "/usr/local/smarthome/bin/smarthome.py", line 331, in start self.connections.poll() File "/usr/local/smarthome/lib/connection.py", line 101, in poll for fileno, event in self._epoll.poll(timeout=1): InterruptedError: [Errno 4] Unterbrechung während des Betriebssystemaufrufs[/COLOR]
Logic
Code:
[COLOR=#008000]#!/usr/bin/env python # -*- coding: iso-8859-1 -*- # Imports # Maybe needs to install "apt-get install python-requests"[/COLOR] import time import os [COLOR=#008000]# ------------------------------------------------------------------------------------------------ # Beschreibung # Dieses Skript prüft den BWM, erstellt Bilder und legt diese ab # ------------------------------------------------------------------------------------------------ # Logik aktiv?[/COLOR] if sh.ZENTRAL.LOGIKEN.BWM_SNAPSHOTS(): [COLOR=#008000]# Für Debug Zwecke wird angezeigt das das Skript gestartet wurde[/COLOR] logger.debug('{} : START : trigger={}'.format(logic.name, trigger)) [COLOR=#008000]# Ermitteln, welches Item die Aktion ausgelöst hat[/COLOR] itemname = '' itemname = trigger['source'] [COLOR=#008000] # Sofern das Skript durch sich selbst aufgerufen wurde, enthält der # value die Zieldatei (Pfad und Dateiname). Anhand dieser werden die # Bilder von der Kamera asgewertet. # Aufbau der Zieldatei (des triggervalues): # /var/www/html/smartVISU/pages/loeser/picturegallery/20161231/232559_00s_R93.jpg[/COLOR] triggervalue = str(trigger['value']) [COLOR=#008000]# SELBSTAUFRUF? # Prüfung ob das Skript durch sich selbst aufgerufen wurde # Prüfung auf ein manuell gesetzten Value[/COLOR] if triggervalue[-4:] == '.jpg': if triggervalue[-7:] == 'R91.jpg': [COLOR=#008000] # Haustuerkamera[/COLOR] camname = 'R91' url2retrieve = 'http://192.168.123.249/Streaming/channels/2/picture' username = 'abc' userpass = 'xyz' authoption = '--digest' ispyid=13 elif triggervalue[-7:] == 'R93.jpg': [COLOR=#008000] # Gartenkamera[/COLOR] camname = 'R93' url2retrieve = 'http://192.168.123.248/tmpfs/snap.jpg' username = 'cde' userpass = 'efg' authoption = '--anyauth' ispyid=14 [COLOR=#008000]# ISPY Id aufheben, wenn es sich nicht um das 00s Bild handelt[/COLOR] midstr_triggervalue = triggervalue[-11:] midstr_triggervalue = midstr_triggervalue[:3] if midstr_triggervalue == '00s': ispyid=-1 [COLOR=#008000]# Bild speichern # Mit dem echo wird das Passwort geschrieben und mit der Option # -S anschließend beim sudo Befehl eingelesen. So muss es nicht # explizit eingegeben werden, was in dem Skript nicht möglich ist.[/COLOR] os.system("echo <geheim> | sudo -S/usr/local/smarthome/logics/cam.sh " + triggervalue + " " + url2retrieve + " " + username + " " + userpass + " " + authoption + " " + str(ispyid)) if midstr_triggervalue == '20s': [COLOR=#008000]# Merker, dass gerade das Grabbing aktiv ist, wieder zurücksetzen[/COLOR] camitem = sh.return_item(camname + '.KAMERA_GRABBING_IN_PROGRESS') camitem('off') [COLOR=#008000]# Benutzer und Gruppe rekursiv anpassen # Für das Verzeichnis und alle unterlagerten Dateien. Das ist dann zwar doppelt und dreifach aber dafür funktionierts. # Mit dem Benutzer www-data und der Gruppe www-data kann die PHP Seite "picturegallery" anschließend die Dateien und Verzeichnisse löschen.[/COLOR] os.system("echo <geheim> | sudo -S chown -R www-data:www-data " + "/var/www/html/smartVISU/pages/loeser/picturegallery/" + time.strftime('%Y%m%d')) [COLOR=#008000] # AUFRUF DURCH BWM (nur wenn kein Selbstaufruf stattgefunden hat)?[/COLOR] elif not itemname == '': [COLOR=#008000] # Item speichern[/COLOR] item = sh.return_item(itemname) [COLOR=#008000] # Anhand des Itemnamens die Parameter festlegen[/COLOR] if itemname == 'R91.BWM': camname = 'R91' messagetext = 'Bewegung vor der Haustür erkannt.' mailheaderprefix = 'HOME Haustür' delaytime0 = 0 [COLOR=#008000]# Bild 0s nach Aktivierung (muss 0 sein, damit im Dateinamen 00s steht, relevant für die ISPY Id)[/COLOR] delaytime1 = 3 [COLOR=#008000] # Bild 3s nach Aktivierung[/COLOR] delaytime2 = 6 [COLOR=#008000]# Bild 6s nach Aktivierung[/COLOR] delaytime3 = 9 [COLOR=#008000]# Bild 9s nach Aktivierung[/COLOR] delaytime4 = 12 [COLOR=#008000]# Bild 12s nach Aktivierung[/COLOR] delaytime5 = 15 [COLOR=#008000]# Bild 15s nach Aktivierung[/COLOR] delaytime6 = 20 [COLOR=#008000] # Bild 20s nach Aktivierung (muss in Summe 20 ergeben, damit im Dateinamen 20s steht, relevant für Abschluss der Aufnahme)[/COLOR] elif itemname == 'R93.BWM': camname = 'R93' messagetext = 'Bewegung im Garten erkannt.' mailheaderprefix = 'HOME Garten' delaytime0 = 0 [COLOR=#008000]# Bild 0s nach Aktivierung (muss 0 sein, damit im Dateinamen 00s steht, relevant für die ISPY Id)[/COLOR] delaytime1 = 2[COLOR=#008000] # Bild 2s nach Aktivierung[/COLOR] delaytime2 = 4 [COLOR=#008000]# Bild 4s nach Aktivierung[/COLOR] delaytime3 = 6 [COLOR=#008000]# Bild 6s nach Aktivierung[/COLOR] delaytime4 = 8 [COLOR=#008000]# Bild 8s nach Aktivierung[/COLOR] delaytime5 = 10 [COLOR=#008000]# Bild 10s nach Aktivierung[/COLOR] delaytime6 = 20 [COLOR=#008000] # Bild 20s nach Aktivierung (muss in Summe 20 ergeben, damit im Dateinamen 20s steht, relevant für Abschluss der Aufnahme)[/COLOR] if item(): [COLOR=#008000] # Nur wenn der BWM True meldet, werden Bilder gemacht # Beim Wechsel von 1 > 0 erfolgt nichts # Merker, dass das Grabbing gerde aktiv ist # Wird nach dem letzten Grabbing der Kamera zurückgesetzt[/COLOR] camitem = sh.return_item(camname + '.KAMERA_GRABBING_IN_PROGRESS') [COLOR=#008000] # Grabbing aktiv?[/COLOR] if not camitem(): [COLOR=#008000]# Grabbing aktuell nicht aktiv -> Erster Durchlauf # Merker setzen[/COLOR] camitem('on') [COLOR=#008000] # Zeit ermitten[/COLOR] dateandtimestring = "" + time.strftime('%d.%m.%Y %H:%M:%S') dateandtimestringfile = "" + time.strftime('%Y%m%d_%H%M%S') timestring = "" + time.strftime('%H%M%S') [COLOR=#008000]# Speicherort preparieren # Erstelle das Verzeichnis[/COLOR] try: os.makedirs('/var/www/html/smartVISU/pages/loeser/picturegallery/' + time.strftime('%Y%m%d')) except OSError: pass [COLOR=#008000] # Aufbau der Zieldatei: # /var/www/html/smartVISU/pages/loeser/picturegallery/20161231/232559_00s_R93.jpg # Speichern des gesamten Dateinamens mit Verzeichnisbaum[/COLOR] timetext = '' + str(delaytime0) + 's' if (len(timetext) < 3): timetext = '0' + timetext out_location_A = '/var/www/html/smartVISU/pages/loeser/picturegallery/' + time.strftime('%Y%m%d') + '/' + timestring + '_' + timetext + '_' + camname + '.jpg' timetext = '' + str(delaytime1) + 's' if (len(timetext) < 3): timetext = '0' + timetext out_location_B = '/var/www/html/smartVISU/pages/loeser/picturegallery/' + time.strftime('%Y%m%d') + '/' + timestring + '_' + timetext + '_' + camname + '.jpg' timetext = '' + str(delaytime2) + 's' if (len(timetext) < 3): timetext = '0' + timetext out_location_C = '/var/www/html/smartVISU/pages/loeser/picturegallery/' + time.strftime('%Y%m%d') + '/' + timestring + '_' + timetext + '_' + camname + '.jpg' timetext = '' + str(delaytime3) + 's' if (len(timetext) < 3): timetext = '0' + timetext out_location_D = '/var/www/html/smartVISU/pages/loeser/picturegallery/' + time.strftime('%Y%m%d') + '/' + timestring + '_' + timetext + '_' + camname + '.jpg' timetext = '' + str(delaytime4) + 's' if (len(timetext) < 3): timetext = '0' + timetext out_location_E = '/var/www/html/smartVISU/pages/loeser/picturegallery/' + time.strftime('%Y%m%d') + '/' + timestring + '_' + timetext + '_' + camname + '.jpg' timetext = '' + str(delaytime5) + 's' if (len(timetext) < 3): timetext = '0' + timetext out_location_F = '/var/www/html/smartVISU/pages/loeser/picturegallery/' + time.strftime('%Y%m%d') + '/' + timestring + '_' + timetext + '_' + camname + '.jpg' timetext = '' + str(delaytime6) + 's' if (len(timetext) < 3): timetext = '0' + timetext out_location_G = '/var/www/html/smartVISU/pages/loeser/picturegallery/' + time.strftime('%Y%m%d') + '/' + timestring + '_' + timetext + '_' + camname + '.jpg' [COLOR=#008000]# Skript erneut mit den verschiedenen Verzögerungen aufrufen. # Es wird mit einem definierten Triggervalue (hier: Zieldatei) aufgerufen, damit darauf reagiert werden kann.[/COLOR] logic.trigger(dt=sh.now() + datetime.timedelta(seconds=delaytime0), value=out_location_A) logic.trigger(dt=sh.now() + datetime.timedelta(seconds=delaytime1), value=out_location_B) logic.trigger(dt=sh.now() + datetime.timedelta(seconds=delaytime2), value=out_location_C) logic.trigger(dt=sh.now() + datetime.timedelta(seconds=delaytime3), value=out_location_D) logic.trigger(dt=sh.now() + datetime.timedelta(seconds=delaytime4), value=out_location_E) logic.trigger(dt=sh.now() + datetime.timedelta(seconds=delaytime5), value=out_location_F) logic.trigger(dt=sh.now() + datetime.timedelta(seconds=delaytime6), value=out_location_G) else: [COLOR=#008000] # Info im Meldesystem[/COLOR] messagetext = '{} : Skript wurde ohne Trigger Item aufgerufen. Trigger:{}'.format(logic.name, trigger) logger.error(messagetext) [COLOR=#008000] # Für Debug Zwecke wird angezeigt das das Skript beendet wurde # So kann eingesehen werden, welche Ausgaben zwischenzeitlich ausgegeben wurden.[/COLOR] logger.debug('{} : ENDE'.format(logic.name)) else: [COLOR=#008000] # Melden, wenn die Funktion aktuell gesperrt ist, jedoch die Ausführung versucht wurde.[/COLOR] messagetext = '{} : Skript wurde aufgerufen aber ist gesperrt. Trigger: {}'.format(logic.name, trigger) logger.warn(messagetext)
Aus der Logik aufgerufenes Skript
Code:
[COLOR=#008000]#!/bin/bash # Skript, welches das Bild tatsächlich von der Kamera ausliest. # Die Kameras verfügen über unterschiedliche Authentifizierungs Mechanismen. # Bis zur Version 1.13.4 von WGET funktionierte das noch einwandfrei, ab # der Version 1.15 konnte mit der Kamera vor der Haustüre (Trendnet) keine # Authentifizerung mehr durchgeführt werden. Daher wurde auf CURL gewechselt. # Hierbei kann zur not die Authentifizierungsmethode mitgegeben werden. # # Parameter # %1 - outfile (example: "/var/www/html/smartvisu/pages/loeser/picturegallery/20160122/20160122_235959_A_R91.jpg') # %2 - source (example: "http://192.168.123.249/Streaming/channels/1/picture") # %3 - username (example: "user") # %4 - userpass (example: "pass") # %5 - authentification option (example: "", or "--digest") # Werte die übergeben werden von logic_Rxx_BWM.py[/COLOR] outfile=$1 source=$2 username=$3 userpass=$4 authoption=$5 ispyid=$6 [COLOR=#008000]# Grab the screen cap # Hier wird nun mit dem curl Befehl gearbeitet # wget --user=$username --password=$userpass --output-document=$outfile $source # curl --user $username:$userpass $source $authoption -o $outfile[/COLOR] curl --user $username:$userpass $source $authoption -o $outfile #>> /usr/local/smarthome/var/log/smarthome.log 2>&1 chmod a+rwx $outfile [COLOR=#008000]# Starte die Aufzeichnung ebenfall bei ISPY # ID=13 --> CAM01, Haustür # ID=14 --> CAM02, Garten[/COLOR] if [ $ispyid -gt -1 ]; then curl http://<interne IP>:8080/executecmd?id=$ispyid fi
Kommentar