Format code a bit
This commit is contained in:
		
							parent
							
								
									c524d089ad
								
							
						
					
					
						commit
						bf3192ec65
					
				
					 7 changed files with 141 additions and 30 deletions
				
			
		
							
								
								
									
										117
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										117
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -55,7 +55,7 @@ dependencies = [
 | 
			
		|||
 "actix-service",
 | 
			
		||||
 "actix-utils",
 | 
			
		||||
 "ahash",
 | 
			
		||||
 "base64",
 | 
			
		||||
 "base64 0.21.7",
 | 
			
		||||
 "bitflags 2.5.0",
 | 
			
		||||
 "brotli",
 | 
			
		||||
 "bytes",
 | 
			
		||||
| 
						 | 
				
			
			@ -355,6 +355,12 @@ version = "0.21.7"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "base64"
 | 
			
		||||
version = "0.22.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "base64ct"
 | 
			
		||||
version = "1.6.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -626,6 +632,41 @@ dependencies = [
 | 
			
		|||
 "typenum",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "darling"
 | 
			
		||||
version = "0.20.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "darling_core",
 | 
			
		||||
 "darling_macro",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "darling_core"
 | 
			
		||||
version = "0.20.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "fnv",
 | 
			
		||||
 "ident_case",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "strsim",
 | 
			
		||||
 "syn 2.0.61",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "darling_macro"
 | 
			
		||||
version = "0.20.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "darling_core",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.61",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "data-encoding"
 | 
			
		||||
version = "2.6.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -650,6 +691,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		|||
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "powerfmt",
 | 
			
		||||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -717,6 +759,7 @@ dependencies = [
 | 
			
		|||
 "serde",
 | 
			
		||||
 "serde_derive",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "serde_with",
 | 
			
		||||
 "simple_logger",
 | 
			
		||||
 "sqlx",
 | 
			
		||||
 "uuid",
 | 
			
		||||
| 
						 | 
				
			
			@ -973,13 +1016,19 @@ dependencies = [
 | 
			
		|||
 "futures-sink",
 | 
			
		||||
 "futures-util",
 | 
			
		||||
 "http 0.2.12",
 | 
			
		||||
 "indexmap",
 | 
			
		||||
 "indexmap 2.2.6",
 | 
			
		||||
 "slab",
 | 
			
		||||
 "tokio",
 | 
			
		||||
 "tokio-util",
 | 
			
		||||
 "tracing",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "hashbrown"
 | 
			
		||||
version = "0.12.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "hashbrown"
 | 
			
		||||
version = "0.13.2"
 | 
			
		||||
| 
						 | 
				
			
			@ -1110,6 +1159,12 @@ dependencies = [
 | 
			
		|||
 "cc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ident_case"
 | 
			
		||||
version = "1.0.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "idna"
 | 
			
		||||
version = "0.5.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -1120,6 +1175,17 @@ dependencies = [
 | 
			
		|||
 "unicode-normalization",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "indexmap"
 | 
			
		||||
version = "1.9.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "autocfg",
 | 
			
		||||
 "hashbrown 0.12.3",
 | 
			
		||||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "indexmap"
 | 
			
		||||
version = "2.2.6"
 | 
			
		||||
| 
						 | 
				
			
			@ -1128,6 +1194,7 @@ checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "equivalent",
 | 
			
		||||
 "hashbrown 0.14.5",
 | 
			
		||||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -1660,7 +1727,7 @@ version = "0.8.1"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "base64",
 | 
			
		||||
 "base64 0.21.7",
 | 
			
		||||
 "bitflags 2.5.0",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_derive",
 | 
			
		||||
| 
						 | 
				
			
			@ -1836,6 +1903,36 @@ dependencies = [
 | 
			
		|||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_with"
 | 
			
		||||
version = "3.8.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "base64 0.22.1",
 | 
			
		||||
 "chrono",
 | 
			
		||||
 "hex",
 | 
			
		||||
 "indexmap 1.9.3",
 | 
			
		||||
 "indexmap 2.2.6",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_derive",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "serde_with_macros",
 | 
			
		||||
 "time",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_with_macros"
 | 
			
		||||
version = "3.8.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "darling",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.61",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "sha1"
 | 
			
		||||
version = "0.10.6"
 | 
			
		||||
| 
						 | 
				
			
			@ -1984,7 +2081,7 @@ dependencies = [
 | 
			
		|||
 "futures-util",
 | 
			
		||||
 "hashlink",
 | 
			
		||||
 "hex",
 | 
			
		||||
 "indexmap",
 | 
			
		||||
 "indexmap 2.2.6",
 | 
			
		||||
 "log",
 | 
			
		||||
 "memchr",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
| 
						 | 
				
			
			@ -2047,7 +2144,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		|||
checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "atoi",
 | 
			
		||||
 "base64",
 | 
			
		||||
 "base64 0.21.7",
 | 
			
		||||
 "bitflags 2.5.0",
 | 
			
		||||
 "byteorder",
 | 
			
		||||
 "bytes",
 | 
			
		||||
| 
						 | 
				
			
			@ -2089,7 +2186,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		|||
checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "atoi",
 | 
			
		||||
 "base64",
 | 
			
		||||
 "base64 0.21.7",
 | 
			
		||||
 "bitflags 2.5.0",
 | 
			
		||||
 "byteorder",
 | 
			
		||||
 "crc",
 | 
			
		||||
| 
						 | 
				
			
			@ -2154,6 +2251,12 @@ dependencies = [
 | 
			
		|||
 "unicode-normalization",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "strsim"
 | 
			
		||||
version = "0.11.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "subtle"
 | 
			
		||||
version = "2.5.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -2364,7 +2467,7 @@ version = "0.22.12"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "indexmap",
 | 
			
		||||
 "indexmap 2.2.6",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_spanned",
 | 
			
		||||
 "toml_datetime",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ pub use gpio::GpioDriver;
 | 
			
		|||
pub use null::NullDriver;
 | 
			
		||||
pub use piface::PiFaceDriver;
 | 
			
		||||
use serde::{Deserialize, Deserializer};
 | 
			
		||||
 | 
			
		||||
use crate::errors::EmgauwaControllerError;
 | 
			
		||||
 | 
			
		||||
mod gpio;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,9 +11,11 @@ pub struct PiFaceDriver {
 | 
			
		|||
 | 
			
		||||
impl PiFaceDriver {
 | 
			
		||||
	pub fn new(pin: u8, pfd: &Option<PiFaceDigital>) -> Result<Self, EmgauwaControllerError> {
 | 
			
		||||
		let pfd = pfd.as_ref().ok_or(EmgauwaControllerError::Hardware(String::from(
 | 
			
		||||
			"PiFaceDigital not initialized",
 | 
			
		||||
		)))?;
 | 
			
		||||
		let pfd = pfd
 | 
			
		||||
			.as_ref()
 | 
			
		||||
			.ok_or(EmgauwaControllerError::Hardware(String::from(
 | 
			
		||||
				"PiFaceDigital not initialized",
 | 
			
		||||
			)))?;
 | 
			
		||||
		let pfd_pin = pfd.get_output_pin(pin)?;
 | 
			
		||||
		Ok(Self { pfd_pin })
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,10 @@
 | 
			
		|||
use std::fmt::{Display, Formatter};
 | 
			
		||||
 | 
			
		||||
use emgauwa_common::errors::EmgauwaError;
 | 
			
		||||
use rppal::gpio;
 | 
			
		||||
use rppal_mcp23s17::Mcp23s17Error;
 | 
			
		||||
use rppal_pfd::PiFaceDigitalError;
 | 
			
		||||
 | 
			
		||||
use emgauwa_common::errors::EmgauwaError;
 | 
			
		||||
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
pub enum EmgauwaControllerError {
 | 
			
		||||
	Hardware(String),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								src/main.rs
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								src/main.rs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -15,11 +15,11 @@ use crate::ws::run_ws_loop;
 | 
			
		|||
 | 
			
		||||
mod app_state;
 | 
			
		||||
mod drivers;
 | 
			
		||||
mod errors;
 | 
			
		||||
mod relay_loop;
 | 
			
		||||
mod settings;
 | 
			
		||||
mod utils;
 | 
			
		||||
mod ws;
 | 
			
		||||
mod errors;
 | 
			
		||||
 | 
			
		||||
async fn create_this_controller(
 | 
			
		||||
	conn: &mut PoolConnection<Sqlite>,
 | 
			
		||||
| 
						 | 
				
			
			@ -80,14 +80,10 @@ async fn main() -> Result<(), std::io::Error> {
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	for relay in &settings.relays {
 | 
			
		||||
		if DbRelay::get_by_controller_and_num(
 | 
			
		||||
			&mut conn,
 | 
			
		||||
			&db_controller,
 | 
			
		||||
			relay.number,
 | 
			
		||||
		)
 | 
			
		||||
		.await
 | 
			
		||||
		.map_err(EmgauwaError::from)?
 | 
			
		||||
		.is_none()
 | 
			
		||||
		if DbRelay::get_by_controller_and_num(&mut conn, &db_controller, relay.number)
 | 
			
		||||
			.await
 | 
			
		||||
			.map_err(EmgauwaError::from)?
 | 
			
		||||
			.is_none()
 | 
			
		||||
		{
 | 
			
		||||
			create_this_relay(&mut conn, &db_controller, relay)
 | 
			
		||||
				.await
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +99,11 @@ async fn main() -> Result<(), std::io::Error> {
 | 
			
		|||
	let this = Controller::from_db_model(&mut conn, db_controller).map_err(EmgauwaError::from)?;
 | 
			
		||||
 | 
			
		||||
	let now = chrono::Local::now().time();
 | 
			
		||||
	let initial_states: Vec<bool> = this.relays.iter().map(|r| r.active_schedule.is_on(&now)).collect();
 | 
			
		||||
	let initial_states: Vec<bool> = this
 | 
			
		||||
		.relays
 | 
			
		||||
		.iter()
 | 
			
		||||
		.map(|r| r.active_schedule.is_on(&now))
 | 
			
		||||
		.collect();
 | 
			
		||||
 | 
			
		||||
	let mut pfd: Option<PiFaceDigital> = None;
 | 
			
		||||
	let drivers = settings.relays_make_drivers(&mut pfd, initial_states)?;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ use emgauwa_common::errors::EmgauwaError;
 | 
			
		|||
use emgauwa_common::settings;
 | 
			
		||||
use rppal_pfd::PiFaceDigital;
 | 
			
		||||
use serde_derive::Deserialize;
 | 
			
		||||
 | 
			
		||||
use crate::drivers;
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, Deserialize)]
 | 
			
		||||
| 
						 | 
				
			
			@ -69,13 +70,17 @@ impl Settings {
 | 
			
		|||
		&self,
 | 
			
		||||
		pfd: &mut Option<PiFaceDigital>,
 | 
			
		||||
		initial_states: Vec<bool>,
 | 
			
		||||
    ) -> Result<Vec<Box<dyn drivers::RelayDriver>>, EmgauwaError> {
 | 
			
		||||
	) -> Result<Vec<Box<dyn drivers::RelayDriver>>, EmgauwaError> {
 | 
			
		||||
		let mut drivers = Vec::new();
 | 
			
		||||
		let result: Result<(), EmgauwaError> = self.relays.iter().zip(initial_states).try_for_each(|(relay, state)| {
 | 
			
		||||
			let driver = relay.make_driver(pfd, state)?;
 | 
			
		||||
			drivers.push(driver);
 | 
			
		||||
			Ok(())
 | 
			
		||||
		});
 | 
			
		||||
		let result: Result<(), EmgauwaError> =
 | 
			
		||||
			self.relays
 | 
			
		||||
				.iter()
 | 
			
		||||
				.zip(initial_states)
 | 
			
		||||
				.try_for_each(|(relay, state)| {
 | 
			
		||||
					let driver = relay.make_driver(pfd, state)?;
 | 
			
		||||
					drivers.push(driver);
 | 
			
		||||
					Ok(())
 | 
			
		||||
				});
 | 
			
		||||
		result?;
 | 
			
		||||
		Ok(drivers)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,8 +7,8 @@ use emgauwa_common::types::ControllerWsAction;
 | 
			
		|||
use futures::{future, pin_mut, SinkExt, StreamExt};
 | 
			
		||||
use sqlx::{Pool, Sqlite};
 | 
			
		||||
use tokio::time;
 | 
			
		||||
use tokio_tungstenite::tungstenite::Message;
 | 
			
		||||
use tokio_tungstenite::connect_async;
 | 
			
		||||
use tokio_tungstenite::tungstenite::Message;
 | 
			
		||||
 | 
			
		||||
use crate::app_state::AppState;
 | 
			
		||||
use crate::utils::{app_state_get_relay_notifier, app_state_get_this};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue