51 (edytowany przez kamillo 2013-09-25 17:00:21)

Odp: Pierwszy termometr

panowie do sterowania tą kartą przekaźników Cezary kilka miesięcy temu skompilował pod OpenWrt dla mnie programik smile http://ecco.selfip.net/test/RelayBoard sterowanie jest banalne. Mała instrukcja stworzona przeze mnie do obsługi karty za pomocą tego programiku
http://img818.imageshack.us/img818/7892/vr1k.jpg

Edit: Jak ktoś potrzebuje to można zamówić u gościa kartę z dodatkwymi 8 wejściami do których widać powyżej komendy. Ja taką mam i działa pięknie smile

52

Odp: Pierwszy termometr

bbarwik bardzo podobają mi się te Twoje wykresy. Czy mógłbyś podpowiedzieć jak dokładnie zainstalować bibliotekę highcharts na OpenWrt dla osób mniej kumatych? Zrobiłem sobie termometry z wykresami w rrdtool w/g tutoriala ale z highchart jednak sobie nie radze.

53 (edytowany przez wabikboy 2013-09-25 21:51:29)

Odp: Pierwszy termometr

Highcharts sie nie instaluje, jest to kawałek kodu w pliku strony korzystająca ze skryptów javascript które możesz pobrać ze strony highcharts.

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

54

Odp: Pierwszy termometr

Wrzucam kod index.php i data.php gdyby ktoś chciał, dodałem na stronie kilka temperatur na jednym wykresie

<?php
/** data.php
<?php
$id = (int)$_GET['id'];
echo "[".file_get_contents($id.".txt")."]";
?>
**/
$temp = array(); $obecna = array();
$test = false; // pokazuje wszystkie pokoje na wykresie
$temp[0] = "Sypialnia";
$temp[1] = "Zewnątrz #1";
$temp[2] = "Pokój Dagmary";
$temp[3] = "Strych";
$temp[4] = "Łazienka";
$temp[5] = "Pokój Bartosza";
$temp[6] = "Salon";
$temp[7] = "Zewnątrz #2";
$temp[8] = "Piec (temp)";
$temp[9] = "Grunt (10 cm)";
$temp[10] = "Kaloryfer";
$temp[11] = "Zewnątrz #3";
$temp[12] = "Kuchnia";
$temp[99] = "Status Pieca";
// obecna temp
$a = unserialize(base64_decode(file_get_contents("last.txt")));
$ps = file_get_contents("piec_status.txt");
foreach($a as $id => $t) {
    $obecna[($id)] = "".$t."°C";
}
if(!isset($_GET['id']))
    $test = true;
?>
<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Temperatura</title>

        <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>




        <script type="text/javascript">



$(function() {
<?php
if(!$test)
    echo "    $.getJSON('data.php?id=".$_GET['id']."', function(data) {";
?>


Highcharts.setOptions({
lang: {
months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',
'Lipiec', 'Śierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'],
//months: ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze',
//'Lip', 'Śie', 'Wrz', 'Paź', 'Lis', 'Gru'],
weekdays: ['Nie', 'Pon', 'Wt', 'Śr', 'Czw', 'Pt', 'Sob']
},
global: {
    useUTC: false
    }

}),


        // Create the chart


        window.chart = new Highcharts.StockChart({
            chart: {
                renderTo: 'container'
            },
xAxis: {
        type: 'datetime',
        dateTimeLabelFormats: {
        second: '%d-%m-%y<br/>%H:%M:%S',
        minute: '%d-%m<br/>%H:%M',
//        minute: '%d-%m-%y<br/>%H:%M',
        hour: '%d-%m<br/>%H:%M',
//        hour: '%d-%m-%y<br/>%H:%M',
        day: '%Y<br/>%d-%m',
        week: '%Y<br/>%d-%m',
        month: '%m-%Y',
        year: '%Y'
        }
    },



            rangeSelector: {
buttons: [{
    type: 'day',
    count: 1,
    text: '1d'
}, {
    type: 'day',
    count: 7,
    text: '7d'
}, {
    type: 'month',
    count: 1,
    text: '1m'
}, {
    type: 'year',
    count: 1,
    text: '1rok'
}, {
    type: 'all',
    text: 'All'
}],
                selected: 0
            },

            title: {
                text: '<?php  if($_GET['id'] == 99) echo "".$temp[($_GET['id'])]; else echo "Temperatura - ".$temp[($_GET['id'])]; ?>'
            },
            

yAxis: {
        title: {
            text: '<?php echo ($_GET['id'] == 99 ? "Status" : "Temperatura ( °C )"); ?>'
        },
        },
        <?php
            if(!$test) {
                echo "series: [{
                    name: '".($_GET['id'] == 99 ? "Status" : "Temperatura")."',
                    data: data,
                    type: 'spline',
                    shadow: true,
                    tooltip: {
                        valueDecimals: ".($_GET['id'] == 99 ? "0" : "2").",
                    valueSuffix: '".($_GET['id'] == 99 ? "" : " °C")."'
                    }
                }] ";
            } else {
                echo "series: [";
                    foreach($temp as $k => $v) {
                        if(in_array($k,array(99,1,7,11,10,8,3,9))) continue;
                        if($k) echo ",";
                        echo "{
                        name: '".$v."',
                        data: [".file_get_contents($k.'.txt')."],
                        type: 'spline',
                        shadow: true,
                        tooltip: {
                            valueDecimals: '2',
                            valueSuffix: ' °C'
                            }
                        }";
                    }
                echo "] ";
            }
        ?>
        });
    <?php
    if(!$test)
        echo "});";
    ?>
});
        </script>
    </head>
    <body>
