[METEO] Rainfall (Opady deszczu)


Topic author
Jarozakr
Posty: 12
Rejestracja: śr lip 17, 2019 9:41 am

[METEO] Rainfall (Opady deszczu)

#1

Post autor: Jarozakr » czw maja 13, 2021 11:21 pm

skorzystałem z widget [METEO] Rainfall (Opady deszczu), niestety nie wskazuje mi wartości ostatni deszcz, data się wylicza, co prawda jeśli deszcz starszy jak 3 dni, mógłby od razu pisać datę ostatniego deszczu, czy ktoś może poprawić wyliczanie ilości ostatniego deszczu starszego jak 3 dni.

Kod: Zaznacz cały

    
    <?php 
      $time_start=microtime(true);
      $root=$_SERVER["DOCUMENT_ROOT"];

      $db = new PDO("sqlite:$root/db/ip_deszczid77_rainfall.sql") or die ("cannot open database");
      $query = $db->prepare("select sum(value) from def where  time >= :czas_start and time<= :czas_stop");
      
      $czas_stop=date("Y-m-d H:i:s"); //'2016-10-30 20:00:00';
      $last=array(0,0,0);
      $last_start=array('','','');
      $last_stop=array('','','');
      for ($a=0;$a<3;$a++){
         $czas_start=date("Y-m-d H:i:s",time()-($a+1)*24*60*60);
         $query->bindParam(':czas_start',$czas_start );
         $query->bindParam(':czas_stop',$czas_stop);
         $res= $query->execute();
         foreach ($query as $row){
            $last[$a]=round($row[0],2);
            if ($last[$a]=='')
            {
               $last[$a]=0;
            }
            $last_start[$a]=$czas_start;
            $last_stop[$a]=$czas_stop;
         }
      }
      //poprzedni deszcz

      $db = new PDO("sqlite:/var/www/nettemp/db/ip_deszczid77_rainfall.sql") or die ("cannot open database");
      $query_fst_record=$db->prepare("SELECT min(time) FROM def LIMIT 1");
      $first_record_row=$query_fst_record->fetch();
      $first_record=strtotime($first_record_row[0]);
      $query = $db->prepare("select max(time),value from def where  value=0 and time < :czas_start");
      $query2 = $db->prepare("select max(time),value from def where  value<>0 and time < :czas_start");
      $czas_start=date("Y-m-d H:i:s");
      $poprzedni_deszcz_czas=array('','');
      $not_found=false;
      for ($i=0;$i<2;$i++){
         do {
            $query->bindParam(':czas_start',$czas_start );
            $query->execute();
            $dana=$query->fetch();
            $czas_start=$dana[0];
            $query2->bindParam(':czas_start',$czas_start );
            $query2->execute();
            $dana2=$query2->fetch();
            $data1=strtotime($dana[0]);
            $data2=strtotime($dana2[0]);         
            $interval=abs($data1-$data2);///(24*60*60);
            $czas_start=$dana2[0];
            if ($interval > 86400 && ($data1==$first_record || $data2==$first_record))
            {
               $not_found=true;
            }
         }while($interval<86400 && $not_found==false);
         $poprzedni_deszcz_czas[$i]=$dana2[0];
      }
      $query3 = $db->prepare("select sum(value) from def where time > :czas_start and time <= :czas_stop");
      $query3->bindParam(':czas_start',$dana2[0] );
      $query3->bindParam(':czas_stop',$poprzedni_deszcz_czas[0] );
      $query3->execute();
      $poprzedni_ilosc=$query3->fetch();

      $time_end=microtime(true);
      $exec_time=$time_end-$time_start;
    ?>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[0]."-".$last_stop[0]; ?>"><span>Ostatnie 24h</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $last[0]; ?> l/m2</span></div>
  </div>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[1]."-".$last_stop[1]; ?>"><span>Ostatnie 48h</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $last[1]; ?> l/m2</span></div>
  </div>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[2]."-".$last_stop[2]; ?>"><span>Ostatnie 72h</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $last[2]; ?> l/m2</span></div>
  </div>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[2]."-".$last_stop[2]; ?>">
    <span>Ostatni deszcz</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $poprzedni_deszcz_czas[0]; ?></span></div>
  </div>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[2]."-".$last_stop[2]; ?>"><span>Ostatni opad</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $poprzedni_ilosc[0]; ?> l/m2</span></div>
  </div>

Topic author
Jarozakr
Posty: 12
Rejestracja: śr lip 17, 2019 9:41 am

Re: [METEO] Rainfall (Opady deszczu)

#2

Post autor: Jarozakr » pt maja 14, 2021 12:52 pm

no dobra naprawiłem, nie wiem czy do końca poprawnie ale działa, dodałem też ostatnią godzinę oraz skróciłem czas informacji o ostatnim opadzie tak aby wyświetlało już po godzinie ponieważ trochę dziwne aby pisało ostatni opad trzy dni temu a w sumie dobowej wyświetlała się wartość.
Problem jest w ustaleniu daty z brakiem opadu przed ostatnim deszczem, nie umiałem tego naprawić dodałem zapytanie o tą datę, działa.

