26

Odp: Karta przekaźników na USB + TP 1043

no nie pomogło, plik.txt pusty... a może to wysyła w określonych odstępach czasu i ja to próbuje odebrać wtedy kiedy nie wysyła?

27

Odp: Karta przekaźników na USB + TP 1043

Może. Choć w/w zapewniłeś sobie odbiór danych do 1s po...

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

28

Odp: Karta przekaźników na USB + TP 1043

Nie mam pojęcia dlaczego nie działa. Jeżeli uruchomisz cat-a przed wysłaniem komendy to on przecież cały czas odbiera i powinien zapisać cokolwiek tam przyjdzie. Mam przejściówkę USB-rs232 i wystarczy zewrzeć piny 2-3 dla testu - wszystko działa.
Popróbuj jeszcze programem minicom albo czymś podobnym.
Zastanawiam się tez po co ci sprawdzanie stanu? Skoro ustawiasz to jednym programem to po prostu zapisz co ustawiłeś i po sprawie.

29

Odp: Karta przekaźników na USB + TP 1043

tak tylko karta ma jeszcze 8 wejść binarnych których stany niby sprawdza sie w ten sam sposób tylko komenda nieco sie różni. A do wejść moge podłaczyć np kontaktron, czy sonde zalania smile napisałem do producenta z tym problemem, zobaczymy co mi odpisze...

30

Odp: Karta przekaźników na USB + TP 1043

jak ma wyglądać dokładnie to ciągłe odbieranie? bo samo "cat -a" nie działa

root@Gargoyle:~# cat -a /dev/ttyUSB0
cat: invalid option -- a
BusyBox v1.19.4 (2013-01-19 12:07:48 CET) multi-call binary.

Usage: cat [FILE]...

Concatenate FILEs and print them to stdout

sprawdzałem czy karta coś wysyła przez programik pod windowsem i ładnie zwraca co chcemy. Ustawiłem że chce wartości binarne to i takie mi wysyłała. http://img255.imageshack.us/img255/1353/terminalo.jpg
zgodnie z dokumentacją zwraca pakiet 5 bajtowy, gdzie przedostatni bajt pokazuje stan przekaźników.
Więc wygląda na to że wina leży po stronie systemu a nie karty. Może brakuje mi jakiejś paczki do zainstalowania? albo może przy odczycie powinienem podać w jakiej postaci chce otrzymywać dane czyli tak jak w tym programie ustawiłem że w postaci binarnej. Mój skrypt do odczytu stanu przekaźników wygląda tak:

#!/bin/sh
cat /dev/ttyUSB0 > /www1/plik.txt &
echo -e '\x55\x01\x4B\x00\x13' > /dev/ttyUSB0
sleep 1
killall cat

w jaki sposób zdeklarować w nim jaki typ danych chce odczytać? a dokłanie że chce dane binarne

31

Odp: Karta przekaźników na USB + TP 1043

Nie ma czegoś takiego jak typ odbieranych danych. Strumień bajtów z interfejsu leci do pliku po prostu. Jak sobie te dane zinterpretujesz to takie masz.

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

32

Odp: Karta przekaźników na USB + TP 1043

karta coś przesłała tylko nie wiem w którym momencie i jak to odpowiednio przekonwertować. Próbowałem czegoś w vi ale nie wychodzi:

root@Gargoyle:~# vi /www1/plik.txt
U^AR^L.U^Ak^@.U^Ak^H^PU^AR,U^Ak^@.U^Ak^H^PU^AR^L.U^Ak^@.U^Ak^H^PU^AR,U^Ak^@.U^Ak






















/bin/sh: xxd: not found

shell returned 32512

[Hit return to continue]

33 (edytowany przez mrox 2013-02-19 22:48:12)

Odp: Karta przekaźników na USB + TP 1043

Masz rację - vi z openwrt nie wchodzi w tryb szesnastkowy. Prześlij sobie ten plik i podglądnij czymś na komputerze. Jeśli będziesz uzyskiwał przewidywalne wyniki to można pomyśleć nad skryptem, który to zinterpretuje.

EDIT:
Ale jest hexdump:

root@OpenWrt:~#  hexdump -n4 -C  /etc/passwd    
00000000  72 6f 6f 74                                       |root|
00000004

Pokazało pierwsze 4 bajty pliku passwd. Na upartego można tym wypisać interesujący nas bajt i zrobić z niego użytek.

34

Odp: Karta przekaźników na USB + TP 1043

Dokładnie. W pliku są dane binarne, można to hexdumpem sobie zrzucić do hexów.

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

