Skocz do zawartości

Kamera IP (WiFi)-pobieranie obrazu i wysyłanie na stronę www poprzez raspbery pi


pernaczy

Pomocna odpowiedź

Witam wszystkich.

Trochę o sobie. Jestem dość wiekowym użytkownikiem komputera z Win10PRO i stacji pogodowej. Posiadam też zewnętrzną kamerę IP.

Pod windowsem używam pliku wsadowego, który co 10 minut pobiera obraz (klatkę) z kamery, zapisuje ją w katalogu na HDD jako "obrazek.jpg" i wysyła na serwer na którym funkcjonuje moja strona "pogodowa" obrazująca dane ze stacji pogodowej. Efekt widać tutaj: https://www.pogoda-niesiolowice.kaszuby.pl/webcam1.php

Chciałbym ten efekt uzyskać za pomocą raspbery pi 3B (taki posiadam) na którym już działa program pobierający dane ze stacji pogodowej i wysyłający je na serwer.

Czy ktoś podpowiedziałby jak napisać stosowny program dla raspberry pi, jakie biblioteki zainstalować?

Ogólnie jestem "cienki" ze wszystkiego co związane z raspberry pi ale nauczyłem się już kiedyś "html-a" i trochę PHP więc chociaż tak naprawdę szukam konkretów to nie boję się nauki (pomimo swojego pesela) jeśli ktoś mi wskaże konkretne pozycje (linki) do odpowiedniej wiedzy.

Link do komentarza
Share on other sites

Jeżeli masz zewnętrzne, stałe ip, a serwer posiada działającego crontab-a, wtedy (przynajmniej teoretycznie) możesz pobierać cyklicznie obraz z kamery przez skrypt .php bezpośrednio z serwera.

Co masz w pliku .bat?

Edytowano przez orb777
Link do komentarza
Share on other sites

42 minuty temu, orb777 napisał:

Co masz w pliku .bat?

:start
taskkill /f /t /im wget.exe
wget "http://192.168.8.129:80//cgi-bin/cgi-bin/web/tmpfs/snap.jpg&usr=xxxx&pwd=yyyyyyy&" -O ipcam1.jpg
ncftpput -C -u zzzzzzzz -p aaaaaaa ftp.nazwaserwera C:\Users\Piotr\Desktop\skryptkamery\ipcam1.jpg /migracja/pogoda-niesiolowice.kaszuby.pl/camera1/ipcam1.jpg
ping -n 601 127.0.0.1>nul
goto start

Plik umieszczony w katalogu pobiera z kamery obraz i zapisuje go w tym katalogu pod nazwą "ipcam1.jpg" Następnie wysyła go na serwer do określonego katalogu i tam zapisuje pod taką samą nazwą. Kolejne (co 10 minut) pliki nadpisują poprzednie.

Link do komentarza
Share on other sites

Raspberry nie mam, więc tu nie pomogę. Jeżeli serwer miałby pobierać obraz z twojej kamery (jak wspomniałem), musiałbyś mieć zewnętrzne stałe ip (lub użyć usługi pokroju dyndns). Następnie przekierować na ruterze port na którym działa kamera (lepiej wybrać inny niż 80, np. powyżej 1024), pozwolić na połączenia przychodzące na ten port, a na serwerze odpalić crona, żeby uruchamiał prosty skrypt co 10 minut (info z "nazwa.pl" odnośnie używania crona). Plik można wrzucić np. do "/migracja/pogoda-niesiolowice.kaszuby.pl/camera1/" i stamtąd go odpalać.

Na pc-cie masz coś więcej, co musi działać 24/7, czy tylko ten skrypt? W jaki sposób pobierasz dane z pogodynki, też przez http? To tylko luźne przemyślenia, zrobisz z tym co zechcesz.

<?php
$plik = 'ipcam1.jpg'; // plik wyjściowy

// testowy adres z publicznej kamery (port:8080), zmień na swój
$curl_opcje = [
	CURLOPT_URL => 'http://109.233.191.130:8080/cam_5.jpg',
	CURLOPT_RETURNTRANSFER => true,
	CURLOPT_CONNECTTIMEOUT => 10
];

$x = curl_init();
curl_setopt_array($x, $curl_opcje);
$dane = curl_exec($x);
curl_close($x);