<script src="js/highstock.js"></script>
<script src="js/modules/exporting.js"></script>

<script type="text/javascript" src="js/themes/gray.js"></script>

<b>Temperatura by BBarwik&nbsp;&nbsp;&nbsp;(<a href="?">wszystkie pokoje</a>)</b>
<table rules="all" border=1 width="90%"><tr width="90%">
<td align="center"><a href="?id=6">SALON</a></td>
<td align="center"><a href="?id=12">KUCHNIA</a></td>
<td align="center"><a href="?id=5">POKÓJ BARTOSZA</a></td>
<td align="center"><a href="?id=2">POKÓJ DAGMARY</a></td>
<td align="center"><a href="?id=0">SYPIALNIA</a></td>
<td align="center"><a href="?id=4">ŁAZIENKA</a></td>
<td align="center"><a href="?id=3">STRYCH</a></td></tr>
<td align="center"><b><?php echo $obecna[6]; ?></b></td>
<td align="center"><b><?php echo $obecna[12]; ?></b></td>
<td align="center"><b><?php echo $obecna[5]; ?></b></td>
<td align="center"><b><?php echo $obecna[2]; ?></b></td>
<td align="center"><b><?php echo $obecna[0]; ?></b></td>
<td align="center"><b><?php echo $obecna[4]; ?></b></td>
<td align="center"><b><?php echo $obecna[3]; ?></b></td></tr><tr>
<td align="center"><a href="?id=1">ZEWNĄTRZ #1</a></td>
<td align="center"><a href="?id=7">ZEWNĄTRZ #2</a></td>
<td align="center"><a href="?id=11">ZEWNĄTRZ #3</a></td>
<td align="center"><a href="?id=8">&nbsp;PIEC (temp)&nbsp;</a></td>
<td align="center"><a href="?id=10">KALORYFER</a></td>
<td align="center"><a href="?id=9">GRUNT (10 cm)</a></td>
<td align="center"><a href="?id=99">&nbsp;PIEC (status)&nbsp;</a></td>
</tr><tr>
<td align="center"><b><?php echo $obecna[1]; ?></b></td>
<td align="center"><b><?php echo $obecna[7]; ?></b></td>
<td align="center"><b><?php echo $obecna[11]; ?></b></td>
<td align="center"><b><?php echo $obecna[8]; ?></b></td>
<td align="center"><b><?php echo $obecna[10]; ?></b></td>
<td align="center"><b><?php echo $obecna[9]; ?></b></td>
<td align="center"><b><?php echo ($ps == 1 ? '<font color="green">ON</font>' : '<font color="red">OFF</font>'); ?></b></td></tr>
</table><br>
<div id="container" style="height: 500px"></div><br>
Programy dla pieca:<br>
<?php
$dni_tygodnia = array( 'Nd', 'Pon', 'Wt', 'Śr', 'Czw', 'Pt', 'Sob' );
echo "<table rules='all' border=1 width='80%'><tr>
<td>Nazwa Programu</td>
<td>Warunki</td>
<td>Ramy czasowe</td>
<td>Dni tygodnia</td>
<td>Stan</td></tr>";
foreach(file("piec.txt") as $k => $v) {
    if(strlen($v) < 10) continue;
    $v = str_replace("&&","\r\n",$v);
    $d = unserialize($v);
echo "<tr>
<td>".$d['name']."</td><td>";
foreach(explode("\r\n",trim($d['vars'])) as $kk => $e) {
    if($kk > 0)
        echo "<br>";
    $e1 = explode(" ",$e);
    echo $temp[($e1[0])]." ".$e1[1]." ".$e1[2]."";
}
echo "</td><td>".nl2br($d['czas'])."</td>
<td>"; 
foreach($d['dni'] as $kk => $vv)
    if($vv == 1)
        echo $dni_tygodnia[($kk)]."&nbsp;&nbsp;";
echo "</td>
<td>".($d['status'] == 1 ? '<font color="green">Aktywny</font>' : '<font color="red">Nieaktywny</font>')."</td></tr>";
}
echo "</table><br>";
?>
<a href="strych2.jpg">Jesteś ciekaw jak wygląda stacja?</a><br>
Budowane wg. <a href="http://openwrt.pl/doku.php/usb:1wire">tego</a> poradnika.<br>
Kontakt: <a href="mailto:bbarwik@gmail.com">bbarwik@gmail.com</a><br>
    </body>