35

Odp: Karta przekaźników na USB + TP 1043

no więc karta zwraca nawet coś sensownego smile pytanie tylko co może być przyczyną że nie zwraca od razu po zdarzeniu? czyli np jak załącze przekaźnik. Zwraca mi wyrywkowo, tzn przy min 4 załączonych przekaźnikach prześle wszystkie dane łącznie z tymi wcześniejszymi zaległymi. Dziwna sprawa bo w programiku na kompie każde zdarzenie od razu wyrzuca i pokazuje. Acha i w jaki sposób przekonwertować te dane na wartości binarne czyli 01? bo w hexdump nie widze takiej opcji.

root@Gargoyle:~# hexdump -v /tmp/plik.txt
0000000 5501 6b80 5e55 0152 80c1 5501 6b00 d255
0000010 016b 4094 5501 52c0 8755 016b 00d2 5501
0000020 6b40 9455 0152 80c1 5501 6b00 d255 016b
0000030 4094 5501 52c0 8755 016b 00d2 5501 6b20
0000040 f155 0152 e0a4 5501 6b00 d255 016b 104f
0000050 5501 52f0 3955 016b 00d2 5501 6b08 1055
0000060 0152 f8fb 5501 6b00 d255 016b
000006c

takie coś mi na koniec po załaczeniu zwróciło. Nie wiem tylko co oznaczają te początki wierszy typu "0000060" reszte rozpoznaje co jest co.

36

Odp: Karta przekaźników na USB + TP 1043

W twoim przypadku to numer kolejny bajtu - adres.

Hexdump potrafi wyświetlić bajty, od określonego adresu w okreslonym formacie. Jak chcesz - wzdłuż, wszerz i na skos. Coś naprawdę słabo szukałeś. Zawsze możesz też po prostu wyciąć sobie to co chcesz przez cat/sed/awk. Zwykłe obrabianie tekstu.

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

37

Odp: Karta przekaźników na USB + TP 1043

ok więc zagłębie sie w temat lepiej smile a co do tego wyrywkowego zwracania wartości macie jakieś pomysły?? bo tutaj jest główny problem. To co dałem wyżej zwróciło mi jak załączyłem wszystkie przekaźniki, ale jak pojedyńczo je załaczam to nie zwraca od razu... na kompie zwraca ok

38

Odp: Karta przekaźników na USB + TP 1043

Może to kwestia jakiegoś cachowania wyniku. Choć cat powinno dać od razu to co przyszło.

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

39 (edytowany przez kamillo 2013-02-21 21:08:56)

Odp: Karta przekaźników na USB + TP 1043

tzn może niejasno to napisałem, jak jest załączony jeden, dwa, trzy przekaźniki to moge czekać i czekać i nic nie zwróci, tak jakbym nic nie wykonał. A jak już załącze 4 i więcej to zaczyna zwracać i od razu zwróci te zaległe.

Acha i próbowałem też bez extroota bezpośrednio podłączając do USB routera bez Huba

40

Odp: Karta przekaźników na USB + TP 1043

ciąg dalszy zmagań z kartą... Dalej chodzi o te zwracanie stanów wejść i przekaźników. Polecenie "cat" niestety nie działa prawidłowo bo dopiero przy kilku zdarzeniach zwróci odpowiednie kody, zamiast po każdym.
Dzisiaj odkryłem ciekawą rzecz. Przetestowałem kartę na UBUNTU. Na kompie gdzie jest bezpośrednio zainstalowany system to karta zwraca bez problemu wszystko za każdym razem przy poleceniu cat. Natomiast na kompie gdzie ubuntu chodzi na maszynie wirtualnej to karta zachowuje się dokładnie tak samo jak na routerze. Dam "cat" zwieram wejścia i losowo za którymś tam razem zwraca mi kody. Jakieś pomysły? Jest to jakaś wskazówka skoro tak dzieje sie na wirtualnej maszynie a na zwykłym systemie nie. Tylko co moge zrobić żeby to gadało normalnie pod OpenWrt?

41

Odp: Karta przekaźników na USB + TP 1043

Wygląda na jakieś buforowanie wyniku.

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

42 (edytowany przez bhb 2014-02-27 17:44:15)

Odp: Karta przekaźników na USB + TP 1043

Chyba pokleiłem to. Testowałem pod linuksem na ten czas nie mam możliwości pod Gargoyle.
Jak by ktoś potestował ?

dialout musi być w grupie serwera www 
#sudo usermod -a -G dialout www-data

