Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: CControl ins Internet Kategorie: Programmierung (von Markus Stamm - 9.03.2008 14:58)
Als Antwort auf CControl ins Internet von wema - 9.03.2008 12:19
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo Heiko
für den Anschluss der C-Control an das LAN benötigst du die Serielle Schnittstelle der C-Control.
Ich habe das mit der swcom (2. serielle Schnittstelle der C-Control Station) realisiert.
Diese ist mit dem XPort (von André) verbunden, welche den �bergang an das LAN realisiert.
In der C-Control habe ich einfach mal je 10 globale Byte, Int, LongInt und Float-Variablen definiert,
in welche ich die gewünschten werte aus dem Programm ablege,
So bleibt die Prozedur relaiv allgemein. Der Thread wartet auf die Ankunft der von mir definierten
Zeichenkette "GET-WG-Daten" und sendet dann die definierten Variablen.


thread XPort
{
 byte puffer[512];
 int i;
 string http, http0;
 string s, strFloat;


 
swcom.setspeed(swcom.SPEED_9600);
swcom.setbuf(puffer,512);
swcom.init();

http = "GET-WG-Daten"; // dies ist der Aufforderungsstring, welche die php-Prozedur sendet

loop
{
   swcom.flush();   //RS232-Buffer leeren
   wait swcom.rxd();   // warten auf Zeichenempfang
   swcom.inputstr(s,0);
    // nur die ersten 12 Zeichen werden in den String http0 übertragen
   strx.left(s,http0,12);
    // wenn da "GET-WG-Daten" steht, müssen die Variablen übertragen werden
   if strx.comp(http,http0)
  {
    wait cap.Capture(1);  // alles an einem Stück senden
    // in der Variablen global.strSQLDate steht das
    // Datum im SQL-Format "JJJJ-MM-DD HH:MM"
   // und ein Komma (44) als Delimiter
    swcom.print2(global.strSQLDate);swcom.put(44);
   for i=0...9   // hier folgen die 10 Byte-Variablen mit Komma getrennt
    {
       if global.ByteWert[i] swcom.put('1');
       else swcom.put('0');
       swcom.put(44);
    }
   // hier folgen die 10 Int-Variablen mit Komma getrennt usw.
    for i=0...9{swcom.num(global.IntWert[i]);swcom.put(44);}
    for i=0...9{swcom.num(global.LongWert[i]);swcom.put(44);}
    for i=0...9
    {   strFloat="";
       str.putfloatf(strFloat,global.FloatWert[i],1);
       swcom.print2(strFloat);
       swcom.put(44);

    }
    swcom.print(".rn");  // zuletzt das Zeilenende
    swcom.put(0);
    cap.Release(1);  // und das Capture wieder frei geben
    strFloat="";
   }

}
}


Soweit die Sache auf der Seite der C-Control.
Die Konfig auf dem XPort ist etwas Tricky und meist mit etwas Probieren verbunden.
Wenn du willst, kann ich die meine Konfig zustellen.

Auf dem Router musst du ein NAT einrichten, diese muss ungefähr so aussehen:
DienstName StartPort EndPort Server-IP-Adresse

