ILC 150 ETH Webserver

Hallo Mobi,
schau mal unter Antwort #8, da ist unten im Anhang eine Zp-Dtei, aus dieser müsstest du dir die HTTPRequest.class entnehmen können.
Habe auch vor, mir eine Lizenz für Basic4Android zu kaufen. Das Aussehen der App kan man im Nachhinein ja noch verbessern, wichtig wäre, wie du schon geschrieben hast, erstmal Werte ins App zu bekommen.

Schöne Grüße
Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die class hab ich auch. Nur ich wollte mir jetzt nicht noch extra ein Java-Editor installieren.

Wenn sich noch mehr finden die auch Basic4Android haben wollen, könnte man ja solche Multi-Lizenz kaufen.
Edit: Hier, 30 für 249 Dollar.
 
import org.w3c.dom.*;
import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.net.*;
public class HTTPRequest {
// Anfang Attribute
static String IPAddress;
// Ende Attribute

public static void SetIPAddress(String args) {
IPAddress = args;
}

// Anfang Methoden
private static Document loadXMLString(String txt) {
txt = "<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>" + txt;
System.out.println("Convert XML-String to XML: " + txt);
DocumentBuilder docBuilder;
Document doc = null;

try {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilderFactory.setIgnoringElementContentWhitespace(true);
docBuilder = docBuilderFactory.newDocumentBuilder();
byte [] xmlDATA =txt.getBytes();
ByteArrayInputStream in = new ByteArrayInputStream(xmlDATA);
doc = docBuilder.parse(in);
//doc.getDocumentElement().normalize();
} catch(Exception e) {
System.out.println("Error XML String to XML!");
e.printStackTrace();
} // end of try


return doc;
}

private static String createXMLString(String[] Variables) {
String result;
int i;

try {
result = "<body><version>1.0</version><client>IMasterPhoenix5_14_05</client><client_ver>5.14.0501</client_ver><item_list_size>";
result = result + Variables.length + "</item_list_size><item_list>";

for ( i = 0; i < Variables.length ; i++) {
result = result + "<i><n>" + Variables + "</n></i>";
} // end of for

result = result + "</item_list></body>";
System.out.println("Request XMl String: " + result);
return result;
} catch(Exception e) {
return null;
} // end of try
}

private static String sendHTTPRequest(String XMLString) {
String result = null;

try {
URL url = new URL("http://" + IPAddress + "/cgi-bin/ILRReadValues.exe");
System.out.println("Host: " + url.toString());
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(XMLString);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
result = rd.readLine();
wr.close();
rd.close();
System.out.println("Received XMl String: " + result);
return result;
} catch(Exception e) {
System.out.println("Exception URL:");
e.printStackTrace();
result = "<body><version>1.0</version><client>IMasterPhoenix5_14_05</client><client_ver>5.14.0501</client_ver><item_list_size>10</item_list_size><item_list><i><n>@GV.Local_Time_Formated</n><v>30.04.2012 11:06</v></i><i><n>@GV.Sun_Midday</n><v>Sonnenhöchststand: 13:02:53 </v></i><i><n>@GV.Sun_Set</n><v>Sonnenuntergang: 20:54:00 </v></i><i><n>Serial.H1</n><v>Raum 3: 38%</v></i><i><n>Serial.P1</n><v>Raum 5: 980mbar</v></i><i><n>Serial.T1</n><v>Raum 1: 23.5°C</v></i><i><n>Serial.T2</n><v>Raum 2: 23.6°C</v></i><i><n>Serial.T3</n><v>Raum 3: 23.6°C</v></i><i><n>Serial.TIME1</n><v>30.04.2012 11:03</v></i><i><n>Serial.V1</n><v>Raum 3: 1.95V</v></i></item_list></body>";
System.out.println("Dummy XMl String: " + result);
} // end of try
return result;
}
private static String[] ExtractVars(Document doc) {
NodeList nl = doc.getElementsByTagName("v");
String[] result = new String[nl.getLength()];
int i;

System.out.println("ExtractVars: " + nl.getLength() + " elements");

for ( i = 0 ; i < nl.getLength() ; i++) {
result = doc.getElementsByTagName("v").item(i).getFirstChild().getNodeValue();
System.out.println("Object " + i + ": " + result);
} // end of for
return result;
}

public static String[] GetValue(String[] Variable) {
String[] result = null;
String XMLString;
String XMLStringResponse;
Document xmlDoc;

try {
// first get string for XML
System.out.println("createXMLString");
XMLString = createXMLString(Variable);
// send XML String to http server and get response String
System.out.println("sendHTTPRequest");
XMLStringResponse = sendHTTPRequest(XMLString);
// convert Response String to real XML DOM
System.out.println("loadXMLString");
xmlDoc = loadXMLString(XMLStringResponse);
// get result from XML DOM
System.out.println("ExtractVars");
result = ExtractVars(xmlDoc);
} catch(Exception e) {
System.out.println("Error geting vars from HTTP server");
} // end of try


return result;
}
// Ende Methoden
}


