Pollin AVR Net-I/O

Hallo,

Pollin hat ja seit einiger Zeit diesen kleinen AVR Net-I/O (8 digitale Ausgänge, 4 digitale Eingänge, 4 10bit ADC, Anschluss für 2x16 LCD) als Bausatz und neuerdings auch als Fertigbaustein. Zu dem Preis recht unschlagbar.

Helmut hatte in diesem Thread http://www.ip-symcon.de/forum/f19/digibutler-5781/#post47666 schon einmal darüber berichtet.

Der AVR Net-I/O lässt sich ohne weitere Anpassungen per Client Socket in IPS2 ansprechen und antwortet auch schön über die Register Variable.

Leider antwortet der AVR Net-I/O ohne Bezug auf die Anfrage,

wenn ich also

$result = CSCK_SendText(11111, "GETADC 1");

sende, bekomme ich z.B. die Antwort „432“ in die Register Variable.

Mit

$result = CSCK_SendText(11111, "GETPORT 1");

bekomme ich die Antwort „0“ oder „1“ in die Register Variable.

Es wird also nichts übermittelt, was mir ermöglicht das Ergebnis dem richtigen Port zuzuordnen (ich hoffe das war einigermassen verständlich).

Hat jemand eine Idee, wie ich automatisch die Statusse der Eingänge abfragen kann und die einzelnen Variablen aktualisiere?

Es lässt sich bestimmt auch in der Firmware ändern, nur habe ich da weder Ahnung von, noch einen Programmer.

Viele Grüße

Jens

Das würde mir keine Probleme machen, du fragst ja direkt nach einer Variabel.
Die würde ich dann „PortA1“ und „PortA2“ usw nennen.

Gibt einiges mit dem Pollin Webserver:
sogar mit DHCP, 1Wire, Webcam und und…
Pollin AVR Net-I/O und Bascom
Dann bei:
AVR für wenig Geld im LAN - mikrocontroller.net
http://df8jb.dyndns.org:8080/index2.php/index2.php
Im Tread gibt es auch einen Hinweis auf, glaube heißt Ethersex, dann kann man mit Ethersex sogar sein eigenes Betriebssystem zusammen klicken.
Gruß Helmut

Genau das mit PortA1, PortA2, usw. ist mein Problem. Wie frage ich am besten die Werte aller Ports in einem Rutsch ab?

Die Register Variable auf „Variable anfügen“, dann die ganzen Getports und Getadcs hintereinander abfragen und zum Schluß den Inhalt der Register Variable cutten? Oder denke ich da zu kompliziert? In PHP bin ich ziemlicher Anfänger.

Gruß

JaNee, is klar:
Wenn so eine Abfragemöglichkeit im Betriebssystem des Pollin-Webservers nicht vorgesehen ist, kannst du nicht erwarten, dass du eine Antwort von ihm bekommst.
Versuche mal im DOS-Fenster eine Abfrage: „name“
Wenn der Syntax „name“ im Betriebssystem nicht vorkommt,
Antwort, wenn vorgesehen: Der Befehl name ist unbekannt, ERROR

Meine Antwort war sinngemäß:
Wenn du schon im IPSymcon-PHP-Script nach der Variable A3 fragst, mußt du nur noch die Antwort der Variable zuweisen.
Am Besten mit einer Schleife für alle PortA-Möglichkeiten, usw.
Bin eben nicht der Erklärbär…

Gruß Helmut

Genau das mit der Schleife ist mein Problem. Hast Du da eventuell einen Codeschnippsel?

Weiß nicht, ob ich das kann. Da gibt es hier besserer PHP-Leute.
Bitte liste mal alle Möglichkeiten der Abfrage auf:
zB.
Welche Ports und welche Analogwerte usw
Gruß Helmut

Hi

Bitte liste mal alle Möglichkeiten der Abfrage auf:

gibt´s hier ab Seite 13 bis 17:

Ich persönlich hab schon mit:

Client Socket in IPS2

meine lieben Erklärungs- bzw. Verständnisprobleme, da mir nicht bewußt war, daß man Netzwerkschnittstellen auf diesem Wege zur Kommunikation nutzen kann. Wo gibt es Info´s diesbezüglich, bzw.´ne verständliche Doku für einen PHP Analphabeten. Naiv wie ich war hab ich meine IPScom mit dem XPortdirekt und dem 1-Wire Master über die Maxim Treiber und dem erzeugtem ComPort eingebunden; und mir eingebildet, es ist der richtige Weg; da es einwandfrei lief.