potrzebne pakiety:
 kmod-usb-serial,  kmod-usb-serial-ftdi, php5-cli, coreutils-stty

biblioteka: 
 php_serial.class.php
ze zmianami:

if ($this->_os === "linux")
        {
    if (preg_match("@^ttyUSB(\d+):?$@i", $device, $matches))
        {
    $device = "/dev/ttyUSB" . ($matches[1] - 1);
        }

plik index.php

<?php 
//zebrane w całość przez bhb do obsługi karty przekaźnikowej " RelayBoard " ze strony www.upcprojects.eu
//materiały częściowo z http://techniczny.wordpress.com 
//check the GET action var to see if an action is to be performed 
if (isset($_GET['action' ])) { 
    //Action required 
    //Load the serial port class 
    require("php_serial.class.php"); 
    //Ustawienia portu 
$serial = new phpSerial();
$serial->deviceClose("/dev/ttyUSB0");
$serial->deviceSet("/dev/ttyUSB0");
$serial->confBaudRate(57600);
$serial->confParity("none"); //Set the Parity
$serial->confCharacterLength(8);//Set the word length
$serial->confStopBits(1); //Set Stop Bit
$serial->confFlowControl("none");
//Wyliczanie CRC
function crcmaxim(array $ar)
{
  $numBytes=sizeof($ar);
  $byteIndex=0;
  $bitCount=0;
  $CRC=0;
  for($byteIndex=0;$byteIndex<$numBytes; $byteIndex++ )
  {
    $nextByte=$ar[$byteIndex];
     for($bitCount=0;$bitCount<8;$bitCount++) 
     {
     $b=($CRC ^ $nextByte)&1;                                  
    $CRC>>=1;
    if($b)
      {
        $CRC^=0x8c;
      }
      $nextByte>>=1;
    }
  }
  return $CRC;
}
// Funkcja sbin2ar przekształca natomiast string w tablicę bitów.
function sbin2ar($sbin)
{
  $ar=array();
  $ll=strlen($sbin);
  for ($i=0; $i<$ll; $i++) $ar[]=ord(substr($sbin,$i,1));
  return $ar;
}
//funkcja zalaczania i wylaczania przekaznika nr 1
    $serial->deviceOpen("a+b");
    if ($_GET['action'] == "on_1") { 
//zalaczenie przekaznika 1 
    $cmd=chr(0x01)."O".chr(0x00);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    } else if ($_GET['action'] == "off_1") { 
//wylaczenie przekaznika 1
    $cmd=chr(0x01)."F".chr(0x00);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    }    $serial->deviceClose(); 
//funkcja zalaczania i wylaczania przekaznika nr 2
    $serial->deviceOpen("a+b");
    if ($_GET['action'] == "on_2") { 
//zalaczenie przekaznika 2 
    $cmd=chr(0x01)."O".chr(0x01);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    } else if ($_GET['action'] == "off_2") { 
//wylaczenie przekaznika 2
    $cmd=chr(0x01)."F".chr(0x01);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    }    $serial->deviceClose(); 
//funkcja zalaczania i wylaczania przekaznika nr 3
    $serial->deviceOpen("a+b");
    if ($_GET['action'] == "on_3") { 
//zalaczenie przekaznika 3 
    $cmd=chr(0x01)."O".chr(0x02);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    } else if ($_GET['action'] == "off_3") { 
//wylaczenie przekaznika 3
    $cmd=chr(0x01)."F".chr(0x02);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    }    $serial->deviceClose(); 
//funkcja zalaczania i wylaczania przekaznika nr 4
    $serial->deviceOpen("a+b");
    if ($_GET['action'] == "on_4") { 
//zalaczenie przekaznika 4 
    $cmd=chr(0x01)."O".chr(0x03);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    } else if ($_GET['action'] == "off_4") { 
//wylaczenie przekaznika 4
    $cmd=chr(0x01)."F".chr(0x03);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    }    $serial->deviceClose(); 
//funkcja zalaczania i wylaczania przekaznika nr 5
    $serial->deviceOpen("a+b");
    if ($_GET['action'] == "on_5") { 
//zalaczenie przekaznika 5 
    $cmd=chr(0x01)."O".chr(0x04);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    } else if ($_GET['action'] == "off_5") { 
//wylaczenie przekaznika 5
    $cmd=chr(0x01)."F".chr(0x04);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    }    $serial->deviceClose(); 
//funkcja zalaczania i wylaczania przekaznika nr 6
    $serial->deviceOpen("a+b");
    if ($_GET['action'] == "on_6") { 
//zalaczenie przekaznika 6
    $cmd=chr(0x01)."O".chr(0x05);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    } else if ($_GET['action'] == "off_6") { 
//wylaczenie przekaznika 6
    $cmd=chr(0x01)."F".chr(0x05);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    }    $serial->deviceClose(); 
//funkcja zalaczania i wylaczania przekaznika nr 7
    $serial->deviceOpen("a+b");
    if ($_GET['action'] == "on_7") { 
//zalaczenie przekaznika 7 
    $cmd=chr(0x01)."O".chr(0x06);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    } else if ($_GET['action'] == "off_7") { 
//wylaczenie przekaznika 7
    $cmd=chr(0x01)."F".chr(0x06);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    }    $serial->deviceClose(); 
//funkcja zalaczania i wylaczania przekaznika nr 8
    $serial->deviceOpen("a+b");
    if ($_GET['action'] == "on_8") { 
//zalaczenie przekaznika 8
    $cmd=chr(0x01)."O".chr(0x07);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    } else if ($_GET['action'] == "off_8") { 
//wylaczenie przekaznika 8
    $cmd=chr(0x01)."F".chr(0x07);
    $serial->sendMessage( chr(0x55).$cmd.chr(crcmaxim(sbin2ar($cmd))));
    }    $serial->deviceClose();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Karta przekaznikow</title>
<style type="text/css">
/* <![CDATA[ */
html, body {
background-color: #ccc;
color: #000;
margin: 0;
padding: 0;
}
#naglowek {
background-color: #999;
text-align:center;
font-size: 20px;
margin-bottom: 20px;
}
#tresc {
width: 900px;
height: auto;
padding: 20px;
margin: 0 auto 0px auto;
overflow: hidden;
position: relative;
background-color: #fff;
}
.blok {
margin-left: 20px;
margin-top: 10px;
margin-bottom: 10px;
width:400px;
height: auto;
text-align:center;
position: relative;
border: solid 2px #c0c0c0;
float:left;
}
.blok1 {
margin-right: 20px;
margin-top: 10px;
margin-bottom: 10px;
width: 400px;
height: auto;
text-align:center;
position: relative;
border: solid 2px #c0c0c0;
float:right;
}
#stopka {
 margin-top: 20px;   
