Orange Pi One... нужен старт

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Logik пишет:

//нужно собрать дистрибутив с преднастройками для установки его на orange pi lite и т.п. (где только один USB и Ethernet)

А не разумней ли  говорить не про создание дистрибутива, а о копировании образа карты памяти с которой грузится ОС.

Тоже как вариант. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

axill пишет:

p.masyukov пишет:

Влезу со своей темой.

Дайте ссылки на русскоязычные сайты, где описано:

1. Как установить apache + php + MySQL + phpMyAdmin

2. Как отключить графический интерфейс, хотя можно просто поставить линукс сервер

3. Как собрать дистрибутив с предустановленным  1-пункт

4. как с апатча обращаться к gpio

с русскоязычными не подскажу, читаю на английском. Но поиском все находится на ура и поисковики первыми дают ссылки на русском

Установка любой программы в линуксе делается одним из двух способов 1. Используя упаковщик 2. Ручками копированием файлов. Вариант 2 бывает через установку бинарников или исходников. Для установки из исходников по ребуптся еще много чего, как минимум компилятор

самое простое и удобное - через упаковщик. Упаковщики разные. В debian это команда apt-get

В поисковике наберите "установка apache debian"

Можно и самому найти командой "apt-cache search apache" и выбрать из списка нужный пакет

Бляха муха, человек спросил как LAMP воткнуть в дистрибутив и началось )))

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

я тоже не совсем вас понимаю. может нужно залить линюкс на флешкарту и устанавливать доп ПО ? а что вы делаете с ядрами и с орехами для меня темный лес )))

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Baks пишет:

я тоже не совсем вас понимаю. может нужно залить линюкс на флешкарту и устанавливать доп ПО ? а что вы делаете с ядрами и с орехами для меня темный лес )))

Нормальный вариант подсказали, даже два.

Выходит что нужно только влепить LAMP в любой подходящий дистрибутив, удалить если не нужен Networks manager, удалить оболочку (если установлена десктопная версия) и залить вебморду, добиться взаимопонимания GPIO и PHP 

И останется лепить клонов на все устройства - далее каждый поменяет дефолтного на своего - например из вебморды.

Ладно. Обсуждайте тут дальше я пока по администрированию курсы полистаю в ускоренном варианте, как раз праздники времени много, надо как то идти дальше.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

всех с новым годом! протрезвев полез в инет))) 

тут нашел инфу как можно управлять GPIO из php  (с сервера)

http://ph0en1x.net/news/86-raspberry-pi-znakomstvo-s-gpio-perekluchatel-i-svetodiod.html#howto-use-gpi-without-python

читать темпиратурку проца и выводить ее на страничку сайта у меня получилось уже. то же самое можно будет сделать и с пинами

Logik
Offline
Зарегистрирован: 05.08.2014

Всем успехов в наступившем новом 17-м году!  (какая однако неоднозначная фраза ))))

//протрезвев полез в инет))) 

А я наоборот - полез пока не протрезвел ;)

Инфа про работу с пинами из пыхи любопытна. Но надо не забывать, что апача впринципе обслуживает много запросов к страничке, а пин к которому с странички полезут управлять  - только один. Арбитражить както надо. ИМХО перспективней подход  java+websocket у клиента, апача только выдает страничку, а сишный сервак по запросам  websocket работает с GPIO. Так и арбитраж и скорость и размеры все лучше выходит. И работу с ШИМ, сервами и пр. дребеденью проще делать. 

axill
Offline
Зарегистрирован: 05.09.2011

считывать данные с пинов без реалтайма можно и напрямую с php

А вот считывание потока данных требующих реалтайма или же запись значений пинов действительно требуют отдельный процесс который работает независимо от вэб запросов

1. Кто владеет сервлетами на java то можно писать вэб приложение не под апаче, а под томкат. Как делает опенхаб например и кстати писать можно в форме плагина к опенхаб причем такие плагины есть готовые

2. Под апач это можно писать в виде плагина на Си. Но довольно муторно, нужно погрузиться в недра работы апаче

3. Самый универсальный способ это написать отдельный сервис под линукс который будет обслуживать эксклюзивную работу с пинами и обрабатывать уже не эксклюзивные запросы извне. Существовать такой сервис будет в виде отдельного юникс процесса который мы можем запускать при старте системы через initd так же как все остальные сервисы. Написать можно как на Си, так и на любом скриптовом языке. Для обмена с вэб сервером применить один из способов interprocess communication (поисковиком можно найти туториалы) описанных для юниксов. Самый простой из них это файл-сокет, т.е. специально созданный в системе файл через который другие программы смогут получать-посылать данные и команды нашему диспечеру. Этот процесс взаимодействия похож на работу с чтением-записью данных в ардуину воткнутую в апельсинку используя специальный тип файла в папке /dev

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Logik пишет:

Инфа про работу с пинами из пыхи любопытна. Но надо не забывать, что апача впринципе обслуживает много запросов к страничке, а пин к которому с странички полезут управлять  - только один. Арбитражить както надо. 

