Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7d2ad1cd49 | ||
![]() |
307b467ac1 | ||
![]() |
995bf90efb | ||
![]() |
100bab01e4 | ||
![]() |
2f3ccf14db |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -104,3 +104,4 @@ flake.lock
|
|||||||
# Before adding new lines, see the comment at the top.
|
# Before adding new lines, see the comment at the top.
|
||||||
|
|
||||||
.env*
|
.env*
|
||||||
|
.idea/
|
||||||
|
@@ -85,6 +85,7 @@ func makePostReq(url string, body any) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
req.Header.Set("Authorization", token)
|
req.Header.Set("Authorization", token)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
res, err := http.DefaultClient.Do(req)
|
res, err := http.DefaultClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -119,8 +120,8 @@ func main() {
|
|||||||
Action: test,
|
Action: test,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "get",
|
Name: "open",
|
||||||
Usage: "get door state",
|
Usage: "get door state (opened or closed)",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "raw",
|
Name: "raw",
|
||||||
@@ -200,7 +201,7 @@ func getOpened(ctx context.Context, cmd *cli.Command) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
opened, err := makeGetReq(fmt.Sprintf("%s/read", server))
|
opened, err := makeGetReq(fmt.Sprintf("%s/open", server))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -244,7 +245,7 @@ func getAlert(context.Context, *cli.Command) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
alert, err := makeGetReq(fmt.Sprintf("%s/alerts", server))
|
alert, err := makeGetReq(fmt.Sprintf("%s/alert", server))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -305,7 +306,7 @@ func createManageAlert(alert bool) func(context.Context, *cli.Command) error {
|
|||||||
data.For = secs
|
data.For = secs
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = makePostReq(fmt.Sprintf("%s/alerts", server), data)
|
_, err = makePostReq(fmt.Sprintf("%s/alert", server), data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
2
peripheral/.gitignore
vendored
2
peripheral/.gitignore
vendored
@@ -1 +1,3 @@
|
|||||||
|
__pycache__/
|
||||||
|
|
||||||
.env.json
|
.env.json
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
import gc
|
||||||
import utime
|
import utime
|
||||||
import ujson
|
import ujson
|
||||||
import network
|
import network
|
||||||
@@ -7,7 +8,6 @@ from machine import Pin
|
|||||||
THRESHOLD_DISTANCE = 15 # cm
|
THRESHOLD_DISTANCE = 15 # cm
|
||||||
SOUND_SPEED = 340 * 100 # m/s * centi = cm/s
|
SOUND_SPEED = 340 * 100 # m/s * centi = cm/s
|
||||||
MAX_CONNECTION_RETRIES = 50
|
MAX_CONNECTION_RETRIES = 50
|
||||||
ULTRA_OPENED_THRESHOLD = 3
|
|
||||||
|
|
||||||
|
|
||||||
class App:
|
class App:
|
||||||
@@ -18,7 +18,7 @@ class App:
|
|||||||
|
|
||||||
opened: bool = False
|
opened: bool = False
|
||||||
previously_opened: bool = False
|
previously_opened: bool = False
|
||||||
ultra_opened_counter: int = 0
|
wlan: network.WLAN
|
||||||
|
|
||||||
led = Pin(15, Pin.OUT)
|
led = Pin(15, Pin.OUT)
|
||||||
trigger = Pin(2, Pin.OUT)
|
trigger = Pin(2, Pin.OUT)
|
||||||
@@ -57,18 +57,18 @@ class App:
|
|||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
print("Connecting to Wi-Fi...")
|
print("Connecting to Wi-Fi...")
|
||||||
wlan = network.WLAN(network.STA_IF)
|
self.wlan = network.WLAN(network.STA_IF)
|
||||||
|
|
||||||
wlan.active(False)
|
self.wlan.active(False)
|
||||||
utime.sleep_ms(250)
|
utime.sleep_ms(250)
|
||||||
wlan.active(True)
|
self.wlan.active(True)
|
||||||
utime.sleep_ms(250)
|
utime.sleep_ms(250)
|
||||||
|
|
||||||
wlan.connect(self.ssid, self.password)
|
self.wlan.connect(self.ssid, self.password)
|
||||||
utime.sleep_ms(100)
|
utime.sleep_ms(100)
|
||||||
|
|
||||||
retry_count = 0
|
retry_count = 0
|
||||||
while not wlan.isconnected():
|
while not self.wlan.isconnected():
|
||||||
if retry_count >= MAX_CONNECTION_RETRIES:
|
if retry_count >= MAX_CONNECTION_RETRIES:
|
||||||
print("Max connection retries reached")
|
print("Max connection retries reached")
|
||||||
exit(1)
|
exit(1)
|
||||||
@@ -82,12 +82,12 @@ class App:
|
|||||||
|
|
||||||
if retry_count % 10 == 0:
|
if retry_count % 10 == 0:
|
||||||
print("Attempting to restart connection...")
|
print("Attempting to restart connection...")
|
||||||
wlan.connect(self.ssid, self.password)
|
self.wlan.connect(self.ssid, self.password)
|
||||||
for _ in range(10):
|
for _ in range(10):
|
||||||
self.led.toggle()
|
self.led.toggle()
|
||||||
utime.sleep_ms(50)
|
utime.sleep_ms(50)
|
||||||
|
|
||||||
print(f"Connected with IP {wlan.ifconfig()[0]}")
|
print(f"Connected with IP {self.wlan.ifconfig()[0]}")
|
||||||
self.update_server()
|
self.update_server()
|
||||||
|
|
||||||
def update_server(self):
|
def update_server(self):
|
||||||
@@ -101,7 +101,7 @@ class App:
|
|||||||
headers={"Authorization": self.token, "Content-Type": "application/json"},
|
headers={"Authorization": self.token, "Content-Type": "application/json"},
|
||||||
data=raw
|
data=raw
|
||||||
)
|
)
|
||||||
print(f"State updated [{r.status_code}]")
|
print(f"State updated [{r.status_code}] {r.content.decode()}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error occurred: {e}")
|
print(f"Error occurred: {e}")
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ class App:
|
|||||||
|
|
||||||
delta_time = received_time - sent_time
|
delta_time = received_time - sent_time
|
||||||
distance = delta_time / 1_000_000 * SOUND_SPEED / 2
|
distance = delta_time / 1_000_000 * SOUND_SPEED / 2
|
||||||
print(f"Distance: {distance} cm")
|
print(f"Distance: {distance:0<5} cm; mem_free = {gc.mem_free()}")
|
||||||
|
|
||||||
return distance
|
return distance
|
||||||
|
|
||||||
@@ -133,35 +133,41 @@ class App:
|
|||||||
i = 0
|
i = 0
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
if not self.wlan.isconnected():
|
||||||
|
self.connect()
|
||||||
|
|
||||||
distance = self.measure_distance()
|
distance = self.measure_distance()
|
||||||
self.opened = distance >= THRESHOLD_DISTANCE
|
self.opened = distance >= THRESHOLD_DISTANCE
|
||||||
|
|
||||||
if not opened:
|
if not self.opened:
|
||||||
self.led.low()
|
self.led.low()
|
||||||
self.ultra_opened_counter = 0
|
|
||||||
|
|
||||||
|
# was it just closed?
|
||||||
if self.previously_opened:
|
if self.previously_opened:
|
||||||
self.update_server()
|
self.update_server()
|
||||||
|
self.previously_opened = False
|
||||||
else:
|
else:
|
||||||
self.led.high()
|
# was it just opened? +wait delay
|
||||||
self.ultra_opened_counter += 1
|
if not self.previously_opened:
|
||||||
|
self.led.high()
|
||||||
if self.ultra_opened_counter >= ULTRA_OPENED_THRESHOLD:
|
|
||||||
self.update_server()
|
self.update_server()
|
||||||
|
self.previously_opened = True
|
||||||
|
|
||||||
if i >= 20:
|
if i >= 20:
|
||||||
|
print("Blinking...")
|
||||||
self.led.toggle()
|
self.led.toggle()
|
||||||
utime.sleep_ms(100)
|
utime.sleep_ms(100)
|
||||||
self.led.toggle()
|
self.led.toggle()
|
||||||
utime.sleep_ms(400)
|
utime.sleep_ms(400)
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
|
gc.collect()
|
||||||
else:
|
else:
|
||||||
utime.sleep_ms(500)
|
utime.sleep_ms(500)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Fatal exception occurred: {e}")
|
print(f"Fatal error occurred: {e}")
|
||||||
|
|
||||||
self.previously_opened = self.opened
|
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@@ -130,7 +130,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if data.Opened == opened {
|
if data.Opened == opened {
|
||||||
mut.Unlock()
|
|
||||||
return c.NoContent(http.StatusOK)
|
return c.NoContent(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user