ILC 150 ETH Webserver

Zuviel Werbung?
-> Hier kostenlos registrieren
@Mobi
Das war wohl der Fehler. Nachdem ich die Datei umbenannt hatte, lief es. Bedeuted das, ich kann Zugriffe auf die Steuerung NUR von dieser Seite aus machen?

@Portisch
Das funktioniert leider nicht. Ich habe die Zeile:
xhttp.open("POST","/cgi-bin/ILRReadValues.exe",true);
geändert in:
xhttp.open("POST","http://192.168.0.2/cgi-bin/ILRReadValues.exe",true);
Es passiert nichts, wenn ich auf den Button klicke.

mfg Jens
 
Ich habe ein paar neue Erkenntnisse. Man kann Zugriffe auf die Steuerung von jeder Datei machen, die auf dem ILC liegt. Dazu muss man nur, wie von Portisch beschrieben, die IP-Adresse mit angeben.
Ich hatte bei mir eine Stelle im Code übersehen und die Adresse dort nicht eingetragen, deshalb kam es zu dem Fehler.
Als nächstes habe ich die Dateien von Festplatte aus gestartet. Von dort aus kann ich beliebige Werte zum ILC schreiben (writeVal.exe). Nur beim Lesen (ILRReadValues.exe) gibt es einen Fehler. Firebug meldet den Fehler, das das Objekt "xmlDoc" = null ist.
Ich teste übrigens immer noch mit dem Code aus Post #3.

Ihr müsst es doch auch irgendwie geschafft haben. Liegt es irgendwie an meinem Netzwerk? Das schreiben funktioniert doch auch?????:confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kleiner Nachtrag: Mit dem Internet Explorer 8 geht es, mit Firefox, Opera und Chrome nicht!!! Selbe Seite, alles gleich: funktioniert...
Das Problem muss also da liegen, wo im Code zwischen IE und Firefox unterschieden wird!!!
 
Erste Ergebnisse Android App

Hallo,

habe die letzten Tage mal wieder etwas an meinem Android App zur Visualisierung/Bedienung gearbeitet, anbei deshalb ein paar Sreenshots.
Kann jetzt Werte auslesen und auch schreiben, funktioniert soweit schon mal ganz gut.

Hier ein paar erste Eindrücke:



Schöne Grüße
Daniel
 

Anhänge

  • Screenshot1_klein.jpg
    Screenshot1_klein.jpg
    33,9 KB · Aufrufe: 46
  • Screenshot2_klein.jpg
    Screenshot2_klein.jpg
    22,7 KB · Aufrufe: 36
  • Screenshot3_klein.jpg
    Screenshot3_klein.jpg
    27,2 KB · Aufrufe: 40
Hallo Daniel!

Sieht gut aus, was Du machst.

Warum machst Du das nicht als Webseite mit einem Framework wie JQeury Mobile? Dabei gibt es einige Vorteile:
- Javascript läuft mittlerweile in jedem Browser (auch von Smartphones)
- Die Seite kann auf dem ILC liegen und jeder im Netzwerk kann darauf zugreifen
- Wahlweise kann die Seite aber auch auf der lokalen Festplatte eines Rechners im Netz liegen
- Man kann die Seite mit Hilfe eines Wrappers (z.B. PhoneGap) in eine App konvertieren, dabei werden Apps für die meisten Smartphones generiert (Android, IOS, Symbian, Windows Phone, Bada, ...)

Meine Tests verliefen bisher recht erfolgreich, obwohl es noch ein paar kleine Probleme gibt.

Ideal wäre ein Tool (wie z.B. WebVisit von Phoenix), mit dem man Javascript-Webseiten automatisch für den ILC erstellen könnte.

mfg Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sehr interessant - Beispiel?

Hallo Jens,

deine Idee hört sich auch nicht schlecht an, würde mich auch interessieren.
Kannst du mir hierzu mal ein kleines Beispiel geben. Wie funktioniert dann deine Verbindung zur ILC? Ich sende zur Zeit immer einen xml-Request an die Steuerung, diese gibt mir dann die Werte zurück...

Bist du dir sicher, dass JavaScript mittlerweile auf jedem Smartphone läuft. Bin mir da nicht so sicher...

Meine App programmiere ich übrigens mit Basic4Android, falls du diese zu Testzwecken mal haben willst, kein Problem.

Schöne Grüße
Daniel
 
Ich habe mir nun das JQeury Mobile etwas angesehen und habe auch Interesse daran!
Ich will den Zugriff für SPS auf jeden Fall per Browser realisieren um Platform unabhängig bleiben zu können.

