@saerdna76
Ich danke Dir, genau das hat mir gefehlt.
das php-Script für IPS hatte ich schon richtig, nur die Änderung in TelnetPHP habe ich nicht geschafft.
Jetzt läuft das Ganze, wenn auch relativ langsam. Eine Abfrage der 4 Analogports dauert ca. 8 Sekunden, das weitere Setzen der Ausgabeports je Port ca. 1 Sekunde.
Ist da in der TelnetPHP noch irgendein Timer drin, den man noch ein bisschen kleiner machen kann? Das Herstellen der Verbindung dauert per IPS ca. 4-5 Sekunden.
Ansonsten bin ich mit der Möglichkeit des Zugriffs schon ganz zufrieden, besser aus die Geschichte mit ClientSocket, REgisterVariable und Cutter …
Vielen Dank nochmal für Deine schnelle Hilfe, binin Sachen php ein blutiger Anfänger…
sorry da kann ich Dir auch nicht weiter helfen … bei mir läuft das komplette Skript (Abfrage der 4 analog-Port und ein paar Berechnungen) unter 900ms und dass obwohl ich den AVR über WLAN anspreche.
Hast Du so lange Zeiten auch, wenn du das „manuell“ über Telnet machst ??
Habe das Ganze jetzt nochmal über Telnet (Putty) getestet.
Da läuft sowohl der Verbindungsaufbau, als auch das Ausführen der Befehle viel schneller ab, das wird sicherlich an die Zeiten rankommen, die saerdna76 gepostet hat.
Ich kann mir das Ganze noch nicht so richtig erklären. Aber 4 Analogports abfragen, 8 Digitalports setzten (1) und wieder rücksetzten (0) dauert zwischen 27 und 30 Sekunden (lauf Zeitmesssung Script). Ist ein bisschen viel.
Wo kann ich ansetzen zu suchen?
Wie schon geschrieben gibt es bei mir große Zeitproblem, d.h. die Ausführung dieses Script dauert ca. 30 Sekunden.
Putty hab ich NICHT auf dem IPS-Rechner gestartet, sondern auf einem anderen Rechner im Netzwerk, von dem ich auch per Remote-Console IPS bediene. Also Hardware-technisch die gleichen Voraussetzungen.
Ich kann bei Bedarf auch nochmal die „TelnetPHP.php“ anhängen, wenn es interessieren sollte. Dort hab ich nur ab Zeile 66 den Code von saerdena76 eingefügt (und den vorherigen gelöscht).
ich habe noch nichts mit einel LCD probiert … brauche den Net-IO im Moment nur zum Messwerte sammeln
Aber mal eine vielleicht blöde Frage, geht das mit der Orginal-Firmware von Pollin überhaupt, oder muss ich da was andere aufspielen und wenn ja, was am besten ?
Putty hab ich NICHT auf dem IPS-Rechner gestartet, sondern auf einem anderen Rechner im Netzwerk,
ich würde Putty mal auf dem IPS-Rechner starten, dann kannst du entwerder IPS oder die Hardware als Fehlerquelle ausschließen.
Wenn es mit Putty auf dem IPS-Rechner genau so langsam läuft, würde ich auf ein Problem mit dem Netzwerk tippen
Viele Grüße
Andreas
PS: HAst Du schonmla deinen Switch resettet ?? Ich weiß klingt blöde, aber ich hab schon erlebt das der Switch was weg hatte und es nach einem Reset wieder lief … der wurde dann aber schnellstmöglich ausgetaucht
@saerdna76
Das Ausführen auf dem IPS-Rechner probiere ich mal, komme aber erst morgen abend dazu.
@andrge
Ich habe kein LCD an der AVR-Net-I/O dran und möchte den Controller wie auch saerdna76 nur als Datensammelstelle mit Netzwerkanschluss benutzen.
Wenn du aber Erfahrungen damit sammelst, wäre es interessant, wenn du uns dies hier mitteilst. Vielleicht entstehen ja auch ganz neue Einsatzzwecke für diesen „billigen“ Controller…
Eventuell auch mit anderer Firmware, siehe AVR für wenig Geld im LAN - mikrocontroller.net
ich hab schon ein LCD dran, aber mit den Befehlen aus der Doku bekomm ich es nicht zum Fliegen.
Neben einem Datensammler stell ich mir ein Display mit ein paar Eingabetastern vor. Damit wäre dann eine Menüauswahl möglich. Unter 1W geht das einfach nicht.
Danke für den Link. Hab mir schon einen ISP Programmer gekauft, vielleicht test ich mal U.Radigs Software.
leider kann ich bei alternativer Software im Moment auch nicht weiterhelfen. Wollte aber mach nachfragen, ob sich inzwischen weiteres KnowHow irgendwo gesammelt hat
Mein Stand ist folgender:
AVR Orginal-Software
per Telnet funkioniert super … hab auch mein Skript etwas erweitert, dass er im Fehlerfall den Befehl mehrfach versucht zu senden.
über WLAN hat gelegentlich Aussetzer, die ich aber auf WLAN-Seite vermute …
bei Interesse kann ich den neuen Code-Snipsel mal posten
ich habe den ARV NET IO mit der Software RoBue 1.5 am laufen (AVR für wenig Geld im LAN - Mikrocontroller.net ewig langer Thread ). Die Version hat den Vorteil, dass der vierte AD-Port als 1-Wire arbeitet. Daran habe ich eine DS18S20 seit mehreren Wochen ohne einen einzigen Aussetzer in Betrieb. Die RoBue-Software (Abwandlung von U. Radig) arbeitet als WEB- und Telnetserver. Bisher lese ich die Software über WWW-Reader und Textparser ein. Leider kann man damit nur Werte lesen und keine Ports setzen. Dies muss wie bei der Pollin-Software über Telnet gemacht werden und der ist ein wenig zickig. Es benötigt teilweise mehrere Schleifen mit Fehlerüberprüfung, bis das Kommando angenommen ist. Anbei meine ersten Versuche mit Telnet. Bin leider noch blutiger PHP-Anfänger. Deshalb bitte nicht über den Code wundern. Der Ursprungscode ist von Antone Roundy ( PHP Telnet: freeware script to make Telnet connections from PHP scripts ).
?php
$telnet = new PHPTelnet();
$server = "192.168.1.212"; // Adresse des AVR NET IO
$port = 23; // Telnet Port
$kommando = "OW"; // Kommando um 1-Wire Daten auszulesen
// if the first argument to Connect is blank,
// PHPTelnet will connect to the local host via 127.0.0.1
$result = $telnet->Connect($server,$port);
if ($result == 0) {
$telnet->DoCommand($kommando , $result);
// NOTE: $result may contain newlines
// Aus der Telnetantwort den Wert für Sensor 0 heraushohlen
$findme = 'Sensor 0:';
$pos = strpos($result, $findme);
$temp = substr($result,$pos+10,4);
$Sensor = str_replace(",", ".", $temp);
// Wert von Sensor 0 zurück geben, man könnte auch in eine IP-Symconvariable schreiben
// SetValue(27185 /*[WWW\AVR\Telnet Temperatur Sensor 0]*/,$Sensor);
echo $Sensor;
// say Disconnect(0); to break the connection without explicitly logging out
$telnet->Disconnect();
}
/*
PHPTelnet 1.1
by Antone Roundy
adapted from code found on the PHP website
public domain
*/
class PHPTelnet {
var $show_connect_error=1;
var $use_usleep=0; // change to 1 for faster execution
// don't change to 1 on Windows servers unless you have PHP 5
var $sleeptime=125000;
var $loginsleeptime=1000000;
var $fp=NULL;
var $loginprompt=NULL;
/*
0 = success
1 = couldn't open network connection
2 = unknown host
3 = login failed
4 = PHP version too low
*/
function Connect($server,$port) {
$rv=0;
$vers=explode('.',PHP_VERSION);
$needvers=array(4,3,0);
$j=count($vers);
$k=count($needvers);
if ($k<$j) $j=$k;
for ($i=0;$i<$j;$i++) {
if (($vers[$i]+0)>$needvers[$i]) break;
if (($vers[$i]+0)<$needvers[$i]) {
$this->ConnectError(4);
return 4;
}
}
$this->Disconnect();
if (strlen($server)) {
if (preg_match('/[^0-9.]/',$server)) {
$ip=gethostbyname($server);
if ($ip==$server) {
$ip='';
$rv=2;
}
} else $ip=$server;
} else $ip='127.0.0.1';
if (strlen($ip)) {
if ($this->fp=fsockopen($ip,$port)) {
$this->Sleep();
$this->GetResponse($r);
$r=explode("
",$r);
fputs($this->fp,"\r");
$this->Sleep();
if ($this->use_usleep) usleep($this->loginsleeptime);
else sleep(1);
$this->GetResponse($r);
$r=explode("
",$r);
} else $rv=1;
}
if ($rv) $this->ConnectError($rv);
return $rv;
}
function Disconnect($exit=1) {
if ($this->fp) {
if ($exit) $this->DoCommand('exit',$junk);
fclose($this->fp);
$this->fp=NULL;
}
}
function DoCommand($c,&$r) {
if ($this->fp) {
$error = false;
$i = 0;
do {
fputs($this->fp,"$c\r");
$this->Sleep();
$this->GetResponse($r);
$r=preg_replace("/^.*?
(.*)
[^
]*$/","$1",$r);
if(strpos($r,"ERROR")!==false) $error=true;
if(strpos($r,"Ready")!==false) $error=false;
$i++;
} while ($i<4 and $error);
}
return $this->fp?1:0;
}
function GetResponse(&$r) {
$r='';
do {
$r.=fread($this->fp,1000);
$s=socket_get_status($this->fp);
} while ($s['unread_bytes']);
}
function Sleep() {
if ($this->use_usleep) usleep($this->sleeptime);
else sleep(1);
}
function ConnectError($num) {
if ($this->show_connect_error) switch ($num) {
case 1: echo '<br />[PHP Telnet] <a href="http://www.geckotribe.com/php-telnet/errors/fsockopen.php">Connect failed: Unable to open network connection</a><br />'; break;
case 2: echo '<br />[PHP Telnet] <a href="http://www.geckotribe.com/php-telnet/errors/unknown-host.php">Connect failed: Unknown host</a><br />'; break;
case 3: echo '<br />[PHP Telnet] <a href="http://www.geckotribe.com/php-telnet/errors/login.php">Connect failed: Login failed</a><br />'; break;
case 4: echo '<br />[PHP Telnet] <a href="http://www.geckotribe.com/php-telnet/errors/php-version.php">Connect failed: Your server\'s PHP version is too low for PHP Telnet</a><br />'; break;
}
}
}
?>
In Summe ist die RoBue-Software auf den AVR NET IO nicht schlecht. Vor allem weil man mehrere 1-Wire-Busse (puls 3analog IN, 4 digital IN, 8 * digital OUT) über TCP/IP an IP Symcon anschließen kann. Somit benötigt man nur eine LAN/WLAN PowerLAN oder was auch immer für eine Verkabelung. Nur der zickige Telnet stört mich noch etwas. Bei Pollin gibt es sogar noch ein IO-Board für 10 Euronen, mit dem man 8 Relais schalten kann (230V nicht von Pollin freigeben, die Bauteile könnten es aber - also Vorsicht bei sowas).
Hallo, ich mische mich mal mit meinen bisherigen Erfahrungenzum Pollin Board ein:
Habe das Board mit Originalsoftware laufen, per Dashboard steuere ich digitalen Ports und schreibe (zum Test) Text (z.B. den Schaltstatus) auf das angeschlossenen LCD Display.
Ich hatte eine Anfrage wie ich das Displays angeschloosen habe:
Verwenden tue ich ein LCD Display von Pollin (Best.Nr. 120420) für sage und schreibe €4,95. Zum Anschluß das Datenblatt aus der Downloadsektion von Pollin herunterladen (D120120D.pdf).
In der Anleitung (V2) vom Net I/O der Belegung unter <Befehle><Punkt 11> (LCD initialisieren) folgen (Anschluß LCD Modul an Steckerleiste „EXT.“ :
Pin 1 (PD2) geht an LCD R/W
Pin 2 (PD3) geht an LCD RS
…
Pin 10 (+5V) geht an LCD Pin1 (VDD)
Den Spannungsteiler zur Kontrasteinstellung nicht vergessen ! Ich habe ein einfaches 10K Poti, Schleifer auf V0 (LCD Pin 3), genommen. Ohne dieses Poti läuft nichts … es diehnt der Kontrasteinstellung => also Einstellung ausprobieren bis sich etwas auf dem Display tut.
Zur Kontrolle: Pin 8 der Net I/O Buchse bleibt unbelegt, gleiches gilt für Pin 7 bis 10 (DB0…DB3) auf der LCD Seite.
==> wenn das Net I/O Board jetzt unter Spannung gesetzt wird kann man das Poti so einstellen, das die Pixel der 1. Zeile sichtbar werden.
Der erste Test zum beschreiben am besten mit der Netserver Software von Pollin …(LCD INIT und dann Send …).
Hat’s geklappt kann man das genauso per Script via IPS machen. Bei Interesse kann ich mein Script gerne hier veröffentlichen.
Ein Hinweis: kleine IPS_Sleeps zwischen den CSCK_SendText Befehlen sind hilfreich zum korrekten Empfang der Antworten.
Modifiziert für AVR-NET-IO von Pollin durch RoBue u.a.
…
//Commandos und Ausgaben erfolgen über Telnet
//UART/RS232 geht dann nicht mehr! #define CMD_TELNET 1
…
Außer das der AVR heute stehengeblieben ist … soweit alles klar :rolleyes: Auf Pings antwortete er noch … telnet war ende gelände.
Leider haben die PHP-Hänger scheinbar meim IPS mitgenommen, nach ca .10h AVR ausfall musste ich den Rechner rebooten. Damit das nicht mehr passiert hab ich mein Skript wie folgt erweitert: