Cronometru Background

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

gcosmin
New Member
Mesaje: 1
Membru din: Mar Mar 08, 2005 12:00 am
Localitate: London
Contact:

Cronometru Background

Mesajde gcosmin » Lun Aug 24, 2015 4:38 pm

Din mySQL pot citi ce temperatura am in camera. As dori sa stiu daca se poate face in PHP un script care sa lucreze in background, sa verifice daca s-a schimbat valoarea temperaturi pentru a opri sau a porni centrala.



nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Cronometru Background

Mesajde nevvermind » Lun Aug 24, 2015 5:17 pm

Fa un cron sa ruleze la 5 minute sau la cat vrei tu "php check_temp.php" (cel mai simplu) sau http://stackoverflow.com/questions/2036 ... on-process .
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

ViezuREX
Senior Member
Mesaje: 502
Membru din: Joi Dec 13, 2012 1:35 pm

Re: Cronometru Background

Mesajde ViezuREX » Lun Aug 31, 2015 5:37 pm

Poti face asa:

Cod: Selectaţi tot

$temp_buna= 23; // Aici pui tu de la ce temperatura vrei sa pornesti
while ( true )
{
     $temp_curenta = citeste_temperatura();
     $temp_delta = $temp_buna - $temp_curenta;
     if ( $temp_curenta != $temp_veche && $temp_delta < 0 )
         opreste_centrala();
     if ( $temp_curenta != $temp_veche && $temp_delta > 0 )
         porneste_centrala();
}


Este o bucla infinita care va verifica mereu temperatura curenta si ia decizia de pornire/oprire, insa trebuie sa ai in vedere ca e foarte probabil ca senzorul tau care este interogat de "citeste_temperatura()" sa nu returneze foarte consistent si nici centrala sa nu porneasca sau sa se opreasca foarte prompt. Ideal este sa mai pui cate un sleep din loc in loc.

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Re: Cronometru Background

Mesajde vectorialpx » Lun Sep 07, 2015 6:04 pm

ViezuREX scrie:Poti face asa:

Cod: Selectaţi tot

$temp_buna= 23; // Aici pui tu de la ce temperatura vrei sa pornesti
while ( true ) { ...



Nope, don't do that!
Nu exista bucla infinita in programare.
Edit: Nu recomand buclele infinite, never.

Faci o bucla "infinita" cu scopul ca la un moment dat sa o opresti.
Poti incerca acest cod pe un PC doar daca n-ai motiv sa dai restart la Apache ;)

Un cron este OK daca ai UNIX.
Daca ai Windows, poti folosi un "Task scheduler".

ViezuREX
Senior Member
Mesaje: 502
Membru din: Joi Dec 13, 2012 1:35 pm

Re: Cronometru Background

Mesajde ViezuREX » Mar Sep 08, 2015 2:42 pm

Nu cred ca are sens o discutie legata de semantica, conceptul de bucla infinita se refera la o bucla conditionala in care conditia este mereu indeplinita.

In alta ordine de idei ... CRON sau Task Scheduler iti ofera granularitate minima de 1 minut.

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Re: Cronometru Background

Mesajde vectorialpx » Joi Sep 10, 2015 11:54 am

ViezuREX scrie:Nu cred ca are sens o discutie legata de semantica, conceptul de bucla infinita se refera la o bucla conditionala in care conditia este mereu indeplinita.

Stiu ce este o bucla infinita si, da, ai dreptate referitor la definitie :)
Ca sa opresti acea bucla va trebui sa opresti procesul. Un cron iti va oferi posibilitatea sa modifici scriptul cand doresti, sa modifici variabile etc.
E ceva mult mai practic, mai ales in cazul de fata. Parerea mea este ca buclele infinite sunt periculoase si sunt ceva de evitat. E doar parerea mea.

ViezuREX scrie:In alta ordine de idei ... CRON sau Task Scheduler iti ofera granularitate minima de 1 minut.

Nu vad de ce ti-ar trebui sa faci asta la secunda.
Verifica temperatura din casa, nu e laborator de chimie :)

ViezuREX
Senior Member
Mesaje: 502
Membru din: Joi Dec 13, 2012 1:35 pm

Re: Cronometru Background

Mesajde ViezuREX » Joi Sep 10, 2015 1:04 pm

@vectorialpx
1. Din orice bucla poti iesi programatic folosind BREAK din cate stiu eu, nu trebuie sa opresti neaparat procesul.
2. Referitor la granularitate ... am zis sa ofer o solutie care ofera mai multe optiuni.

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Re: Cronometru Background

Mesajde vectorialpx » Joi Sep 10, 2015 1:15 pm

Ok. Ai scriptul timer.php

Cod: Selectaţi tot

<?php
while(1) { echo 3; sleep(2); }


rulezi
localhost/timer.php

Cum opresti acest script?

ViezuREX
Senior Member
Mesaje: 502
Membru din: Joi Dec 13, 2012 1:35 pm

Re: Cronometru Background

Mesajde ViezuREX » Joi Sep 10, 2015 1:30 pm

Adaug o variabila de control 8)

Cod: Selectaţi tot

<?php
while(1) { echo 3; sleep(2); $control++; if ( $control > 10 ) break; }


Deci ies din bucla dupa 20 secunde.

Am inteles problema la care te referi dar este rezolvabila. Nu spun ca e cea mai curata/eficienta/eleganta solutie, dar merge.

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Re: Cronometru Background

Mesajde vectorialpx » Joi Sep 10, 2015 1:46 pm

ViezuREX scrie:Adaug o variabila de control 8)
Deci ies din bucla dupa 20 secunde.
Nu spun ca e cea mai curata/eficienta/eleganta solutie, dar merge.

Nu, nu mai ai un proces continuu.
Mai bine verifici aerul conditionat manual :D

Daca rulezi din consola poti da un CTRL+C ca sa inchei procesul.
Apoi, daca modifici ceva, repornesti procesul.

However, este mai OK cu cron :)
sau @gcosmin faci un mic soft in (C, Java, NodeJs) care are un mic timer.
Asta ar fi varianta eleganta.


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 37 vizitatori