@Jens944S2: kannst du mal eine Demo deiner Entwicklung zur Verfügung stellen?
Also da wo lesen und setzen einer Variabel mit JQeury funktioniert?

Am Anfang wollte ich ja alles per Java-Applet machen. Nachdem sich aber dann rausgestellt hat, dass z.B. Blackberry keine Java Applets unterstützt habe ich das wieder verworfen.
 
@Vaninger
Javascript/Jquery/Jquery Mobile läuft eigentlich in jedem Browser. Getestet habe ich selbst schon auf IE, Firefox, Android, IOS, Opera, Symbian Browser. Das einzige Problem ist manchmal, die etwas unterschiedliche Darstellung einiger Elemente, was sich aber mit Jquery Mobile in Grenzen hält.

@Portisch
Java Applets kann man komplett vergessen, die laufen auf (so weit ich weiss) KEINEM Smartphone. Und damit es auf dem PC läuft, muss man die JAVA Runtime installiert haben:sm10:.

Beispielprojekt:
Der Zugriff auf den ILC funktioniert per Javascript -> XMLHttpRequest. Die Infos, um den Zugriff zu machen, habe ich aus Post #3 aus diesem Thread und von hier: http://www.ilc150.net/PCWorxExamples/WEB/entry.txt
Ich kann mal mein ganzes Projekt zur Verfügung stellen, falls es euch interessiert. Erst mal hier ein Basis-Beispiel für euch, um Variablen zu lesen/schreiben:

Code:
<!DOCTYPE html>
<html> 
    <head> 
        <title>ILC Test</title> 
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">    
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0-alpha.1/jquery.mobile-1.2.0-alpha.1.min.css" />
        <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.2.0-alpha.1/jquery.mobile-1.2.0-alpha.1.min.js"></script>
        
        <script type="text/javascript">
            var xmlReqList;
            // Function creates from Array of variables an XML file in WebVisit format
            function createGetHTTPlist(list)
            {
                var xhttpsend="<body><version>1.0</version><client>IMasterPhoenix5_14_05</client><client_ver>5.14.0501</client_ver><item_list_size>";
                var item_list=list.length;
                var i;
                xhttpsend = xhttpsend + item_list ;
                xhttpsend = xhttpsend + "</item_list_size><item_list></item_list></body>";
                xmlReq=loadXMLString(xhttpsend);
                for (i in list){
                    newel=xmlReq.createElement("i");
                    x=xmlReq.getElementsByTagName("item_list");
                    x[0].appendChild(newel);
                    newel=xmlReq.createElement("n");
                    newtext=xmlReq.createTextNode(list[i]);
                    newel.appendChild(newtext);
                    x=xmlReq.getElementsByTagName("i");
                    x[i].appendChild(newel);
                }
                return(xmlDoc);
            }
        
            //Create from String an XML file with browser detection
            function loadXMLString(txt)
            {
            if (window.DOMParser)
              {
              parser=new DOMParser();
              xmlDoc=parser.parseFromString(txt,"text/xml");
              }
            else // Internet Explorer
              {
              xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
              xmlDoc.async="false";
              xmlDoc.loadXML(txt);
              }
            return xmlDoc;
            }
        
            // Send the xHTTPRequest to the server in the browser adress
            function fhttprequest(xmlReqList)
            {
                if (window.XMLHttpRequest)
                  {
                    xhttp=new XMLHttpRequest();
                    xhttp.open("POST","http://192.168.0.11/cgi-bin/ILRReadValues.exe",true);
                    xhttp.send(xmlReqList);
                    if (window.XMLHttpRequest){
                        xhttp.onreadystatechange = function() {
                        if(this.readyState == 4) {
                            GetData(this);
                            }
                        }
                    }
                  }
                else // Internet Explorer 5/6
                  {
                    msXHTTP = new ActiveXObject("Microsoft.XMLHTTP");//Msxml2.XMLHTTP.3.0");
                    msXHTTP.onreadystatechange = doHttpReadyStateChange;
                    msXHTTP.open("POST","http://192.168.0.11/cgi-bin/ILRReadValues.exe",true);
                    msXHTTP.send(xmlReqList);
                  }
            }
            // Only need for old IExplorer Get Event new data
            function doHttpReadyStateChange() {
               if (xhttp.readyState == 4) {
                  GetData(this);
               }
            }
            function fuGetData() {
                // Create List of variables and convert by function "createGetHTTPlist" into xml
                xmlList = createGetHTTPlist(["@GV.PLC_SYS_TICK_CNT","@GV.ONBOARD_OUTPUT_BIT0"]);
                // Send xml request
                fhttprequest(xmlList);
            }
        
            //Is executed if the confirmation from the webserver is recived
            function GetData(xhttp){
                xmlDoc=xhttp.responseXML; //Convert respnse into xml document
    
                document.getElementById("idPlcSysTickCnt").innerHTML = xmlDoc.getElementsByTagName("v")[0].childNodes[0].nodeValue; //Get first variable value
                document.getElementById("OnboardInput1").innerHTML = xmlDoc.getElementsByTagName("v")[1].childNodes[0].nodeValue;
            }
        
            function SetData(vValue){
    
                if (window.XMLHttpRequest)
                  {
                  xhttpSet1=new XMLHttpRequest();
                  }
                else // Internet Explorer 5/6
                  {
                  xhttpSet1=new ActiveXObject("Microsoft.XMLHTTP");
                  }
                 var command="http://192.168.0.11/cgi-bin/writeVal.exe?" + "@GV.ONBOARD_OUTPUT_BIT0" + "+" + vValue
                xhttpSet1.open("GET",command,false);
    
                xhttpSet1.send(command);
            }
            </script>

    </head> 
    <body> 
        <div data-role="page"  data-theme="a">
            <div data-role="header"></div><!-- Ende header -->
            <div data-role="content">
                <h2>ILC Test</h2>
                <button id="btnSetOnboardOutput1ON" data-icon="refresh" data-iconpos="right">Set onboard output 1: ON</button>
                <button id="btnSetOnboardOutput1OFF" data-icon="refresh" data-iconpos="right">Set onboard output 1: OFF</button>

                <button id="btnGetValues" data-icon="refresh" data-iconpos="right">Get Values</button>
                <br/><br/>
                <a>PLC SysTick Cnt = </a><a id="idPlcSysTickCnt"></a></br>
                <a>Onboard Input 1= </a><a id="OnboardInput1"></a></br>

            </ div ><!-- Ende content --> 
        </ div ><!-- Ende page -->
        
        <script type="text/javascript">
            //Events
            $('#btnSetOnboardOutput1ON').mousedown(function(e){ e.preventDefault();SetData(1)});
            $('#btnSetOnboardOutput1OFF').mousedown(function(e){ e.preventDefault();SetData(0)});
            $('#btnGetValues').mousedown(function(e){ e.preventDefault();fuGetData()});
        </script>

    </body>    