В общем мне идея такая пришла в голову. к примеру можно прочитать из PHP состояние пина - открыв файл прочитав и закрыть файл. или точно так же можно задать ему новое состояние. (про ШИМ реч вести не думает что стоит так как это не очень подходящий вариант решения) и это все без доп модулей программ и прослоек. 

 Теперь осталось лишь подать высокий уровень на наш пин чтобы засветить светодиод. Сделаем это выводом числа 1 в файл /sys/class/gpio/gpio22/value, используем вот такую команду:

1
echo 1 > /sys/class/gpio/gpio22/value
Светодиод должен зажечься. Прочитать состояние пина можно при помощи команды:

1
cat /sys/class/gpio/gpio22/value

Для мееня этот вариант приемлим так как сайт в основном будет только для меня и близких (под поролем). так что каллизий и одновременных открытий одного файла не думаю что может случится. и даже если случится такое, проверочку воткнуть на ошибу открытия файла да и фиг с ним, перезагруз поможет.

так-же можно и с ком портом работать, открыыть его на PHP читать и писать в файл

но чето не очень мне нравится такая идея .... душа не лежит так делать, ищю как с питоном работать 

Задумка такая...

скриптик на питоне (назовем его ХХХ) мониторит ком порт и если в него что-то поступает то отправляем все в скриптик на PHP  по адресу localhost/... (там лежит скриптик который будет обрабатывать все что пришло и писать в БД(тут нет проблем кроми скрипта на питоне))

дальше если нужно что-то отправить в ком порт для ардуинки то после получения целого пакета скриптом ХХХ начинается передача в обратную сторану 

есть ли дыры в моем плане?

Logik
Offline
Зарегистрирован: 05.08.2014

axill пишет:

3. Самый универсальный способ это написать отдельный сервис.....

Да. Однозначно.

 

axill пишет:

.. такой сервис  .. Для обмена с вэб сервером...

А зачем обмен с  вэб сервером? Обмениватся напрямую с клиентом открыв сокет. Тут вэб сервер просто ненужное промежуточное звено. Он может быть интересен только как источник контекста, типа узнать какие права у клиента по доступу к gpio, и т.п. Но можна и без этого, просто прийдется аутентификацимю производить отдельно от вэб сервера, что впрочем может быть и хороше для безопасности. 

axill
Offline
Зарегистрирован: 05.09.2011

Baks вы по сути пытаетесь использовать базу данных для взаимодействия разных процессов т.е. тот самый interprocess communication откотором я выше написал

можно и так, хотя это в разы более громоздко и ресурсоемко чем стандартные для юникса способы

файл сокет это один из простых способов, другой более сложный, но проще чем через базу данных - это udp или tcp сокет на localhost

Ключем доступа к файл сокету является полный путь к нужному файлу, а ключем к udp/tcp сокету является номер порта на котором сидит сервер

axill
Offline
Зарегистрирован: 05.09.2011

Logik пишет:

А зачем обмен с  вэб сервером? 

про вэб не я придумал, это из условия задачи Baks

Logik
Offline
Зарегистрирован: 05.08.2014

Так доступ из веба и обмен с веб сервером - разные вещи ))

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

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

я сейчас пытаюсь переварить то что Вы написали (судорожно лезу в яндекс и пользую поиск по куче непонятных слов) )))))

и чтото мне подсказывает что Вы знаете способ решения моей задачи более простой чем тот который я придумал и в голове собрал (почти все кубики)

Задача такая...

есть ардуинка которая передает в компорт апельсики (обычный сериал) показания с датчиков к примеру так е1=23,е2=33,к1=1,р1=99.

На апельсинке установлен Апатч (LAMP - SQL+PHP) там будет  работать сайт и выводить на страничку показания из SQL, так же планируется управление со странички сайта.

тоесть сама задача у апельсинки принять строку и записать ее в БД после чего ответить для ардуинки примерно таким же сообщением (это для управления)

 понятно обьяснил?

axill
Offline
Зарегистрирован: 05.09.2011

Опенхаб вы не любите, а там все это делается без программирования)

ну да ладно

из того, что вы описали в принципе нормально DB использовать как промежуточный слой для связки процесса работающего с ардуиной и вэб сервера, причем в обе стороны, то есть получили данные от ардуины - записали в базу. Периодически проверяем базу на наличие команды для ардуины, если есть то считываем, маркируем в базе как исполненную и шлем ардуине

вэб сервер в свою очередь датчики всегда читает из базы и туда же пишет команду для ардуины

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

так все таки савет какой дадите? на питоне скриптик писать? я про монитор ком порта и ответ в ком порт...

и принцип работы...

вариант 1. мониторим ком портпитоном, если пришло сообщение разбираю его и пишу в БД, после чего считываю с бд ответ и пересылаю обратно (в принципи выглядит нормально за исключением того что в питоне полный 0, прийдется обучаться)

