Raspberry Pi. Общие вопросы. Часть 2 (тема закрыта)
|
|
Admin | Дата: Четверг, 20.10.2016, 14:45 | Сообщение # 1 |
 Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
| Продолжение темы. Начало см. здесь
ВНИМАНИЕ !!! В процессе разработки системы домашней автоматизации было создано несколько различных версий. Из-за этого у многих пользователей возникает путаница - программное обеспечение применяется от одних проектов, прошивки контроллеров от других. Поэтому, перед тем как задавать вопрос, внимательно ознакомьтесь с этой информацией
==============================================================================
Все новые проекты созданные при участии Zoolu (схемы принципиальные, монтажные и прошивки) будут публиковаться по этому адресу. Ну и обязательно дублироваться здесь. Настоятельная просьба регистрироваться по ИНВАЙТ у Zoolu! Этим вы поможете дальнейшим разработками! Спасибо!
Кросс-плата v.2
Сообщение отредактировал Zoolu - Среда, 22.02.2017, 14:25 |
|
| |
OlegM | Дата: Четверг, 01.12.2016, 05:58 | Сообщение # 81 |
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Если интересно о моем протоколе. На работе обслуживаем Lon. Это американский протокол типа KNX только промышленный. Свой протокол я написал по подобию Лона, только с использованием RS485 т.к. он значительно дешевле европейской шины. Протокол полностью децентрализован т.е. нет мастера и слейвов. В протоколе достаточно разрешена проблема коллизий, меня он полностью устраивает и работает уже не один год. Устройства в сети обмениваются телеграммами типа :01DO1S100.00(включить на контроллере с адресом 1 выход1) в ответ он после вкючения отсылает :01DO1R100.00 и т д. Контроллер подключенный к RPI имеет два независимых интерфейса UART для RPI и RS485 для связи с сетью. Он слушает сеть, при получении информации :01DO1R100.00 он присваивает переменной Р1 значение 1 и так по всем устройствам проекта. Раз в несколько секунд, если RS485 не занята он отдаёт строчку с переменными всего проекта в RPI, если получает команду от RPI преобразует её в протокольный вид и передаёт в сеть. Таким образом контроллер не является ни мастером для устройств в сети ни слейвом для RPI просто преобразователь протокола. Эта технология работает у меня давно но в качестве веб сервера ESP8266. От RPI хочется большего объёма страниц, вот и начал переписывать сервер на нём.
Потеря информации при использовании запросов от RPI к контроллеру случается когда в момент запроса идет информация по сети 485. Так как хочется чтобы страница достаточно быстро реагировала на все изменения в сети, то потери достаточно большие - проверено.
олег
|
|
| |
Admin | Дата: Четверг, 01.12.2016, 06:39 | Сообщение # 82 |
 Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
