PDA

Просмотреть полную версию : Температура наружного воздуха из интернета


viaduc
11.04.2018, 23:50
Автоматика вентиляции построена на 2G(управление) и Trim(визуализация) подключенных через роутер(с выходом в интернет).
Может кто-то уже делал получение температуры из интернета? Работает? Как это реализовать?
Спасибо.

Gromov
12.04.2018, 10:47
Ну я бы делал так:
Пишете скрипт, который через curl, например, получает от api какого-нибудь погодного сайта (яндекс.погода, гисметео, и так далее), информацию, затем от туда, можно прям через grep получить действующее значение температуры и выводить его в шаред мемори, от туда в лоджик.

Явный недостаток: изменение версии api может привести к невозможности прочитать температуру. Curl тоже придётся отдельно поставить на контроллер, так как в заводской сборке его нет, но это легко.

vardan0808
05.01.2024, 11:43
Добрый день, меня тоже интересует эта тема, прошу поддержать опытных коллег.
Поскольку не имею опыта в программировании, с помощью GPT написал небольшой скрипт weather2_fixed.sh, который умеет считывать данные с API openweathermap.org и записывает в файл weather_data.json. Поместил скрипт в /projects/weather/ , но он запускается пока только вручную, cron почему-то не смог его запустить по расписанию. Чтобы запустить скрипт вручную я подключаюсь через WinSCP, затем запускаю Putty и из командной строки мне необходимо сначала ввести пароль, затем перейти в директорию где находится скрипт, затем ввести bash weather2_fixed.sh. При этом скрипт начинает работать и с указанной периодичностью обновляет данные. Если закрыть сессию Putty, процесс прерывается.
Теперь вопрос: как заставить этот скрипт запускаться автоматически либо с cron, либо по автозапуску и записывать считанные данные в соответствующий shmem ?


#!/bin/bash

while true; do
# Отправляем запрос к API погоды и сохраняем ответ в файл
wget -O weather_data.json "http://api.openweathermap.org/data/2.5/weather?q=City&appid=YOUR_API_KEY&units=metric""

# Извлекаем значение температуры из файла с помощью grep
temperature=$(grep -o '"temp":[0-9.]*' weather_data.json | awk -F':' '{print $2}')

# Выводим значение температуры
echo "Текущая температура: $temperature градусов Цельсия"

# Записываем значение температуры в файл (например, temperature.txt)
echo "$temperature" > temperature.txt

# Пауза на 30 минут перед следующим запросом
sleep 1800 # 1800 секунд = 30 минут
done

Ilya J.
06.01.2024, 13:08
ставить этот скрипт запускаться автоматически либо с cron, либо по автозапуску


Стр.35 (https://dl.segnetics.com/PRODUCTS/SMH2Gi/C/docs/SMH2Gi._%cf%f0%ee%e3%f0%e0%ec%ec%e8%f0%ee%e2%e0%ed %e8%e5_%ed%e0_%d1._%d0%f3%ea%ee%e2%ee%e4%f1%f2%e2% ee_v.1.0.pdf), работу вашего скрипта не берусь оценивать,но попробуйте так, и возможно не хватает прав для запуска.

ATS
06.01.2024, 22:17
Совершенно неинтересно решать абсолютно бесполезную задачу. Даже в одном небольшом поселке температуры могут различаться на несколько градусов. :chas:

vardan0808
09.01.2024, 10:56
Стр.35 (https://dl.segnetics.com/PRODUCTS/SMH2Gi/C/docs/SMH2Gi._%cf%f0%ee%e3%f0%e0%ec%ec%e8%f0%ee%e2%e0%ed %e8%e5_%ed%e0_%d1._%d0%f3%ea%ee%e2%ee%e4%f1%f2%e2% ee_v.1.0.pdf), работу вашего скрипта не берусь оценивать, но попробуйте так, и возможно не хватает прав для запуска.
Большое спасибо за поддержку. Указанный в инструкции метод "start after" сразу же заработал на отформатированном (пустом) SMH4. Но после загрузки проекта в контроллер, перестал работать. Перенос в из "start after" в "start before" решил это проблему.
Осталось найти метод (скрипт, команду) записи значения температуры из json файла в shmem переменную.

Arsie
09.01.2024, 11:07
Осталось найти метод (скрипт, команду) записи значения температуры из json файла в shmem переменную.

В справке этого точно нет?

vardan0808
09.01.2024, 13:14
Мои познания в этом очень ограничены - нейросеть генерировала следующие подходы на базе справки:

#!/bin/bash

while true; do
# Читаем значение температуры из файла weather_data.json
temperature=$(grep -o '"temp":[0-9.]*' weather_data.json | awk -F':' '{print $2}')

# Создаем объект Shmem и сохраняем значение температуры
shmem=$(new Shmem)
shmem.saveVariables([{ name: "temperature", value: "$temperature" }])

# Пауза перед следующим обновлением
sleep 300 # Например, ждем 5 минут перед следующим обновлением
done


#!/bin/bash

# Функция для выполнения запроса авторизации
function authenticate {
local login=$1
local password=$2

wget -qO- "http://192.168.2.222/login.php?login=$login&password=$password" &> /dev/null
}

# Функция для отправки данных в shmem
function send_to_shmem {
local name=$1
local value=$2

echo "Trying to send: Name - $name, Value - $value" # Добавим вывод данных для отладки

wget -qO- "http://192.168.2.222/shmem.php?cmd=setvariables&variables=[{\"name\":\"$name\",\"value\":$value}]" &> /dev/null
}

# Ваши учетные данные для авторизации
login="root"
password="segnetics"

# Авторизация
authenticate "$login" "$password"

Arsie
09.01.2024, 13:55
Мои познания в этом очень ограничены - нейросеть генерировала следующие подходы на базе справки:


Нейросеть справку почитала, это я понял. Вы-то лично её изучали?

vardan0808
09.01.2024, 14:15
Да, создание веб-страницы по инструкции осилил, но дальше не пошло.

ATS
09.01.2024, 14:53
Нейросеть справку почитала
Блин, надо присмотреться к ИИ.

Интересно кто теперь сапиенс :sorry:

Arsie
09.01.2024, 14:56
Блин, надо присмотреться к ИИ.

Интересно кто теперь сапиенс :sorry:

Ага, я тож первое, что подумал - это рождается новый класс программистов.


PS. Но в итоге нейросеть рано или поздно запрограммирует своего потомка, а "программист" этого даже понять не сможет. Думаю, именно это будет началом конца, а не Скайнет :resent:


Добавлено через 42 секунды


Да, создание веб-страницы по инструкции осилил, но дальше не пошло.

Там есть пример чтения или записи шмема?

vardan0808
09.01.2024, 15:19
Там пример записи шмема из веб страницы, но мне нужно без веб страницы