вариант 2. мониторим ком порт питоном, если пришло сообщение пересылаем его в скрипт PHP по адресу localhost/test.php?....  там разбираю данные заношу в БД (этот вариант не совсем хорош однако минимум кода на питоне и для меня в принципи выполним в короткий срок и прост так как php учил немного а из плохого в этом случае не знаю как ответить обратно в порт)

Logik
Offline
Зарегистрирован: 05.08.2014

Ну этого маловато для понимания. Важно знать еще

1. Обемы инфы от ардуино. 2-3 параметра это одно а 200-300 совсем другое.

2. Скорость обновления. раз в минуту - одно, раз в 10мсек  - другое.

3. Клиенту нужна оперативная информация или предыдущая тоже. И как быть с ребутами оранжа.

4. Команды от клиента. Они есть? Несколько клиентов - исключаем полностю или права "командовать" как делить?

5. Где в этой схеме работа с gpio? Они вобще нужны?

Плохо что Вы описуете задачу уже конкретизировано на определенные решения. Не факт что они верные. Хочется слышать задачу чегото типа "хочу чтоб свет включался когда корова замычит" а не "как датчиком вибрации отличить мычание от рычания и нажать выключатель". Ближе к сущности задачу форсмулируйте. Тогда и вопросов менше будет.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

1+2)объем инфы 2-3 строки по 10 параметров каждая в минуту, (это максимум)

3) клиент если это подключеная ардуинка которая будет ждать ответ то ей возвращаем только последнюю инфу и то если чтото изменилось в управлении. На ребуты можно забить, тут не космический корабль, можно и руками перезагрузить вечером если бесперебойник не справится или еще что...

4)Клиент не командуетт, только считывают показания и немного регулируют согласно полученых данных сервера. и клиент только один

5) GPIO  это так на будущее, а так в принципи не нужно

нужен сервер с возможностью контроля и немного регулирования через ардуинку ( в принципи от оранжа нужна веб морда и подключение к ардуино) 

Logik
Offline
Зарегистрирован: 05.08.2014

Так там БД и нафиг не надо. 

Вот это "немного регулируют согласно полученых данных" и "сервер с возможностью контроля и немного регулирования через ардуинку" не совсем понимаю. Но похоже имеется в виду что веб сервер выдает клиенту страничку на которой присутствуют элементы управления. Человек их может использовать, после чего соответствующие изменения должны поступить в ардуинку?

Если оно так - это и есть команды.

При таких скоростях я бы даже не делал службу мониторинга компорта. Из пыхи получается работать с компортом - и чудненько! Дето так делал бы. Ардуино собирает показания датчиков и ниче не передает пока не спросят. При запросу странички php скрипт передает на ардуину запрос "дай показания датчиков", та отвечает текущими, формируется страница выдается клиенту. Тот, возможно, чего командует и отправляет на сервер. Механизм передачи от клиента на сервер выбирайте :HTTP, ajax, websocket может и еще чего напридумівали. Если приходит команда, то на веб сервере в скрипте, тем же механизмом что и запрос "дай показания датчиков",  передаем эту команду в ардуину.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Logik пишет:

Так там БД и нафиг не надо. 

нет БД нужна, в планах есть построение графиков.

а если без графиков то да идею Вы подкинули не плохую!

Logik
Offline
Зарегистрирован: 05.08.2014

Тогда БД надо цеплять "с боку" от основного потока информации. А на мой вопрос 3 правильный ответ - "клиенту нужна также предыдущая информация"

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Logik пишет:

Тогда БД надо цеплять "с боку" от основного потока информации. А на мой вопрос 3 правильный ответ - "клиенту нужна также предыдущая информация"

да только последняя актуальная (старая не нужна)

тоесть планирую сделать так...

создам одну таблицу в которой будет хранится показания для клиента и вторую таблицу для флажка (есть изменения для клиента или нету) 

если есть изминения то передаю ардуинке последнюю инфу из первой таблицы, а если нет значит ничего не отдаем на ардуинку

посмотрите пож #315

Logik
Offline
Зарегистрирован: 05.08.2014

.//да только последняя актуальная (старая не нужна)

Разберитесь с мыслями! Только последняя  - значить прошлые не нужны, их нет смысла хранить, и графиков быть не может. Если нужны графики - нужна инфа о прошлом и значить не только последняя. Можна конешно на стороне клиента график собирать с момента подключения клиента. #315 смотрел, компорт не мониторил бы без дела. Делал бы без БД если делать без графиков и "БД сбоку" если с графиками. Гонять инфу сквозь БД нет смысла. И вероятно вместо БД как таковой обошелся бы просто файлом, вероятно XML.

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Logik пишет:

.//да только последняя актуальная (старая не нужна)

Разберитесь с мыслями! Только последняя  - значить прошлые не нужны, их нет смысла хранить, и графиков быть не может. Если нужны графики - нужна инфа о прошлом и значить не только последняя. Можна конешно на стороне клиента график собирать с момента подключения клиента. #315 смотрел, компорт не мониторил бы без дела. Делал бы без БД если делать без графиков и "БД сбоку" если с графиками. Гонять инфу сквозь БД нет смысла. И вероятно вместо БД как таковой обошелся бы просто файлом, вероятно XML.