bei mir ist habe ich folgende Werte im Router eingetragen:
XPort=Dienstname (auf meinem Router freier text)
StartPort: 10001  (Gemäss XPort-Doku Standard-Port,
EndPort:  10001
Server-IP-Adresse: 192.168.9.10 (Entspricht der IP-Adresse des XPort in meinem lokalen Netzwerk

Somit ist der XPort vom Internet erreichbar unter der externen IP-Adresse des Routers
mit dem Port 10001.

Auf meiner Webseite habe ich nun eine PHP-Funktion erstellt, welche alle 30 Minuten aufgerufen wird.
Du kannst dir bei Cronjob.de diese Aufrufe gratis einrichten.


<?php

$fp = @fsockopen ("xxxxxxxxxxx.dyndns.org", 10001, $errno, $errstr, 1);
//xxxxxx steht hier für meine Domain, für welche ich einen Dyndns-Account eingerichtet habe

if (!$fp)
  {
  echo "nein, schief gelaufen ...."."<br>n";
   echo "$errstr ($errno) - No connection to XPort<br>n";
  }
  else
  {//Bei erfolgreicher Verbindung:
   stream_set_timeout($fp, 4);// Timeout: 1 Sekunde
   $Data="";
   fputs($fp, "GET-WG-Daten..................");// zum Anfordern der Daten senden
   echo "GET-WG-Daten.................."."<br>n";
   while(!$info['timed_out'])
   {// Solange es zu keinem Time-Out kommt ...
    $in=fread($fp, 512); //Daten lesen
    $Data.=$in;

    if(substr($in,-3)==".rn") break;
    // Ein Punkt + CR + LF signalisiert das Datenende
    $info = stream_get_meta_data($fp);
   }
   fclose($fp);
   echo $Data . "<br>n";
   $w=explode(",",$Data);
   $sqlValues="('";
   foreach ($w as $wert)
   {
    // echo $wert."<br>n";
    $sqlValues.=$wert."', '";
   }
   $sqlValues=substr($sqlValues,0,(strlen($sqlValues)-8));
   $sqlValues=$sqlValues."')";
   // echo "<br>n"."<br>n".$sqlValues."<br>n";

   if(!$info['timed_out'])
    {// Wenn der Datensatz komplett empfangen wurde...
      echo "<br>n"."<br>n"."Datensatz komplett !!!"."<br>n";
     $tdate = substr($w[0],0,8);
    echo $tdate;
        if ($tdate="00-01-01")
       {
          $w[0]=date("y-m-d H:i:s");
        }
    }
   else
   {
    echo "<br>n"."<br>n"."Datensatz fehlerhaft !!!!!!!!!!!"."<br>n";
   $w[0]=date("y-m-d H:i:s");
   $w[1]=255;
   }
    $connection =mysql_connect('localhost','web290','berta1');
if (connection)
{
if (mysql_select_db('usr_web290_1'))
{
            $sql = "INSERT INTO test1 (Datum,".
                    "B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,".
                    "I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,".
                    "L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,".
                    "F1,F2,F3,F4,F5,F6,F7,F8,F9,F10) ".
            "VALUES ('".$w[0]."','".
            $w[1]."','".$w[2]."','".$w[3]."','".$w[4]."','".$w[5]."','".$w[6]."','".$w[7]."','".$w[8]."','".$w[9]."','".$w[10]."','".
            $w[11]."','".$w[12]."','".$w[13]."','".$w[14]."','".$w[15]."','".$w[16]."','".$w[17]."','".$w[18]."','".$w[19]."','".$w[20]."','".
            $w[21]."','".$w[22]."','".$w[23]."','".$w[24]."','".$w[25]."','".$w[26]."','".$w[27]."','".$w[28]."','".$w[29]."','".$w[30]."','".
            $w[31]."','".$w[32]."','".$w[33]."','".$w[34]."','".$w[35]."','".$w[36]."','".$w[37]."','".$w[38]."','".$w[39]."','".$w[40]."')";

            // echo "<br>n"."<br>n".$sql."<br>n";

}
        //$query = "SELECT spalte FROM tabelle";
        //$result = mysql_query($query);
        //if (mysql_errno()) {
        //     echo mysql_error(); }

 $sqlresult = mysql_query($sql);

 if(mysql_errno()) echo mysql_error();

 mysql_close($connection);
      }
   }
?>


Diese Funktion schreibt die Reccords in eine MY-SQL-DB auf meiner Webseite, die Darstellung der
Daten ist dann der eigenen Fantasie überlassen.
Ich werte diese lediglich statistisch aus.

Ich hoffe, dass ich dier einige Inputs geliefert habe:
Gruss: Markus




> Hallo User,
>
> ich mu� hier leider einmal eine umfangreichere Frage stellen. Ich habe mir zwar über "suchen"
> einiges zusammengetragen, aber so richtig schlau werde ich daraus nicht. Bitte versucht mir ,
> auf für mich verständliche Weise zu helfen.
> Wie komme ich an meine CControl im Keller über das hauseigene LAN (3 Computer über einen
> Router verbunden)????????? Und wie kann ich einen Schritt weitergehen und meine CControl
> über das Internet aufrufen (Daten ändern oder zumindest mir die Daten ansehen - so wie es z.B.
> Andre macht)????????????
> Bitte nennt mir die benötigte Hardware (Xport LAN interface?) und die nötige Software!!!
>
> Vielen Dank für Eure Hilfe und einen schönen Sonntag noch.
>
> Heiko


    Antwort schreiben


Antworten:

Re: CControl ins Internet (von wema - 9.03.2008 19:35)
    Re: CControl ins Internet (von André H. - 4.04.2008 1:25)