// jeżeli faktycznie pobrano .jpg => zapisz, inaczej nie rób nic
if ($dane !== false) {
	$czy_jpg = getimagesizefromstring($dane);
	if($czy_jpg !== false && $czy_jpg['mime'] == 'image/jpeg'){
		file_put_contents($plik, $dane);
	}
}
?>
  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

7 godzin temu, orb777 napisał:

Na pc-cie masz coś więcej, co musi działać 24/7, czy tylko ten skrypt? W jaki sposób pobierasz dane z pogodynki, też przez http? To tylko luźne przemyślenia, zrobisz z tym co zechcesz.

Dziękuję serdecznie za odpowiedź. Wypróbuję. Znowu się czegoś nauczyłem więc dzień nie jest bezpowrotnie stracony.

Stacja pogody jest połączona z PC-em przez USB. Na kompie chodzi "na okrągło" aplikacja "Cumulus" pobierająca dane ze stacji i wysyłająca je na serwer. Komputer chodzi 24/7 więc "pobieranie obrazka" to tylko jeden z elementów całodobowego funkcjonowania. Zastanawiam się nad przeniesieniem wszystkiego związanego ze stacją pogody na raspberry pi więc te próby z transmisją obrazka z kamery to tylko pierwszy etap.

Mam nadzieję, że odezwie się ktoś "obeznany" z raspberry pi i pomoże w zaprogramowaniu na "malince" pobierania fotki z kamery.

Link do komentarza
Share on other sites

A jaki masz system na raspberry? Jeżeli "raspberry pi os", wtedy powinny śmigać skrypty jak w powłoce linuksowej i tego założenia trzymam się w dalszej części wpisu (nie wspomniałeś systemu).

Pewnie można zrobić to lepiej w pythonie, ale spróbuj uruchomić w bash-u poniższy skrypt (zrób go wykonywalnym: chmod +x nazwa_pliku_skryptu), zmień dane ftp i ewentualnie doinstaluj "curl-a" przez: "sudo apt-get install curl". Możesz też poczytać o cron-ie, czyli dosyć wygodniej metodzie cyklicznego uruchamiania skryptów, itd. Nie miałem do czynienia ze sprzętem raspberry, ale jeśli na pokładzie siedzi coś "linuksowatego", to można się z tym dogadać.

#!/usr/bin/bash

# ======= zmienne ===========
# link do kamery podany w twoim wpisie
KAMERA="http://192.168.8.129:80//cgi-bin/cgi-bin/web/tmpfs/snap.jpg&usr=xxxx&pwd=yyyyyyy&"

# dane ftp
FTP_SERWER="adres serwera ftp"
FTP_LOGIN="login"
FTP_HASLO="hasło"
PLIK="/migracja/pogoda-niesiolowice.kaszuby.pl/camera1/ipcam1.jpg"

# =======funkcje ===========
instancja() {
	pidof -o %PPID -q -x `basename "$0"` && {
		echo -e "\nSkrypt jest już uruchomiony, wychodzę.\n"
		exit 1
	}
}

# pobieram obraz z kamery => przekazuje tzw. "potokiem" (pipe "|") => wysyłam na serwer ftp
# parametr -s (--silent) to tryb "cichy", -v (--verbose) oznacza więcej info
# timeout ustawiony na 15 sekund (--connect-timeout 15), próby: 3
wrzuc_jpg() {
	curl -v --connect-timeout 15 --retry 3 "$KAMERA" | curl -v --connect-timeout 15 --retry 3 -T - "ftp://${FTP_LOGIN}:${FTP_HASLO}@${FTP_SERWER}${PLIK}"
}

# uruchamiam normalnie w pętli 10-minutowej
uruchom_normalnie() {
	while true; do wrzuc_jpg; sleep 600; done
}

# ======== część głowna ==========
# sprawdzam, czy skrypt o tej nazwie jest już uruchomiony, jeśli tak to wychodzę
# jeżeli funkcja niepotrzebna, można usunąć
instancja

# parametr "-c" kiedy odpalamy z cron-a (jeden raz); brak parametrów - skrypt uruchamia się normalnie w pętli 10-minutowej
case "$1" in 
"-c") wrzuc_jpg ;;
"") uruchom_normalnie ;;
*) echo -e "\nBłędny parametr \"${1}\"\n" ;;
esac

 

Edytowano przez orb777
parametr
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.