clear: both;
text-align:center;
background-color: #999;
}
/* ]]> */
</style>
</head> 
<body> 
<div id=naglowek>Karta przekaźników</div> 
<div id=tresc>
<div class=blok>
<p><a href="?action=on_1"><input type="button" value=" Załącz przekaźnik 1 "></a></p>
<p><a href="?action=off_1"><input type="button" value="Wyłącz przekaźnik 1"></a></p> 
<p><a href="?action=on_2"><input type="button" value="Załącz przekaźnik 2"></a></p> 
<p><a href="?action=off_2"><input type="button" value="Wyłącz przekaźnik 2"></a></p> 
<p><a href="?action=on_3"><input type="button" value="Załącz przekaźnik 3"></a></p> 
<p><a href="?action=off_3"><input type="button" value="Wyłącz przekaźnik 3"></a></p> 
<p><a href="?action=on_4"><input type="button" value="Załącz przekaźnik 4"></a></p> 
<p><a href="?action=off_4"><input type="button" value="Wyłącz przekaźnik 4"></a></p> 
</div>
<div class=blok1>
<p><a href="?action=on_5"><input type="button" value="Załącz przekaźnik 5"></a></p> 
<p><a href="?action=off_5"><input type="button" value="Wyłącz przekaźnik 5"></a></p> 
<p><a href="?action=on_6"><input type="button" value="Załącz przekaźnik 6"></a></p> 
<p><a href="?action=off_6"><input type="button" value="Wyłącz przekaźnik 6"></a></p> 
<p><a href="?action=on_7"><input type="button" value="Załącz przekaźnik 7"></a></p> 
<p><a href="?action=off_7"><input type="button" value="Wyłącz przekaźnik 7"></a></p> 
<p><a href="?action=on_8"><input type="button" value="Załącz przekaźnik 8"></a></p> 
<p><a href="?action=off_8"><input type="button" value="Wyłącz przekaźnik 8"></a></p> 
</div>
</div>
<div id=stopka>przekaźniki</div>
</body> 

43

Odp: Karta przekaźników na USB + TP 1043

oczywiście chętnie przetestuję jak tylko znajdę chwile smile

44

Odp: Karta przekaźników na USB + TP 1043