Die HTTPRequest.java kann man sich einfach mit einem Texteditor ansehen...

Mittlerweile habe ich rausgefunden, dass der Blackberry Internetbrowser zwar Java-Script aber leider kein Java-Applet unterstützt :oops:
Bin nun am überlegen ob ich ein Win32 Delphi Programm mache. Das Programm kann dann die Daten auswerten/speichern/mittelwerte berechnen usw. Über ein Webinterface vom Programm würden die Sachen dann auch Online verfügbar sein.
Ein Windows Server für mein LAN Netzwerk wird sowieso benötigt (Haupsächlich für TV). Dieser müsste dann halt immer laufen...:icon_frown:
Wieder ~30€ im Jahr an Stromkosten...
 
Weil ich gerade Zeit hatte...

Anbei ein kleines Windows Programm um von einer ILC die Werte abfragen zu können.
Einfach in der Settings.xml die IP anpassen.
Dann noch in der PDD.xml die gewünschten Variabeln reinschreiben.

mfg

Screenshot.png
 
Zuletzt bearbeitet:
Hallo Mobi,
danke für die Antwort. Habe es gerade nochmal probiert, daran liegt es nicht. Deine Idee mit der Basic4Android Mehruser Idee war sehr gut, leider etwas zu spät. Habe mir heute früh eine Einzellizenz gekauft, die normale für 28,50 €. Gab irgendwie nochmal 30 %. Hast du schon eine Idee, wie man die Werte aus der SPS in ein App bekommen könnte. Werd mich jetzt erstmal in das Programm einlesen...

PS: Die Bilder folgen demnächst...

Schöne Grüße
Daniel
 
Ehrlich gesagt habe ich das schnell und dirty programmiert.
Werde Morgen noch ein paar Absicherungen einbauen.

Vielleicht zum Testen nur einmal einen einzelnen String als PPD im XML eintragen.
Boolean und String habe ich getestet, aber ich weis nicht wie es sich mit Integer und anderen Sachen verhält!

Wenn du meine PDD.xml verwendest müsstest du lauter "var not found..." bekommen.
 
@ Mobi:
Danke für den Tipp

@Portisch:
Ich werde es morgen nochmals probieren und dir dann Rückmeldung geben. Mit was hast du die Exe erstellt?

Schöne Grüße
Daniel
 
Wollte es gestern ja nur schnell probieren und bei mir gab es keinen Fehler. ;-)

Hier nun eine bessere Version. Mal sehen ob nun die Ursache des Fehlers rauskommt.
Bitte neue "Settings.xml" nehmen und die IP wieder eintragen.
Die PDD.xml ist nicht mehr in Verwendung. Stattdessen einfach die "PDD.csv" vom PC WorX Projekt in den gleichen Ordner kopieren.

Screenshot.png
 
Zuletzt bearbeitet:
Noch ein kleines Update!

Habe noch das Setzen von Vars in der ILC eingebaut.
Dazu einfach eine Var in der Liste markieren und auf "Set value for Var" drücken. Dann kommt ein Eingabefenster.
Aktiv getestet habe ich derzeit nur eine BOOL Var und das geht einwandfrei.
Bei Boolean muss man '0' für False und '1' für True eingeben.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab jetzt mal meine Version gemacht. Schreiben der Vars hab ich (noch) nicht.
Einfach mal testen. PDD.csv in das Verezichnis wo die Exe auch ist. Eine .ini oder .xml hab ich jetzt erstmal noch nicht gemacht zum speichern der IP-Adresse und so.
 

Anhänge

@Portisch: Wenn kein AutoUpdate an ist müsstest du nochmal eine Request machen nach dem WriteVal. Damit es auch in der Listview richtig steht oder halt die Listview ändern ohne einen Request.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Portisch, hallo Mobi,

vielen dank für die Bereitstellung der beiden Programme. Habe diese gestern Abend noch kurz ausprobieren können, leider funktionieren beide nicht bei mir. Mobi´s Programm bekommt keine Values, bei Portisch kommt die bei Antwort #26 bereits schon einmal aufgetauchte Fehlermeldung, dass irgendwas in Zeile 2 nicht stimmt. Habt ihr hierzu irgendwelche Ideen?

Mit welchen Programm(en) habt ihr die Exe erstellt? Vielleicht könntet ihr mir den Code zur Verfügung stellen, damit ich nachvollziehen kann, wie der HTTPRequest zur Steuerung abläuft.

Danke und schöne Grüße

Daniel
 
So hab jetzt auch das schreiben mit reingebracht. Dazu ist noch eine Prüfung hinzugekommen, das man keinen falschen Wert eingeben kann, welcher den Datentyp nicht entspricht. Und bei Bollean könnt ihr true, false, 1 und 0 angeben. Auch stimmt was noch nicht mit der Updatezeit. Wenn ich 100ms auswähle habe ich nur ca. 300ms. Schaut mal ob es bei euch auch so ist.
Quellcode ist auch drin.
 

Anhänge

Zuletzt bearbeitet:
Zurück
Oben