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.
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.
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…
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
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.
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.
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.
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
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?
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 ?
@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?
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.
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.
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 …
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.