Bitte behebt mein Wissensvakuum.

mfg

BerndJ

Hi,

Es wird also nichts übermittelt, was mir ermöglicht das Ergebnis dem richtigen Port zuzuordnen (ich hoffe das war einigermassen verständlich)

Wo liegt das Problem? Lt. Manual ist doch die Zuordnung gegeben (Siehe Manual S.14) :

GETPORT 1 (ruft den Zustand des digitalen Eingangs 1 ab)

GETPORT 2 dementsprechend Port 2. Analog dasselbe zum Befehl GETADC.

Wie frage ich am besten die Werte aller Ports in einem Rutsch ab?

GETSTATUS wäre eine Möglichkeit für die digitalen Ports (Siehe Manual S.15), die analogen Werte innerhalb einer Schleife eines PHP Scriptes. Aber diesbezüglich halte ich es wie Helmut: bin nicht der Erklärbär für PHP, das können andere besser.

Momentan kann ich das nicht testen, weil auf meinen NET-IOs eine modifizierte Variante der Radig Software mit einem ATMEGA644 läuft und das ganze erst mal zurück gerüstet werden müßte.

mfg
BerndJ

Hallo,

genau diese PHP-Scheife ist mein Problem, da fehlt mir noch der Wink mit dem Zaunpfahl.

Die Ports einzeln abtzufragen ist nicht das Problem, das hat Pollin ja gut dokumentiert.

Zu dem Client Socket: Ich habe in IPS2 einfach eine neue Instanz „Client Socket“ mit der passenden IP und Port 50290 angelegt. Dazu dann eine neue Register Variable die man dem Client Socket zuordnet.

Meine beiden Codeschnipsel im Ursprungsposting können dann direkt ausgeführt werden, das Ergebnis landet in der Register Variable.

Ich finde den Client Socket sehr stabil, die Verbindung wird auch automatisch reconnected. So binde ich auch SqueezeCenter und Fritzbox an.

Gruß

so schwierig ist das bei PHP auch nicht.
Ungetestet, nur als Prinzip-Demo



//V2 Registervariable holen
  $regvarname="(Socket_Regvar)";
  $regvarID=IPS_GetVariableID($regvarname);

//Schleife von Port1 bis Port8
for ($port=1;$port<9 $port++) {
//Variablennamen setzen(muss natürlich vorher angelegt sein)
    $varname="ADCPORT $port";
//Registervariable mit Variablennamen und Trennzeichen preparieren,alte Werte dabei Löschen
//Regvar muss auf Append eingestellt sein
  //V2
    SetValue($regvarID,"$varname:");
  //V1
  SetValueString($regvarname,"$varname:");

//Wert holen für einen Port
  $result = CSCK_SendText(11111, "GETADC $port");
//warten, bis Variable da ist oder auf Regvar Triggern
  sleep 1;

//ab hier auch als Trigger möglich
  list($varname,$value)=split(':',IPS_GetValue($regvarID));
//für V2 abspeichern
  $varid=IPS_GetVariableID($varname);
  SetValue($varid,$varname);
//für V1 abspeichern
  SetValue($varname,$result);
}//Schleifenende

HTH
Tommi

Danke Tommi!

Hat geklappt und sieht dann so aus:


$regvarname="AVR";
$regvarID=IPS_GetVariableID($regvarname);

for ($port=1;$port<5;$port++)

{

$varname="AVR Net-I/O ADC $port";

SetValue($regvarID,"$varname:");

$result = CSCK_SendText(18472, "GETADC $port");

IPS_sleep(1);

list($varname,$value)=split(':',GetValuestring($regvarID));

$varid=IPS_GetVariableID($varname);
SetValue($varid,$value);

}

Ich habe jetzt an den Variablenwerten noch „|“ dranhängen, wie kriege ich das los?
Einfach Left/len-1 gibt bei mir eine Fehlermeldung. Geht das in IPS anders?

Hi,

$value = substr($value, 0, -1);

schneidet das letzte zeichen eines Strings ab

Hollo Snoop2!
Gibt es jetzt bei dir eine komplette Ausleserei aller Möglichkeiten oder willst du nur die Analogen haben?

Wenn alle, könntest du mal den fertigen PHP-Code posten?
Gruß Helmut

Hallo Snoop2,