</html>

http://bbarwik.com/meteo/meteo.7z - tu są pliki z starym systemem i instrukcją, po podmianie index.php na nowy powinno wszystko ładnie nadal działać.

http://bbarwik.com/meteo/ - stacja meteo na OpenWrt
MR3420v2 + 2xWDR3600 + Foxconn NT-435 + Foxconn NT-535.
Niestety teraz wynajmuję mieszkanie więc tymczasowo plany rozbudowy wstrzymane sad

55 (edytowany przez kamillo 2013-09-26 18:20:14)

Odp: Pierwszy termometr

bbarwik napisał/a:

http://bbarwik.com/meteo/meteo.7z - tu są pliki z starym systemem i instrukcją, po podmianie index.php na nowy powinno wszystko ładnie nadal działać.

Testowałem załączone pliki i działają ok. Jednak wolałbym troche więcej wiedzieć jak to działa. Tzn nie rozumiem wyniku zapisu z danymi pomiarowymi. Dokładnie chodzi o taki wynik

[1380189388000,12.69]

co to jest przed przecinkiem? za przecinkiem mam temperature, a przed powinno być coś w rodzaju daty, godziny, a są jakieś dziwne zapisy. Jak to uzyskano i czy highcharts musi mieć koniecznie taki zapis danych w tej postaci? powyższy pomiar uskiwany jest w wyniku działania takiego skryptu php

system("digitemp_DS9097U -s /dev/ttyUSB0 -a > /root/meteo.txt");
    $f = file_get_contents("meteo.txt");
    $e = explode("Sensor ",$f); unset($e[0]);
    foreach($e as $v) {
        $e1 = explode(" ",$v);
        file_put_contents("/www1/".$e1[0].".txt",",[".time(NULL)."000,".$e1[2]."]",FILE_APPEND);
    }

56

Odp: Pierwszy termometr

To jest data i czas smile tylko że zapisany jako czas uniksowy czyli w liczbie sekund od 1 sty 1970 * 1000 czyli w milisekundach.

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

57

Odp: Pierwszy termometr

czyli dobrze przepuszczałem smile o takie wyjaśnienie własnie mi chodziło

58

Odp: Pierwszy termometr

Mam pytanie.
Dostałem ten układ 8 przekaźników, całkiem fajny, ale myślę jakby zrobić na nim sterowanie światłem.
Bo mam tutaj dwie wersje:
a) Przełącznik zamyka obwód w włączniku światła, włącznikiem wtedy się nie da sterować, jedynie gdy nie działa przełącznik sterowanie tradycyjnym włącznikiem działa
b) Zrobienie to w systemie instalacji schodowej, jednak wtedy nie będzie można określić statusu czy światło jest włączone/wyłączone.
http://www.zbychdom.republika.pl/rozne/Schodowy.gif