| Цитата Вован (  ) Перечитывать более 100 страниц форума нет ни времени, ни возможности, ни желания, поэтому сразу вопросы: после установки системы по инструкции, скачанной с данного сайта (пробовал и другими разными способами), не могу запустить WinSCP с логином root (п.19 инструкции), п.17 выполнил до этого. С логином pi захожу, создаю указанные директории. Для начала нужно зайти чере Putty на RP, ввести команду sudo webiopi -d -c /etc/webiopi/config и посмотреть, какие терминал возвращает ошибки. RP я так понял с 26 портами GPIO?
Цитата OlegM (  ) Устройства в сети обмениваются телеграммами типа :01DO1S100.00(включить на контроллере с адресом 1 выход1) в ответ он после вкючения отсылает :01DO1R100.00 и т д.Контроллер подключенный к RPI имеет два независимых интерфейса UART для RPI и RS485 для связи с сетью.Он слушает сеть, при получении информации :01DO1R100.00 он присваивает переменной Р1 значение 1 и так по всем устройствам проекта. Раз в несколько секунд, если RS485 не занята он отдаёт строчку с переменными всего проекта в RPI, если получает команду от RPI преобразует её в протокольный вид и передаёт в сеть В принципе все понятно, нечто похожее я использовал в своем протоколе, данные на RP тоже передавались в виде строки с дискретными состояниями входов/выходов и числовых значений измерений. Отличие только в том, что контроллер отдавал данные только по запросу от RP. По поводу разбора строки на Питоне - помнится, что-то пробовал писать, нужно покопаться в исходниках, поищу.
|
|
| |
OlegM | Дата: Четверг, 01.12.2016, 06:54 | Сообщение # 83 |
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Пока сделал вот так
import webiopi # импорт import datetime import json import sys import time import os import subprocess from subprocess import call from time import strftime
celsius_0 = 0 from webiopi import deviceInstance from webiopi.devices.serial import Serial serial = Serial("ttyAMA0", 9600) sensors = 0 def loop():
global celsius_0 global sensors
if (serial.available() > 0): tmp1 = serial.readString() if tmp1[0:1]== 'T': sensors = tmp1[1:6] # read available data print(sensors)
f = open('/home/pi/myproject/html/sensors.txt', 'a' data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),sensors) f.write(data_entry) f.close()
tmp0 = webiopi.deviceInstance("tmp0") celsius_0 = tmp0.getCelsius() # получение температуры print (celsius_0) f=open('/home/pi/myproject/html/data_18B20.txt','a' data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.2f"%celsius_0) f.write(data_entry) f.close() time.sleep(120)
@webiopi.macro # макрос измерения температуры датчика tmp0 def getTmp0(): global celsius_0 tmp0 = webiopi.deviceInstance("tmp0") celsius_0 = tmp0.getCelsius() # получение температуры print (celsius_0) return "%.2f" % celsius_0 # возврат данных температуры в HTML с округлением до сотых
Сделал посылку от контроллера - две разных строки типа Р00100100 0000 и Т+23.21. Длинные строки у меня почему то не обработал питон. Посмотрите пожалуйста, может что не так или умнее что подскажите.Добавлено (01.12.2016, 06:54) --------------------------------------------- Сразу вопрос будет ли графопостроитель понимать сохранённые данные как +23.3 и -21.2 т.е. со знаком
олег
|
|
| |
Вован | Дата: Четверг, 01.12.2016, 07:23 | Сообщение # 84 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Пока ждал ответ, дошел с 1-й до 7й страницы сего форума. Пост#70. Сделал всё как там, заработало. И еще ошибку нашел, в строчке doc-root = /home/pi/myproject/html пропустил слэш Но в WinSCP не могу зайти с логином root, может пользователь не создан? тогда как создать? создал нужную папку от пользователя pi нашел виндовый выход - в свойствах папки myproject и ко всем вложенным папкам и файлам открыл доступ всем пользователям.
Добавлено (01.12.2016, 07:23) ---------------------------------------------
Цитата Admin (  ) RP я так понял с 26 портами GPIO?
Да, именно 26 портов. на ней дата стоит 2011.12 P/S сейчас поигрался с портами, GPIO21 нет, есть GPIO27. Это значить ver.2. Получается 28 портов?
Я знаю, что ничего не знаю.
Сообщение отредактировал Вован - Четверг, 01.12.2016, 10:51 |
|
| |
Admin | Дата: Четверг, 01.12.2016, 11:46 | Сообщение # 85 |
 Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
| Цитата OlegM (  ) Сразу вопрос будет ли графопостроитель понимать сохранённые данные как +23.3 и -21.2 т.е. со знаком Да, dygraph без проблем "понимает" отрицательные числа (со знаком минус). Для положительных чисел + не обязателен
Цитата Вован (  ) Но в WinSCP не могу зайти с логином root, может пользователь не создан? тогда как создать? Случайно не Raspbian Jessie используется? Если да, то можно так попробовать:
1. Войти как обычный пользователь (pi) 2. Открыть файл sshd_config командой sudo nano /etc/ssh/sshd_config 3. Заменить в этом файле строку PermitRootLogin without-password и заменить ее на PermitRootLogin yes 4. Перезапустить сервис командой sudo service ssh restart
|
|
| |
Вован | Дата: Пятница, 02.12.2016, 04:19 | Сообщение # 86 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Цитата Admin (  ) 3. Заменить в этом файле строку PermitRootLogin without-password и заменить ее на PermitRootLogin yes Спасибо Admin. Заменил, зашел под root. Подключил один DS18B20 к шине 1-wire. Данные не отображаются в вебинтерфейсе.
Я знаю, что ничего не знаю.
|
|
| |
Admin | Дата: Пятница, 02.12.2016, 05:06 | Сообщение # 87 |
 Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
| 1. Убрaть в конфиге адрес слейва: Там должно быть tmp0=DS18B20 2. Проверить работу датчика через монитор девайсов: http://xxx.xxx.x.x:8000/app/devices-monitor
|
|
| |
Вован | Дата: Пятница, 02.12.2016, 08:47 | Сообщение # 88 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Только добрался, убрал адрес слейва. Заработал в мониторе девайса. В системе домашней автоматизации нет. но я в файле index.html ковырялся, возможно и сбил чего.
нет, не хочет показывать
Я знаю, что ничего не знаю.
|
|
| |
Admin | Дата: Пятница, 02.12.2016, 09:37 | Сообщение # 89 |
 Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
| Ну зачем во второй раз пустой интерфейс выкладывать, меня больше интересует содержание файла html и скрипта Python
|
|
| |
Вован | Дата: Пятница, 02.12.2016, 09:56 | Сообщение # 90 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| если я правильно понял, то вот эти файлы?
Я знаю, что ничего не знаю.
Сообщение отредактировал Вован - Пятница, 02.12.2016, 09:57 |
|
| |