Лучше  использовать БД. Писать лишнего не придется, да и стандартизировано всё на случай использования еще где либо. Дальше хочешь графики, хочешь таблицы, хочешь вебсервис для удаленного приложения...

А я пока покурю. Хотел апельсинку нагрузить чуть, та греется как утюг. Праздники закончатся и поеду за кулером.

Logik
Offline
Зарегистрирован: 05.08.2014

p.masyukov пишет:

Лучше  использовать БД. Писать лишнего не придется, да и стандартизировано всё на случай использования еще где либо.

Так лепите её и в блинк, чё мелочится))) Про размеры и скорость вы конечно не задумываетесь.

В процессе проектирования задачи наличие той или иной компоненты, технологии и пр. определяется её необходимостью для решения задачи, издержками на применение и сложностью решения без неё. Для данной задачи выбор БД или XML (а возможно даже текстовый CSV, смотря на хотелки подробней) совершенно очевиден. Кстати XML куда более стандартизован чем БД.

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Logik пишет:

p.masyukov пишет:

Лучше  использовать БД. Писать лишнего не придется, да и стандартизировано всё на случай использования еще где либо.

Так лепите её и в блинк, чё мелочится))) Про размеры и скорость вы конечно не задумываетесь.

В процессе проектирования задачи наличие той или иной компоненты, технологии и пр. определяется её необходимостью для решения задачи, издержками на применение и сложностью решения без неё. Для данной задачи выбор БД или XML (а возможно даже текстовый CSV, смотря на хотелки подробней) совершенно очевиден. Кстати XML куда более стандартизован чем БД.

Много слов. Стандартизировано в плане того же языка SQL, можно без напрягов подключиться кому угодно и откуда угодно зная SQL, в случае использования файла XML всё усложнится и любое изменение уже не пятиминутное дело. 

CVS это по сути и есть своеобразный файл БД, а XML прородитель языков разметки и многих БД.

Так что если хочется простоты лучше не изобретать велосипеды. Хотя каждому свое.

Logik
Offline
Зарегистрирован: 05.08.2014

p.masyukov пишет:

Много слов. Стандартизировано в плане того же языка SQL, можно без напрягов подключиться кому угодно и откуда угодно зная SQL, в случае использования файла XML всё усложнится и любое изменение уже не пятиминутное дело. 

CVS это по сути и есть своеобразный файл БД, а XML прородитель языков разметки и многих БД.

Так что если хочется простоты лучше не изобретать велосипеды. Хотя каждому свое.

Много бреда. Чуствуется вебдизайнер зацикленый на MySQL. Пример подключения "подключиться кому угодно и откуда угодно" из драйвера продемонстрируйте? Или из обработчика прерывания?

//любое изменение уже не пятиминутное дело. 

Изменение чего? Привычного шаблона мыслей- да, некоторым жизни не хватает. 

//CVS это по сути и есть своеобразный файл БД

Тогда bmp тоже "своеобразный файл БД" с цветом пикселей, ну и wav тоже.  Но лучше обратится к источникам  https://ru.wikipedia.org/wiki/CSV

CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных.

Вам свой бред лучше держать при себе.

//XML прородитель языков разметки и многих БД.

Зачем снова чепуху писать. XML специфицирован в 1998г намного позже HTML и популярных СУБД. А например SVG соответствуют спеке XML, т.е. упрощает и расширяет применение XML.  И скажите как вопрос выбора технологии вобще зависит от кто кого породил? Важно что c XML все проще чем с БД.

Например создаем текстовый файл с следующим.

 

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<svg version = "1.1"
  baseProfile="full"
  xmlns = "http://www.w3.org/2000/svg" 
  xmlns:xlink = "http://www.w3.org/1999/xlink"
  xmlns:ev = "http://www.w3.org/2001/xml-events"
  height = "400px"  width = "400px">
  <rect x="0" y="0" width="400" height="400" 
    fill="none" stroke="black" stroke-width="5px" stroke-opacity="0.5"/>
  <g fill-opacity="0.7" stroke="black" stroke-width="0.5px">
    <circle cx="200px" cy="200px" r="100px" fill="red"   transform="translate(  0,-50)" />
    <circle cx="200px" cy="200px" r="100px" fill="blue"  transform="translate( 70, 50)" />
    <circle cx="200px" cy="200px" r="100px" fill="green" transform="translate(-70, 50)" />
  </g>
</svg>

 Сохраняем с расширением xml и открываем не сильно старым броузером.

Что стоит сгенерить такой файл из кода на любом языке - ниче не стоит. Шаблон на первые 10 строк скопировать,  да цикл вывода графических примитивов с задаными числами. Все. И добавить очередную точку в график - это добавить одну строку третей снизу. Все. Файл хранится, на запросы выдается. БД и рядом не стояло. 

//Так что если хочется простоты лучше не изобретать велосипеды. Хотя каждому свое.

Вы похоже на велосипеде и по ступенькам и по льду и через речку катаетесь. Один подход ко всему. Действительно каждому - свое.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Немного оффтопный вопрос, но очень важный)
Поднимал на OPI PC веб-сервер, пробросил порт 80 через админку точки доступа, в локальной сети (компы, подключенные к этому же Wi-Fi) сайт работает, причём не только по локальному IP, но и по внешнему, и даже через привязанный к IP домен заходит, а снаружи тайм-аут ловит...(кто виноват и что делать?))

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Logik пишет:

Что-то у меня интерес пропал что-то доказывать, просто переходишь по ссылке и http://natribu.org/

Иди обратно учиться.  А доказывать с пеной мне не обязательно, высказал свое мнение и молчи себе.

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Yarik.Yar пишет:
Немного оффтопный вопрос, но очень важный) Поднимал на OPI PC веб-сервер, пробросил порт 80 через админку точки доступа, в локальной сети (компы, подключенные к этому же Wi-Fi) сайт работает, причём не только по локальному IP, но и по внешнему, и даже через привязанный к IP домен заходит, а снаружи тайм-аут ловит...(кто виноват и что делать?))

А из вне попадаешь куда ? На админку маршрутизатора? Если да то просто поставь DMZ на IP на котором висит сервер.

Я делал проще. На сервере ставил порт 8080, а на маршрутизаторе переадресовывал все входящие на этот ранее указанный порт и при этом не важно где у тебя сервер, на ноуте, на ПК и т.п. 

В конце страницы http://senokosov.info/lamp/install-lamp то чте тебе нужно.

Logik
Offline
Зарегистрирован: 05.08.2014

p.masyukov пишет:

Что-то у меня интерес пропал что-то доказывать

Это потому что ты дебил. У таких интерес не стойкий, импульсивно-расплывчивый. Таким раз по рогам - интерес отпадает.

Logik
Offline
Зарегистрирован: 05.08.2014

Yarik.Yar пишет:
Немного оффтопный вопрос, но очень важный) Поднимал на OPI PC веб-сервер, пробросил порт 80 через админку точки доступа, в локальной сети (компы, подключенные к этому же Wi-Fi) сайт работает, причём не только по локальному IP, но и по внешнему, и даже через привязанный к IP домен заходит, а снаружи тайм-аут ловит...(кто виноват и что делать?))

Делаю все также. Это собственно стандартный подход должно работать. Статический IP есть? Его проверяли?

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Logik пишет:

p.masyukov пишет:

Что-то у меня интерес пропал что-то доказывать

Это потому что ты дебил. У таких интерес не стойкий, импульсивно-расплывчивый. Таким раз по рогам - интерес отпадает.

Вася. Я тебя е...л, за твой гнилой базар. Былабы возможность .... . Наплодилось долбо...в пол страны.

Logik
Offline
Зарегистрирован: 05.08.2014

У таких петь как ты никогда возможности нет и  не будет, то яйца мешают то хер не стоит. Замазался бля если по делу сказать нече. В твоей стране долбо...в поболе чем пол страны. 86%

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Logik пишет:

У таких петь как ты никогда возможности нет и  не будет, то яйца мешают то хер не стоит. Замазался бля если по делу сказать нече. В твоей стране долбо...в поболе чем пол страны. 86%

ДЕБИЛ просто.

А я пойду спать. Наскучило мне со всякой швалью общаться.

Logik
Offline
Зарегистрирован: 05.08.2014

p.masyukov пишет:

Logik пишет:

У таких петь как ты никогда возможности нет и  не будет, то яйца мешают то хер не стоит. Замазался бля если по делу сказать нече. В твоей стране долбо...в поболе чем пол страны. 86%

ДЕБИЛ просто.

А я пойду спать. Наскучило мне со всякой швалью общаться.

Это замечательно что в результате обсуждения мы пришли к одинаковому выводу о Вас. Я ж еще в #330 тож писал "Это потому что ты дебил." Теперь и ты согласился. Действительно - "ДЕБИЛ просто.

Спокойной ночи!

axill
Offline
Зарегистрирован: 05.09.2011

Модераторы, просьба почистить ветку от оффтопиков

ребята, давайте жить дружно (с)

axill
Offline
Зарегистрирован: 05.09.2011

Обновил openhab2 до последней версии через apt-get, там появились отдельные модули bindings для GPIO и для Serial

Если опенхаб юзать то все просто настраивается

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

axill пишет:

Модераторы, просьба почистить ветку от оффтопиков

ребята, давайте жить дружно (с)

100% согласен, у каждого свое мнение которое в какойто степени подходит лля решения определенной пробемы и каждый осанется при своем мнении если не убидить собеседника доводами с доказательствами, оскорбления не к чиму хорошему пока не привели!

в топку опенхаб, и вообще не доверяю я таким сервисам ( возможно я не прав но это мое мнение)

