Ejemplo n.º 1
0
	def log(self,txt):
		log(self.c,txt)
Ejemplo n.º 2
0
	def log(self,txt):
		log(self.eg.site,"EnvGroup "+self.eg.name+": "+txt)
Ejemplo n.º 3
0
	def log(self,txt):
		log(self.s,txt)
Ejemplo n.º 4
0
 def log(self, txt):
     log(self.c, txt)
Ejemplo n.º 5
0
	def log(self,txt):
		log(self.v,txt)
Ejemplo n.º 6
0
 def log(self, txt):
     log(self.s, txt)
Ejemplo n.º 7
0
 def log(self, txt):
     log(self.eg.site, "EnvGroup " + self.eg.name + ": " + txt)
Ejemplo n.º 8
0
 def log(self, txt):
     log(self.v, txt)
Ejemplo n.º 9
0
	def one_valve(self,v,options):
		if v.feed.disabled:
			return
		if (v.level < v.stop_level) if v.priority else (v.level < v.start_level):
			print "Nothing to do",v,v.level,v.start_level
			if options['save'] and v.verbose:
				log(v,"Nothing to do (has %s, need %s)" % (v.level,v.start_level))
			return
		level = v.level
		if level > v.max_level:
			level = v.max_level
		want = v.raw_watering_time(level)
		has = timedelta(0,0)
		last_end = None
		for s in v.schedules.filter(start__gte=soon-timedelta(1,0)).order_by('start'):
			last_end=s.end
			if s.end < n:
				continue
#			# This code is disabled because as more 
#			if s.start > later and not s.seen and not s.forced:
#				if options['save']:
#					if v.verbose:
#						log(v,"Drop schedule at %s for %s" % (str_tz(s.start),str(s.duration)))
#					v.update(priority=True)
#					s.delete()
#					continue
			has += s.duration
		if last_end and v.min_delay:
			last_end += v.min_delay

		if has:
			if options['save']:
				v.update(priority=(want.total_seconds() > has.total_seconds()*1.2))
			log(v,"Already something to do (has %s, need %s, want %s, does %s)" % (v.level,v.start_level,want,has))
			return
		elif want.total_seconds() < 10:
			if options['save']:
				v.update(priority=False)
			log(v,"Too little to do (has %s, need %s, want %s)" % (v.level,v.start_level,want))
			return
		if options['verbose']:
			print "Plan",v,"for",want,"Level",v.level,v.start_level,v.stop_level,"P" if v.priority else ""
		for a,b in v.range(start=soon,days=options['age'], add=30):
			if a > soon:
				break # do it during the next run
			if last_end and last_end > a:
				if last_end >= a+b:
					continue
				if last_end>a:
					b-=(last_end-a)
					a=last_end
				last_end=None
			if b.total_seconds() < want.total_seconds()/5:
				if v.verbose:
					log(v,"slot too short at %s for %s (level %s; want %s)" % (str_tz(a),str(b),v.level,str(want)))
				continue
			if v.max_run and b > v.max_run:
				b=v.max_run
			if b < want:
				print "Partial",str_tz(a),str(b)
				if options['save']:
					sc=Schedule(valve=v,start=a,duration=b)
					sc.save()
					v.update(priority=True)
					if v.verbose:
						log(v,"Scheduled at %s for %s (level %s; want %s)" % (str_tz(a),str(b),v.level,str(want)))
				want -= b
				break # bail out makes sense, get others scheduled first / do more in the same slot if v.max_run is set
			else:
				print "Total",str_tz(a),str(want)
				if options['save']:
					sc=Schedule(valve=v,start=a,duration=want)
					sc.save()
					v.update(priority=False)
					if v.verbose:
						log(v,"Scheduled at %s for %s (level %s)" % (str_tz(a),str(want),v.level))
				want = None
				break
		if want is not None:
			print "Missing",want
Ejemplo n.º 10
0
	def one_valve(self,v,options):
		if v.feed.disabled:
			return
		if (v.level < v.stop_level) if v.priority else (v.level < v.start_level):
			if options['save'] and v.verbose:
				log(v,"Nothing to do (has %s, need %s)" % (v.level,v.start_level))
			return
		level = v.level
		if level > v.max_level:
			level = v.max_level
		want = v.raw_watering_time(level)
		has = timedelta(0,0)
		last_end = None
		for s in v.schedules.filter(start__gte=soon-timedelta(1,0)).order_by('start'):
			last_end=s.end
			if s.end < n:
				continue
#			# This code is disabled because as more 
#			if s.start > later and not s.seen and not s.forced:
#				if options['save']:
#					if v.verbose:
#						log(v,"Drop schedule at %s for %s" % (str_tz(s.start),str(s.duration)))
#					v.update(priority=True)
#					s.delete()
#					continue
			has += s.duration
		if last_end and v.min_delay:
			last_end += v.min_delay

		if has:
			if options['save']:
				v.update(priority=(want.total_seconds() > has.total_seconds()*1.2))
			if v.verbose:
				log(v,"Already something to do (has %s, need %s, want %s, does %s)" % (v.level,v.start_level,want,has))
			return
		elif want.total_seconds() < 10:
			if options['save']:
				v.update(priority=False)
			if v.verbose:
				log(v,"Too little to do (has %s, need %s, want %s)" % (v.level,v.start_level,want))
			return
		if options['verbose']:
			print("Plan",v,"for",want,"Level",v.level,v.start_level,v.stop_level,"P" if v.priority else "")
		for a,b in v.range(start=soon,days=options['age'], add=30):
			if a > soon:
				if options['verbose']:
					print("NotYet",a,soon)
				break # do it during the next run
			if last_end and last_end > a:
				if last_end >= a+b:
					continue
				if last_end>a:
					b-=(last_end-a)
					a=last_end
				last_end=None
			if b.total_seconds() < want.total_seconds()/5:
				if v.verbose:
					log(v,"slot too short at %s for %s (level %s; want %s)" % (str_tz(a),str(b),v.level,str(want)))
				continue
			if v.max_run and b > v.max_run:
				b=v.max_run
			if b < want:
				log(v, "Partial %s %s %s" % (str_tz(a),str(b),str(want)))
				if options['save']:
					sc=Schedule(valve=v,start=a,duration=b)
					sc.save()
					v.update(priority=True)
					if v.verbose:
						log(v,"Scheduled at %s for %s (level %s; want %s)" % (str_tz(a),str(b),v.level,str(want)))
				want -= b
				break # bail out: get others scheduled first / do more in the same slot if v.max_run is set
			else:
				log(v,"Total %s %s" % (str_tz(a),str(want)))
				if options['save']:
					sc=Schedule(valve=v,start=a,duration=want)
					sc.save()
					v.update(priority=False)
					if v.verbose:
						log(v,"Scheduled at %s for %s (level %s)" % (str_tz(a),str(want),v.level))
				want = None
				break
		else:
			if want:
				log(v, "Missing %s" % (str(want),))