PING из Raspberry с коммандой?

Тема в разделе "Raspberry Pi", создана пользователем Vitalij, 27 июн 2018.

  1. Igor68

    Igor68 Гуру

    А есть вопрос... ( у меня нет node.js но слышал, что он позволяет записывать файлы из web страницы и даже выполнять некоторые вызовы... ну как PHP) Может я и не прав... но если так, то каждый JS на странице, которая открыта браузером, и без головы может делать всё без Вашего участия. Был бы настроен браузер. Майнеры работают без вашего участия.
    Повторюсь: про возможности ныне модного node.js я не ведаю и всё, что я сказал могут быть предрассудками.
     
  2. AlexU

    AlexU Гуру

    Есть такая практика, как установка сторонних программ в каталог '/opt'. Администратор системы самостоятельно следит за содержимым этого каталога. Но самый лучший вариант это создание пакета, который будет штатно установлен в систему, если система поддерживает такую функциональность. Например, Raspbian основан на Debian, поэтому поддерживает deb-пакеты.
    Затем, что sudo позволяет более гибко контролировать кому что можно делать. Поэтому это довольно распространённый инструмент в Linux системах.
     
  3. AlexU

    AlexU Гуру

    Про эпопею с майнером на сайте форума уже забыли?
     
  4. Mitrandir

    Mitrandir Гуру

    Ну да, в принципе /opt будет более подходящее место
     
  5. b707

    b707 Гуру

    Не все так плохо. sudo совсем не то же самое, что работа под рутом. По умолчанию sudo обычным юзерам запрещено, оно доступно только для тех, кто внесен в файл /etc/sudoers. В этом же файле можно настроить для каждого конкретного юзера свои разрешения. В общем, man sudo :)
     
    parovoZZ нравится это.
  6. Igor68

    Igor68 Гуру

    Повторяю:
    ...я могу быть не прав. Про майнеров - скрипт посетитель сайта сам не запускал... а выполнялось браузером (HTML+JS)
     
  7. Igor68

    Igor68 Гуру

    В принципе верно... я выполнил:
    sudo passwd
    от имени Rpi после первого запуска образа.
    Изменил пароль.
    Потом от имени root создал пользователя (себя). И далее стал заходить от своего имени... а про Rpi забыл. И sudo для себя не настраивал... да и не надо это мне.
     
  8. Igor68

    Igor68 Гуру

    http://qaru.site/questions/47917/nodejs-execute-system-command-synchronously
    https://habr.com/post/136185/
    http://qaru.site/questions/107364/how-to-execute-shell-command-in-javascript
    http://qaru.site/questions/31598/how-can-i-share-code-between-nodejs-and-the-browser
    Если на малине браузер запускать... ну как удалённое приложение.
    https://ru.stackoverflow.com/questi...-файлов-на-стороне-клиента-без-участия-сервра
    Понимаю, что это не тема. Но развейте сомнения.
    Спасибо.
     
    Последнее редактирование: 3 июл 2018
  9. Vitalij

    Vitalij Нерд

    Привет Гуру,

    Имеется дополнительный вопрос, как можно сданным скриптом отправлять комманды на разнэ устройства. Или так возможно как пример:
    Код (Bash):
    #!/bin/bash

    p1=$1
    ((Connect = 0))

    #параметр - интервал проверки (секунд)
    psleep="1"

    #параметр - команда/URL для удачного пинга
    cmdconnect="http://192.168.0.234"
    cmdconnect="http://192.168.0.235"
    cmdconnect="http://192.168.0.236"
    ((flagconnect = 0))

    #параметр - команда/URL для неудачного пинга
    cmddisconnect="http://192.168.0.246"
    cmddisconnect="http://192.168.0.247"
    cmddisconnect="http://192.168.0.248"
    ((flagdisconnect = 0))

    if [ "$p1" == "" ] ; then
        echo "IP addr:"
        read ipurl
    else
        ipurl=$p1
    fi

    # Контроль связи
    function _dev_ping()
    {
        ping -c 1 $ipurl 2>&1>/dev/null
        ret=$?
        if [ ${ret} -eq 0 ] ; then
            echo "connect"
            ((Connect = 1))
        else
            echo "no connect"
            ((Connect = 0))
        fi
    }

    #рабочий цикл проверки и разового вызова
    ((loop = 1))
    while( ((loop > 0)) ); do
        _dev_ping
        if( ((Connect == 1)) ); then
            if ( ((flagconnect < 1)) ); then
                wget $cmdconnect -O-
                ((flagconnect = 1))
                ((flagdisconnect = 0))
            fi
        else
            if( ((flagdisconnect < 1)) ); then
                wget $cmddisconnect -O-
                ((flagdisconnect = 1))
                ((flagconnect = 0))
            fi
        fi
        sleep $psleep
    done
     
     
  10. Mitrandir

    Mitrandir Гуру

    Обьявить cmdconnect и cmddisconnect массивами, а далее блок проверки обернуть в цикл.
    Домашнее задание: прочитать по массивы и циклы в баше
     
    Igor68 нравится это.
  11. Mitrandir

    Mitrandir Гуру

    Igor68 нравится это.
  12. Vitalij

    Vitalij Нерд

    Спасибо за домашнее задание, обязательно изучу.
    Скажите еще пожалуйста, возможно ли с малинкой вместо перехода по ссылке активировать цифровой выход и после восстановления пинг его деактивировать?

    Большое спасибо.
     
  13. Mitrandir

    Mitrandir Гуру

    Да, можно. не знаю можно ли с консоли, поднять ногжку гпио, но можно написать скрипт на питоне и дёрнуть сразу же после wget
     
  14. Mitrandir

    Mitrandir Гуру

    Погуглил, можно и без питона
    1) установить библиотеку wiringPi
    Код (Bash):
    cd
    git clone git://git.drogon.net/wiringPi
    cd wiringPi
    ./build
    Затем устанавливаем гпио 0 в режим вывода и поднимаем в единицу

    Код (Bash):
    gpio mode 0 out
    gpio write 0 1
     
  15. Mitrandir

    Mitrandir Гуру

    Вот тут лежит соответствие номеров ножек и самих ног на плате: http://wiringpi.com/pins/

    В данном случае нас интересует колонка wiringPi

    И команда gpio write <номер ноги> <значение>
     
  16. Igor68

    Igor68 Гуру

  17. Vitalij

    Vitalij Нерд

    Привет гуру,

    Все ли я верно сделал?
    Код (Bash):
    #!/bin/bash

    p1=$1
    ((Connect = 0))

    #параметр - интервал проверки (секунд)
    psleep="1"

    #параметр - команда/URL для удачного пинга
    cmdconnect="gpio write 25 0"
    ((flagconnect = 0))

    #параметр - команда/URL для неудачного пинга
    cmddisconnect="gpio write 25 1"
    ((flagdisconnect = 0))

    if [ "$p1" == "" ] ; then
        echo "IP addr:"
        read ipurl
    else
        ipurl=$p1
    fi

    # Контроль связи
    function _dev_ping()
    {
        ping -c 1 $ipurl 2>&1>/dev/null
        ret=$?
        if [ ${ret} -eq 0 ] ; then
            echo "connect"
            ((Connect = 1))
        else
            echo "no connect"
            ((Connect = 0))
        fi
    }

    #рабочий цикл проверки и разового вызова
    ((loop = 1))
    while( ((loop > 0)) ); do
        _dev_ping
        if( ((Connect == 1)) ); then
            if ( ((flagconnect < 1)) ); then
                wget $cmdconnect -O-
                ((flagconnect = 1))
                ((flagdisconnect = 0))
            fi
        else
            if( ((flagdisconnect < 1)) ); then
                wget $cmddisconnect -O-
                ((flagdisconnect = 1))
                ((flagconnect = 0))
            fi
        fi
        sleep $psleep
    done
     
  18. Igor68

    Igor68 Гуру

    А что означает: wget $cmddisconnect -O-?
    ...это вывзов-чтение html страницы по какому то адресу web сервера.
    А если это надо для управления GPIO, то реализуйте эту команду вместо чтения страницы... вместо этого: wget $cmddisconnect -O-
     
  19. Igor68

    Igor68 Гуру

    Примерно так:
    Код (Bash):
    #рабочий цикл проверки и разового вызова
    ((loop = 1))
    while( ((loop > 0)) ); do
        _dev_ping
        if( ((Connect == 1)) ); then
            if ( ((flagconnect < 1)) ); then
                #wget $cmdconnect -O-
                gpio write 25 0
                ((flagconnect = 1))
                ((flagdisconnect = 0))
            fi
        else
            if( ((flagdisconnect < 1)) ); then
                #wget $cmddisconnect -O-
                gpio write 25 1
                ((flagdisconnect = 1))
                ((flagconnect = 0))
            fi
        fi
        sleep $psleep
    done
    Насколько понял это либо индикатор... или щёлкать релюшкой...
     
  20. Vitalij

    Vitalij Нерд

    Это как реализовать, будьте добры помочь.