а сейчас решил выполнить все только на PHP без использования питона в связи с отсутствие знаний о нем и тем что не нашел подходящего примера по отправки гет запроса и получения ответа.

и чтото не пойму есть фай ttyUSB0 я его пытаюсь проверить на пхп, в смысле его вес, и всегда выдает 0 байт


<?php
$USB = "/dev/ttyUSB0" ;
function get_filesize($file)
{
    if(!file_exists($file))
    {
    	 return "File not faund";   
     }
     else
      {
       return   $filesize = filesize($file);    	 	
      }	
 }

 echo(get_filesize($USB)) ;

?>

что это за файл такой создает линюкс при подключении к юсб порту

Logik
Offline
Зарегистрирован: 05.08.2014

Так надо чего отправить с ардуині в ЮСБ. Тогда и вес должен появится.

//и вообще не доверяю я таким сервисам 

аналогично.

axill
Offline
Зарегистрирован: 05.09.2011

Baks насчет опенхаба - тут дело личное. Я исхожу из того, что в этот продукт вложено десятки тысяч часов разработки сообществом

сделать все под себя можно, но вложить такие же усилия и получить теже возможности минимумом усилий нереально

мне вот gpio и serial совсем не нужны. Каждому свое

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Logik пишет:

Так надо чего отправить с ардуині в ЮСБ. Тогда и вес должен появится.

так она и отправляет через 1000мс слово "hello"

и еще нужна помощ, не могу открыть компорт

<?php

$bufer = '';
$ch=' ';
$filename = "/dev/ttyUSB0";      //порт
$fp = fopen($filename, "r+");  //открыть порт

if ($fp) //если порт открыт
{
 fwrite($fp, $_GET['send_m']);  //полать в порт строку

   while ($ch != chr(0xA)) 
   {
     $ch = fgetc($fp); //прочитать один символ из порта
     $bufer.=$ch;
   }    
    echo "<br>".$bufer; 

fclose($fp); //закрыть порт
} else echo "err Open Port" ;
      
?>

чтото не доганяю может что-то с правами или группами не то?

ДА группы разные, скрипт пренадлежит root  а фал ttyUSB0 пренадлежит dialout

это может быть причиной?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

все сделал прослойку на питоне, php так и не заработал

вот что получилось 

import serial
import requests
 
ser = serial.Serial("/dev/ttyUSB0")
ser.baudrate = 9600
 
while True :
  line = ser.readline() # читам ком порт и пишим в переменную
  r = requests.get('http://localhost/test4.php?ID=' + line) # отправим строку в PHP скрипт для разбора (от ардуинки)
  print r.text  # тут ответ из php скрипта который должен вернуться в ардуинку

 

пришлось установить библиотеку питона reqests и какойто pip http://www.saltycrane.com/blog/2010/02/how-install-pip-ubuntu/

a5021
Offline
Зарегистрирован: 07.07.2013

Перл, мне кажется, тут поинтереснее питона будет выглядеть:

#!/usr/bin/env perl
use IO::Socket;
my $serial_port = '/dev/ttyACM0';
system("stty -F $serial_port 115200 clocal cread cs8 -cstopb -parenb") == 0 or die "unable to run stty. Error = $?.";
open FILE, $serial_port  or die "unable to open serial port. Error = $?.";
while(<FILE>){ #read line by line from serial port
  # and send stings received to remote syslog
  my $socket = IO::Socket::INET->new(PeerAddr => '192.168.0.100',
                                     PeerPort => '514',
                                     Proto => 'udp');
  print $socket '<182>1 ', $_;
  close($socket);
}
close FILE;

Данный скрипт шлет все, что пришло с последовательного порта, демону rsyslog по сети.

Logik
Offline
Зарегистрирован: 05.08.2014

//ерл, мне кажется, тут поинтереснее питона будет выглядеть

Та оба хреновенько. До кучи и сишную реализацию.


void GetArduinoStr(int* h_usb, char* s_usb)
{
     static int s_usb_ind;
     static bool flg_nn;

     if(*h_usb>0)
     {
          char ch;
          int r;
          for(;(r=read(*h_usb, s_usb+s_usb_ind,  200-s_usb_ind))>0;)
          {
            int j=s_usb_ind;

            for(int i=0;i<r;i++,j++)
            {
             s_usb_ind++;
             if(s_usb[j]=='\n')
             {
                if(flg_nn)
                {
                 s_usb[j-1]=0;
                 printf("USB:[%s]\n ",s_usb);
                 memcpy(s_usb,s_usb+j+1,200-j);
                 s_usb_ind=0;
                 j=0;
                 flg_nn=false;
                }
                else
                 flg_nn=true;
             }
            }
          }
      if(!r)
      {
          printf("USB eof\n");
          close(*h_usb);
          *h_usb=0;
      }
    }
    else
    {
       s_usb_ind=0;
       *h_usb=open("//dev//ttyUSB0", O_RDONLY | O_NONBLOCK);
       if(*h_usb>0)
       {
         flg_nn=false;
         printf("USB open\n ");
       }
    }
}