Czy są jeszcze jakieś inne możliwości?

http://bbarwik.com/meteo/ - stacja meteo na OpenWrt
MR3420v2 + 2xWDR3600 + Foxconn NT-435 + Foxconn NT-535.
Niestety teraz wynajmuję mieszkanie więc tymczasowo plany rozbudowy wstrzymane sad

59 (edytowany przez rufik 2013-09-30 18:58:33)

Odp: Pierwszy termometr

b) A czy do czegoś potrzebny ci status? Nie wystarczy, że wydanie komendy "toggle switch" zmieni stan?

60

Odp: Pierwszy termometr

Dlaczego nie można określić ?? wepnij sobie szeregowo cewkę i blisko niej ustaw kontaktron zasada działania chyba jasna smile

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

61

Odp: Pierwszy termometr

bbarwik napisał/a:

jakby zrobić na nim sterowanie światłem.
Czy są jeszcze jakieś inne możliwości?

jednym ze sposobów sterowania oświetleniem jest zastosowanie przełączników bistabilnych
np.: http://albaelektro.eu/pl/p/LEGRAND-Prze … 04167/1537

proste sterowanie impulsem, można np. za pomocą przekaźnika puścić impuls 230V i przełącznik zmienia stan.

takie sterowanie ma wiele zalet, np. przełącznik pobiera prąd tylko w czasie przełączania (trwania impulsu), po przełączeniu zostaje w swoim położeniu i nie wymaga zasilania do czasu kolejnego przełączenia,
można dać nieograniczoną ilość przełączników sterujących łącząc je równolegle, można wykorzystać drugi styk do sygnalizacji położenia, czyli włączenia światła

62

Odp: Pierwszy termometr

Dostałem urządzenie smile
Działa jak należy, poprosiłem żeby nie montować od razu przełączników. Dodatkowo dostałem wejście I/O widoczne po prawej stronie i tu pojawia się pytanie. Czy wie ktoś jak je obsłużyć (działa, jest na nim napięcie ok 5V)
http://s22.postimg.org/7zdyod5ep/IMG_20131004_134142.jpg

http://bbarwik.com/meteo/ - stacja meteo na OpenWrt
MR3420v2 + 2xWDR3600 + Foxconn NT-435 + Foxconn NT-535.
Niestety teraz wynajmuję mieszkanie więc tymczasowo plany rozbudowy wstrzymane sad

63

Odp: Pierwszy termometr

Przeszukaj dokumentację smile, powinno być info jak się dobrać do ich statusu.

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

64

Odp: Pierwszy termometr

kilka postów wyżej jest napisane jak się dostać do statusu wejść... poza tym tak jak Cezary mówi tam gdzie to kupiłeś powinieneś dostać dokumentację gdzie jest opisane jak pytać urządzenie o stan wejść. Ja próbowałem kiedyś tak jak jest w dokumentacji ale nie bardzo to działało i zastosowałem skompilowany programik o którym także pisałem wyżej

65 (edytowany przez bbarwik 2013-10-06 18:36:50)

Odp: Pierwszy termometr

Dzięki, zapomniałem o tym wink
Pobrałem te RelayBoard, przełączniki działają poprawnie jednak przy getIn 1-8 zawsze pokazuje mi open, nie ważne co zrobię. Kiedy powinno pokazać że jest closed?

#edit, ok już działa

http://bbarwik.com/meteo/ - stacja meteo na OpenWrt
MR3420v2 + 2xWDR3600 + Foxconn NT-435 + Foxconn NT-535.
Niestety teraz wynajmuję mieszkanie więc tymczasowo plany rozbudowy wstrzymane sad

66

Odp: Pierwszy termometr

Witam,

Podłączyłem moduł 1WIRE MP00202 i 5 termometrów DS18B20, jak widać poniżej działa lecz mam kilka pytań.

1. wiem że każdy z nich ma niepowtarzalny numer, które wydziałem po pierwszym uruchomieniu, komenda digitemp_DS9097U -s /dev/ttyUSB0 -a -i

a) teraz skąd mam wiedzieć który termometr jest który, może trzeba podłączać każdy termometr pojedynczo i spisywać jego numer ROM ?
b) jak można wyświetlić ponownie informacje tj. przypisanie numerów ROM do sensora, może ponownie komenda digitemp_DS9097U -s /dev/ttyUSB0 -a -i (z opisu wynika że tej komendy używa się przy pierwszym uruchomieniu, czyli chyba tylko raz ?)

DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Nov 18 18:11:48 Sensor 0 C: 30.75 F: 87.35
Nov 18 18:11:49 Sensor 1 C: 38.44 F: 101.19
Nov 18 18:11:50 Sensor 2 C: 32.25 F: 90.05
Nov 18 18:11:51 Sensor 3 C: 38.75 F: 101.75
Nov 18 18:11:52 Sensor 4 C: 34.75 F: 94.55

Pozdrawiam Krynio

TP-Link TL-WDR4300 Mod, CPU 700MHz, Flash 16 MB, Gargoyle 1.5.11.4, extroot + dysk zewnętrzny Samsung (S2), kamerka MS LifeCam HD-5000
TP-Link TL-WR1043ND Mod, RAM 64 MB, chłodzenie pasywne, Gargoyle 1.5.10.14, extroot, kamerka Logitech HD Webcam C270

67

Odp: Pierwszy termometr

a) dokładnie tak
b) możesz ponownie zeskanować magistralę, przecież to w niczym nie szkodzi.

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

68

Odp: Pierwszy termometr

a) możesz podgrzać np w palcach każdy z czujników po kolei, sprawdzasz temp i widzisz który ma wyższą od reszty.. i tak dalej z każdym po kolei.

69

Odp: Pierwszy termometr

Możesz jeszcze dołączyc plik data.php? bo w załączonym kodzie jest w/g mnie tylko index.php
stary zbierał tylko temperaturę...

70

Odp: Pierwszy termometr

bbarwik napisał/a:

Witajcie.
Po kilku dniach przyszła pora na kolejny postęp w budowie inteligentnego domu.
Za około 20 zł zbudowałem układ do sterowania piecem, uruchamia się jeśli na złączu usb pojawi się napięcie (sterowane przez gpio)
http://s24.postimg.org/le72qy8px/camera.png

Jak odczytujesz status pieca Twojego (że włączony)? Potrzebuję na początek rejestrować włącznie i wyłącznie pieca sterowanego termostatem pokojowym. Myślałem, żeby wykorzystać fakt zwierania/rozwierania styków wyjściowych termostatu. ale nie wiem jak to podłączyć do rutera.

71

Odp: Pierwszy termometr

Najprościej podłącz się pod przycisk. Choć nie polecam takiego rozwiązania.

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

72

Odp: Pierwszy termometr

Czy za pomocą Czujnik 1-wire na RS232  mogę podłączyć więcej niż jeden czujnik temperatury oraz za pomocą konwertera rs232-usb wpiąć to potem do rutera i będzie działać ?

oraz

gdzie znajdę schemat, żeby było 1wire <-> ttl? Mam przejściówkę usb-ttl do wykorzystania wolną.

Dziękuję za wszelką pomoc.

73

Odp: Pierwszy termometr

Możesz podłączyć kilka równolegle. I jak masz normalny rs232c na usb to schemat masz taki: http://eko.one.pl/?p=Termometr. Jak masz ttl (0 - 3.3v) to możesz ten wymieniony przez Ciebie, ale nie wszystkie DS1820 chcą pracować przy takim niskim napięciu, zwłaszcza jak są pasożytniczo podłączone.

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

74

Odp: Pierwszy termometr

Mam coś takiego typu (nie konkretnie to)  http://propix.com.pl/userdata/gfx/1c3a9 … d8693a.jpg USB-TTL, tam jest rx tx gnd 3,3V 5V

Można za pomocą tego podłączyć czujnik temp. tak, żeby były tylko dwa przewody do czujnika (jak tu http://eko.one.pl/?p=Termometr#monta , a nie trzy jak tu http://openwrt.pl/doku.php/usb:1wire#cz … e_na_rs232? Jeśli tak to jaki schemat?

75

Odp: Pierwszy termometr

Zasilanie na DS1820 jest opcjonalne - bo albo łączysz tak jak na pierwszym (i to tzw. pasożytniczo) lub dajesz mu własne zasilanie trzecią linią. W przypadku pierwszym ds może wymagać większego napięcia na linii bo inaczej nie ruszy. Podłącz i sprawdź.

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