176

(5 odpowiedzi, napisanych Oprogramowanie / Software)

Po długich poszukiwaniach w źle działającym skrypcie znalazłem polecenie powodujące problem:

 wynik=`echo $tekst | grep -o "[0-9]*"` 

Na "dużej" maszynie działa bezbłędnie, natomiast na routerku powoduje zwiechę.
Po dodaniu spacji w wyrażeniu regularnym problem ustępuje, czyli:

 wynik=`echo $tekst | grep -o " [0-9]*"` 

działa dobrze - oczywiście trzeba jakoś dodać tą spację przed wyszukiwaną liczbę...

Spróbuj coś takiego:

rm -r /tmp/ftp/* 
                                            #kasujemy wszystko

for l in 1 2 3; do 
                                            #trzy razy szukamy
  sleep 5 
                                            #poczekamy z 5 sekund
  for i in `find . -name "*.jpg" -type f`; do
    echo "znalazłem $i"
    cp $i /tmp/ftp/nazwa_docelowa.jpg 
                                            #kopiujemy sobie
    #tutaj wysyłamy skopiowany wputem czy czymś
    exit 1                                  #wychodzimy nawet jak by więcej znalazł
  done
  echo "nie znalazłem"

done

No to rzeczywiście zamotali. A jak zapisany jest niepełny plik? Ma rozszerzenie .jpg.part ? (to chyba ftp załatwia)

Ale po co ci najnowszy? Jeśli skasujesz wszystkie, to pierwszy jaki się pojawi będzie najnowszy. To jak nazywa te zdjęcia rejestrator? Numerki kolejne czy data w nazwie pliku? Skrypt może i mógłbym ci wymyślić, ale to chwilę potrwa.

To sprawdź jeszcze tą funkcję "filtr drgań". Detekcja na maksa, jedno zdjęcie, prealarm - 0, filtr drgań 60s.

Ewentualnie wysyłaj na router, a w nim skrypt, który kasuje wszystkie piliki w katalogu ftp, a następnie wysyła pierwszy, który sie pojawi. Skrypt odpalany z crona co minutę.

Może po kolei: pasuje do twojego rejestratora ta instrukcja? -  http://www.e-alarmy.pl/download/instrukcje/BCS_LE-A.pdf
Jeśli tak to strona 34 - tryb "czas", strona 35 Ogólne "zdjęcie [2] sek" (ustawisz sobie 60).
Nie wiem jak ustawia się, żeby na ftp szły tylko zdjęcia ( z instrukcji wynika, że "automatycznie kopiuje nagrania" ), ale skoro wysyła ci zdjęcia na detekcję to pewnie masz już ustawione.
Gdyby tamto jednak nie zadziałało to w detekcji jest jeszcze coś takiego jak "filtr drgania" - spróbuj ustawić np 60 sekund i maksymalnie czułą detekcję.
O kolejnych możliwościach porozmawiamy jak przetestujesz powyższe.

Nie wiem po co tak kombinujesz. Jeśli rejestrator wysyła ci poprawnie zdjęcia na detekcję to tego się trzymaj. Z tego co pobieżnie przejrzałem instrukcję to zdjęcie może robić w trybie czas (!) , detekcja i alarm. Ostatecznie można podpiąć jakiś układ czasowy pod wejście alarmowe, gdyby z jakichś (niewiadomych) powodów funkcja czas nie działała. Ewentualnie możesz na routerze z OpenWrt postawić ftp i do niego słać na detekcję, a odsyłać na docelowy serwer tylko co 1 min. Jak detekcja nie wykryje zmian, to znaczy że na obrazie nic się nie zmieniło i śmiało możesz wysłać poprzedni albo żadnego.

Akurat nie znam tego rejestratora, ale czasem da się normalnie wyciągnąć j-pega, bo on robi je dla przeglądarek, które nie obsługują active-X - sprawdź jak wyświetla obraz np. na FF.

Jeśli masz wysyłanie na ftp na detekcję ruchu, to może pokombinuj tak, żeby ustawić detekcję na maksymalną czułość (szumy na obrazie powinny ją wyzwalać) i będzie słał bez przerwy - albo z jakimś tam minimalnym interwałem. W jednym videoserwerze tak ustawiłem - maksymalnie słał co 5 sekund co mnie satysfakcjonowało.
Innym sposobem jest ustawienie pola detekcji na jakiś zegar czy migającą diodkę, która będzie widoczna w kamerze.
Z łapaniem strumienia rtsp i wyciąganiem obrazka bym się nie bawił - jak już to popracować nad pchaniem strumienia na serwis typu justin.tv.

Pytanie czy to w ogóle wina OpenWrt? Zaczął bym od sprawdzenia na routerze z innym oprogramowaniem.

185

(3 odpowiedzi, napisanych Oprogramowanie / Software)

Dzięki! działa.
I wywołanie bez nawiasów.

Przyszedł ten moment, że muszę napisać bardziej rozbudowany skrypt i z przerażeniem stwierdzam, że nie działają funkcje?!
Nie działa:
function moja_funkcja()
{
}
        syntax error: unexpected "("
ani:
function moja_funkcja
{
}
             line 21: function: not found
            line 42: syntax error: unexpected "}"       
To jak to w końcu ma być?

187

(157 odpowiedzi, napisanych Oprogramowanie / Software)

Kolego oneiro - przede wszystkim pytanie czy ten rejestrator obsługuje multicast? Jeśli tak to wpisz adres z zakresu muliticast i jakiś port i po sieci lokalnej powinno śmigać - spróbuj normalnie programem od rejestratora, ewentualnie możesz próbować np. VLC.
Tunel nic ci nie da, bo łacząc się np. z dwóch miejsc to będziesz miał dwa tunele. Jeżeli te dwa komputery są w jednej sieci lokalnej to można kombinować z jednym tunelem. Z resztą dla dwóch odbiorców ta cała zabawa mija się z celem, no chyba że musisz to zrobić do stałego podglądu. Jeżeli chcesz podgląd dla większej ilości osób to może zainteresuj się serwisami typu justin.tv.

188

(157 odpowiedzi, napisanych Oprogramowanie / Software)

Cezary napisał/a:

A masz sterownik do tej karty usb?


Na pewno są sterowniki do linuksa na i386 do kart typu "EasyCap" - ale uwaga - są dwie wersje - na tą lepszą są wbudowane w większość dystrybucji, na tę gorszą podobno można sciągnąć i doinstalować. Na allegro są same śmieci czyli tylko te najgorsze wersje.
Pytanie tylko czy mając źródła na peceta można łatwo przeportować na routery?

mrox napisał/a:

Wygląda na to, że teraz wszystko jest OK.

... Niestety tylko tak wyglądało. Jednak po podłączeniu zasilania nadal nie ma łączności na innych portach niż "port0".
Prawdopodobnie eth1 jest tylko na "port1". Sprawdzę to jeszcze i będę z tym walczył, ale na razie robię restart network po uruchomieniu, zostawiam router w spokoju i zajmuję się częścią serwerową projektu.

Są źródła do tego czy to jest puszka pandora? wink

Wszystko działa - nadpisują się pliki, przenoszą się też atrybuty plików, czyli jak nadamy uruchamialny to na routerze też będzie uruchamialny.
Można w menuconfig w 'Target Images' zaznaczyć też 'tar.gz' - wtedy w 'bin' znajdzie się też zagzipowany obraz systemu plików - nie trzeba podglądać pliku *.bin jakby co.
Nie wiem czy dobrze zauważyłem, ale chyba z niektórych plików w którymś momencie są usuwane linie komentarza - w *.tar.gz są, natomiast na routerze już nie.

Nie pokazywał tego błędu ani uci show network ani uci show ntpclient.
Przyczyną problemów był plik /etc/config/network.old - zostawiłem plik ze starą konfiguracją ze zmienioną nazwą.

Wygląda na to, że teraz wszystko jest OK.

Trochę to dziwne, ale wychodzi na to, że najpierw był przerabiany plik 'network.old' i uruchamiane interfejsy a później plik 'network', ale już bez restartu.

Ale w network mam też interface - kombinowałem, że jak bym dał interface przed switch, to mógłby najpierw odpalać interfejsy sieciowe a później zmieniać switch... no nie ważne już - switch jest na początku.
Zauważyłem coś podejrzango - 'uci show' pokazuje w pewnym momencie:

...
network.wan.proto=static
network.wan.netmask=255.255.255.0
network.wan.ipaddr=192.168.3.33
network.wan.ifname=eth1
uci: Entry not found
ntpclient.@ntpserver[0]=ntpserver
ntpclient.@ntpserver[0].port=123
ntpclient.@ntpserver[0].hostname=0.pl.pool.ntp.org
...

Czegoś brakuje? Może to jest klucz do tej zagadki.

W UCI

Cezary napisał/a:

Gdzie w końcu masz problem?

Przecież napisałem. Jeszcze raz:
Wygląda to tak, jakby konfiguracja switcha po włączeniu zasilania była domyślna, potem jest zmieniana przez config (i to widzimy w admswconfig), ale działa po nowemu dopiero po restarcie 'network' (który trzeba zrobić ręcznie - bo inaczej mamy eth0 tylko na porcie "0" i eth1 tylko na "1"*).
Po komendzie "/etc/init.d/network restart" działają wszystkie porty aż do wyłączenia zasilania.
To jest jakaś grubsza sprawa, bo znalazłem w sieci opisy podobnych problemów.

I jeszcze jedno: skoro kolejność wpisów nie ma znaczenia to po co jest opcja "reorder"?

Nadal jest coś, czego nie rozumiem: po włączeniu zasilania eth0 jest widoczny tylko na porcie "0" (WAN) - czyli tak, jak wynika z "domyślnej" konfiguracji switcha. Admswconfig pokazuje tak, jak ma być. Myślałem, że to kwestia tego bridge, ale okazuje się że i bez niego działa, tylko trzeba zrobić reboot albo restart network. Moj skrypt działał, bo robił restart. Konfigurację "switch" dałem w network na początku...

Usunąłem /etc/config/network i zrebootowałem router - pojawiła się domyślna konfiguracja i wygląda na to, że ma być (w moim przypadku) tak:

config switch
        option eth0     "0 1 2 3 4"
        option eth1     "0 1 2 3 4"

Czyli bez żadnych kombinacji z v-lanami.
Mam jeszcze pytanie: czym się różni interfejs z opcją "type=bridge" od tego bez tej opcji?
Bo ja chcę zrobić coś takiego: dwa interfejsy ze statycznymi adresami z różnych klas np. eth0 - 192.168.1.111, eth1 - 192.168.2.222 - nie musi być pomiędzy nimi routowania, ale przez jeden router będzie się łączył z internetem a przez drugi będzie się łączył z urządzeniami w sieci lokalnej, które (nie pytajcie mnie dlaczego) są "schowane" do innej klasy. Porty chcę ustawić wszystkie na obydwa żeby nie było pomyłek i żeby całość mogła robić przy okazji za switch.

Nie robi. W /etc/config/network jest dokładnie to co ustawiam z UCI.
Po wgraniu "czystego" systemu nie ma w ogóle sekcji 'switch' - działa tak, jak wynika z tej pierwszej tabelki - to jest chyba jakieś ustawienie domyślne (i bez sensu, bo 5 vlan-ów każdy na innym porcie).

Próbowałem w/g tego:
http://wiki.openwrt.org/doc/uci/network?s[]=bridge#switch
i tego:
http://eko.one.pl/forum/viewtopic.php?id=1846
i nie działa. Zawsze jest:

root@OpenWrt:/# admswconfig
ethX    port0   port1   port2   port3   port4   CPU
0       1                                       1
1               1                               1
2                       1                       1
3                               1               1
4                                       1       1

Konfiguracja ręczna działa:

root@OpenWrt:/# admswconfig eth0 "01234c"
root@OpenWrt:/# admswconfig eth1 "01234c"
root@OpenWrt:/# admswconfig eth2 ""      
Warning: CPU port is not part of this VLAN group
root@OpenWrt:/# admswconfig eth3 ""
Warning: CPU port is not part of this VLAN group
root@OpenWrt:/# admswconfig eth4 ""
Warning: CPU port is not part of this VLAN group
root@OpenWrt:/# admswconfig eth5 ""
Warning: CPU port is not part of this VLAN group
root@OpenWrt:/# admswconfig
ethX    port0   port1   port2   port3   port4   CPU
0       1       1       1       1       1       1
1       1       1       1       1       1       1
2
3
4

Zrobiłem skrypt i dodałem do autostartu i działa, ale to trochę nieelegancka proteza.

200

(157 odpowiedzi, napisanych Oprogramowanie / Software)

tipsntrix napisał/a:

Przyznam otwarcie  ze bardzo bym chciał żeby dało się wyłapać strumień i zapisać i odtworzyć go na linuxie.

Nie bardzo rozumiem... każda szanująca się kamera ma jawnie wystawiony strumień w postaci np:
rtsp://adres.kamery/live.sdp lub podobnej - więc w czym problem? Oczywiście są kamery, do których nie idzie się inaczej dostać jak instalując active-x pod wiadomo czym, ale tutaj metodą reverse engineering zwykle dowiadujemy się, że wszystko działa podobnie, tyle że jest ukryte przed (głupim z założenia) użytkownikiem.

P.S. teraz dopiero załapałem, że autorowi tematu chodziło o kamery IP... tylko czemu w dziale OpenWrt?