Compare commits
	
		
			1 Commits
		
	
	
		
			ollo-dev
			...
			o4mini-llm
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | a0e18c1a7d | 
| @@ -387,107 +387,25 @@ fn main() -> ExitCode { | ||||
|         2 => { | ||||
|             let ip = &args[1]; | ||||
|  | ||||
|  | ||||
|             let mut device_online = check_connection(ip.to_string()); | ||||
|             if !device_online { | ||||
|                 println!("{} not online", ip); | ||||
|                // return ExitCode::FAILURE; | ||||
|             } | ||||
|  | ||||
|              | ||||
|  | ||||
|             let receiver = openweathermap::init_forecast("Mannheim", | ||||
|             "metric", | ||||
|             "de", | ||||
|             "978882ab9dd05e7122ff2b0aef2d3e55", | ||||
|             60,1); | ||||
|  | ||||
|             let mut last_data = Option::None; | ||||
|              | ||||
|             // Test Webcrawler for public transportataion | ||||
|             let mut straba_res = straba::fetch_data(Some(true)); | ||||
|             println!("{:?} {:?}s", straba_res.outbound_station, straba_res.outbound_diff); | ||||
|             println!("{:?} {:?}s", straba_res.inbound_station , straba_res.inbound_diff); | ||||
|  | ||||
|             // Initialize MQTT client from MQTT_BROKER env var (else disabled) | ||||
|             let mqtt_client: Option<Client> = { | ||||
|                 // Read broker URL from environment | ||||
|                 let broker = match std::env::var("MQTT_BROKER") { | ||||
|                     Ok(val) if !val.is_empty() => val, | ||||
|                     _ => { | ||||
|                         eprintln!("Environment variable MQTT_BROKER not set or empty, MQTT disabled"); | ||||
|                         String::new() | ||||
|                     } | ||||
|                 }; | ||||
|                 if broker.is_empty() { | ||||
|                     None | ||||
|                 } else { | ||||
|                     let create_opts = CreateOptionsBuilder::new() | ||||
|                         .server_uri(&broker) | ||||
|                         .client_id("ledboard_client") | ||||
|                         .finalize(); | ||||
|                     match Client::new(create_opts) { | ||||
|                         Ok(cli) => { | ||||
|                             let conn_opts = ConnectOptionsBuilder::new() | ||||
|                                 .keep_alive_interval(Duration::from_secs(20)) | ||||
|                                 .clean_session(true) | ||||
|                                 .finalize(); | ||||
|                             match cli.connect(conn_opts) { | ||||
|                                 Ok(_) => Some(cli), | ||||
|                                 Err(e) => { | ||||
|                                     eprintln!("Failed to connect to MQTT broker '{}': {}", broker, e); | ||||
|                                     None | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                         Err(e) => { | ||||
|                             eprintln!("Failed to create MQTT client for '{}': {}", broker, e); | ||||
|                             None | ||||
|                         } | ||||
|                     } | ||||
|             // Read broker URL from environment | ||||
|             let broker = match std::env::var("MQTT_BROKER") { | ||||
|                 Ok(val) if !val.is_empty() => val, | ||||
|                 _ => { | ||||
|                     eprintln!("Environment variable MQTT_BROKER not set or empty, MQTT disabled"); | ||||
|                     String::new() | ||||
|                 } | ||||
|             }; | ||||
|  | ||||
|             // Render start | ||||
|             send_package(ip.to_string(), &last_data, &straba_res); | ||||
|             loop { | ||||
|                 let st_now = SystemTime::now(); | ||||
|                 let seconds = st_now.duration_since(UNIX_EPOCH).unwrap().as_secs(); | ||||
|                 let delay = time::Duration::from_millis(500); | ||||
|                 thread::sleep(delay); | ||||
|                 // Only request, if the device is present | ||||
|                 if device_online == true { | ||||
|                     let answer = openweathermap::update_forecast(&receiver); | ||||
|                     match answer { | ||||
|                         Some(_) => { | ||||
|                             last_data = answer; | ||||
|                         } | ||||
|                         None => { | ||||
|              | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             return main_function(ip, Some(broker)) | ||||
|  | ||||
|                 if (straba_res.request_time + 50) < seconds as i64 { | ||||
|                     device_online = check_connection(ip.to_string()); | ||||
|                     // request once a minute new data | ||||
|                     if device_online == true { | ||||
|                         straba_res = straba::fetch_data(None); | ||||
|                         println!("Update {:?} {:?}s", straba_res.outbound_station, straba_res.outbound_diff); | ||||
|                         println!("Update {:?} {:?}s", straba_res.inbound_station , straba_res.inbound_diff); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 if device_online == true { | ||||
|                     // Render new image | ||||
|                     send_package(ip.to_string(), &last_data, &straba_res); | ||||
|                     // Publish data to MQTT | ||||
|                } | ||||
|                  if let Some(ref client) = mqtt_client { | ||||
|                         publish_to_mqtt(client, &last_data, &straba_res); | ||||
|                     } | ||||
|  | ||||
|             } | ||||
|         } | ||||
|          // two argument passed | ||||
|          3 => { | ||||
|             let ip = &args[1]; | ||||
|             let mqtt = &args[2]; | ||||
|             return main_function(   ip, | ||||
|                                     Some(mqtt.to_string()) | ||||
|                                 ); | ||||
|         } | ||||
|         // all the other cases | ||||
|         _ => { | ||||
| @@ -497,3 +415,100 @@ fn main() -> ExitCode { | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| fn main_function(ip: &String, mqttBroker: Option<String>) -> ExitCode { | ||||
|     let mut device_online: bool = check_connection(ip.to_string()); | ||||
|     if !device_online { | ||||
|         println!("{} not online", ip); | ||||
|         return ExitCode::FAILURE; | ||||
|     } | ||||
|  | ||||
|              | ||||
|  | ||||
|     let receiver = openweathermap::init_forecast("Mannheim", | ||||
|     "metric", | ||||
|     "de", | ||||
|     "978882ab9dd05e7122ff2b0aef2d3e55", | ||||
|     60,1); | ||||
|  | ||||
|     let mut last_data = Option::None; | ||||
|              | ||||
|     // Test Webcrawler for public transportataion | ||||
|     let mut straba_res = straba::fetch_data(Some(true)); | ||||
|     println!("{:?} {:?}s", straba_res.outbound_station, straba_res.outbound_diff); | ||||
|     println!("{:?} {:?}s", straba_res.inbound_station , straba_res.inbound_diff); | ||||
|  | ||||
|     // Initialize MQTT client from MQTT_BROKER env var (else disabled) | ||||
|     let mqtt_client: Option<Client> = { | ||||
|         if mqttBroker.is_none() { | ||||
|             None | ||||
|         } else if mqttBroker.is_some() { | ||||
|             let create_opts = CreateOptionsBuilder::new() | ||||
|                 .server_uri(mqttBroker.clone().unwrap()) | ||||
|                 .client_id("ledboard_client") | ||||
|                 .finalize(); | ||||
|             match Client::new(create_opts) { | ||||
|                 Ok(cli) => { | ||||
|                     let conn_opts = ConnectOptionsBuilder::new() | ||||
|                         .keep_alive_interval(Duration::from_secs(20)) | ||||
|                         .clean_session(true) | ||||
|                         .finalize(); | ||||
|                     match cli.connect(conn_opts) { | ||||
|                         Ok(_) => Some(cli), | ||||
|                         Err(e) => { | ||||
|                             eprintln!("Failed to connect to MQTT broker '{}': {}", mqttBroker.clone().unwrap(), e); | ||||
|                             None | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 Err(e) => { | ||||
|                     eprintln!("Failed to create MQTT client for '{}': {}", mqttBroker.clone().unwrap(), e); | ||||
|                     None | ||||
|                 } | ||||
|             } | ||||
|         } else { | ||||
|             None | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     // Render start | ||||
|     send_package(ip.to_string(), &last_data, &straba_res); | ||||
|     loop { | ||||
|         let st_now = SystemTime::now(); | ||||
|         let seconds = st_now.duration_since(UNIX_EPOCH).unwrap().as_secs(); | ||||
|         let delay = time::Duration::from_millis(500); | ||||
|         thread::sleep(delay); | ||||
|         // Only request, if the device is present | ||||
|         if device_online == true { | ||||
|             let answer = openweathermap::update_forecast(&receiver); | ||||
|             match answer { | ||||
|                 Some(_) => { | ||||
|                     last_data = answer; | ||||
|                 } | ||||
|                 None => { | ||||
|  | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (straba_res.request_time + 50) < seconds as i64 { | ||||
|             device_online = check_connection(ip.to_string()); | ||||
|             // request once a minute new data | ||||
|             if device_online == true { | ||||
|                 straba_res = straba::fetch_data(None); | ||||
|                 println!("Update {:?} {:?}s", straba_res.outbound_station, straba_res.outbound_diff); | ||||
|                 println!("Update {:?} {:?}s", straba_res.inbound_station , straba_res.inbound_diff); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if device_online == true { | ||||
|             // Render new image | ||||
|             send_package(ip.to_string(), &last_data, &straba_res); | ||||
|             // Publish data to MQTT | ||||
|        } | ||||
|          if let Some(ref client) = mqtt_client { | ||||
|                 publish_to_mqtt(client, &last_data, &straba_res); | ||||
|             } | ||||
|  | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user