def reportSensor( sensorId ): myconfig = ConfigParser.ConfigParser() myconfig.read("/home/pi/Surveillance/uploader-no-ip.cfg") #Domoticz account credentials username = myconfig.get('domoticz', 'user') password = myconfig.get('domoticz', 'password') output = '' p = urllib2.HTTPPasswordMgrWithDefaultRealm() process = Popen(["/home/pi/Surveillance/extractLast433.sh", str(sensorId)], stdout=PIPE) (output, err) = process.communicate() exit_code = process.wait() output = output[:-1] csv_data = output.split(",") if len(output)>0: csv_data = output.split(",") humStat = 0 if (sensorId==2): if (float(csv_data[3]) < 40): humStat = 2 elif(float(csv_data[3]) > 70): humStat = 3 url = "http://caquiroga.no-ip.biz:8081/json.htm?type=command¶m=udevice&idx=8&nvalue=0&svalue=" + str(csv_data[2]) + ";" + str(csv_data[3]) + ";" + str(humStat) + ";" elif sensorId==1: if (float(csv_data[3]) < 40): humStat = 2 elif(float(csv_data[3]) > 70): humStat = 3 url = "http://caquiroga.no-ip.biz:8081/json.htm?type=command¶m=udevice&idx=9&nvalue=0&svalue=" + str(csv_data[2]) + ";" + str(csv_data[3]) + ";" + str(humStat) + ";" elif sensorId==10: nma = PyNMA() temp = shelve.open("/home/pi/Surveillance/tmp/raintemp") nma.addkey(temp['nmakey']) print temp['nmakey'] url = "http://caquiroga.no-ip.biz:8081/json.htm?type=command¶m=udevice&idx=11&nvalue=0&svalue=0;" + str(csv_data[2]) + ";" if (float(csv_data[2]) > temp['rain']+2): nma.push("Maceda", 'Plou molt a Maceda', '', '', batch_mode=False) elif (float(csv_data[2]) > temp['rain']): nma.push("Maceda", 'Plou a Maceda', '', '', batch_mode=False) temp['rain'] = float(csv_data[2]) temp.close() print url p.add_password(None, url, username, password) handler = urllib2.HTTPBasicAuthHandler(p) opener = urllib2.build_opener(handler) urllib2.install_opener(opener) page = urllib2.urlopen(url).read() return
def parse_results(self, response): nma = PyNMA(self.crawler.settings.get('NMA_APIKEY')) r = redis.StrictRedis(host='localhost') forrige_studiepoeng = r.get('forrige_studiepoeng') hxs = Selector(response) studiepoeng = hxs.xpath('/html/body/table/tr[3]/td[2]/table/tr[last()]/td[3]/text()').extract()[0] studiepoeng = float(str(studiepoeng).replace(",", ".")) #self.log("Antall studiepoeng: %s" % studiepoeng) if forrige_studiepoeng is None: r.set('forrige_studiepoeng', studiepoeng) self.log('Redis key did not exist, setting it now!') else: if studiepoeng > float(forrige_studiepoeng): nma.push('Karakterer', 'Eksamensresultater', 'Antall studiepoeng har gått opp!') r.set('forrige_studiepoeng', studiepoeng) self.log('Studiepoeng er høyere enn forrie gang!') else: self.log('Studiepoeng: %s, forrige Studiepoeng: %s' % (studiepoeng, forrige_studiepoeng))
def sendAlert(key, usage, date): if not has_pynma: raise ImportError("No module named PyNMA ") global p pkey = None p = PyNMA() p.addkey(key) message = "You have used %sGB bandwidth in %s" % (usage, date) res = p.push("Comcast Bandwidth Check", 'Daily Update', message, 'http://misfoc.us', batch_mode=False)
def sendAlert(key, usage, date): if not has_pynma: raise ImportError("No module named PyNMA ") global p pkey = None p = PyNMA() p.addkey(key) message = "You have used %sGB bandwidth in %s" % (usage,date) res = p.push("Comcast Bandwidth Check", 'Daily Update', message, 'http://misfoc.us', batch_mode=False)
def notify(keys, app, event, msg, url): global p pkey = None p = PyNMA() if os.path.isfile("mydeveloperkey"): dkey = open("mydeveloperkey",'r').readline().strip() p.developerkey(dkey) p.addkey(keys) res = p.push(app, event, msg, url, batch_mode=False) pprint(res)
def main(keys): global p pkey = None p = PyNMA() if os.path.isfile("mydeveloperkey"): dkey = open("mydeveloperkey",'r').readline().strip() p.developerkey(dkey) p.addkey(keys) res = p.push("test app", 'test event', 'test msg <a href="http://www.google.com/">google</a>', 'http://example.com', batch_mode=False, html=True) pprint(res)
def main(keys): global p pkey = None p = PyNMA() if os.path.isfile("mydeveloperkey"): dkey = open("mydeveloperkey",'r').readline().strip() p.developerkey(dkey) p.addkey(keys) res = p.push("test app", 'test event', 'test msg', 'http://example.com', batch_mode=False) pprint(res)
def parse_results(self, response): nma = PyNMA(self.crawler.settings.get('NMA_APIKEY')) r = redis.StrictRedis(host='localhost') forrige_studiepoeng = r.get('forrige_studiepoeng') hxs = Selector(response) studiepoeng = hxs.xpath( '/html/body/table/tr[3]/td[2]/table/tr[last()]/td[3]/text()' ).extract()[0] studiepoeng = float(str(studiepoeng).replace(",", ".")) #self.log("Antall studiepoeng: %s" % studiepoeng) if forrige_studiepoeng is None: r.set('forrige_studiepoeng', studiepoeng) self.log('Redis key did not exist, setting it now!') else: if studiepoeng > float(forrige_studiepoeng): nma.push('Karakterer', 'Eksamensresultater', 'Antall studiepoeng har gått opp!') r.set('forrige_studiepoeng', studiepoeng) self.log('Studiepoeng er høyere enn forrie gang!') else: self.log('Studiepoeng: %s, forrige Studiepoeng: %s' % (studiepoeng, forrige_studiepoeng))
def main(keys): global p pkey = None p = PyNMA() if os.path.isfile("mydeveloperkey"): dkey = open("mydeveloperkey",'r').readline().strip() p.developerkey(dkey) p.addkey(keys) res = p.push(options.app_name, options.evn_title, options.evn_desc, options.evn_url, options.evn_pri, batch_mode=False) if options.debug: pprint(res)
def __call__( self, apikeys = [], app = u"EventGhost", event = u"{eg.event.string}", description = u"{eg.event.payload}", url = "", priority = 0, batch_mode = False, resType = 1, subst = True, prnt = False ): text = self.text app = eg.ParseString(app) if app else "EventGhost" event = eg.ParseString(event) if event else text.empty description = eg.ParseString(description) if description else text.empty url = eg.ParseString(url) if url: if url.lower()[:7] != r"http://" and url.lower()[:8] != r"https://": url = r"http://" + url nmaResult = {} prowlResult = {} nmaRes = {} prowlRes = {} apis = self.plugin.apikeys nmaList, prowlList = self.plugin.GetApiKeyLsts(apikeys, apis) if nmaList: try: devel = self.plugin.devel if self.plugin.devel else None mess = PyNMA(nmaList, devel) nmaRes = mess.push( app, event, description, url, None, priority, batch_mode ) except Exception, e: i = e.args[0] s = e.args[1].decode(eg.systemEncoding) eg.PrintError(text.errMess3 + "\n" + text.errMess4 % (s,str(i)))
def main(argv, apikey): p = PyNMA() p.addkey(apikey) message = argv[3] + ' [' + argv[5] + ']' status = '' if argv[7] == '0': status = 'Complete' elif argv[7] == '1': status = 'Failed Verification' elif argv[7] == '2': status = 'Failed Unpack' elif argv[7] == '3': status = 'Failed Unpack + Verification' else: status = 'Failed' res = p.push('SABnzbd+', message, status, priority=0) pprint(res)
def sendAlert(key, usage, date): if not has_pynma and not has_notifo: raise ImportError("No notification modules loaded") global p pkey = None message = "You have used %sGB bandwidth in %s" % (usage,date) if has_pynma: p = PyNMA() p.addkey(key) res = p.push("Comcast Bandwidth Check", 'Daily Update', message, 'http://misfoc.us', batch_mode=False) if has_notifo: if notifo_username == '' or notifo_secret == '': raise SystemExit("No API username/secret specified for Notifo notifications.") res = notifo.send_notification(notifo_username, notifo_secret, notifo_username, message, "Comcast Bandwidth Check", "Daily Update")
def __call__(self, apikeys=[], app=u"EventGhost", event=u"{eg.event.string}", description=u"{eg.event.payload}", url="", priority=0, batch_mode=False, resType=1, subst=True, prnt=False): text = self.text app = eg.ParseString(app) if app else "EventGhost" event = eg.ParseString(event) if event else text.empty description = eg.ParseString( description) if description else text.empty url = eg.ParseString(url) if url: if url.lower()[:7] != r"http://" and url.lower( )[:8] != r"https://": url = r"http://" + url nmaResult = {} prowlResult = {} nmaRes = {} prowlRes = {} apis = self.plugin.apikeys nmaList, prowlList = self.plugin.GetApiKeyLsts(apikeys, apis) if nmaList: try: devel = self.plugin.devel if self.plugin.devel else None mess = PyNMA(nmaList, devel) nmaRes = mess.push(app, event, description, url, None, priority, batch_mode) except Exception, e: i = e.args[0] s = e.args[1].decode(eg.systemEncoding) eg.PrintError(text.errMess3 + "\n" + text.errMess4 % (s, str(i)))
def plugin(srv, item): ''' expects (apikey, appname, eventname) in addrs''' srv.logging.debug("*** MODULE=%s: service=%s, target=%s", __file__, item.service, item.target) if not HAVE_NMA: srv.logging.warn("PyNMA is not installed") return False try: apikey, appname, event = item.addrs except: srv.logging.warn("NMA incorrect # of target params passed") return False text = item.message priority = item.get('priority', 0) try: p = PyNMA() p.addkey(apikey) res = p.push(application=appname, event=event, description=text, url="", contenttype=None, priority=priority, batch_mode=False) srv.logging.debug("NMA returns %s" % (res)) # {'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx': {'message': '', u'code': u'200', 'type': u'success', u'remaining': u'798', u'resettimer': u'46'}} # FIXME: test for code 200 except Exception, e: srv.logging.warn("NMA failed: %s" % (str(e))) return False
def main(keys): print ("In main(), loop") # Read settings do_read_settings() print ("Settings ok") # Setup logging logger = logging.getLogger('washpower') hdlr = logging.FileHandler('/var/tmp/washpower.log') formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') hdlr.setFormatter(formatter) logger.addHandler(hdlr) logger.setLevel(logging.INFO) logger.info('Start log') print ("Log started") # Variables runs = 0 running = 0 notrunning = 0 washerrunning = 0 # Eternal loop while(1): # Get data from Emoncms # TODO Find a better way to get data (locally) # Get value from Emoncms #response = urllib2.urlopen('http://192.168.1.6/emoncms/feed/value.json?id=23&apikey=1b3bdd0f474738012cb85b79f1b7e104') response = urllib2.urlopen('http://192.168.1.6/emoncms/feed/value.json?id=23&apikey='+emonapi) html = response.read() power = ''.join(e for e in html if e.isalnum()) ipower=int(power) #print ("Current power: " + str(ipower)) # For debug, store values constantly # Theese values can be used to analyze the current consumption # #logger.info(power) #logtext = "running: " + str(running) + "---notrunning: " + str(notrunning) #logger.info(logtext) # For debug, read "power" from a local file #f = open('test', 'r') #power = int(f.read()) #print str(power) #ipower=int(power) # Power is (much) higher than idle current? (Which in this case is 11). # But we use a higher value, sometimes the washer is using a little more # power when idle. if ipower > 50: running+=1 notrunning=0 #print "running:"+str(running) print ("Current power: " + power + " (above limit)") if (running >= 3 and washerrunning == 0): # The power is high for three runs in a row logger.info("Washer is running") print "Washer is running" # Send NMA global p pkey = None p = PyNMA() if os.path.isfile("mydeveloperkey"): dkey = open("mydeveloperkey",'r').readline().strip() p.developerkey(dkey) p.addkey(keys) res = p.push("Emoncms alarm", 'Washer', 'Washer is running', '', batch_mode=False) pprint(res) washerrunning = 1 else: #print "Washer idle" if (washerrunning == 1): # Washer has been running but power is below limit notrunning+=1 if (notrunning >=6): # Power has been below limit for three runs # so the washer is done washerrunning = 0 # Reset running counter running = 0 logger.info("Washer is done") print "Washer is done" # Send NMA #global p pkey = None p = PyNMA() if os.path.isfile("mydeveloperkey"): dkey = open("mydeveloperkey",'r').readline().strip() p.developerkey(dkey) p.addkey(keys) res = p.push("Emoncms alarm", 'Washer', 'Washer is done', '', batch_mode=False) pprint(res) # Wait 2 minutes time.sleep(120)
def __call__( self, apikeys = [], app = u"EventGhost", event = u"{eg.event.string}", description = u"{eg.event.payload}", url = "", priority = 0, batch_mode = False, resType = 1, subst = True ): text = self.text app = eg.ParseString(app) if app else "EventGhost" event = eg.ParseString(event) if event else text.empty description = eg.ParseString(description) if description else text.empty url = eg.ParseString(url) if url: if url.lower()[:7] != r"http://" and url.lower()[:8] != r"https://": url = r"http://" + url apiList = [] for api in apikeys: apis = self.plugin.apikeys keys = [i[0] for i in apis] if api in keys: ix = keys.index(api) apiList.append([i[1] for i in apis][ix]) else: eg.PrintError(text.errMess1 % api) if apiList: try: devel = self.plugin.devel if self.plugin.devel else None mess = PyNMA(apiList, devel) res = mess.push( app, event, description, url, priority, batch_mode ) except Exception, e: i = e.args[0] s = e.args[1].decode(eg.systemEncoding) eg.PrintError(text.errMess3 + "\n" + text.errMess4 % (s,str(i))) res = None if res is not None: if batch_mode: key = list(res.iterkeys())[0] aps = [] for r in key.split(','): ix = [itm[1] for itm in apis].index(r) aps.append([i[0] for i in apis][ix]) ap = ",".join(aps) if subst else key r = res[key][u'code'] if resType else res[key] return {ap: r} else: result = {} for r in res.iterkeys(): if subst: ix = [itm[1] for itm in apis].index(r) ap = [i[0] for i in apis][ix] else: ap = r result[ap] = res[r][u'code'] if resType else res[r] return result
def main(keys): print("In main(), loop") # Read settings do_read_settings() print("Settings ok") # Setup logging logger = logging.getLogger('washpower') hdlr = logging.FileHandler('/var/tmp/washpower.log') formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') hdlr.setFormatter(formatter) logger.addHandler(hdlr) logger.setLevel(logging.INFO) logger.info('Start log') print("Log started") # Variables runs = 0 running = 0 notrunning = 0 washerrunning = 0 # Eternal loop while (1): # Get data from Emoncms # TODO Find a better way to get data (locally) # Get value from Emoncms #response = urllib2.urlopen('http://192.168.1.6/emoncms/feed/value.json?id=23&apikey=1b3bdd0f474738012cb85b79f1b7e104') response = urllib2.urlopen( 'http://192.168.1.6/emoncms/feed/value.json?id=23&apikey=' + emonapi) html = response.read() power = ''.join(e for e in html if e.isalnum()) ipower = int(power) #print ("Current power: " + str(ipower)) # For debug, store values constantly # Theese values can be used to analyze the current consumption # #logger.info(power) #logtext = "running: " + str(running) + "---notrunning: " + str(notrunning) #logger.info(logtext) # For debug, read "power" from a local file #f = open('test', 'r') #power = int(f.read()) #print str(power) #ipower=int(power) # Power is (much) higher than idle current? (Which in this case is 11). # But we use a higher value, sometimes the washer is using a little more # power when idle. if ipower > 50: running += 1 notrunning = 0 #print "running:"+str(running) print("Current power: " + power + " (above limit)") if (running >= 3 and washerrunning == 0): # The power is high for three runs in a row logger.info("Washer is running") print "Washer is running" # Send NMA global p pkey = None p = PyNMA() if os.path.isfile("mydeveloperkey"): dkey = open("mydeveloperkey", 'r').readline().strip() p.developerkey(dkey) p.addkey(keys) res = p.push("Emoncms alarm", 'Washer', 'Washer is running', '', batch_mode=False) pprint(res) washerrunning = 1 else: #print "Washer idle" if (washerrunning == 1): # Washer has been running but power is below limit notrunning += 1 if (notrunning >= 6): # Power has been below limit for three runs # so the washer is done washerrunning = 0 # Reset running counter running = 0 logger.info("Washer is done") print "Washer is done" # Send NMA #global p pkey = None p = PyNMA() if os.path.isfile("mydeveloperkey"): dkey = open("mydeveloperkey", 'r').readline().strip() p.developerkey(dkey) p.addkey(keys) res = p.push("Emoncms alarm", 'Washer', 'Washer is done', '', batch_mode=False) pprint(res) # Wait 2 minutes time.sleep(120)
p = PyNMA() p.addkey("769dd5e70415a3e4610298ac28176229c2fa33f068eedbb7") try: while True: cur.execute("SELECT KeyPair FROM Control WHERE KeyVal = 'Monitor' limit 1") CONTROL_MONITOR = cur.fetchone()[0] if CONTROL_MONITOR == "ON": print "Switching GPIO checking on!" cur.execute("INSERT INTO EventLog(EventDesc, EventInfo) VALUES('Switching GPIO checking ON!', 'CONTROL_MONITOR has changed in main loop.')") con.commit() # Send NMA push notification res = p.push("Sec53", 'GPIO switch', 'Switching GPOI checking on!', 'http://mckerral.ddns.net/Sec53/events.php', batch_mode=False) check_GPIO = 1 else: check_GPIO = 0 while check_GPIO: for PIR in PIR_ARRAY: # if this PIR is active [2] = 1 then probe it. if PIR[2]: current_state = GPIO.input(PIR[1]) # if the probe value is different to the previous value$ if current_state != PIR[4]: # if the new state is high (open or motion) if current_state == 1: