Clasament
Conţinut popular
Se afişează conţinutul cel mai apreciat din 15.04.2026 in Postări
-
5 points
-
Hristos a inviat! Am ajuns la o varianta finala a scriptului din Shelly Plus Uni. Las codul mai jos pentru cine are nevoie sa isi faca la fel: Ce face modulul: Ventilatoare fortate mai mult decat ce comanda releul masinii (suprascrie comenzile releului de sub lonjeron), porneste pompa suplimentara de antigel cand e nevoie, lasa controlul manual din aplicatie activ (shelly, sau integrare in Home Assistant), se adapteaza dupa cerinta manuala, protejeaza bateria, Mod urgenta, mod afterrun (dupa oprire motor, etc), mod failsafe daca crapa senzorii de temp... Si mai am 2 inputuri digitale (pe care pot pune intrerupator pt comenzi manuale) sau conexiune automata cand se cupleaza rulota la priza (dar mai trebuie sa trag niste fire pentru asta. script:1 - Custom cooling system controller (Shelly Plus Uni, 2x Load relays, 2 x digital temp sensors -40+125 grade C). /** * 1.9 TDI CUSTOM COOLING SYSTEM CONTROLLER * Version: V15 (Advanced Afterrun & Production Ready) * ------------------------------------------------------------------ * NEW: Fan continues during Afterrun if Battery > 12.5V. * FIX: Absolute enforcement of battery thresholds for both loads. */ // --- SYSTEM THRESHOLDS (ROAD READY) --- let CONFIG = { v_engine_on: 13.2, // Threshold to detect Alternator activity oil_on: 95.0, // Pump activation temperature oil_off: 87.0, // System hysteresis (Low point) oil_fan_on: 105.0, // Fan assistance for Oil Rad oil_fan_off: 92.0, cool_fan_on: 95.0, // Fan assistance for Coolant cool_fan_off: 85.0, afterrun_time: 600000, // 10-minute maximum pump runtime (ms) batt_limit: 12.2, // Final cutoff for Pump (protects starting capacity) fan_batt_limit: 12.5, // High-safety cutoff for Fan during Afterrun hard_oil: 110.0, // Emergency Thermal Override (Oil) hard_cool: 105.0, // Emergency Thermal Override (Coolant) hard_batt: 11.8 // Absolute Low-Voltage Cutoff }; let state = { afterrun_active: false, hard_active: false, was_engine_on: false, start_time: 0, last_pump: false, // Actual relay state last_fan: false, // Actual relay state logic_pump: false, // Script intended state logic_fan: false, // Script intended state error_count: 0 // Null reading persistence }; function controlLogic() { let vStat = Shelly.getComponentStatus("voltmeter:100"); let oStat = Shelly.getComponentStatus("temperature:100"); let cStat = Shelly.getComponentStatus("temperature:101"); let pSwitch = Shelly.getComponentStatus("switch:0"); let fSwitch = Shelly.getComponentStatus("switch:1"); // --- 0. PHYSICAL SYNC & MANUAL LOGS --- if (pSwitch && pSwitch.output !== state.last_pump) { state.last_pump = pSwitch.output; print(">>> MANUAL: Pump toggled " + (state.last_pump ? "ON" : "OFF")); } if (fSwitch && fSwitch.output !== state.last_fan) { state.last_fan = fSwitch.output; print(">>> MANUAL: Fan toggled " + (state.last_fan ? "ON" : "OFF")); } // --- 1. DATA COLLECTION & NULL-SAFETY --- let volt = (vStat && typeof vStat.voltage === "number") ? vStat.voltage : 12.0; let sensors_ok = (oStat && typeof oStat.tC === "number") && (cStat && typeof cStat.tC === "number"); if (!sensors_ok) state.error_count++; else state.error_count = 0; let oil = (oStat && sensors_ok) ? oStat.tC : 0; let cool = (cStat && sensors_ok) ? cStat.tC : 0; let t15 = (volt >= CONFIG.v_engine_on); let is_failsafe = (state.error_count >= 3); // --- 2. ENGINE TRANSITION LOGIC --- if (state.was_engine_on && !t15) { print(">>> ENGINE STOP: Evaluating Afterrun requirements..."); } state.was_engine_on = t15; let pump_req = state.logic_pump; let fan_req = state.logic_fan; // --- 3. STANDARD THERMOSTATIC OPERATION --- if (sensors_ok && !is_failsafe) { if (oil >= CONFIG.oil_on) pump_req = true; else if (oil <= CONFIG.oil_off) pump_req = false; if (oil >= CONFIG.oil_fan_on || cool >= CONFIG.cool_fan_on) fan_req = true; else if (oil <= CONFIG.oil_fan_off && cool <= CONFIG.cool_fan_off) fan_req = false; } // --- 4. ENGINE ON / OFF ROUTINES --- if (t15) { // Engine Running: Hard Mode Check if (is_failsafe || (oil >= CONFIG.hard_oil || cool >= CONFIG.hard_cool)) { pump_req = true; fan_req = true; state.hard_active = true; } if (sensors_ok && state.hard_active && (oil <= CONFIG.oil_off && cool <= CONFIG.cool_fan_off)) { state.hard_active = false; } } else { // Engine Stopped: Advanced Afterrun Logic state.hard_active = false; let is_hot = (oil >= CONFIG.oil_on || oil >= CONFIG.hard_oil || cool >= CONFIG.hard_cool); if ((pump_req || is_hot || is_failsafe) && !state.afterrun_active) { state.afterrun_active = true; state.start_time = Date.now(); print(">>> SYSTEM: Entering Advanced Afterrun mode."); } if (state.afterrun_active) { let timeout = (Date.now() - state.start_time) > CONFIG.afterrun_time; let cooled = (sensors_ok && oil <= CONFIG.oil_off && cool <= CONFIG.cool_fan_off); if (timeout || (sensors_ok && cooled)) { pump_req = false; fan_req = false; state.afterrun_active = false; print(">>> SYSTEM: Afterrun completed."); } else { pump_req = true; // Allow fan only if battery is exceptionally healthy fan_req = (volt >= CONFIG.fan_batt_limit); } } else { pump_req = false; fan_req = false; } } // --- 5. EXECUTION & BATTERY SAFETY CUTOFFS --- if (volt < CONFIG.batt_limit) pump_req = false; // Final pump cutoff if (volt < CONFIG.fan_batt_limit && !t15) fan_req = false; // Force Fan OFF on Engine OFF + dropping battery if (volt < CONFIG.hard_batt) { pump_req = false; fan_req = false; } // Absolute cutoff let force_pump = (!t15 && state.last_pump !== pump_req); let force_fan = (!t15 && state.last_fan !== fan_req); if (pump_req !== state.logic_pump || force_pump) { print("--- PUMP CONTROL: " + (pump_req ? "ON" : "OFF")); state.logic_pump = pump_req; state.last_pump = pump_req; Shelly.call("Switch.Set", { id: 0, on: pump_req }); } if (fan_req !== state.logic_fan || force_fan) { if (!t15 && !fan_req && state.last_fan) { print(">>> INFO: Fan stopped to save battery (< " + CONFIG.fan_batt_limit + "V)"); } print("--- FAN CONTROL: " + (fan_req ? "ON" : "OFF")); state.logic_fan = fan_req; state.last_fan = fan_req; Shelly.call("Switch.Set", { id: 1, on: fan_req }); } // --- 6. DASHBOARD --- let sys_mode = is_failsafe ? "!!! SENSOR FAIL !!!" : (state.hard_active ? "!!! HARD MODE !!!" : (state.afterrun_active ? ">>> AFTERRUN" : "NORMAL")); print("["+sys_mode+"] | Oil: "+(sensors_ok?oil.toFixed(1):"NULL")+" | Water: "+(sensors_ok?cool.toFixed(1):"NULL")+" | V: "+volt.toFixed(2)+" | Eng: "+(t15?"ON":"OFF")); } Timer.set(5000, true, controlLogic); Si alt doilea script care o sa monitorizeze daca crapa primul script si il reporneste (Watchdog). /** * SHELLY WATCHDOG * Target Script: Oil & Water Cooling Management (ID: 1) * Function: Monitors and auto-restarts the cooling logic if it crashes. */ let MAIN_SCRIPT_ID = 1; function checkMainScript() { Shelly.call( "Script.GetStatus", { id: MAIN_SCRIPT_ID }, function(result, error_code, error_message) { // Verifica daca scriptul exista dar este oprit if (result && result.running === false) { print("!!! WATCHDOG ALERT: Cooling script (ID: " + MAIN_SCRIPT_ID + ") is STOPPED. Restarting..."); Shelly.call("Script.Start", { id: MAIN_SCRIPT_ID }, function(res) { if (res) { print(">>> WATCHDOG: Cooling script has been successfully revived."); } }); } else if (!result) { // Daca ID-ul nu exista sau modulul e blocat print("!!! WATCHDOG ERROR: Communication failure. Code: " + error_code); } } ); } // Verifica la fiecare 60 de secunde Timer.set(60000, true, checkMainScript); print("WATCHDOG: Active monitoring for Script ID " + MAIN_SCRIPT_ID); Si asta e modulul: Unde va fi pus: pe tragarul fata. intre baterie si motor. Senzorii deocamdata o sa fie "atasati" de teava de ulei spre turbo (interes direct in sanatatea turbinei ) si unul atasat de furtunul care e intre cutia DSG si termoflot. Imi asum o mica diferenta de temperaturi cu metoda asta deocamdata. Daca gasesc ceva sa si cuplez senzorii direct in lichid (ulei / antigel) si etanseaza 5.85 mm (diametrul lor) e perfect. Pana atunci, vedem cum se descurca asa. He he...4 points
-
Boon! Sa reluam povestea de pe Coasta de Azur 2.0 unde Baloo deja se simtea ca acasa, venind pentru a 2-a oara pe meleagurile astea, "ursul supraponderal" dormea la umbra in fiecare zi, asa ca noua nu ne ramanea decat sa ne bucuram de plaja, soare, Mediterana si relaxare! ❤️ Mi-a atras atentia un coleg ofensat ca pun poze cu nevasta in chiloti pe forum, asa ca am incercat sa gasesc poze cu ea mai "imbracata", ma rog nu stiu pe cati altii i-a deranjat, probabil moderatorii ar fi sters din postari daca erau deplasate, dar ma conformez 🙄: Plaja din Grimaud este spectaculoasa, nisip fin auriu, apa turquoise, palmieri si iahturi la orizont: Canalele din CAMPING care comunica direct cu Mediterana sunt ca niste "piscine" naturale, e dragut sa te balacesti printre pesti de toate culorile, caracatite si broaste testoase, va trebui sa ma credeti pe cuvant, in loc sa tin telefonul in mana sa filmez, tineam o bere....deh! La orizont se afla portul Saint-Tropez, o sa urmeze postari si de acolo, dar sa le luam in ordine: E foarte important sa te protejezi de soarele arzator din Sudul Frantei, umbrela, ochelarii polarizati, crema solara si niste bericioace reci ajuta in acest caz 😜: Toata ziua balaceala la "piscina" si bere, ce sa zic, m-am adaptat rapid: Nevasta profita de mine de fiecare data cand ma vedea "la fata", isi dorea sa ii mai fac cate o poza, eu 70% din timp eram in apa, ea citea toata ziua Dan Brown si vorbea cu neamurile la telefon. Am gasit inca 2 poze cu ea imbracata, restu' pozelor sunt "in chiloti" 😧: Bineinteles ca a trebuit sa fac iar pe "fotografu", bombaneam ca mi se incalzeste berea🍺, insa nu ma ajuta la nimic si oricum nu ma asculta nimeni, ce sa zic, alt rau sa nu fie: Plimbarile prin camping aratau cam asa: Happy wife, happy life, intradevar in locul asta uiti pur si simplu de griji, probleme si stres: In timp ce ma plimbam zilnic pe sub vegetatia exotica, ma gandeam unde sa il "alerg" vara viitoare (2026) pe Baloo, tot spre o plaja Mediteraneana, dar dupa multe analize si comparatii, rezultatul era tot Coasta de Azur! ❤️ Am luat la snorkeling "mai toata" Grecia cu Marea Ionica in special, pe care o recomand din toata inima, toate insulele importante si plajele care meritau vizitate, cu acele ape "turquoise", am luat la puricat si Coasta Italiana, inclusiv in larg, insula Sardinia, bijuteria europeana, Coasta Spaniola, inclusiv insulele baleare, care sunt SU-PER-BE, insa Sudul Frantei mi-a ramas la suflet! Locul asta mi se pare incredibil, cred ca as putea reveni in fiecare an, pentru tot restul vietii, fara sa ma plictisesc, se gaseste de fiecare data ceva de facut, locuri noi de explorat, restaurante noi unde sa iei cina, vegetatia, plajele, haleala, vinul rose sunt in top pentru mine! Rafinament MAXIM! ❤️ Cu ocazia asta vreau sa le multumesc celor care ma urmaresc si celor care apreciaza postarile mele! 150K views in 3 ani! Sarumana'! 😎 Multumesc si moderatorilor care sterg postarile pline de HATE! Doamne-ajuta! Sarbatori fericite tuturor, atat din partea mea cat si a lui Baloo! ❤️3 points
-
Nu inteleg de ce va complicati atat. Uleiul trebuie sa stea intre minimum si maximum, nimic mai simplu. Nu conteaza ca sunt 3 sau 8 linii.1 point
-
Azi i-am schimbat bocancii cu pantofii. Fiecare își îngrijește mașina cum știe mai bine, dar vreau să vă spun că, de când gresez prezoanele și discurile cu vaselină cuprată, ies prezoanele mai ușor, fără zgomotul ăla de deblocat la desfacere, iar jantele de asemenea nu se mai lipesc. In poza de sus este discul după ce am scos janta, iar jos după pensulare. Am schimbată și ștergătoarele, tot cu Bosch. Apoi am montat pompa de spălat și am curățat jantele de iarnă pentru depozitare. și la sfârșit i-am dat un jet și lui Broski, deși nu voiam pentru că ba incepuse să plouă, ba ieșea soarele și bătea și vântul destul de tare, dar până la urmă am facut si asta. Mâine îi dau un aspirat la interior și îi pun și presurile de vară și am încheiat cu Golfulețul, urmând tot mâine și Tiguanul la rând.1 point
-
inchidere= o poti deschide din interior. Safe lock = nu o poti deschide din interior0 points
Acest clasament este setat la Bucharest/GMT+03:00