bhb!
Przetestowałem -pod OpenWrt Barrier Breaker 14.07 / LuCI 0.12 Branch;
Lighttpd - jako odrebny serwer dla uslug związanych z obsługą karty przekaźnikowej. Działa wyśmienicie.
I nie musiałem zmieniać nic w klasie php_serial.class.php. Również nie musiałem modyfikować uprawnień... Teraz chciałbym, aby wywołana funkcja - pokazywała w innym kolorze włączony / wyłączony przekaźnik... Niemniej jednak już praktycznie mam sterowanie ze zdalnym dostępem włącznie działające smile Mega podziękowania!!!

45 (edytowany przez paww18 2015-07-24 12:01:50)

Odp: Karta przekaźników na USB + TP 1043

Koledzy witam wszystkich bo to mój pierwszy post. Zabrałem się za montaz tego samego co wszyscy powyżej wink

mam router:
OpenWrt Barrier Breaker (r44550)                             |
| Build time: 2015-03-07 10:16 CET                             |
|                                                              |
| Cezary Jackiewicz (obsy), http://eko.one.pl                  |
|                                                              |
----------------------------------------------------------------
| Machine: Edimax 3g-6200n   

zrobiłem extroota i ogolnie ogarnalem konfiguracje(lighthttpd + php). Teraz walcze z nieszczęsną płytką. Mam problem bo wszystko przeklikałem w/g poradnika powyżej no i gdy chce wysterować przekaźnik przez strone WWW - restartuje mi sie router. Co moze byc przyczyna ? Ma ktoś jakis pomysl ? Bez podlaczonej plytki router z wpietym pendrivem dzialal bez problemow ponad tydzień "mieszając" powietrze w pokoju. A dzisiaj z tą płytką - zonk..... brak mi pomyslow.

generalnie zauwazylem ze samo ustawienie predkosci portu z konsoli powoduje reset routera:

stty -F /dev/ttyUSB0 57600

i mam resecik....

46

Odp: Karta przekaźników na USB + TP 1043

A sprawdź czy jak zrobisz picocom -b 57600 /dev/ttyUSB0 to zadziała (picocom sobie zainstaluj wcześniej)

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

47

Odp: Karta przekaźników na USB + TP 1043

niestety...

root@OpenWrt:~# picocom -b 57600 /dev/ttyUSB0
picocom v1.7

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 57600
parity is      : none
databits are   : 8
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv

pingi rosną do 2000ms pojda ze 3-4 jak przy poprzedniej komedzie stty i nastepuje reboot.

Mam Huba starszego - pasywnego Hama 4 porty i wszystko dziala (router) dopuki nie zaczne coś ryć z ttyUSB0......

48

Odp: Karta przekaźników na USB + TP 1043

Ale przestaw kartę przekaźników na inną szybkość jak się da.

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

49 (edytowany przez paww18 2015-07-24 13:42:26)

Odp: Karta przekaźników na USB + TP 1043

tylko jak ? to jest taka sama karta jak ktos miał w wątku powyzej, usbrelay z allegro 8 przekaznikow na pokladzie, miniusb, jakis atmel..
Nie wiem ale czuje ze to hub usb psuje zabawe, ale moge się mylic. Linuxa znam, ale z openwrt i takimi mini platformami pierwszy raz się w sumie stykam dosłownie... Siedze nad tym caly dzien, googluje i nadal jestem w czarnej D** a router mial podlewac ogrodek... wink

w logread mam cos takiego jeszcze;

Fri Jul 24 11:09:08 2015 kern.info kernel: [    4.120000] usbcore: registered new interface driver hub
Fri Jul 24 11:09:08 2015 kern.debug kernel: [    4.610000] hub 1-0:1.0: no of_node; not parsing pinctrl DT
Fri Jul 24 11:09:08 2015 kern.info kernel: [    4.610000] hub 1-0:1.0: USB hub found
Fri Jul 24 11:09:08 2015 kern.info kernel: [    4.610000] hub 1-0:1.0: 1 port detected
Fri Jul 24 11:09:08 2015 kern.debug kernel: [    5.790000] hub 1-1:1.0: no of_node; not parsing pinctrl DT
Fri Jul 24 11:09:08 2015 kern.info kernel: [    5.790000] hub 1-1:1.0: USB hub found
Fri Jul 24 11:09:08 2015 kern.info kernel: [    5.810000] hub 1-1:1.0: 4 ports detected

50

Odp: Karta przekaźników na USB + TP 1043

Zmień hub, sprawdź to bez exroota itd.

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