</html>

Den Code in eine entry.html speichern und per FTP in das /webs/ Verzeichnis des ILC's kopieren. Die IP-Adresse im Code muss natürlich durch die passende ersetzt werden. Das Netzwerk, indem der ILC hängt, muss im Internet sein, damit die Jquery/Jquery Mobile Bibliotheken heruntergeladen werden können.

mfg Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Übrigens: Ich habe noch folgende Probleme bei der Realisierung per Jquery Mobile:

1.: Ich möchte die Bibliotheken gerne aus dem Flash vom ILC laden (damit der ILC nicht immer eine Internet-Verbindung braucht) Allerdings wird dann die CSS-Datei nicht richtig geladen. Es ist scheinbar NICHT möglich, irgendeine CSS-Datei, welche im Flash des ILC liegt, in eine HTML-Seite auf dem ILC einzubinden.
Ich vermute, es liegt an dem Webserver des ILC. Andere Dateien (Bilder, *.js, *.html, ...) funktionieren.

2.: Wenn die Webseiten auf dem ILC liegen, funktioniert der Zugriff auf die Variablen einwandfrei. Liegen die Seiten jedoch entfernt, auf einem PC, geht es nicht mehr. Außer mit dem Internet-Explorer, damit gehts.
Meine Vermutung ist, das Firefox den Zugriff absichtlich blockiert, wegen Sicherheitsbeschränkungen (cross domain request).
 
Beispiel Datei wäre super

Hallo Jens,
ganzes Beispiel wäre klasse, dann kann man die Funktionsweise am Besten nachvollziehen...

Schöne Grüße
Daniel
 
Auf meinen Android Geräten getestet - funktioniert

Hallo Jens,

habe dein Beispiel jetzt mal getestet, funktioniert tatsächlich auf meinen beiden Android Geräten wie auch im Internet Explorer. Ich bin begeistert. Wäre schön, wenn du uns noch ein Beispiel zur Verwendung der JQuery Mobile geben könntest. Blicke da noch nicht richtig durch...