Неблокирующее чтение по строкам. Впринципе предусмотрен прием сообщений с разрывами, и формирование законченой строки (стр.12-32), что мне требуется для дальнейшей отправки в веб, пол строки туда не надо!!. Но этот момент не тестировался. Вылезла и была пофикшена традеционная линуксовая хрень - ардуино передает завершение строки /r/n что приводит в линуксе к получению /n/n и двойному концу строки. Отрабатывает горячее отключение (стр.32-38) и подключение (последний блок кода). Внешне диагностируем подключение по h_usb!=0. Передачу в ардуино не делал - нечего передавать. Длина строки до 100символов, там константа 200, т.к. в реале волнует чтоб почти 2 строки в буфер влазили. Вызываем так.

   static int h_usb;
   static char s_usb[200]; //размер буфера должен превышать максимальную длину 2-х строк$

   GetArduinoStr(&h_usb, s_usb);

 

a5021
Offline
Зарегистрирован: 07.07.2013

Вам действительно видится, что предложенный код на Си чем-то лучше перловского

while (<FILE>) {
...
}

?

Logik
Offline
Зарегистрирован: 05.08.2014

Шутите шоле? До первого апреля вроде далеко. Ну допустим реально не понимаете. Тогда подумайте что будет если ардуинку вынути и сново воткнуть в той перловке. Или про скорость подумайте. Или про блокирование остальной программы на время приема.

Воще озвучте шоль критерии определния "лучше".

a5021
Offline
Зарегистрирован: 07.07.2013

Вообще-то, при отключении ардуины, вышеупомянутый цикл естественным образом завершается. Чего еще тут надобно "реально понимать" ?

Скорость? И какие проблемы в плане скорости у Перла, а главное, чем это должно быть чревато? Для подобного класса задач, основное время программа проводит занимаясь вводом/выводом или ожидая его. Качественно изменить сам процесс ожидания путем использования разных языков программирования представляется мне нетривиальной задачей. Программы, что на шелле, что на ассемблере ждут чего-нибудь совершенно одинаковым образом.

Про "блокирование остальной программы" -- вообще неизвестно о чем. Перл располагает обширными встроенными средствами обеспечения взаимодействия между процессами (сигналы, файлы, каналы, сокеты и т.п.), чтобы разложить весь требуемый функционал "остальной программы" по принципу "одна задача -- один процесс" и вообще никогда ни про какое блокирование не вспоминать.

Насчет "лучше" -- это же очевидно -- решить задачу более простым способом, затратив меньше усилий. Для задач типа "принял данные из порта и пробросил в сеть", перл рвет си, просто на молекулы.

Logik
Offline
Зарегистрирован: 05.08.2014

a5021 пишет:

Вообще-то, при отключении ардуины, вышеупомянутый цикл естественным образом завершается. Чего еще тут надобно "реально понимать" ?

Чегож тут естественного. Серверное приложение упало от того что ардуинку вынули  или ребутнули. Естественным образом завершилось)))

 

a5021 пишет:

Скорость? И какие проблемы в плане скорости у Перла, а главное, чем это должно быть чревато? 

Не тупите, скорости работы - один из основных параметров. Всегда и везде.

a5021 пишет:

Для подобного класса задач, основное время программа проводит занимаясь вводом/выводом или ожидая его. 

Это ваши влажные фантазии. Моя прога мониторит и управляет GPIO, читает АЦП, управляет сервоприводом поддерживает протокол WebSocket для всего этого и еще коечё по мелочам. А потенциала там вобще немерено. Вы действительно считаете что 4 ядра 1,4ГГц это для "основное время программа проводит занимаясь вводом/выводом или ожидая его". А сколько надо для серезных задач? Например светодиодом поморгать ;)

a5021 пишет:

Программы, что на шелле, что на ассемблере ждут чего-нибудь совершенно одинаковым образом.

Значить драйвера, к примеру сетевухи, надо на шеле писать? Он же ждет пакеты. 

a5021 пишет:

Про "блокирование остальной программы" -- вообще неизвестно о чем. 

Думаю из вышеописаного стало понятно. Ардуино на USB - только одно из обслуживаемых устройств.

a5021 пишет:

 Перл располагает обширными встроенными средствами обеспечения взаимодействия между процессами

Да пофиг. Этим располагают все, это вобще ОС предоставляет. И Си не исключение, но вся прелесть в том что на Си можна писать не прибегая без надобности к такому, получая компактные быстрые приложения минимально зависящие от происходящего в системе (т.е. зависящие только там, где без этого никак). Написать бесконечный цикл с fgets много ума не надо. Получится то же что в перловке: дернул USB - слетело, задержался /n - подвисло до его прихода. Но мой опыт и самоуважение подсказывают "халтура сделаная для себя называется геморой". Зачем вобще такое хоби если в нем на тяп-ляп.

  Если на каждую запятую процесс запускать, да пайп для обмена да критические секции с семафорами поразтыкать то получится монстр типа студенческого проекта по изучению потоков. Иногда такое даже продают. Но себе нафиг такое.  

