Buongiorno a tutti, ho una webcam ip hikvision che carica immagini via ftp con url che cambia in base alla data e all'ora, so che esiste uno script da inserire all'interno della cartella stessa che si può chiamare webcam.php che mostri solo l'immagine più recente, ce l'avevo e funzionava bene, ma ora non so per quale motivo, me lo sono perso e online non si trova granchè. Ci sono molte cose simili riguardante le foscam, perchè più o meno, credo, i passaggi siano simili, ma non essendo proprio pratico ho provato a modificare e riadattare alla hikvision ma con risultati scarsi, anzi nulli. Qualcuno riesce ad aiutarmi?
premetto che le immagini vengono inviate via ftp al sito/cartella 403 Forbidden e hanno il seguente formato webcam_F18835763_20230714131000915_TIMING.jpg
Ho provato questo script, ma sembra non funzioni, forse è sbagliata la cartella?
Codice PHP:
<?phpdate_default_timezone_set('Europe/Rome');// Funzione che ricava l'immagine più recente nella cartellafunction getwebcamimage($folder) { if (is_dir($folder)) { $images = glob($folder . '*.jpg'); // Trova tutti i file .jpg nella cartella if (!empty($images)) { $latestImage = max($images, FILEINFO_MTIME); // Trova l'immagine con la data di modifica più recente return basename($latestImage); // Restituisce il nome dell'immagine più recente } } return null; // Restituisce null se non ci sono immagini nella cartella}/* Indicare il percorso della cartella delle immagini rispetto al file corrente - DA MODIFICARE */$folder = "http://www.meteonerola.it/Nerola/";$imgnm = getwebcamimage($folder);?><img id="image" src="<?php echo $folder . "/" . $imgnm; ?>"><script type="text/javascript">/* Funzione che ottiene un array di valori data dal timestamp (in millisecondi) della nuova immagine */function getnewparamdate(tsimg) { var newdate = new Date(tsimg); var newyear = newdate.getFullYear(); var newmonth = ("0" + (newdate.getMonth() + 1)).slice(-2); var newday = ("0" + newdate.getDate()).slice(-2); var newhour = ("0" + newdate.getHours()).slice(-2); var newmin = ("0" + newdate.getMinutes()).slice(-2); var newsec = ("0" + newdate.getSeconds()).slice(-2); var newpardate = new Array(newyear, newmonth, newday, newhour, newmin, newsec); return newpardate;}/* Funzione che aggiorna l'immagine (se trovata) */function getnewimage(img, folder, newstr) { var newimage = new Image(); newimage.src = folder + "/" + newstr; newimage.onload = function () { if (newimage.complete) img.src = newimage.src; };}/* Funzione che ottiene un array di valori data della prima immagine passata dal php */function getparamdate() { var imgnm = "<?php echo $imgnm; ?>"; var strtime = imgnm.slice(9, -4); var year = strtime.substr(0, 4); var month = strtime.substr(4, 2) - 1; var day = strtime.substr(6, 2); var hour = strtime.substr(-6, 2); var min = strtime.substr(-4, 2); var sec = strtime.substr(-2, 2); var pardate = new Array(year, month, day, hour, min, sec); return pardate;}var image = document.getElementById("image");var folder = "<?php echo $folder; ?>";var pardate = getparamdate();var date = new Date(pardate[0], pardate[1], pardate[2], pardate[3], pardate[4], pardate[5]);var tsimg = date.getTime();/* Funzione che aggiorna l'immagine con il nuovo nome del file */function refreshwebimage(step) { tsimg += step; var newpardate = getnewparamdate(tsimg); var newstr = "Schedule_" + newpardate[0] + newpardate[1] + newpardate[2] + "-" + newpardate[3] + newpardate[4] + newpardate[5] + ".jpg"; getnewimage(image, folder, newstr);}/* Intervallo di aggiornamento in millisecondi (esempio 10 sec) - MODIFICARE SE DESIDERATO */var stepms = 10000;var interv = setInterval(function () { refreshwebimage(stepms); }, stepms);</script>
Io uso il PHP di cui segue il codice e per il suo funzionamento è fondamentale che dentro la cartella dove giunge lo scatto, e devi essere sicuro che lo scatto ci arrivi.... debbono essere presenti anche i file testo.txt e il font VeraBd.ttf.
Io uso Aruba e la cartella di destinazione dello scatto Hikvision, che è in prova e non pubblico sul mio sito, è semplicemente "hikvision"
I file che ho nominato e altre info interessanti li puoi trovare sul mio link, non far caso al fatto che il tutorial è specifico per la Foscam.... molte cose sono concetti comuni.
Il file testo.txt può essere fisso con un testo a tua scelta oppure dinamico tramite FTP con i dati meteo più importanti, la cosa fondamentale è che testo.txt sia presente e, chiaramente, nel codice dovrai adattare la tuo URL al posto della mia.
La parte finale del codice è tutta commentata e serve a sovrapporere fino a 3 loghi sullo scatto ma per ora lascerei stare.
Facci sapere....Codice PHP:
<?php
header("Refresh: 60; url=" . $_SERVER["PHP_SELF"]);
// attivazione webcam_hikvsn.php
function process_queue() {
//variables
$url = "http://www.meteospinaceto.it/hikvision/webcam_hikvsn.php";
//apro la connessione
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
//chiudo
curl_close($ch);
return $result;
}
$result = process_queue();
// fine attivazione webcam_hikvsn.php
// prepara l'array per i nomi dei file
$directory = array();
$nome_immagine="webcam.jpg"; // file contenente l'immagine
$nome_testo="testo.txt"; // file contenente le scritte
$fp = fopen($nome_testo,"r")
or die("impossibile aprire il file testo.txt.");
$testo_sinistra=fgets($fp,195); // nella prima riga la scritta allineata a sinistra
$testo_destra=fgets($fp,100); // nella seconda riga la scritta allineata a destra
if ( $testo_destra = "data" )
{
setlocale(LC_TIME,"it_IT");
$testo_destra=strftime ("%a %d %b %Y %H:%M:%S", filemtime($nome_immagine));
}
fclose($fp);
header("Content-type: image/jpg");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$im = imagecreatefromjpeg($nome_immagine);
//$black = imagecolorallocate($im, 0, 0, 0);
//$white = imagecolorallocate($im, 255, 255, 255);
$colore_barra = imagecolorallocate($im, 1, 0, 128); // colore della barra formato RGB
$colore_testo = imagecolorallocate($im, 255, 255, 255); // idem per testo
$x=imagesx($im);
$y=imagesy($im);
$font = "VeraBd.ttf";
$size = 20; // dimensione del testo
$altezza_barra = 50; // dimensione della barra
imagefilledrectangle($im, 0, $y-$altezza_barra, $x-1, $y-1, $colore_barra);
$bbox = imagettfbbox ($size, 0, $font, $testo_sinistra);
$dy = (($bbox[1] - $bbox[7]) / 2);
imagettftext($im, $size, 0, 5, $y-($altezza_barra / 2) + $dy - 1, $colore_testo, $font, $testo_sinistra);
$bbox = imagettfbbox ($size, 0, $font, $testo_destra);
$dx = ($bbox[2] - $bbox[0]);
imagettftext($im, $size, 0, $x-5-$dx, $y-($altezza_barra / 2) + $dy - 1, $colore_testo, $font, $testo_destra);
$info = getimagesize($nome_immagine); //carica immagine
//$logo = imagecreatefrompng("sacile.png") ; //carica 1° logo - h/= cartella - sacile.png = nome del file e estensione.png
//$logo2 = imagecreatefrompng("mnw.png") ; //carica 2° logo - h/= cartella - mnw.png = nome del file e estensione.png
//$logo3 = imagecreatefrompng("logo_M3V.png") ; //carica 3° logo - h/= cartella - logo_M3V.png = nome del file e estensione.png
//imagecopy($im, $logo, 5, $info[1]-100, 0, 0, 156,64); //posizione 1°logo(da sx= 5 ,dal fondo= -84)dimensione 1°logo(156=larghezza ,64=altezza )
//imagecopy($im, $logo2, 5, $info[1]-150, 0, 0, 150,38); //posizione 2°logo(da sx= 700 ,dal fondo= -65)dimensione 2°logo(156=larghezza ,38=altezza )
//imagecopy($im, $logo3, 5, $info[1]-210, 0, 0, 150,53); //posizione 3°logo(da sx= 865, dal fondo= -80)dimensione 3°logo(150=larghezza ,53=altezza )
imagejpeg($im,"",85);
imagedestroy($im);
?>
ciao a tutti da Roberto
Stazione Davis 6163 VP2 Plus
La mia webcam a Nord La mia webcam a Ovest
Nell'interesse generale del Forum, NON RISPONDO privatamente a quesiti di ordine tecnico che invece possono essere dibattuti collettivamente
Sorry , mi ero dimenticato un file che dovrà stare anche lui in medesima Directory dell'altr PHP che poi è quella dello scatto....
Il file precedente ha nome "hikvsn.php" che poi è il file che i tuoi visitatori richiameranno, mentre il secondo che è in questo post ha nome "webcam_hikvsn.php"
Ora dovrebbe esserci tutto.....Codice PHP:
<?php
header("Refresh: 60; url=" . $_SERVER["PHP_SELF"]);
// prepara l'array per i nomi dei file
$directory = array();
// prepara l'handler per la directory
$handler = opendir('../hikvision');
// apre la directory e legge i singoli nomi dei file
while ($file = readdir($handler)) {
// se il nome del file contiene il testo iniziale imposto dalla ipcamera lo mette nell'array
if (substr("$file", 0, 7) == "webcam_") {
$directory[] = $file;
}
}
// chiude l'handler
closedir($handler);
// ordina la lista dei file per nome (il piu' nuovo sara' il più recente)
sort($directory);
// conta i file
$fileCount = count($directory);
$fileCount2 = $fileCount - 2;
// copia il file piu' nuovo in webcam.jpg
// $index corrispondera' all'ultimo elemento dell'array (il primo e' 0)
$index = $fileCount - 1; // era -1 modifica 24-07-2014
$fileDaCopiare = $directory[$index];
copy($fileDaCopiare, 'webcam.jpg');
// cancella tutti i file i cui nomi sono nell'array
for($index=0; $index < $fileCount2; $index++) {
$fileDaCancellare = $directory[$index];
unlink($fileDaCancellare);
}
// copy('webcam.jpg','../../webcam.jpg');
?>
ciao a tutti da Roberto
Stazione Davis 6163 VP2 Plus
La mia webcam a Nord La mia webcam a Ovest
Nell'interesse generale del Forum, NON RISPONDO privatamente a quesiti di ordine tecnico che invece possono essere dibattuti collettivamente
Allora, adesso all'interno della cartella oltre i vari scatti della webcam ci sono anche i file
webcam.php
webcam_hikvision.php
verabd.tff
testo.txt
webcam.php l'ho modificato in questo modo
mentre webcam_hikvision.php è in questo modoCodice HTML:<?php header("Refresh: 60; url=" . $_SERVER["PHP_SELF"]); // attivazione webcam_hikvsn.phpfunction process_queue() {//variables$url = "http://www.meteonerola.it/nerola/webcam.php";//apro la connessione$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);$result = curl_exec($ch);//chiudocurl_close($ch);return $result;}$result = process_queue(); // fine attivazione webcam.php // prepara l'array per i nomi dei file $directory = array();$nome_immagine="webcam.jpg"; // file contenente l'immagine$nome_testo="testo.txt"; // file contenente le scritte$fp = fopen($nome_testo,"r") or die("impossibile aprire il file testo.txt.");$testo_sinistra=fgets($fp,195); // nella prima riga la scritta allineata a sinistra$testo_destra=fgets($fp,100); // nella seconda riga la scritta allineata a destraif ( $testo_destra = "data" ) { setlocale(LC_TIME,"it_IT"); $testo_destra=strftime ("%a %d %b %Y %H:%M:%S", filemtime($nome_immagine)); }fclose($fp);header("Content-type: image/jpg");header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");header("Cache-Control: no-store, no-cache, must-revalidate");header("Cache-Control: post-check=0, pre-check=0", false);header("Pragma: no-cache");$im = imagecreatefromjpeg($nome_immagine);//$black = imagecolorallocate($im, 0, 0, 0);//$white = imagecolorallocate($im, 255, 255, 255);$colore_barra = imagecolorallocate($im, 1, 0, 128); // colore della barra formato RGB$colore_testo = imagecolorallocate($im, 255, 255, 255); // idem per testo$x=imagesx($im);$y=imagesy($im);$font = "VeraBd.ttf";$size = 20; // dimensione del testo$altezza_barra = 50; // dimensione della barraimagefilledrectangle($im, 0, $y-$altezza_barra, $x-1, $y-1, $colore_barra);$bbox = imagettfbbox ($size, 0, $font, $testo_sinistra);$dy = (($bbox[1] - $bbox[7]) / 2);imagettftext($im, $size, 0, 5, $y-($altezza_barra / 2) + $dy - 1, $colore_testo, $font, $testo_sinistra); $bbox = imagettfbbox ($size, 0, $font, $testo_destra);$dx = ($bbox[2] - $bbox[0]);imagettftext($im, $size, 0, $x-5-$dx, $y-($altezza_barra / 2) + $dy - 1, $colore_testo, $font, $testo_destra);$info = getimagesize($nome_immagine); //carica immagine //$logo = imagecreatefrompng("sacile.png") ; //carica 1° logo - h/= cartella - sacile.png = nome del file e estensione.png//$logo2 = imagecreatefrompng("mnw.png") ; //carica 2° logo - h/= cartella - mnw.png = nome del file e estensione.png//$logo3 = imagecreatefrompng("logo_M3V.png") ; //carica 3° logo - h/= cartella - logo_M3V.png = nome del file e estensione.png//imagecopy($im, $logo, 5, $info[1]-100, 0, 0, 156,64); //posizione 1°logo(da sx= 5 ,dal fondo= -84)dimensione 1°logo(156=larghezza ,64=altezza )//imagecopy($im, $logo2, 5, $info[1]-150, 0, 0, 150,38); //posizione 2°logo(da sx= 700 ,dal fondo= -65)dimensione 2°logo(156=larghezza ,38=altezza )//imagecopy($im, $logo3, 5, $info[1]-210, 0, 0, 150,53); //posizione 3°logo(da sx= 865, dal fondo= -80)dimensione 3°logo(150=larghezza ,53=altezza )imagejpeg($im,"",85);imagedestroy($im);?>
Codice HTML:<?php header("Refresh: 60; url=" . $_SERVER["PHP_SELF"]); // prepara l'array per i nomi dei file $directory = array(); // prepara l'handler per la directory $handler = opendir('../hikvision'); // apre la directory e legge i singoli nomi dei file while ($file = readdir($handler)) { // se il nome del file contiene il testo iniziale imposto dalla ipcamera lo mette nell'array if (substr("$file", 0, 7) == "webcam_") { $directory[] = $file; } } // chiude l'handler closedir($handler); // ordina la lista dei file per nome (il piu' nuovo sara' il più recente) sort($directory); // conta i file $fileCount = count($directory); $fileCount2 = $fileCount - 2; // copia il file piu' nuovo in webcam.jpg // $index corrispondera' all'ultimo elemento dell'array (il primo e' 0) $index = $fileCount - 1; // era -1 modifica 24-07-2014 $fileDaCopiare = $directory[$index]; copy($fileDaCopiare, 'webcam.jpg'); // cancella tutti i file i cui nomi sono nell'array for($index=0; $index < $fileCount2; $index++) { $fileDaCancellare = $directory[$index]; unlink($fileDaCancellare); } // copy('webcam.jpg','../../webcam.jpg');?>
Premesso che anche io uso aruba e che le immagini sono all'interno della cartella meteonerola.it/Nerola/Codice PHP:
<?php header("Refresh: 60; url=" . $_SERVER["PHP_SELF"]); // prepara l'array per i nomi dei file $directory = array(); // prepara l'handler per la directory $handler = opendir('../hikvision'); // apre la directory e legge i singoli nomi dei file while ($file = readdir($handler)) { // se il nome del file contiene il testo iniziale imposto dalla ipcamera lo mette nell'array if (substr("$file", 0, 7) == "webcam_") { $directory[] = $file; } } // chiude l'handler closedir($handler); // ordina la lista dei file per nome (il piu' nuovo sara' il più recente) sort($directory); // conta i file $fileCount = count($directory); $fileCount2 = $fileCount - 2; // copia il file piu' nuovo in webcam.jpg // $index corrispondera' all'ultimo elemento dell'array (il primo e' 0) $index = $fileCount - 1; // era -1 modifica 24-07-2014 $fileDaCopiare = $directory[$index]; copy($fileDaCopiare, 'webcam.jpg'); // cancella tutti i file i cui nomi sono nell'array for($index=0; $index < $fileCount2; $index++) { $fileDaCancellare = $directory[$index]; unlink($fileDaCancellare); } // copy('webcam.jpg','../../webcam.jpg');?>
qualcosa devo aver sbagliato, perchè non mi esce niente, mi da solo un quadratino al centro della pagina
ciao a tutti da Roberto
Stazione Davis 6163 VP2 Plus
La mia webcam a Nord La mia webcam a Ovest
Nell'interesse generale del Forum, NON RISPONDO privatamente a quesiti di ordine tecnico che invece possono essere dibattuti collettivamente
Segnalibri