Schöne Grüße und vielen Dank!

Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na klar läuft das...:s12:
Ich habe mal mein ganzes Projekt für die Haussteuerung hochgeladen. Das läuft natürlich nur, wenn man dazu das passende PCWorx Projekt auf dem ILC hat.
Ein gutes Tutorial für JQuery Mobile habe ich hier gefunden: http://t3n.de/news/jquery-mobile-grundlegende-konzepte-funktionsweisen-326279/
Die offizielle Seite http://jquerymobile.com/ ist auch nicht schlecht. Dort gibt es eine Beschreibung zu der ganzen API, außerdem kann man sich eine eigene Seite basteln -> ist nicht schlecht zum testen.

mfg Jens
 

Anhänge

  • Home_WBM.zip
    16,9 KB · Aufrufe: 37
Super! Danke!

Das schaut ja schon gar nicht so schlecht aus! Auch geht es auf meinem Blackberry ohne Probleme.

Einen kleinen Vorschlag habe ich aber noch:
Um den Websource auch in 20 Jahren noch zu verstehen war ich so frei deine Vorlage etwas abzuändern.
Als Beispiel habe ich das Wohnzimmer mal angehängt. Das Setzen funktioniert, das lesen kann ich nicht Überprüfen...

Meine Idee ist es alles nötige über Atributte zu definieren:
Code:
<th><button name="@GV.EG_Wohnz_DO2_221" data-PDD="Wohnzimmer.W_EG_Wohnz_DI1_IN10" data-obfunc="Licht" data-imgname="imgEveningLight">An</button></th>
name: PDD Name zum Einlesen von der SPS
data-PDD: PDD Name zum Schreiben auf die SPS
data-obfunc: Button Funktion, wird in der Javascript benötigt
data-imgname: Zugehöriges Image zum Button

Die events für mousedown und mouseup sind nun auf der aktuellen HTML für alle Buttons gleich:
Code:
   $('button').mousedown(function(e){ e.preventDefault();SetValueToPLC(this.getAttribute("data-PDD"),"1")});
   $('button').mouseup(function(e){e.preventDefault(); SetValueToPLC(this.getAttribute("data-PDD"),"0")});

Die dazugehörige Javascript ist nun automatisiert.
  1. Die PDD Liste zum Einlesen holt sich das Script selber über die Button Namen
  2. In GetData sind auch die Button Namen drinnen. Somit kann man sich über den Namen den Button suchen und dann je ob Licht oder Jalousie entscheiden was mit dem Wert gemacht wird.
Die GetData könnte dann auch Global gemacht werden. Natürlich ist es möglich die Objekt Funktionen wie Licht & Jalousie beliebig zu erweitern.

Das Gute daran ist, dass man einfach einen Button hinzufügen kann ohne gross was verändern zu müssen!
Anhang anzeigen wohnzimmer.zip
 
Sehr schön Jens. Da kann ich mir ja was grafischtechnisches abgucken für meine Visu als .exe.
Aber das ganze im Browser ist auch toll.
Werd mir das mal vor Ort angucken, wenn du Zeit hast.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen dank!

Hallo Jens, hallo Portisch,

auch von mir ein vielen Dank für eure Beispiele. Werde mir diese heute Abend mal anschauen und hoffe mal, dass ich mich auch ein wenig rein denken kann. Schaut auf jeden Fall schon mal sehr gut aus und ich finde gut, dass man von verschiedenen Gerätschaften (Android, PC, etc) darauf zugreifen kann...

Bei Fragen werde ich mich wohl oder übel wieder an euch wenden müssen :)

@ Jens: Wie hast du deine Verkabelung/Verdarhtung etc. bei deinem Haus und der ILC gelöst? Bin noch (immer) in der Planungsphase, hier sind sämtliche Hinweise/Vorschläge gerne willkommen...

@Mobi: Bei dir auch alles klar? Arbeitest immer noch fleißig an deiner Autoit Visualisierungslösung? Hoffentlich gibt es hier mal ein paar Screenshots zu sehen...

Schöne Grüße
Daniel
 
Ich mach nebenbei ein wenig. Hat nur noch keine Idee für die Grafik, deshalb gabs noch keine Screenshots ;)
Aber die werden bald folgen.

Beschäftige mich grad hauptsächlich mit Kameraprüfung und Libnodave.
 
@Portisch
Super Idee!!! Ich hatte auch schon angefangen, das ganze etwas generischer zu machen, aber auf Deine Lösung bin ich nicht gemommen.
Ich arbeite zur Zeit daran, alle Seiten in eine HTML-Datei zu packen. Dadurch würden die Ladezeiten der verlinkten Seiten wegfallen. Allerdings funktioniert das noch nicht so, wie ich will.

@Vaninger
Zur Hausautomatisierung: Ich habe für jedes Stockwerk eine Busklemme (Interbus) gesetzt. Da hängen die IO-Module dran. Alle Taster im Haus sind über Telefonleitung (YSTY 8-fach) mit den IO's verbunden. Außerdem hängen an den IO's auch PLC-Relais von Phoenix, an die alle Lampen, Jalousien und Schaltsteckdosen angeschlossen sind.
Bei so einer Sternverdrahtung kommen schon ein paar Kilometer Kabel zusammen. Das meiste habe ich selber gemacht, der Rest hat aber noch ausgereicht, unseren Elektriker in den Wahnsinn zu treiben. :sw14:

@Mobi
Die Grafik ist nicht von mir, es ist ein vorgefertigtes Thema von Jquery Mobile (siehe hier: http://jquerymobile.com/test/docs/api/themes.html). Die Anlage ist zwar noch nicht fertig (wird sie wahrscheinlich nie...) aber Du kannst sie gerne besichtigen.

mfg Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe mir gerade noch den Toggle Switch angesehen. Dann würde man das Image nicht brauchen :cool:

wohnzimmer.html
Statt:
Code:
       <tr>
      <td><h3>Hauptbeleuchtung TV-Bereich</h3></td>
      <th><button name="@GV.EG_Wohnz_DO2_411" data-PDD="Wohnzimmer.W_EG_Wohnz_DI1_IN13" data-obfunc="Licht" data-imgname="imgMainLight">An</button></th>
      <th><img src="Aus.png" name="imgMainLight"></th>
     </tr>

Das:
Code:
     <tr>
        <td><h3>Hauptbeleuchtung TV-Bereich</h3></td>
      <th>
             <select name="@GV.EG_Wohnz_DO2_411" data-PDD="Wohnzimmer.W_EG_Wohnz_DI1_IN13" data-obfunc="Toggle" data-role="slider">
              <option value="0">Aus</option>
              <option value="1">An</option>
             </select>       
            </th>
     </tr>

Bei den Events das dazu:
Code:
$('select').change(function(e){ e.preventDefault();SetValueToPLC(this.getAttribute("data-PDD"),jQuery(this).val())});

wohnzimmer.js

LoadDialog_Wohnzimmer:
Code:
function LoadDialog_Wohnzimmer()
{
  // get all buttons of html
  var d = document.getElementsByTagName('button');
  for (var i = 0; i < d.length; i++)
  {
    btNames[i] = d[i].name;
  }
  
  // get all select sliders of html
  var d = document.getElementsByTagName('select');
  for (var i = 0; i < d.length; i++)
  {
    btNames[btNames.length] = d[i].name;
  }  
 hSiteUpdateActiveWohnzimmer = window.setInterval("UpdateValuesWohnzimmer()",750); 
}

Und im switch: switch (document.getElementsByName(ObjectName)[0].getAttribute("data-obfunc"))
das dazu:
Code:
      // Object Toggle Slider
      case 'Toggle':
        switch (xmlDoc.getElementsByTagName('v')[i].childNodes[0].nodeValue)
        {
          case '0': 
            jQuery(document.getElementsByName(ObjectName)[0]).val('0').slider('refresh');
            break;
          case '1':
            jQuery(document.getElementsByName(ObjectName)[0]).val('1').slider('refresh');                         
            break;
        }        
        break;

Mal schauen ob ich heute noch dazu komme das zu testen...
 
Ja, der Toggle Switch sieht auch ganz gut aus.
Übrigens: Kannst Du mal testen, ob Du CSS-Dateien (die auf dem ILC liegen) einbinden kannst. Bei mir funktioniert das nicht.

mfg Jens
 
Ja, der Toggle Switch sieht auch ganz gut aus.
Übrigens: Kannst Du mal testen, ob Du CSS-Dateien (die auf dem ILC liegen) einbinden kannst. Bei mir funktioniert das nicht.

mfg Jens
Habe ich gestern auch gesehen. Die HTML wird zwar mit dem Theme dargestellt, aber die Icons bei den Button fehlen.
Wenn man die CSS im Internet hernimmt passt es!?
Die zwei Scripte haben ohne Probleme Lokal funktioniert.
 
Zurück
Oben