Kod: Zaznacz cały

    <?php 
      $time_start=microtime(true);
      $root=$_SERVER["DOCUMENT_ROOT"];

      $db = new PDO("sqlite:$root/db/ip_deszczid77_rainfall.sql") or die ("cannot open database");
      $query = $db->prepare("select sum(value) from def where  time >= :czas_start and time<= :czas_stop");
      
      $czas_stop=date("Y-m-d H:i:s");
      $last=array(0,0,0);
      $last_start=array('','','');
      $last_stop=array('','','');
      for ($a=0;$a<3;$a++){
         $czas_start=date("Y-m-d H:i:s",time()-($a+1)*24*60*60);
         $query->bindParam(':czas_start',$czas_start );
         $query->bindParam(':czas_stop',$czas_stop);
         $res= $query->execute();
         foreach ($query as $row){
            $last[$a]=round($row[0],3);
            if ($last[$a]=='')
            {
               $last[$a]=0;
            }
            $last_start[$a]=$czas_start;
            $last_stop[$a]=$czas_stop;
         }
      }
      //deszcz 1 godzina
      $db = new PDO("sqlite:$root/db/ip_deszczid77_rainfall.sql") or die ("cannot open database");
      $query5 = $db->prepare("select sum(value) from def where  time >= :czas_start and time<= :czas_stop");
      $czas_stop1=date("Y-m-d H:i:s");
      $godz=array(0,0,0);
         $czas_start1=date("Y-m-d H:i:s",time()-60*60);
         $query5->bindParam(':czas_start',$czas_start1 );
         $query5->bindParam(':czas_stop',$czas_stop1);
         $query5->execute();
         foreach ($query5 as $row1){
            $godz[0]=round($row1[0],3);
            if ($godz[0]=='')
            {
               $godz[0]=0;
          }
         }
      //poprzedni deszcz
      $db = new PDO("sqlite:/var/www/nettemp/db/ip_deszczid77_rainfall.sql") or die ("cannot open database");
      $query_fst_record=$db->prepare("SELECT min(time) FROM def LIMIT 1");
      $first_record_row=$query_fst_record->fetch();
      $first_record=strtotime($first_record_row[0]);
      $query = $db->prepare("select max(time),value from def where  value=0 and time < :czas_start");
      $query2 = $db->prepare("select max(time),value from def where  value<>0 and time < :czas_start"); 
      $query3 = $db->prepare("select max(time),value from def where  value=0 and time < :czas_start");
      $czas_start=date("Y-m-d H:i:s");
      $poprzedni_deszcz_czas=array('','');
      $not_found=false;
      for ($i=0;$i<2;$i++){
         do {
            $query->bindParam(':czas_start',$czas_start );
            $query->execute();
            $dana=$query->fetch();
            $czas_start=$dana[0];
            $query2->bindParam(':czas_start',$czas_start );
            $query2->execute();
            $dana2=$query2->fetch();
            $query3->bindParam(':czas_start',$dana2[0] );
            $query3->execute();
            $dana3=$query3->fetch();
            $data1=strtotime($dana[0]);
            $data2=strtotime($dana2[0]);         
            $interval=abs($data1-$data2);
            //$czas_start=$dana2[0];
            if ($interval > 3600 && ($data1==$first_record || $data2==$first_record)) //86400
            {
               $not_found=true;
            }
         }while($interval < 3600 && $not_found==false); //86400
         $poprzedni_deszcz_czas[$i]=$dana2[0];
      }
      $query4 = $db->prepare("select sum(value) from def where time > :czas_start and time <= :czas_stop");
      $query4->bindParam(':czas_start',$dana3[0] );
      $query4->bindParam(':czas_stop',$dana2[0] );
      $query4->execute();
      $poprzedni_ilosc=$query4->fetch();
      $time_end=microtime(true);
      $exec_time=$time_end-$time_start;
    ?>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[0]."-".$last_stop[0]; ?>"><span>Ostatnia 1h</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $godz[0]; ?> l/m2</span></div>
  </div>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[0]."-".$last_stop[0]; ?>"><span>Ostatnie 24h</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $last[0]; ?> l/m2</span></div>
  </div>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[1]."-".$last_stop[1]; ?>"><span>Ostatnie 48h</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $last[1]; ?> l/m2</span></div>
  </div>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[2]."-".$last_stop[2]; ?>"><span>Ostatnie 72h</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $last[2]; ?> l/m2</span></div>
  </div>
  <div style="width:100%">
    <div style="width:50%;float:left" title="<?php echo $last_start[2]."-".$last_stop[2]; ?>"><span>Ostatni deszcz</span></div>
    <div style="width:50%;float:left;text-align: right;"><span><?php echo $poprzedni_deszcz_czas[0]; ?></span></div>
  </div>
  <div style="width:100%">
    <div style="width:70%;float:left" title="<?php echo $last_start[2]."-".$last_stop[2]; ?>"><span>Ostatni opad</span></div>
    <div style="width:30%;float:left;text-align: right;"><span><?php echo $poprzedni_ilosc[0]; ?> l/m2</span></div>
  </div>
ODPOWIEDZ