Temat: Sortowanie temperatur z gpio (1wire)

W jaki sposób można zrobić segregację odczytanych danych z czujników, które odczytuje się np. tak
cat /sys/bus/w1/devices/w1_bus_master*/w1_master_slaves

W drugim pliku miałbym numery seryjne czujników z zapisaną wiersz po wierszu kolejnością.
Da się to zrobić jakoś bashem ?

2

Odp: Sortowanie temperatur z gpio (1wire)

Nie rób tego przez cat tylko zrób sobie prostą pętlę to będzie wiedział który odczytujesz.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Sortowanie temperatur z gpio (1wire)

Mam taki skrypt

TempFromDigiTemp="/tmp/temp.txt"
TempList="/tmp/lista.txt"
TempOutput="/tmp/wynik.txt"

rm $TempOutput
#odczyt temperatur z listy kolejnosci
c=0
while read -r line; do
        eval ArrayOrder$c=\"$line\"
        c=$(expr $c + 1)
done < $TempList
eval dlg=\"$(expr $c - 1)\"

#odczyt temperatur z digitempa
c=0
while read -r line; do
        zmienna=$(echo $line | cut -f1 -d",")
        eval ArrayTempIdList$c=\"$zmienna\"
        eval ArrayTempList$c=\"$line\"
        c=$(expr $c + 1)
done < $TempFromDigiTemp

#generowanie temperatur na podstawie kolejnosci i odczytow
j=0;
while [ $j -le $dlg ]; do
        i=0;
        while [ $i -le $dlg ]; do
        eval assign="\$ArrayOrder$j"
        eval assign2="\$ArrayTempIdList$i"
        eval assign3="\$ArrayTempList$i"

        temperatura=$(echo $assign3 | cut -f2 -d",")

        if [ "$assign" = "$assign2" ]
        then
                echo $temperatura >> $TempOutput
        fi
        i=$(expr $i + 1)
        done
j=$(expr $j + 1)
done

W którym w jednym pliku mam wylistowane po kolei temperatury gdzie w każdym wierszu
jest nr seryjny i temperatura
w drugim jest nr seryjny według zadanej kolejności

Może można to zrobić jeszcze jakoś bardziej elegancko ?

4

Odp: Sortowanie temperatur z gpio (1wire)

Zainstaluj coreutils-paste (w przypadku openwrt) i :

root@OpenWrt:~# cat plik1.txt 
1
2
3
4
5

root@OpenWrt:~# cat plik2.txt 
11
12
13
14
15

root@OpenWrt:~# paste plik1.txt plik2.txt 
1    11
2    12
3    13
4    14
5    15
    
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Sortowanie temperatur z gpio (1wire)

Zerknij na mój skrypt ewentualnie usuń wyrejestrowanie czujników bo nie pamiętam czy działało a nie mam jak soprawdzić bo mi RPI 3 padło.

#!/bin/bash
#zmienna liczaca
i=1

#sprawdzenie liczby czujnikow aktualnie zarejestrowanych w systemie
LICZBA_CZUJNIKOW=`cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count`

#wyrejestrowanie wszystkich czujnikow
while [ $i -le $LICZBA_CZUJNIKOW ]
do
    ID_CZUJNIKA=`awk NR==1{print} /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves`
    echo $ID_CZUJNIKA &gt; /sys/bus/w1/devices/w1_bus_master1/w1_master_remove
    i=$(($i+1))
done

#ponownie skanowanie
echo 1 &gt; /sys/bus/w1/devices/w1_bus_master1/w1_master_search

#ponowne sprawdzenie liczby podlaczonych czujnikow
LICZBA_CZUJNIKOW=`cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count`
echo "Czas rozpoczecia pomiaru: " `date +%H:%M`
echo "Liczba wykrytych czujnikow: $LICZBA_CZUJNIKOW"
i=1

#id
while [ $i -le $LICZBA_CZUJNIKOW ]
do
    ID_CZUJNIKA=`awk NR==$i{print} /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves`
    cat /sys/bus/w1/devices/$ID_CZUJNIKA/w1_slave &gt; /tmp/pomiar
    CRC=`cat /tmp/pomiar | grep crc | awk '{ print $12 }'`

    WYNIK=`awk -F= '/t=/ {print $2/1000}' /tmp/pomiar`
    echo "CRC: $CRC Czujnik: $ID_CZUJNIKA - Wartosc temperatury: $WYNIK C"

    i=$(($i+1))
done
Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

6

Odp: Sortowanie temperatur z gpio (1wire)

Jak ten pierwszy nie zadziała to sprawdź ten

#!/bin/bash

#sprawdzenie liczby podlaczonych czujnikow
LICZBA_CZUJNIKOW=`cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count`
echo "Czas rozpoczecia pomiaru: " `date +%H:%M`
echo "Liczba wykrytych czujnikow: $LICZBA_CZUJNIKOW"
i=1

#id
while [ $i -le $LICZBA_CZUJNIKOW ]
do
        ID_CZUJNIKA=`awk NR==$i{print} /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves`
        cat /sys/bus/w1/devices/$ID_CZUJNIKA/w1_slave > /tmp/pomiar
        CRC=`cat /tmp/pomiar | grep crc | awk '{ print $12 }'`

        WYNIK=`awk -F= '/t=/ {print $2/1000}' /tmp/pomiar`
        echo "CRC: $CRC Czujnik: $ID_CZUJNIKA - Wartosc temperatury: $WYNIK C"

        i=$(($i+1))

done
Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

7

Odp: Sortowanie temperatur z gpio (1wire)

Dzięki za zainteresowanie

Aktualnie mam taki skrypt ale do ściśle określonej listy z numerami danych czujników chyba jednak użyję w/w mojego skryptu bo innej możliwości nie znam.

Nie za bardzo widzę w tej roli pakiet coreutils-paste.

8

Odp: Sortowanie temperatur z gpio (1wire)

paste łączy dwa pliki wiersz po wierszu. Nie to właśnie chciałeś?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.