Cześć,
Wpadłem na pomysł (no chyba że coś takiego jest a ja nie wiem ) że fajnie by było mieć możliwość utworzenia wirtualnych kanałów w cloudzie. W moim przypadku przydało by mi się to np. do określania, czy ktoś jest w domu czy nie (założeniem jest kilku mieszkańców) i sterowanie urządzeniami w domu w zależności od tego, kto jest i czy ktokolwiek jest.
Jak się zapatrujecie na taki pomysł?
Wirtualne kanały
oooo widzę ze ze Duch , jak zwykle, podał bardzo konkretną odpowiedź na zadane pytanie naprawde "szacun" ! Remi ? zakładam że to rozwiązało Twój problem
Do rzeczy : wczoraj chciałem potestować sobie pewne warunki /zależności pomiedzy kanałami i potrzebowałem kilku kanałów typu włącz wyłącz . Stety/niestety miałem tylko taki jednokanałowy moduł pod ręką : viewtopic.php?p=35027#p35027 (canwing c001 - taka kopia sonoffa basic). Żeby uzyskać wirtualne kanały załadowałem do niego multiboard i ustawiłem SONOFF 4CH i dostałem 4 kanały : jeden którym fizycznie mogłem sterować w urządzeniu , i trzy wirtualne, widoczne w cloudzie i aplikacji . I to co chciałem potestować to potestowałem .
Remi - nie wiem czy o to CI chodziło ale też mógłbyś coś takiego zrobić u siebie. Wystarczy że masz zainstalowanego u siebie jakiegolwiek sonoffa basic (czy jego kopie ). Przeinstaluj go na multiboard->sonoff 4CH, bedziesz miał wtedy 3 extra wirtualne kanały ON/OFF . Każdy kanał to osoba w Twoim domostwie (ON - jest w domu, OFF- poza) . Na telefonach instalujesz IFTTT , każdemu domownikowi zakładasz osobny login IFTTT i tworzysz dla kazdego domownika dwa aplety na bazie usługi lokalizacji . I na bazie tej usługi tworzysz :
1) pierwszy aplet kiedy dany telefon jest w poblizu domu (usługa LOCATION, powiedzmy +-50m od Twojego domu) , włącza wirtualny kanał danego domownika ( wywołanie usługi WEBHOOK i wywołujesz link bezpośredni danego kanału lub jeszcze lepiej : link do sceny fracza ktora włącza ten kanał + może włączać/ wyłączać, otwierac/zamykać cokolwiek , w zależności od domownika, od pory dnia, ...)
2) drugi aplet , kiedy dany telefon opuszcza lokalizację dom , to wyłącza kanał danego domownika (podobnie jak przy 1) )
no i masz swojego "big brother-a"
Do rzeczy : wczoraj chciałem potestować sobie pewne warunki /zależności pomiedzy kanałami i potrzebowałem kilku kanałów typu włącz wyłącz . Stety/niestety miałem tylko taki jednokanałowy moduł pod ręką : viewtopic.php?p=35027#p35027 (canwing c001 - taka kopia sonoffa basic). Żeby uzyskać wirtualne kanały załadowałem do niego multiboard i ustawiłem SONOFF 4CH i dostałem 4 kanały : jeden którym fizycznie mogłem sterować w urządzeniu , i trzy wirtualne, widoczne w cloudzie i aplikacji . I to co chciałem potestować to potestowałem .
Remi - nie wiem czy o to CI chodziło ale też mógłbyś coś takiego zrobić u siebie. Wystarczy że masz zainstalowanego u siebie jakiegolwiek sonoffa basic (czy jego kopie ). Przeinstaluj go na multiboard->sonoff 4CH, bedziesz miał wtedy 3 extra wirtualne kanały ON/OFF . Każdy kanał to osoba w Twoim domostwie (ON - jest w domu, OFF- poza) . Na telefonach instalujesz IFTTT , każdemu domownikowi zakładasz osobny login IFTTT i tworzysz dla kazdego domownika dwa aplety na bazie usługi lokalizacji . I na bazie tej usługi tworzysz :
1) pierwszy aplet kiedy dany telefon jest w poblizu domu (usługa LOCATION, powiedzmy +-50m od Twojego domu) , włącza wirtualny kanał danego domownika ( wywołanie usługi WEBHOOK i wywołujesz link bezpośredni danego kanału lub jeszcze lepiej : link do sceny fracza ktora włącza ten kanał + może włączać/ wyłączać, otwierac/zamykać cokolwiek , w zależności od domownika, od pory dnia, ...)
2) drugi aplet , kiedy dany telefon opuszcza lokalizację dom , to wyłącza kanał danego domownika (podobnie jak przy 1) )
no i masz swojego "big brother-a"
Jak to się stało że ja nie widziałem odpowiedzi kolegi Duch... ???
Hmm no to jest lepsze rozwiązanie niż to które ja zrobiłem
Ja poszedłem na łatwiznę i podłączyłem po usb do prywatnego serwera VPN d1 mini w którym mam 9 kanałów
Resztę tak jak sugerujesz z tym że muszę jeszcze popracować nad algorytmem wykrywania użytkownika (najlepiej żeby szybko wykrywał i nie pobierał baterii z telefonu )
Hmm no to jest lepsze rozwiązanie niż to które ja zrobiłem
Ja poszedłem na łatwiznę i podłączyłem po usb do prywatnego serwera VPN d1 mini w którym mam 9 kanałów
Resztę tak jak sugerujesz z tym że muszę jeszcze popracować nad algorytmem wykrywania użytkownika (najlepiej żeby szybko wykrywał i nie pobierał baterii z telefonu )
Testowalem z Automate opcję lokalizacji i niestety ale nie potrafie obejsc problemu zatrzymywania sie skryptu przy braku odpowiedzi na rzadanie https - problem zdarzal mi się sporadycznie jednak jest to irytujące jako że zatrzymuje cały skrypt. Ponadto jak chcemy często sprawdzac lokalizacje to bateria telefonu mocno to odczuwa. IFTTT bawiłem się chwilę i jakoś mi nie podszedł.wsosniak pisze: ↑śr mar 06, 2019 4:48 pm Na telefonach instalujesz IFTTT , kazdemu domownikowi zakladasz osobny login IFTTT i tworzysz dla kazdego domownika dwa aplety na bazie uslugi lokalizacji . I na bazie tej uslugi tworzysz :
1) pierwszy aplet kiedy dany telefon jest w poblizu domu (usluga LOCATION, powiedzmy +-50m od Twojego domu) , wlacza wirtualny kanal danego domownika ( wywolanie uslugi WEBHOOK i wywolujesz link bezposredni danego kanalu lub jeszcze lepiej : link do sceny fracza ktora wlacza ten kanal + moze wlaczac/ wylaczac, otwierac/zamykac cokolwiek , w zaleznosci od domownika, od pory dnia, ...)
2) drugi aplet , kiedy dany telefon opuszcza lokalizacje dom , to wylacza kanal danego domownika (podobnie jak przy 1) )
Na chwilę obecna wykombinowalem, aby sprawdzac czy telefon uzytkownika jest podlaczony do WIFI - jezeli tak, wywolują sie linki bezposrednie do ww. kanalów przypisanych pod uzytkowników a dalej to już sceny które też wywołuje z basha.
Ponizszy skrypt Bash dziala w podsieci 192.168.0/24 sprawdzajac obecnosc wszystkich hostów po protokole ICMP, po czym sprawdza, czy adres MAC telefonu jest w tablicy ARP. Jak skrypt wykryje wszystkich użytkowników to puszcza "echo request" co 60 sekund do każdego urządzenia w celu weryfikacji, czy dany użytkownik dalej jest w domu (czytaj dostępny w sieci ). W sytuacji gdy nie wszyscy są dostępni, leci ponowny skan sieci.
Kod: Zaznacz cały
#!/bin/bash
# ********** WARTOŚCI PODANE MANUALNIE *********************************************
remik="xx:xx:xx:xx:xx:xx" #Adres MAC Remika
karolina="xx:xx:xx:xx:xx:xx" #Adres MAC Karoliny
nela="xx:xx:xx:xx:xx:xx" #Adres MAC Neli
max_ilosc_domownikow="3" #Ilość domowników
#**********************************************************************************
clear
echo ""
echo "-------------------------------------"
echo "Adres MAC Remika: $remik" #Wyświetlenie adresu MAC
echo "Adres MAC Karoliny: $karolina" #Wyświetlenie adresu MAC
echo "Adres MAC Neli: $nela" #Wyświetlenie adresu MAC
echo ""
echo "maksymalna ilość użytkowników: $max_ilosc_domownikow"
echo "-------------------------------------"
sleep 4
for (( ; ; ))
do
for (( i=1; $i <= 254; i++ )) #Pętla licząca adresy IP, które będą brane pod uwagę. Musi być ustawiona pod DHCP pool.
do
HOST_IP="192.168.0.$i" #Deklaracja zmiennej prezentującej adres IP
echo "pingowanie hosta $HOST_IP" #Wyświetlenie, jaki adres IP jest sprawdzany w danym momencie
if [ -n "$( ping -c 1 $HOST_IP|grep ttl=64)" ] #Jeżeli sprawdzany host odpowiada, warunek jest spełniony
then
echo "host z adresem $HOST_IP jest osiągalny"
fi
done
echo "-------------------------------------"
if [ -n "$( arp |grep $remik)" ] #Sprawdzenie, czy w tablicach ARP znajduje się rządany adres MAC
then
remik_IP=$(arp |grep $remik |cut -c1-15) #wyciągnięcie adresu IP z tablicy ARP i zapisanie do zmiennej
if [ -n "$( ping -c 1 $remik_IP |grep ttl=64)" ] #Sprawdzenie, czy adres IP jest dostępny w sieci
then
remik_w_domu="1" #Zmienna opisująca obecnośc w domu.
echo "Telefon Remika jest osiągalny i ma adres $remik_IP"
# wget --spider -------LINK DO SUPLI --------- #Link bezpośredni aktywujący kanał w Supli
sleep 1
else
arp -d $remik_IP #czyszczenie tablicy ARP z nieaktualnego wpisu
remik_IP="0" #wyzerowanie adresu IP zmiennej gdy host nie odpowiada
remik_w_domu="0"
echo "Telefon Remika nie jest osiągalny. Wyczyszczoo tablice ARP"
# wget --spider -------LINK DO SUPLI --------- #Link bezpośredni dezaktywujący kanał w Supli
fi
else
remik_w_domu="0"
echo "Telefon Remika nie jest osiągalny"
fi
if [ -n "$( arp |grep $karolina)" ]
then
karolina_IP=$(arp |grep $karolina |cut -c1-15)
if [ -n "$( ping -c 1 $karolina_IP |grep ttl=64)" ]
then
karolina_w_domu="1"
echo "Telefon Karoliny jest osiągalny i ma adres $karolina_IP"
# wget --spider -------LINK DO SUPLI --------- #Link bezpośredni aktywujący kanał w Supli
sleep 1
else
arp -d $karolina_IP
karolina_IP="0"
karolina_w_domu="0"
echo "Telefon Karoliny nie jest osiągalny. Wyczyszczoo tablice ARP"
# wget --spider -------LINK DO SUPLI --------- #Link bezpośredni dezaktywujący kanał w Supli
fi
else
karolina_w_domu="0"
echo "Telefon Karoliny nie jest osiągalny"
fi
if [ -n "$( arp |grep $nela)" ]
then
nela_IP=$(arp |grep $nela |cut -c1-15)
if [ -n "$( ping -c 1 $nela_IP |grep ttl=64)" ]
then
nela_w_domu="1"
echo "Telefon Neli jest osiągalny i ma adres $nela_IP"
# wget --spider -------LINK DO SUPLI --------- #Link bezpośredni aktywujący kanał w Supli
sleep 1
else
arp -d $nela_IP
nela_IP="0"
nela_w_domu="0"
echo "Telefon Neli nie jest osiągalny. Wyczyszczoo tablice ARP"
# wget --spider -------LINK DO SUPLI --------- #Link bezpośredni dezaktywujący kanał w Supli
fi
else
nela_w_domu="0"
echo "Telefon Neli nie jest osiągalny"
fi
liczba_domownikow=$[remik_w_domu + karolina_w_domu + nela_w_domu] #Policzenie, ilu jest domowników w domu
while [ $liczba_domownikow == $max_ilosc_domownikow ]; do #Pętla sprawdzająca, czy maksymalna ilość domowników jest osiągnięta. Gdy nie jest, pętla nie wykonuje sie.
echo "osiągnięto maksymalną liczbę domowników. Następne sprawdzenie za 60 sekund"
sleep 60
if [ -n "$( ping -c 1 $remik_IP |grep ttl=64)" ]; then
remik_w_domu=1
else
remik_w_domu=0
fi
if [ -n "$( ping -c 1 $karolina_IP |grep ttl=64)" ]; then
karolina_w_domu=1
else
karolina_w_domu=0
fi
if [ -n "$( ping -c 1 $nela_IP |grep ttl=64)" ]; then
nela_w_domu=1
else
nela_w_domu=0
fi
liczba_domownikow=$[remik_w_domu + karolina_w_domu + nela_w_domu]
done
echo "W domu nie ma wszystkich domowników. Powrót do skanowania sieci w celu ponownej weryfikacji"
echo "-------------------------------------"
sleep 15
done