Hallo Josef,
Zuerst: Lege Dich bitte auf einen Nickname fest. Vorzugsweise mehr als zwei Buchstaben. ;-)
> ich möchte mir auch eine Homepage wie André H. machen, damit ich auch von überall meine Heizung
> beobachten kann. (In der Arbeit bei Bekannten, im Urlaub usw.)
> Soweit ich es richtig verstanden habe brauche ich ein Web-Server wie z.B. den XPORT, die kann ich ja bei cctools Ordern.
>
>
> Ich habe momentan eine DSL-Flaterate der Telekom.
> Was brauche ich alles damit ich so eine Homepage realisieren kann???
Es gibt mehrere Möglichkeiten, dies zu realisieren, welche auch
unterschiedliche Anforderungen stellen.
Bei allen Möglichkeiten, bei denen kein lokaler Rechner involviert sein soll, ist
ein XPort notwendig. (oder etwas vergleichbares)
Ich zähle jetzt mal die Möglichkeiten auf:
1. Stand-Alone-Webserver
Hier würde die CC2 zusammen mit dem XPort als HTTP-Webserver fungieren.
Einen extra Webspace benötigst Du hier nicht unbedingt.
Alles was Du benötigst wäre eine always-on-Verbindung zum Internet.
D.h. die Verbindung geht über einen NAT-Router, der automatisch die Verbindung
wieder aufbaut, sobald diese verlorengeht. (wg. Zwangstrennung etc.)
Da wahrscheinlich nicht jeder, wie ich einen 64er-IP-Block mit festen IPs hat ;-),
muÃ?t Du mit der dynamisch zugewiesenen IP zurechtkommen.
Das hie�e in Deinem Fall, da� Du unbedingt einen DYNDNS-Account benötigst
und Dein Router eine entsprechende Funktion bietet.
Im Router selbst muÃ? noch eine Portweiterleitung zum XPort eingerichtet werden.
Diese Möglichkeit hat allerdings einen kleinen Schönheitsfehler.
Momentan lassen sich über die CC2 (ohne grö�ere Mühen) keine Bilder wiedergeben,
so da� sich die Ausgabe auf die Möglichkeiten der HTML-Syntax begrenzt.
Prinzipiell ist es möglich, aber zu erklären, was man hierfür anstellen mu�,
würde viele viele Zeilen benötigen. ;-)
Wie man die CC2 samt XPort zu einem Webserver macht, findest Du, wenn Du im Forum
nach den Begriffen "CC2" und "Webserver" suchst.
2. Stand-Alone-Webserver zusammen mit einem nicht scriptfähigen Webspace
Dies ist prinzipiell identisch mit der ersten Möglichkeit.
Jedoch würde man Bilder und Grafiken auf einen externen Webspace auslagern
und entsprechen in der HTML-Ausgabe der CC2 als externe Grafiken einbinden.
Dies ist z.B. sinnvoll, wenn lediglich ein reiner WEB-Space ohne irgendeine
Möglichkeit für eine Scriptsprache besteht.
Dies ist meist der Fall, wenn der Webspace vom ISP zum Internetzugang gestellt wird.
3. Senden von Daten an ein PHP-Script, gesteuert von der CC2.
Hier würde man zyklisch alle nötigen Daten zu einem PHP-Script senden,
welches diese verarbeitet und lokal auf dem Webserver speichert.
Ein zweites Script übernimmt die Anzeige, wenn die Homepage aufgerufen wird.
Das Senden der Daten würde man mit Hilfe der Modem-Funktionen des XPorts realisieren.
Man muÃ? hier ein ein HTTP-Post zum Senden der Daten verwenden.
Alternativ ginge dies auch mit einem HTTP-GET und der Ã?bergabe der Daten
über die Adresse. Das wäre zwar einfacher, ist aber auch unsicherer.
Ich habe diese Möglichkeit noch nicht getestet, habe dies aber vor.
Funktionieren wird das auf jeden Fall. Nur Quellcode kann ich hierzu noch nicht bieten.
Der Vorteil dieser Möglichkeit wäre auf jeden Fall, da� man keine feste IP und
auch keinen DYNDNS-Service benötigt.
4. Anfordern der Daten bei Bedarf über eine Socksverbindung.
Das ist die Möglichkeit, die ich favorisieren würde.
Man benötigt hier, wie bei der dritten Möglichkeit, auch einen PHP-fähigen Webspace.
Zudem mu� die Möglichkeit bestehen, Socks-Verbindungen nach au�en aufbauen zu können.
Das könnte bei manchem Anbieter, besonders bei den Billiganbietern, gesperrt sein.
Das kann man nur testen.
Vom prinzipiellen Aufbau sieht diese Lösung so aus:
Wird der Anlagenstatus angezeigt, erfolgt über dem Webserver eine Socksverbindung
zum XPort. Hier wird auf jeden Fall eine feste IP oder ein DYNDNS-Account benötigt.
(Alternativ könnte man zyklisch mit Kombination der dritten Möglichkeit dem Webserver
die eigene IP mitteilen, und so den DYNDNS-Service sparen)
Die Socksverbindung ist prinzipiell nichts anderes, als eine transparente serielle Datenverbindung,
wie sie auch bei der RS232 benutzt wird.
Es gibt zwar ein paar Einschränkungen, aber die fallen hier nicht ins Gewicht.
Um nun Die Daten anfordern zu können, oder evtl. auch Kommandos zu senden,
sollte man einen einfachen Passwortschutz implementieren.
Ich habe das bei mir derzeit noch nicht gemacht, da ich den XPort nur für die Anbindung
an meinen internen Webserver (auch wenn dieser von auÃ?en erreichbar ist) testweise nutze.
Die �bermittlung der Daten auf meine öffentlich zugängliche Statusseite erfolgt nach wie vor
mit Hilfe eines kleinen VB-Programm, welches an einem meiner Rechner auch die Visualisierung
und Bedienung meiner Regelung ermöglicht.
Erst wenn ich zeitlich dazu komme, ein komplettes Frontend inkl. Bedienmöglichkeit
zu erstellen, werde ich den XPort fest anschlieÃ?en.
Aber nun zum wichtigsten, den Quellcodes. ;-)
Ich habe derzeit das Script auf zwei PHP-Dateien aufgeteilt.
Die eingelesenen Daten werden zusätzlich zur Abfrage auf dem Server zwischengespeichert.
Denn ich habe die Abfrage auf einmal alle 15sek. begrenzt.
Somit wird nicht unnötig oft auf die CC2 zugegriffen, wenn mehrere innerhalb weniger
Sekunden das Anlagenschema abrufen.
Die eine Datei hei�t xport.php und übernimmt die Kommunikation und den 15sek Timeout.
Die gelesenen Daten werden immer in eine Datei geschrieben.
Die andere Datei ist die index.php und ist für das Erstellen des Schemas notwendig.
Die Daten werde immer aus der von xport.php erstellten Datei gelesen.
Dies habe ich momentan so gelöst, da ich derzeit mehrer Möglichkeiten habe,
die Daten bereit zu stellen, aber alles über eine Datei angezeigt werden soll, egal,
wie die Daten auf den Webserver (oder meinen lokalen Server) gelangen.
(Mein VB-Programm sendet die Daten z.B. an ein PHP-Script mittels HTTP-Post
an den Webserver, aber schreibt auf meinem lokalen server direkt in die Datei.)
Hier nun die xport.php:
<?php
//Prüfen ob Abfrage notwendig (max. alle 15sek.)
$dataf=fopen("system.dat","r");
$zeit=explode(",",fgets($dataf,256));
fclose($dataf);
$uhrzeit=explode(":",$zeit[4]);
$timestamp=mktime($uhrzeit[0], $uhrzeit[1], $uhrzeit[2], $zeit[1], $zeit[2], $zeit[0]);
if(time()-$timestamp>=15) //15 Sekunden
{
$fp = @fsockopen ("Adresse des XPorts", 10001, $errno, $errstr, 1);
//Die Adresse kann auch die Domain des Dyndns-Accounts sein
$sort=array(3,0,1,2,9,10,12,4,5,6,8,7,11,13,14,23,22,20,21,24,16);
//Dies ist zum Sortieren der Temperaturwerte, da ich diese in
// einer anderen Reihenfolge ablege, als ich sie sende
if (!$fp)
{
echo "$errstr ($errno) - No connection to XPort<br>n";
}
else
{//Bei erfolgreicher Verbindung:
stream_set_timeout($fp, 1);// Timeout: 1 Sekunde
$Data="";
fputs($fp, "W");// W zum Anfordern der Daten senden
// hier kann eine Passwortabfrage eingefügt werden
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);
if(!$info['timed_out'])
{// Wenn der Datensatz komplett empfangen wurde...
$Data=substr($Data,strpos($Data,"VAL")+3);
//Ein Datensatz beginnt bei mir mit den drei Buchstaben VAL
//Die restlichen Daten sind binär:
$TempCnt=ord(substr($Data,0,1));
// Das erste Byte nach VAL gibt die Anzahl der Temperaturwerte wieder.
// Ein Temperaturwert besteht aus zwei Byte (LSB first)
$SWCnt=ord(substr($Data,($TempCnt*2)+1,1));
// Das zweite Byte enthät die Anzahl der Schaltzustände.
for($i=0;$i<$TempCnt;$i++)
{// Hier werden die Temperaturwerte zu Klartext zusammengesetzt
$x= ord(substr($Data,($i*2)+2,1))*256 + ord(substr($Data,($i*2)+1,1));
if($x>=32768) $x=$x-65536;
$Temp[$i]=number_format(($x/10), 1, ',', '')."°C";
}
for($i=0;$i<$SWCnt;$i++)
{//und hier die Schaltzustände
if($i<10)
$SW[$i]=substr($Data,($i+($TempCnt*2)+2),1);
else // hier werden die beiden IWP-Werte als String 0 bis 100 gespeichert
$SW[$i]=ord(substr($Data,($i+($TempCnt*2)+2),1));
}
// Ab hier werden die Daten für die Ausgabe in die Datei zusammengesetzt.
// Die Werte werden durch Semikolon getrennt.
$data="";
for($i=0;$i<$TempCnt;$i++)
{
$data.=$Temp[$sort[$i]].";";
}
$channels="";
for($i=0;$i<$SWCnt-2;$i++)
{
$channels.=$SW[$i].";";
}
$IWP=$SW[10]."%;".$SW[11]."%";
//Datei schreiben:
$dfile=fopen("system.dat","w");
fputs($dfile,strftime("%Y,%m,%d,%w,%H:%M:%S")."rn");//Zeit
fputs($dfile,$data."rn");//Temperaturwerte
fputs($dfile,$channels."rn");//Schaltzustände
fputs($dfile,$IWP."rn");//Geregelte Pumpen
fclose($dfile);
}
}
}
?>
|
Als nächstes kommt die index.php.
Diese entspricht au�er dem include() für xport.php dem öffentlich zugänglichen Anlagenschema.
Das Positionieren der Werte wird mittels CSS gemacht.
Eingeschaltete Pumpen und Ventile sind Grafiken, die mit CSS einfach über
dem Hintergrund überlagert werden.
Genauso auch die Darstellung der Rohre, durch die gerade der Solarkreis flieÃ?t.
<?php
include("xport.php");
$dow=array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$monat=array("","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
$data=fopen("system.dat","r");
$zeit=explode(",",fgets($data,256));
// $Stand=$dow[$zeit[3]-1].", ".$zeit[2].".".$monat[$zeit[1]]." ".$zeit[0]." - ".$zeit[4];
$Stand=$dow[$zeit[3]].", ".$zeit[2].".".$monat[$zeit[1]*1]." ".$zeit[0]." - ".$zeit[4];
$Temp=explode(";",fgets($data,256));
$TempCNT=count($Temp);
for($i=0;$i<$TempCNT;$i++)
{
if($Temp[$i]=="-3100,0°C") $Temp[$i]="err U ";
else if($Temp[$i]=="-3200,0°C") $Temp[$i]="err K ";
}
$channel=explode(";",fgets($data,256));
$IWP=explode(";",fgets($data,256));
// if(strlen(trim($channel[10]))>=2) $IWP[0]=$channel[10];
fclose($data);
?><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Solaranlage</title>
<script type="text/javascript">
window.setTimeout("window.location.href = 'index.php';",15000);
</script>
<style type="text/css">
<!--
body { }
#schema{ position:relative;z-index:3;}
#tkol { position:absolute; top:6px; left:791px; width:57px; height:50px; z-index:2; text-align:right; }
#tkol2 { position:absolute; top:51px; left:722px; width:57px; height:50px; z-index:2; text-align:right; }
#tkolv { position:absolute; top:131px; left:687px; width:57px; height:50px; z-index:2; text-align:right; }
#ta { position:absolute; top:51px; left:437px; width:57px; height:50px; z-index:2; text-align:right; }
#tkes { position:absolute; top:192px; left:178px; width:57px; height:50px; z-index:2; text-align:right; }
#tabg { position:absolute; top:76px; left:178px; width:57px; height:50px; z-index:2; text-align:right; }
#tbwo { position:absolute; top:266px; left:762px; width:57px; height:50px; z-index:2; text-align:right; }
#tbwu { position:absolute; top:397px; left:762px; width:57px; height:50px; z-index:2; text-align:right; }
#tpo { position:absolute; top:201px; left:447px; width:57px; height:50px; z-index:2; text-align:right; }
#tpmo { position:absolute; top:266px; left:447px; width:57px; height:50px; z-index:2; text-align:right; }
#tpmu { position:absolute; top:326px; left:447px; width:57px; height:50px; z-index:2; text-align:right; }
#tpu { position:absolute; top:421px; left:447px; width:57px; height:50px; z-index:2; text-align:right; }
#tbwr { position:absolute; top:501px; left:477px; width:57px; height:50px; z-index:2; text-align:right; }
#thk1 { position:absolute; top:161px; left:342px; width:57px; height:50px; z-index:2; text-align:right; }
#thk2 { position:absolute; top:161px; left:272px; width:57px; height:50px; z-index:2; text-align:right; }
#tmotv { position:absolute; top:402px; left:45px; width:57px; height:50px; z-index:2; text-align:right; }
#tmotr { position:absolute; top:430px; left:45px; width:57px; height:50px; z-index:2; text-align:right; }
#thkav { position:absolute; top:337px; left:36px; width:57px; height:50px; z-index:2; text-align:right; }
#thkam { position:absolute; top:463px; left:8px; width:57px; height:50px; z-index:2; text-align:right; }
#thkaa { position:absolute; top:493px; left:155px; width:57px; height:50px; z-index:2; text-align:right; }
#thkaae{ position:absolute; top:430px; left:117px; width:57px; height:50px; z-index:2; text-align:right; }
#iwp0 { position:absolute; top:227px; left:587px; width:57px; height:50px; z-index:2; text-align:right; }
#iwp1 { position:absolute; top:432px; left:250px; width:57px; height:50px; z-index:2; text-align:right; }
#vkbw { position:absolute; top:452px; left:656px; z-index:2; }
#vkpuf { position:absolute; top:447px; left:621px; z-index:2; }
#vhk1 { position:absolute; top:265px; left:286px; z-index:2; }
#vhk2 { position:absolute; top:346px; left:319px; z-index:2; }
#vbwr { position:absolute; top:400px; left:417px; z-index:2; }
<?php
if($channel[0]==1)
{
?>#pkol { position:absolute; top:222px; left:647px; z-index:2; }
#pipesv0 { position:absolute; top:6px; left:792px; z-index:2; }
#pipesv1 { position:absolute; top:97px; left:692px; z-index:2; }
#pipesv2 { position:absolute; top:99px; left:692px; z-index:2; }
#pipesr0 { position:absolute; top:89px; left:646px; z-index:2; }
#pipesr1 { position:absolute; top:91px; left:667px; z-index:2; }
#pipesr2 { position:absolute; top:244px; left:667px; z-index:2; }
<?php
if($channel[1]==1)
{?>#pipesv3 { position:absolute; top:357px; left:694px; z-index:2; }
#pipesr3 { position:absolute; top:442px; left:678px; z-index:2; }
<?php
}
else
{?>#pipesv3 { position:absolute; top:357px; left:669px; z-index:2; }
#pipesv3a { position:absolute; top:357px; left:647px; z-index:2; }
#pipesr3 { position:absolute; top:442px; left:642px; z-index:2; }
<?php
if($channel[3]==1)
{?>#pipesv4 { position:absolute; top:247px; left:647px; z-index:2; }
#pipesv5 { position:absolute; top:247px; left:597px; z-index:2; }
#pipesr4 { position:absolute; top:272px; left:632px; z-index:2; }
#pipesr5 { position:absolute; top:272px; left:597px; z-index:2; }
<?php
}
else
{?>#pipesv4 { position:absolute; top:359px; left:647px; z-index:2; }
#pipesv5 { position:absolute; top:417px; left:597px; z-index:2; }
#pipesr4 { position:absolute; top:442px; left:597px; z-index:2; }
<?php
}
}
}
if($channel[5]==1)
{
echo "#pbw { position:absolute; top:507px; left:572px; z-index:2; }
";
}
if($channel[6]==1)
{
echo "#pkes { position:absolute; top:266px; left:182px; z-index:2; }
";
}
if($channel[8]==1)
{
echo "#phk1 { position:absolute; top:197px; left:357px; z-index:2; }
";
}
if($channel[9]==1)
{
echo "#phk2 { position:absolute; top:197px; left:287px; z-index:2; }
";
}
if($channel[10]==1)
{
echo "#phka { position:absolute; top:431px; left:237px; z-index:2; }
";
}
?>#stand { position:absolute; top:510px; left:20px; z-index:2; }
-->
</style>
</head>
<body bgcolor="#FFFFCC">
<br>
<font face="Balloon XBd BT,Arial" size="6" color="#FF9900"><b>Heizung / Solaranlage / PÃ?L-Blockheizkraftwerk</b></font>
<div id="schema">
<img src="schema.gif" border=0>
<font face="courier new" size=2><b>
<div id="tkol"><?php echo $Temp[1];?></div>
<div id="tkol2"><?php echo $Temp[14];?></div>
<div id="tkolv"><?php echo $Temp[2];?></div>
<div id="ta"><?php echo $Temp[0];?></div>
<div id="tkes"><?php echo $Temp[3];?></div>
<div id="tabg"><?php echo $Temp[13];?></div>
<div id="tbwo"><?php echo $Temp[4];?></div>
<div id="tbwu"><?php echo $Temp[5];?></div>
<div id="tpo"><?php echo $Temp[7];?></div>
<div id="tpmo"><?php echo $Temp[8];?></div>
<div id="tpmu"><?php echo $Temp[9];?></div>
<div id="tpu"><?php echo $Temp[10];?></div>
<div id="tbwr"><?php echo $Temp[6];?></div>
<div id="thk1"><?php echo $Temp[11];?></div>
<div id="thk2"><?php echo $Temp[12];?></div>
<font size=1>
<div id="tmotv"><?php echo $Temp[15];?></div>
<div id="tmotr"><?php echo $Temp[16];?></div>
<div id="thkaae"><?php echo $Temp[20];?></div>
</font>
<div id="thkav"><?php echo $Temp[17];?></div>
<div id="thkam"><?php echo $Temp[18];?></div>
<div id="thkaa"><?php echo $Temp[19];?></div>
</b></font>
<font face="arial" size=1>
<div id="iwp0"><?php echo $IWP[0];?></div>
<div id="iwp1"><?php echo $IWP[1];?></div>
</font>
<div id="vkbw"><?php
if($channel[1]==1)
{?><img src="vkbw_on.gif"><?php
}
else
{?><img src="vkbw_off.gif"><?php
}
?></div>
<div id="vkpuf"><?php
if($channel[3]==1)
{?><img src="vkpuf_on.gif"><?php
}
else
{?><img src="vkpuf_off.gif"><?php
}
?></div>
<div id="vhk1"><?php
if($channel[2]==1)
{?><img src="vfb_on.gif"><?php
}
else
{?><img src="vfb_off.gif"><?php
}
?></div>
<div id="vhk2"><?php
if($channel[4]==1)
{?><img src="vhk2r_on.gif"><?php
}
else
{?><img src="vhk2r_off.gif"><?php
}
?></div>
<div id="vbwr"><?php
if($channel[7]==1)
{?><img src="vbwr_on.gif"><?php
}
else
{?><img src="vbwr_off.gif"><?php
}
?></div>
<?php
if($channel[0]==1)
{?>
<div id="pkol"><img src="pkol_on.gif"></div>
<div id="pipesv0"><img src="pipe_red.gif" width=2 height=91></div>
<div id="pipesv1"><img src="pipe_red.gif" width=102 height=2></div>
<div id="pipesv2"><img src="pipe_red.gif" width=2 height=260></div>
<div id="pipesr0"><img src="pipe_blue.gif" width=23 height=2></div>
<div id="pipesr1"><img src="pipe_blue.gif" width=2 height=133></div>
<div id="pipesr2"><img src="pipe_blue.gif" width=2 height=190></div>
<?php
if($channel[1]==1)
{?>
<div id="pipesv3"><img src="pipe_red.gif" width=70 height=2></div>
<div id="pipesr3"><img src="pipe_blue.gif" width=86 height=2></div>
<?php
}
else
{?>
<div id="pipesv3"><img src="pipe_red.gif" width=23 height=2></div>
<div id="pipesv3a"><img src="pipe_red.gif" width=20 height=2></div>
<div id="pipesr3"><img src="pipe_blue.gif" width=16 height=2></div>
<?php
if($channel[3]==1)
{?>
<div id="pipesv4"><img src="pipe_red.gif" width=2 height=110></div>
<div id="pipesv5"><img src="pipe_red.gif" width=50 height=2></div>
<div id="pipesr4"><img src="pipe_blue.gif" width=2 height=161></div>
<div id="pipesr5"><img src="pipe_blue.gif" width=35 height=2></div>
<?php
}
else
{?>
<div id="pipesv4"><img src="pipe_red.gif" width=2 height=60></div>
<div id="pipesv5"><img src="pipe_red.gif" width=50 height=2></div>
<div id="pipesr4"><img src="pipe_blue.gif" width=26 height=2></div>
<?php
}
}
}
if($channel[5]==1)
{?>
<div id="pbw"><img src="pbw_on.gif"></div>
<?php
}
if($channel[6]==1)
{?>
<div id="pkes"><img src="pkes_on.gif"></div>
<?php
}
if($channel[8]==1)
{?>
<div id="phk1"><img src="phk_on.gif"></div>
<?php
}
if($channel[9]==1)
{?>
<div id="phk2"><img src="phk_on.gif"></div>
<?php
}
if($channel[10]==1)
{?>
<div id="phka"><img src="pkes_on.gif"></div>
<?php
}
?>
<div id="stand"><font face="Arial" size=2><b>Stand: <?php echo " $Stand";?></b><br>
powered by C-Control II & XPort</font></div>
</div>
</body>
</html>
|
Es kann sein, da� hier noch die ein oder andere Jugendsünde zu finden ist, da
ich die Scripte schnell geschrieben habe, ohne zu prüfen, ob's auch einfacher geht. ;-)
Hier noch ein Code-Ausschnitt meiner COM-Routine in der CC2.
...
if x=='W' // Web/XPort
{ //Wenn ein "W" empfangen wird
hwcom.print("VAL");
hwcom.put(25);//Anzahl Temp-Werte
sendint(temp.value,25*2);
hwcom.put(12);//Anzahl Temp-Werte
printSW(schalt.IWP);
printSW(schalt.states[konst.Vkol]);
printSW(schalt.states[konst.VHK1v]);
printSW(schalt.states[konst.Vpuf]);
printSW(schalt.states[konst.VHK2r]);
printSW(schalt.states[konst.PBW]);
printSW(schalt.states[konst.PKes]);
printSW(schalt.states[konst.VBWr]);
printSW(schalt.states[konst.PHK1]);
printSW(schalt.states[konst.PHK2]);
hwcom.send(schalt.IWP,2);
hwcom.print(".rn");
}
...
Die Funktion sendint() dient zum direkten Senden von Integerarrays
und ist nichts anderes als die hwcom.send()-Funktion, nur daÃ? hier
ein Integerarray erwartet wird. Bei length mu� man dies berücksichtigen.
Darum das "mal 2".
//----------------------------------------
function sendint ( int buf[], int length )//length*2!
//----------------------------------------
{
capture;
wait hwcom.ready();
inline vmcodes.VM_LOAD_LOCAL_INT;
inline -8;
inline vmcodes.VM_LOAD_LOCAL_INT;
inline -6;
inline vmcodes.VM_HWCOM | (vmcodes.HWCOM_SEND << 8);
release;
}
Die Funktion printSW() soll lediglich aus false und true die ASCII-Zeichen für
0 und 1 ausgeben:
function printSW(byte x)
{
if x hwcom.put('1'); else hwcom.put('0');
}
So ich glaube, das sollte hier schon weiterhelfen.
Lesestoff für einige sollte das auf jeden Fall sein. ;-)
MfG André H.
PS: Beim Antworten auf dieses Posting bitte nicht alles als Zitat mitführen. ;-)
Sonst bekommen manche noch beim vielen Scrollen einen Muskelkater im Finger. *grins*
Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!
Das macht meine Heizung gerade
|