Add sensors and fix logging
This commit is contained in:
		
							parent
							
								
									e3fc7a7666
								
							
						
					
					
						commit
						69810b8c7c
					
				
							
								
								
									
										41
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								main.py
									
									
									
									
									
								
							@ -1,20 +1,23 @@
 | 
			
		||||
import json
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
from machine import Pin
 | 
			
		||||
from machine import I2C
 | 
			
		||||
from net import AdafruitIO
 | 
			
		||||
from net import logging
 | 
			
		||||
from net import ntp
 | 
			
		||||
from net import Server
 | 
			
		||||
from net import templates
 | 
			
		||||
from net import util
 | 
			
		||||
from sensors import MCP9808
 | 
			
		||||
from sensors import WaterSensor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LedServer(Server):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self.led = Pin('LED', Pin.OUT)
 | 
			
		||||
        self.waterSensor = WaterSensor(0)
 | 
			
		||||
        self.mcp = MCP9808(I2C(0))
 | 
			
		||||
        self.aio = AdafruitIO()
 | 
			
		||||
        self.ntp_interval_in_seconds = 60 * 60
 | 
			
		||||
        self.aio_interval_in_seconds = 60 * 5
 | 
			
		||||
@ -42,12 +45,6 @@ class LedServer(Server):
 | 
			
		||||
    def handlePath(self, path):
 | 
			
		||||
        if path == 'index.json':
 | 
			
		||||
            return self.getJsonData()
 | 
			
		||||
        elif path == 'light/on':
 | 
			
		||||
            self.led.on()
 | 
			
		||||
            return self.getJsonData()
 | 
			
		||||
        elif path == 'light/off':
 | 
			
		||||
            self.led.off()
 | 
			
		||||
            return self.getJsonData()
 | 
			
		||||
 | 
			
		||||
        return self.getPathData(path)
 | 
			
		||||
 | 
			
		||||
@ -61,22 +58,32 @@ class LedServer(Server):
 | 
			
		||||
 | 
			
		||||
        return templates.render(
 | 
			
		||||
            f'www/{path or self.default_path}',
 | 
			
		||||
            ledStatus=self.ledTextValue(),
 | 
			
		||||
            ledClass=self.ledCssClass(),
 | 
			
		||||
            datetime=util.datetime()
 | 
			
		||||
            datetime=util.datetime(),
 | 
			
		||||
            temperature=self.getTemperatureTextValue(),
 | 
			
		||||
            waterStatus=self.waterTextValue(),
 | 
			
		||||
            waterClass=self.waterCssClass()
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def getReading(self):
 | 
			
		||||
        return {'timestamp': util.datetimeISO8601(), 'readings': self.getState()}
 | 
			
		||||
        return {
 | 
			
		||||
            'timestamp': util.datetimeISO8601(),
 | 
			
		||||
            'readings': self.getState()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    def getState(self):
 | 
			
		||||
        return {'is-led-on': bool(self.led.value())}
 | 
			
		||||
        return {
 | 
			
		||||
            'is-water-present': self.waterSensor.isWaterPresent(),
 | 
			
		||||
            'temperature': self.mcp.get_temp()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    def ledTextValue(self):
 | 
			
		||||
        return 'ON' if self.led.value() else 'OFF'
 | 
			
		||||
    def getTemperatureTextValue(self):
 | 
			
		||||
        return round(self.mcp.get_temp(), 2)
 | 
			
		||||
 | 
			
		||||
    def ledCssClass(self):
 | 
			
		||||
        return 'led-on' if self.led.value() else 'led-off'
 | 
			
		||||
    def waterTextValue(self):
 | 
			
		||||
        return 'Present' if self.waterSensor.isWaterPresent() else 'Absent'
 | 
			
		||||
 | 
			
		||||
    def waterCssClass(self):
 | 
			
		||||
        return 'water-present' if self.waterSensor.isWaterPresent() else 'water-absent'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
 | 
			
		||||
@ -68,7 +68,7 @@ def truncate(file, target_size):
 | 
			
		||||
            # try to find a line break nearby to split first chunk on
 | 
			
		||||
            break_position = max(
 | 
			
		||||
                chunk.find(b'\n', -discard),     # search forward
 | 
			
		||||
                chunk.rfind(b'\n', -discard)  # search backwards
 | 
			
		||||
                chunk.rfind(b'\n', 0, -discard)  # search backwards
 | 
			
		||||
            )
 | 
			
		||||
            if break_position != -1:  # if we found a line break..
 | 
			
		||||
                outfile.write(chunk[break_position + 1:])
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,2 @@
 | 
			
		||||
from .mcp9808 import MCP9808
 | 
			
		||||
from .watersensor import WaterSensor
 | 
			
		||||
@ -13,6 +13,3 @@ class WaterSensor:
 | 
			
		||||
 | 
			
		||||
    def isWaterPresent(self):
 | 
			
		||||
        return self.reading > self.threshold
 | 
			
		||||
 | 
			
		||||
    def waterStatus(self):
 | 
			
		||||
        return 'Present' if self.isWaterPresent() else 'Absent'
 | 
			
		||||
 | 
			
		||||
@ -12,14 +12,6 @@
 | 
			
		||||
      color: #ddd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .led-on {
 | 
			
		||||
      color: greenyellow;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .led-off {
 | 
			
		||||
      color: lightblue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .water-present {
 | 
			
		||||
      color: pink;
 | 
			
		||||
    }
 | 
			
		||||
@ -28,13 +20,18 @@
 | 
			
		||||
      color: lightblue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .temperature {
 | 
			
		||||
      font-family: monospace;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  </style>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
  <h2>Pico W</h2>
 | 
			
		||||
  <p>{{datetime}}</p>
 | 
			
		||||
  <p>Led is <span class="{{ledClass}}">{{ledStatus}}</span></p>
 | 
			
		||||
  <p>{{temperature}} °C</p>
 | 
			
		||||
  <p>Water is <span class="{{waterClass}}">{{waterStatus}}</span></p>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user