Форум Херсона. Форум Херсонской молодежи.

Форум Херсона. Форум Херсонской молодежи. (http://forum.norma4.net.ua/)
-   Программирование (http://forum.norma4.net.ua/programmirovanie/)
-   -   python скрип (http://forum.norma4.net.ua/programmirovanie/90131-python-skrip.html)

Вик 15.12.2017 11:08

python скрип
 

Вложений: 1
Всем привет.
Нужна помощь по редактированию python скрипта. Имеется скрип для датчиков температуры и других. Нужно в этом скрипте добавить ещё два датчка ds18b20. Но не хватает знаний что откуда берётся.
Где берутся эти данные?
Код:

html.write('                                        <div class="panel-body">\n')
    html.write('                <div class="row">\n')
    html.write('                        <div class="col-md-2">\n')
    html.write('                                  <div class="panel panel-info">\n')
    html.write('                                            <div class="panel-heading">Zunanja temepratura</div>\n')
    html.write('                                        <div class="panel-body" style="text-align: center">\n')
    html.write('                                                <h1>'+str(round(to,1))+'<small> &deg;C</small></h1>\n')
    html.write('                                        </div>\n')
    html.write('                                </div>\n')
    html.write('                        </div>\n')


MyNickName 15.12.2017 13:46

А покажи вывод:
ls -lhd /sys/bus/w1/devices/28-*

Вик 15.12.2017 14:17

Цитата:

Сообщение от MyNickName (Сообщение 1352704)
А покажи вывод:
ls -lhd /sys/bus/w1/devices/28-*

Серийник я знаю как брать и где смотреть. Я не могу понять как значение записываются в html файл +';'+str(round(to,1))+';'+str(ti)+';'+str(round(pa ))+';'+str(hu)+';'+str(al)+';'+str(lu)+' где эти данные берутся?

MyNickName 15.12.2017 14:24

Там функция в коде writeHTML:
Код:

def writeHTML(to, ti, hu, pa, al, lu):
Туда передаются параметры. Это в конце файла:
Код:

writeHTML(tempExt, tempi, humid, press, altit, luxmeter)
to это tempExt, ti - tempi и т.д.

Вик 15.12.2017 14:28

А если такой код добавить несколько раз то как будет
Код:

def readDS18B20():
       
        tempRead = -100.0
        cmdStat, cmdOut = commands.getstatusoutput("cat /sys/bus/w1/devices/28-000005f40f1c/w1_slave")
        dbgprint("DS18B20 output: " + str(cmdOut))

        # Parse output
        if cmdStat == 0:
                matchObj = re.search(r'.*crc=\S*\s(\S*)[\n].*t=(.*)',cmdOut,re.I)
                if matchObj:
                        if matchObj.group(1) == 'YES':
                                tempRead = float(int(matchObj.group(2))/1000.0)
                                dbgprint("Exterior Temperature: "+str(tempRead))
                        else:
                                dbgprint("DS18B20 returned CRC error.")
                else:
                        dbgprint("No match during DS18B20 output parse!!")
        else:
                dbgprint("Error reading DS18B20 sensor")
        return tempRead


MyNickName 15.12.2017 14:43

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

Вик 15.12.2017 15:06

Цитата:

Сообщение от MyNickName (Сообщение 1352715)
Хреново будет.
Покажи вывод, который я запросил из второго поста, попробую тебе написать.

вот

Код:

pi@raspberrypi:~ $ ls -lhd /sys/bus/w1/devices/28-*
lrwxrwxrwx 1 root root 0 Дек 15 15:20 /sys/bus/w1/devices/28-21ee67000900 -> ../../../devices/w1_bus_master1/28-21ee67000900
lrwxrwxrwx 1 root root 0 Дек 15 15:20 /sys/bus/w1/devices/28-7d4358126461 -> ../../../devices/w1_bus_master1/28-7d4358126461
lrwxrwxrwx 1 root root 0 Дек 15 15:20 /sys/bus/w1/devices/28-ab4058126461 -> ../../../devices/w1_bus_master1/28-ab4058126461
pi@raspberrypi:~ $

Почесав затылок, юзер дописал через 3 минуты
Как будет выглядеть код если у меня 3 этих ds18b20 датчика и один bmp180

Вик 15.12.2017 19:47

Я все правильно понял и делаю.
Добавляю readDS18B20b
Код:

def readDS18B20b():
       
        tempRead = -100.0
        cmdStat, cmdOut = commands.getstatusoutput("cat /sys/bus/w1/devices/28-7d4358126461/w1_slave")
        dbgprint("DS18B20 output: " + str(cmdOut))

        # Parse output
        if cmdStat == 0:
                matchObj = re.search(r'.*crc=\S*\s(\S*)[\n].*t=(.*)',cmdOut,re.I)
                if matchObj:
                        if matchObj.group(1) == 'YES':
                                tempRead = float(int(matchObj.group(2))/1000.0)
                                dbgprint("Exterior Temperature: "+str(tempRead))
                        else:
                                dbgprint("DS18B20 returned CRC error.")
                else:
                        dbgprint("No match during DS18B20 output parse!!")
        else:
                dbgprint("Error reading DS18B20 sensor")
        return tempRead

в строке добаляю
Код:

def writeHTML(to, ti, hu, pa, al, lu, tb):
и
Код:

    html.write('                        <div class="col-md-2">\n')
    html.write('                                  <div class="panel panel-warning">\n')
    html.write('                                            <div class="panel-heading">Наружная температура tb</div>\n')
    html.write('                                        <div class="panel-body" style="text-align: center">\n')
    html.write('                                                <h1>'+str(round(tb,1))+'<small> &deg;C</small></h1>\n')
    html.write('                                        </div>\n')
    html.write('                                </div>\n')
    html.write('                        </div>\n')

и
Код:

curr.write(str(vNow)+';'+str(round(to,1))+';'+str(ti)+';'+str(round(pa))+';'+str(hu)+';'+str(al)+';'+str(lu)+';'+str(tb)+'\n')
и
Код:

temptb = readDS18B20b()
и
Код:

cmd = '/usr/bin/rrdtool update /home/pi/bazy/weatherRRD.rrd -t tempo:tempi:press:humid:altit:luxmeter:temptb N:'
cmd = cmd +str(tempExt)+':'+str(tempi)+':'+str(press)+':'+str(humid)+':'+str(altit)+':'+str(luxmeter)+':'+str(temptb)

и
Код:

writeHTML(tempExt, tempi, humid, press, altit, luxmeter, temptb)

Вик 15.12.2017 19:58

Осталось разобраться из БД rrdtool weatherRRD.rrd какие там таблицы нужны чтобы создать заново потому как БД досталась существующая.


Правильно сделал?
Код:

#!/bin/bash
rrdtool create weatherRRD.rrd --start N --step 300 \
DS:tempo:GAUGE:600:U:U \
DS:tempi:GAUGE:600:U:U \
DS:humid:GAUGE:600:U:U \
DS:press:GAUGE:600:U:U \
DS:altit:GAUGE:600:U:U \
DS:luxmeter:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MIN:0.5:1:600 \
RRA:MIN:0.5:6:700 \
RRA:MIN:0.5:24:775 \
RRA:MIN:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:288:797 \


MyNickName 18.12.2017 13:57

Вложений: 1
Посмотри вложение.
По идее можно использовать любое кол-во датчиков температуры. Во всяком случае в html и txt файл данные запишет.
По rrd особо не вникал, но

Код:

cmd = '/usr/bin/rrdtool update /home/pi/project/WeatherStation/weatherRRD.rrd -t tempo:tempi:press:humid:altit:luxmeter N:'
cmd = cmd +str(DS18B20_result[0])+':'+str(tempi)+':'+str(press)+':'+str(humid)+':'+str(altit)+':'+str(luxmeter)

по идее в выделенном можно подшаманить и в rrd будут все нужные датчики.

Вик 18.12.2017 19:05

Вложений: 1
Все работает спасибо
Еще как переместить одно значения, чтобы было в одну строку хоть из меньшим размером

VoVaN 25.12.2017 10:50


Debian 29.12.2017 22:58

в 2000х этот троллинг был весьма толстый

VoVaN 30.12.2017 00:05

Цитата:

Сообщение от Debian (Сообщение 1354378)
в 2000х этот троллинг был весьма толстый

Ну так і ми тоді не були такими снобами як зараз ))))

Вик 30.12.2017 19:34

Вам больше не где спамить. Где-же модераторы?


Время на сервере: 14:52.

vBulletin 3, Copyright © 2000-2024, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co