hab hier auch nen AVR-NET-IO laufen und bin gerade dabei, ihn mit IPS unter einen Hut zu bekommen.
Habe mir dein Codeschnipsel von oben kopiert und komme damit aber nicht zurecht.
Ich sende per Client Socket an den AVR, bekomme dort beim debuggen auch die richtigen Antworten, aber er legt mir die Antworten nicht auf die entsprechenden Variablen.

Mir fehlt noch irgendwie der Denkanstoß.
Kannst du dazu nochmal was schreiben ?

Danke im voraus…
Thifi

@Helmut:
Ich verwende aktuell nur die analogen Ports mit LM35 Temperatursensoren an der Heizung. Die Abfrage der digitalen Eingänge ist aber soweit identisch, Du musst im Code nur „GETADC“ mit „GETPORT“ austauschen (Und natürlich die passenden Variablen einrichten).

@thifi:
Poste bitte mal Deinen Code und die Variablen. Die Register-Variable hast Du entsprechend angelegt?

Viele Grüße

Jens

Hallo Jens,
der Code ist mit deinem aus diesem Beitrag identisch, eine Registervariable „AVR“ hab ich angelegt, allerdings nicht gefunden, wie ich in V2 „append“ einschalten kann. Muss ich das?
Ansonsten sind die 4 ADC-Variablen als Strings angelegt, und er Code läuft auch durch ohne Fehlermeldung, aber auf die 4 Variablen wird nichts abgelegt.

<?
$regvarname=„AVR“;
$regvarID=IPS_GetVariableID($regvarname);

for ($port=1;$port<5;$port++)

{

$varname=„AVR Net-I/O ADC $port“;

SetValue($regvarID,"$varname:");

$result = CSCK_SendText(28669 /[Client Socket AVR-NET-I/O]/, „GETADC $port“);

IPS_sleep(1);

list($varname,$value)=split(’:’,GetValuestring($regvarID));

$varid=IPS_GetVariableID($varname);
echo $varid;
echo $value;
SetValue($varid,$value);

}

?>

Ein Screenshot von der Variablenliste habe ich noch angehängt.

Viele Grüße
Thilo

Hallo an alle,

jeder, der einen AVR NET-IO im Einsatz hat wird vermutlich schon bemerkt haben, dass es ohne einen anständigen Kühler am 7805 nicht läuft. Ohne Kühler verabschiedet er sich nach spätestens 10 Sekunden.

Eine alternative Stromversorgung bietet die Relaiskarte K8 IO, dort ist ein anständig gekühlter 7805 vorhanden und dieser dient ausschliesslich der Peripherie, sprich die Relaiskarte benötigt diese 5 Volt überhaupt nicht. Wenn dann noch der Jumper gesetzt wird erfolgt die Stromversorgung über die 25-pol. Sub D Buchse. Beide Einheiten werden nur über diesen Stecker verbunden. In diesem Falle kann man auf dem NET-IO die Gleichrichterdioden, die Schraubklemmen und den 7805er weglassen. Als Netzteil für beide Einheiten reicht ein Trafo mit 8-9 Volt AC und 800 mA, bzw. ein altes Steckernetzteil mit 10 bis 12 Volt DC und entsprechendem Strom.

Ich vermute, dass für den späteren Betrieb der Relaiskarte an einem Parallelport der Jumper wieder entfernt werden muss.

mfg

BerndJ

Man kann auch den 7805 durch einen Schaltregler von RECOM (R-785.0-0.5) ersetzen, der Pinkompatibel zum 7805 ist und kein bisschen warm wird …:slight_smile:

Leider ist er im Preis nicht ganz kompatibel zum normalen 7805 (liegt bei ca. 9Euro beim großen C (Artikel-Nr.: 154483 - 62), läuft aber einwandfrei auf dem AVR-NET-I/O.

Viele Grüße
Thilo

Hier noch mal der Link zum Hersteller: http://www.recom-international.com/switching_regulator_R-78xx.html
Ich will ja keine Werbung machen, aber die Dinger laufen sehr gut…

Hi,

für 95 Cent mehr bekommst Du eine Leiterplatte, Anschlussklemmen, Treiberbaustein und 8 Relais.

mfg
BerndJ

Ein Streifen Alu aus der Krabbelkiste tut es aber auch, ansonsten kostet ein passender Kühler bei Pollin nur 75 Cent.

Das Board läuft auch deutlich kühler mit knapp 7,5 Volt, wobei es damit nicht immer zuverlässig bootet.

Viele Grüße

Jens