a5021 пишет:

по принципу "одна задача -- один процесс" и вообще никогда ни про какое блокирование не вспоминать.

Вы наверно теоретик)) На практике, возвращаясь к моему проекту, несколько перефирий работают по одному каналу. Несколько одновременнно решили чтото передать и... начинаем синхронизацию с процессом обмена, ждем от него ответа (а пока он обслуживает одного - остальные просто ждут, а обслужить - этож с веб-клиентом пообщатся).  Вы просто незнакомы с проблемами многопоточности, потому и считаете "вообще никогда ни про какое блокирование не вспоминать" Там все намного сложней и совсем не радужно. 

ПС. Иногда такая архитектура "одна задача -- один процесс" бывает оправдана, например когда нужно строго изолировать обслуживание клиентов - БД, браузер (чтоб один подвис или затупил - остальные не почувствовали), но далеко не всегда. К тому же что значить "задача"? Мониторить один пин - задача, тогда сколько пинов - столько задач. абсурд.

a5021
Offline
Зарегистрирован: 07.07.2013

Logik пишет:
Чегож тут естественного. Серверное приложение упало от того что ардуинку вынули  или ребутнули. Естественным образом завершилось)))

Прочесть с первого раза никак? Я ж вроде простым и поянтным языком написал, что "цикл естественным образом завершается". Где тут про "серверное приложение упало" ? Без дичи и фантазий не получается аргументированно возражать?

Цитата:
Не тупите, скорости работы - один из основных параметров. Всегда и везде.

Это постановление правительства такое было или вы тут только что сами все сочинили? А зачем его вообще тогда придумывали, этот перл, если с "одним из основных параметров" у него, с ваших слов, и не очень как-то?

Цитата:
Это ваши влажные фантазии. Моя прога мониторит и управляет

Данная "ваша прога" тут никогда ранее не упоминалась и не публиковалась, чтобы можно было хоть как-то ее отличить от теперь уже ваших "влажных фанатазий". Мои же "влажные фантазии" касались исключительно вопросов здесь обсуждавшихся и кода здесь приведенного. Отсюда опеределить, чьи фантазии влажнее, можно легко и просто.

Цитата:
Вы наверно теоретик))

Наверное. Больше десяти лет с разной интенсивностью админю сервера под фрей и линухом исключительно посредством бесплодного теоретизирования.

Цитата:
На практике, возвращаясь к моему проекту,

Нельзя вернуться к тому, чего никто не видел и существования чему нет достаточных подтверждений.

Цитата:
Вы просто незнакомы с проблемами многопоточности, потому и считаете "вообще никогда ни про какое блокирование не вспоминать" Там все намного сложней и совсем не радужно.

Я бы вам посоветовал воздераться от приписывания качеств и состояний мне не свойственных.

Logik
Offline
Зарегистрирован: 05.08.2014

// Где тут про "серверное приложение упало"

Разясняю. OPi данные от ардуины куда девает, если не отправляет клиенту. Клиент-серверная архитектура, не слыхал, не? Так кто клиент и кто сервер? а приложение работающее на Opi тогда что? Аргументировано. Я на ваши вопросы ответил, Ваша очередь не игнорить мои.

//Данная "ваша прога" тут никогда ранее не упоминалась и не публиковалась

Ложь. #52  и через 2 сообщения в развитии. Ну функционал яснодело подрос. Я его описал. И он весь по теме обсуждался. Даже серва. Читать надо.

//Больше десяти лет с разной интенсивностью админю сервера под фрей и линухом исключительно посредством бесплодного теоретизирования.

Верю. И уважаю Ваши знания в области администрирования. Особенно линух. Мне она не родная. Ну а я 20 лет комерческого софта, (в т.ч. и серверного, и БД, и низкий уровень, все кроме веба по серезному)  плюс до этого для себя по малолетству. Да, даже на перле писал, хоть и было противно. И многопоточные, порядка 500 потоков сервера тож писал. Потому давайте так: дело админа - админить, а архитектуру оставте разрабу. 

//Нельзя вернуться к тому, чего никто не видел и существования чему нет достаточных подтверждений.

Я там выше ссылался, но разумно ограничится обсуждением функции   GetArduinoStr исходя из того что она в софте не одна и не должна мешать остальному и должна рационально использовать ресурсы (расшифрую на всяк: место на диске, место в ОЗУ, процессорное время). Просто считаем что ресурсы тоже нужны кому-то, не важно кому. Это какбы базовые требования абсолютно к любому пустяковому модулю. А обсуждаемый - вполне пустяковый. Если они не выполняются - нужно аргументировать, что иначе ни как. 

//Я бы вам посоветовал воздераться от приписывания качеств и состояний мне не свойственных.

Поверте, админ в разработке ПО ниче не ... Не его зона компетенции. Потому не будьте катигоричны и все наладится.

ПС. Знаете как выглядит статистика сервера с 500 активными потоками. Наверно догадвываетесь, 99% потоков waiting.