forked from ToninoTarsi/swpi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIPCam.py
142 lines (120 loc) · 8.29 KB
/
IPCam.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
###########################################################################
# Sint Wind PI
# Copyright 2012 by Tonino Tarsi <[email protected]>
#
# Please refer to the LICENSE file for conditions
# Visit http://www.vololiberomontecucco.it
##########################################################################
# IPCam.py
# moves the ipcams to the wind or upwind direction and capture snapshot
# by Vittorio Godio [email protected]
##########################################################################
"""Classes and methods for handling IPCam commands."""
import sqlite3
from PIL import Image, ImageFont, ImageDraw
import time,datetime
import os
from TTLib import *
import re
import subprocess
import config
import humod
import RPi.GPIO as GPIO
import threading
import sun
import math
import globalvars
class IPCam(object):
"""Class defining generic IPcams."""
def __init__(self, deviceNumber,cfg):
if(deviceNumber == 1):
self.device = cfg.IPCamIP1
self.captureresolution = cfg.webcamdevice1captureresolution
self.finalresolution = cfg.webcamdevice1finalresolution
self.caprureresolutionX = cfg.webcamdevice1captureresolutionX
self.caprureresolutionY = cfg.webcamdevice1captureresolutionY
self.finalresolutionX = cfg.webcamdevice1finalresolutionX
self.finalresolutionY = cfg.webcamdevice1finalresolutionY
elif(deviceNumber == 2):
self.device = cfg.IPCamIP2
self.captureresolution = cfg.webcamdevice2captureresolution
self.finalresolution = cfg.webcamdevice2finalresolution
self.caprureresolutionX = cfg.webcamdevice2captureresolutionX
self.caprureresolutionY = cfg.webcamdevice2captureresolutionY
self.finalresolutionX = cfg.webcamdevice2finalresolutionX
self.finalresolutionY = cfg.webcamdevice2finalresolutionY
else:
log( "ERROR Only 2 IPCams are allowed in this version of the software" )
self.cfg = cfg
def IPCamCapture(self,filename,deviceNumber):
try:
#log("Posizione IPcam " + globalvars.meteo_data.wind_dir_code)
if(self.cfg.IPCamCfg.upper() != "NONE"):
IP_IPCam1 = "http://" + self.cfg.IPCamIP1
IP_IPCam2 = "http://" + self.cfg.IPCamIP2
posCommand = ""
#log("PASSAGGIO " + str(deviceNumber))
if(self.cfg.IPCamCfg.upper() == "IPCAM1" or self.cfg.IPCamCfg.upper() == "IPCAM2"):
if(globalvars.meteo_data.wind_dir_code == "N" and self.cfg.IPCamPosN != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 +" "+ IP_IPCam1 + self.cfg.IPCamPosN
if((globalvars.meteo_data.wind_dir_code) == "NE" and self.cfg.IPCamPosNE != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 +" "+ IP_IPCam1 + self.cfg.IPCamPosNE
if(globalvars.meteo_data.wind_dir_code == "E" and self.cfg.IPCamPosE != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 +" "+ IP_IPCam1 + self.cfg.IPCamPosE
if(globalvars.meteo_data.wind_dir_code == "SE" and self.cfg.IPCamPosSE != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 +" "+ IP_IPCam1 + self.cfg.IPCamPosSE
if(globalvars.meteo_data.wind_dir_code == "S" and self.cfg.IPCamPosS != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 + " " + IP_IPCam1 + self.cfg.IPCamPosS
if(globalvars.meteo_data.wind_dir_code == "SW" and self.cfg.IPCamPosSW != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 + " " + IP_IPCam1 + self.cfg.IPCamPosSW
if(globalvars.meteo_data.wind_dir_code == "W" and self.cfg.IPCamPosW != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 + " " + IP_IPCam1 + self.cfg.IPCamPosW
if(globalvars.meteo_data.wind_dir_code == "NW" and self.cfg.IPCamPosNW != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 + " " + IP_IPCam1 + self.cfg.IPCamPosNW
else: #(self.cfg.IPCamCfg.upper() == "COMBINED"):
if(globalvars.meteo_data.wind_dir_code == "N" and self.cfg.IPCamPosN != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 +" "+ IP_IPCam1 + self.cfg.IPCamPosN
if((globalvars.meteo_data.wind_dir_code) == "NE" and self.cfg.IPCamPosNE != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 +" "+ IP_IPCam1 + self.cfg.IPCamPosNE
if(globalvars.meteo_data.wind_dir_code == "E" and self.cfg.IPCamPosE != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 +" "+ IP_IPCam1 + self.cfg.IPCamPosE
if(globalvars.meteo_data.wind_dir_code == "SE" and self.cfg.IPCamPosSE != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS1 + " --http-passwd=" + self.cfg.IPCamPW1 +" "+ IP_IPCam1 + self.cfg.IPCamPosSE
if(globalvars.meteo_data.wind_dir_code == "S" and self.cfg.IPCamPosS != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS2 + " --http-passwd=" + self.cfg.IPCamPW2 + " " + IP_IPCam2 + self.cfg.IPCamPosS
if(globalvars.meteo_data.wind_dir_code == "SW" and self.cfg.IPCamPosSW != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS2 + " --http-passwd=" + self.cfg.IPCamPW2 + " " + IP_IPCam2 + self.cfg.IPCamPosSW
if(globalvars.meteo_data.wind_dir_code == "W" and self.cfg.IPCamPosW != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS2 + " --http-passwd=" + self.cfg.IPCamPW2 + " " + IP_IPCam2 + self.cfg.IPCamPosW
if(globalvars.meteo_data.wind_dir_code == "NW" and self.cfg.IPCamPosNW != "" and self.cfg.IPCamPosN.upper() != "NONE"):
posCommand = "sudo wget -q --output-document=webcamtmp --http-user=" + self.cfg.IPCamUS2 + " --http-passwd=" + self.cfg.IPCamPW2 + " " + IP_IPCam2 + self.cfg.IPCamPosNW
#log(posCommand)
#Posiziona IPCam
#log("Posiziono CAM " + posCommand)
if ( posCommand != "" ):
os.system(posCommand)
time.sleep(self.cfg.IPCamZZZ)
if(os.path.isfile("webcamtmp")):
os.remove("webcamtmp")
#Snapshot
if(deviceNumber == 1):
snapCommand ="sudo wget -O " + filename + " --http-user=" + self.cfg.IPCamUS1 + " --http-passwd="+ self.cfg.IPCamPW1 + " " + IP_IPCam1 + self.cfg.IPCamSN1
log( "Getting images with command : " + snapCommand)
os.system(snapCommand )
if(not os.path.isfile(filename)):
log( "ERROR in capturing webcam image on : " + filename + " "+ self.device )
return False
if(deviceNumber == 2):
snapCommand ="sudo wget -O " + filename + " --http-user=" + self.cfg.IPCamUS2 + " --http-passwd="+ self.cfg.IPCamPW2 + " " + IP_IPCam2 + self.cfg.IPCamSN2
log( "Getting images with command : " + snapCommand)
os.system(snapCommand )
if(not os.path.isfile(filename)):
log( "ERROR in capturing webcam image on : " + filename + " "+ self.device )
return False
#log( "Getting images with command : " + snapCommand)
return True
else:
return False
except ValueError:
log( " ERROR in capturing webcam image on : " + self.device )
return False