http://old.ethersex.de/api.php?action=feedcontributions&user=Videopix&feedformat=atomEthersex_Wiki - Benutzerbeiträge [de-at]2024-03-28T11:21:14ZBenutzerbeiträgeMediaWiki 1.30.0http://old.ethersex.de/index.php?title=Onewire-Temperatursensor_zur_Abfrage_von_Schaltzust%C3%A4nden&diff=5155Onewire-Temperatursensor zur Abfrage von Schaltzuständen2011-09-08T12:54:46Z<p>Videopix: </p>
<hr />
<div>Einige Onewire-Sensoren können ihre Versorgungsspannung extern oder parasitär, also über die Datenleitung, erhalten. Bei der DS1820-Familie lässt sich die Art der aktuellen Spannungsversorgung auslesen. Wenn ein Schalter die Versorung umschaltet, lässt sich also auch die Stellung des Schalters per Software abfragen. Der vom Sensor benötigte Strom ist sehr klein. Um ihn bereit zu stellen, genügt bereits ein kleiner Kondensator, der über eine Diode aus der Datenleitung aufgeladen wird. So ist es beispielsweise möglich, auch bei weit entfernten Sensoren über eine nur zweiadrige Leitung neben der Temperaturmessung auch festzustellen, ob ein Fenster geöffnet oder geschlossen ist. Der Schalter wäre hier ein Reed-Kontakt, der durch einen Magneten am Fensterflügel aktiviert wird.<br />
<br />
[[Datei:DS1820_switch.gif]]<br />
<br />
Über einen Optokoppler ist auch der Schaltzustand eines 230V-Verbrauchers feststellbar, beispielsweise einer Heizungspumpe:<br />
<br />
[[Datei:DS1820_230V.gif]]<br />
<br />
'''Achtung: Netzspannung!''' Im Netzspannungszweig beim Kondensator unbedingt einen X2-Typ in Reihe mit einem Metallfilmwiderstand verwenden!<br />
<br />
'''In Vorbereitung'''<br />
Die Art der Stromversorgung und damit die Stellung des Schalters ermittelt der ECMD-Befehl "1w power <hexcode>" oder, wenn auch die Temperatur benötigt wird "1w status <hexcode>". im letzteren Fall ist zuvor ein "1w convert <hexcode>" nötig. Details siehe [[Dallas 1-wire Bus]].<br />
<br />
Achtung: Beim Teensy Build sind die obigen Befehle nicht verfügbar.<br />
<br />
[[Category:ECMD]]</div>Videopixhttp://old.ethersex.de/index.php?title=Onewire-Temperatursensor_zur_Abfrage_von_Schaltzust%C3%A4nden&diff=5154Onewire-Temperatursensor zur Abfrage von Schaltzuständen2011-09-08T12:54:01Z<p>Videopix: Besipiele für die Verwendung der neuen Onewire ECMD-Befehle "power" und "status"</p>
<hr />
<div>Einige Onewire-Sensoren können ihre Versorgungsspannung extern oder parasitär, also über die Datenleitung, erhalten. Bei der DS1820-Familie lässt sich die Art der aktuellen Spannungsversorgung auslesen. Wenn ein Schalter die Versorung umschaltet, lässt sich also auch die Stellung des Schalters per Software abfragen. Der vom Sensor benötigte Strom ist sehr klein. Um ihn bereit zu stellen, genügt bereits ein kleiner Kondensator, der über eine Diode aus der Datenleitung aufgeladen wird. So ist es beispielsweise möglich, auch bei weit entfernten Sensoren über eine nur zweiadrige Leitung neben der Temperaturmessung auch festzustellen, ob ein Fenster geöffnet oder geschlossen ist. Der Schalter wäre hier ein Reed-Kontakt, der durch einen Magneten am Fensterflügel aktiviert wird.<br />
[[Datei:DS1820_switch.gif]]<br />
Über einen Optokoppler ist auch der Schaltzustand eines 230V-Verbrauchers feststellbar, beispielsweise einer Heizungspumpe:<br />
[[Datei:DS1820_230V.gif]]<br />
Achtung: Netzspannung! Im Netzspannungszweig beim Kondensator unbedingt einen X2-Typ in Reihe mit einem Metallfilmwiderstand verwenden!<br />
<br />
'''In Vorbereitung'''<br />
Die Art der Stromversorgung und damit die Stellung des Schalters ermittelt der ECMD-Befehl "1w power <hexcode>" oder, wenn auch die Temperatur benötigt wird "1w status <hexcode>". im letzteren Fall ist zuvor ein "1w convert <hexcode>" nötig. Details siehe [[Dallas 1-wire Bus]].<br />
<br />
Achtung: Beim Teensy Build sind die obigen Befehle nicht verfügbar.<br />
<br />
[[Category:ECMD]]</div>Videopixhttp://old.ethersex.de/index.php?title=Dallas_1-wire_Bus&diff=5153Dallas 1-wire Bus2011-09-08T12:39:26Z<p>Videopix: /* Onewire Befehle */</p>
<hr />
<div>== Onewire interface ==<br />
<br />
Ethersex kann 1-wire Temperatursensoren mit [[ECMD]] auflisten und abfragen. Es wird eine reine Softwareimplementierung des Protokolls benutzt, was keine weiteren Hardware erfordert, als die Temperatursensoren selbst. Dabei muss beachtet werden, dass der Datapin des Buses in der Standardkonfiguration auf PD6 liegt (kann in der pinning/hardware/netio.m4 oder pinning/hardware/etherrape.m4 geändert werden)<br />
<br />
=== Onewire Hardware ===<br />
<br />
Folgende 1-wire Hardware wird momentan durch Ethersex unterstützt:<br />
* DS1820 (Temperatursensor)<br />
* DS18B20 (Temperatursensor)<br />
* DS1822 (Temperatursensor)<br />
* DS2502 (EEPROM)<br />
* [[DS2450]] (4 Kanal ADC)<br />
<br />
=== Onewire Befehle ===<br />
<br />
unter Linux als erstes netcat starten (hierbei natürlich die IP ggf modifizieren): <br />
netcat 192.168.0.15 2701<br />
danach am prompt:<br />
<br />
1w list<br />
Gibt eine Liste mit Hexcodes aller angeschlossenen und erkannten Onewire(tm) Sensoren aus.<br />
<br />
1w convert &lt;hexcode&gt;<br />
Veranlasst eine Temperaturmessung des addressierten Sensors, oder wenn das Argument &lt;hexcode&gt; weggelassen wird aller angeschlossener Sensoren.<br />
<br />
1w get &lt;hexcode&gt;<br />
Gibt die gemessene Temperatur eines Sensors aus.<br />
<br />
1w power &lt;hexcode&gt;<br />
Gibt die Art der Stromversorgung eines Temperatursensors aus. (In Vorbereitung, siehe [[Onewire-Temperatursensor zur Abfrage von Schaltzuständen]])<br />
<br />
1w status &lt;hexcode&gt;<br />
Gibt gemessene Temeratur und die Art der Stromversorgung eines Temperatursensors aus. (In Vorbereitung, siehe [[Onewire-Temperatursensor zur Abfrage von Schaltzuständen]])<br />
<br />
=== Einbindung in die [[HTTPD]]-Weboberfläche ===<br />
<br />
Unter httpd/embed/ow.ht.m4, bzw httpd/embed/Xow.ht.m4 liegt eine Weboberflaeche, die alle Sensoren erkennt und ihre aktuelle Temperatur regelmässig per Ajax abfragt und anzeigt. Im Falle von Xow.ht.m4 wird sogar Graph der Temperatur mittels SVG gemalt. Um die Dateien einzubinden, muss man einfach bei aktiviertem Onewiresupport den [[Webserver]] und das Datei Inlining aktivieren.<br />
<br />
Die Dateien können dann unter ow.ht bzw. unter Xow.ht angezeigt werden.<br />
<br />
[[Bild:onewire-svg.png]]<br />
<br />
=== Anschluss AVR-NET-IO ===<br />
Für das Pollin [[AVR-NET-IO]] Board können die Sensoren DS18S20+ , <br />
<br />
normal Betrieb<br />
<br />
[[Bild:netio-1wire_normal.png]]<br />
<br />
<br />
parasitären Modus<br />
<br />
[[Bild:netio-1wire.png]]<br />
<br />
Pinbelegung:<br />
<br />
[[Bild:ds18s20-par-pinout.jpg]]<br />
<br />
=== Anschluss Etherrape ===<br />
<br />
Die Schaltung je nach parasitärem oder normalem Betriebsmodus kann aus der NetIO Skizze übernommen werden.<br />
Data liegt auf PORTD an Pin 7:<br />
<br />
PORTD<br />
+---+<br />
|x x|<br />
|x X| <- Pin 7<br />
|x x<br />
|x x|<br />
|x x|<br />
+---+<br />
<br />
Direkt neben PORTD befinden sich 2 Pins mit GND und 5V als Beschriftung. <br />
GND kann als GND und 5V als Vcc genutzt werden.<br />
=== Einbindung in [[Control6]] ===<br />
Die Sensoren können mit '''ONEWIRE_GET''' einfach abgefragt werden. Die Funktion führt automatisch ein ''convert'' aus, es sind also keine zwei Schritte erforderlich wie bei dem Zugriff über [[ECMD]]. Die Rückgabe erfolgt (analog der Funktion '''KTY_GET''') in Centigrad, also Temperatur * 10. Hier vielleicht ein kleines Beispiel, das die Daten per [[SYSLOG]] ausgibt sobald sich die Temperatur um mehr als ein Grad zur letzten Messung verändert hat.<br />
<br />
<pre><br />
int16_t Temperatur;<br />
int16_t Temperatur_alt;<br />
<br />
CONTROL_START<br />
<br />
THREAD(read_temp)<br />
Temperatur = ONEWIRE_GET(10d85594010800eb);<br />
ON abs(Temperatur-Temperatur_alt)>10 DO<br />
div_t res = div(Temperatur,10);<br />
SYSLOG("temperature changed %d.%d",res.quot,res.rem)<br />
Temperatur_alt = Temperatur;<br />
END<br />
WAIT(15);<br />
THREAD_END(read_temp)<br />
<br />
ON STARTUP DO<br />
Temperatur = Temperatur_alt = 0;<br />
THREAD_START(read_temp);<br />
END<br />
<br />
CONTROL_END<br />
</pre><br />
<br />
=== Beispiele ===<br />
<br />
===== sh oder bash =====<br />
Einfaches SH (Linux Shell) Script von stesie (irc) zum Auslesen von einem Wert (udp support muss enabled sein oder option -u nicht verwenden!)<br />
<br />
<source lang="bash"><br />
#! /bin/sh<br />
SENSORID=10529f7001080016<br />
#ESEXIP=2001:6f8:1209:23:42::17 #IPv6 Adresse<br />
ESEXIP=192.168.255.90<br />
<br />
#IPv6<br />
#echo 1w convert $SENSORID | nc6 -u $ESEXIP 2701 -q 1 2>/dev/null | grep -qe OK || exit 1 <br />
#echo 1w get $SENSORID | nc6 -u $ESEXIP 2701 -q 1 2>/dev/null | sed -e 's/Temperatur: //' <br />
<br />
#IPv4<br />
echo 1w convert $SENSORID | nc -u $ESEXIP 2701 -q 1 2>/dev/null | grep -qe OK || exit 1<br />
echo 1w get $SENSORID | nc -u $ESEXIP 2701 -q 1 2>/dev/null | sed -e 's/Temperatur: //'<br />
</source><br />
<br />
bash Script von Tron12 zum Auslesen aller Werte<br />
(Achtung Port 2701 ist nicht standard!! Sowie udp support muss enabled sein oder option -u nicht verwenden!)<br />
<br />
<source lang="bash"><br />
#! /bin/sh<br />
#<br />
# netcat-openbsd 1.89-3ubuntu2<br />
<br />
NETIOIP="-4 192.168.178.249"<br />
<br />
#für IPv6:<br />
#NETIOIP="-6 2001:6f8:1209:23:42::17"<br />
<br />
NETIOPORT="2702"<br />
<br />
N_DATE=`echo date | nc -u $NETIOIP $NETIOPORT -q 1 ` <br />
N_GET_ID=`echo 1w list | nc -u $NETIOIP $NETIOPORT -q 1 | grep -qe OK || exit 1`<br />
<br />
echo "Date: $N_DATE"<br />
echo "---------------------------------"<br />
<br />
for i in $N_GET_ID<br />
do<br />
tmp=`echo 1w convert $i | nc -u $NETIOIP $NETIOPORT -q 1 2>/dev/null | grep -qe OK || exit 1`<br />
tmp=`echo 1w get $i | nc -u $NETIOIP $NETIOPORT -q 1 2>/dev/null `<br />
echo "Sensor: $i :: $tmp"<br />
done<br />
</source><br />
<br />
==== Perl ====<br />
Beispiel in Perl das alle Sensoren ermittelt und anschließend die Werte ausgibt.<br />
Benötigt wird das Modul NET das kein IPv6 kann<br />
<br />
<source lang="perl"><br />
#!/usr/bin/perl -w<br />
#Auslesen der 1 Wire Sensoren an einem AVR-NET-IO mit ethersex<br />
<br />
use strict;<br />
use Net::Telnet ();<br />
<br />
my $esexip="192.168.255.90";<br />
my $esexport="2701";<br />
my $esex;<br />
my @sensor;<br />
my $sensor;<br />
my $dummy;<br />
my $temp;<br />
<br />
$esex = Net::Telnet->new || die "kann Ethersex nicht finden";;<br />
$esex->open(Host => $esexip,<br />
Port => $esexport,<br />
Timeout => 2);<br />
<br />
#Alles Sensor-IDs auslesen und dem Array @sensor zuweisen<br />
$esex->print("1w list");<br />
($sensor) = $esex->waitfor(Timeout => 2,<br />
String => "OK");<br />
@sensor=split(/\s+/, $sensor);<br />
print "@sensor","\n"; #Kontrollausgabe<br />
<br />
my $zahler=@sensor;<br />
print "Anzahl der Elemente :",$zahler,"\n\n";<br />
<br />
#Alles Sensore Temperatur einlesen<br />
$esex->print("1w convert");<br />
$esex->waitfor(Timeout => 2,<br />
String => "OK");<br />
<br />
#Sensor ID inklusive Wert ausgeben<br />
foreach (@sensor) {<br />
$esex->print("1w get $_");<br />
<br />
($dummy,$temp)=$esex->waitfor(Match =>'/[-]?\d+\.\d+/',<br />
Timeout => 5);<br />
<br />
print "Temperatur vom ID ",$_,": ",$temp," C°","\n";<br />
}<br />
</source><br />
<br />
==== Python ====<br />
<br />
<source lang="python"><br />
#!/usr/bin/python<br />
<br />
from socket import *<br />
<br />
def connectEP():<br />
s = socket(AF_INET, SOCK_STREAM)<br />
s.settimeout(5)<br />
s.connect(("192.168.5.3", 2701))<br />
return s<br />
<br />
def getTemperature():<br />
s.send("1w list\n")<br />
sensors = []<br />
sensors_result = {}<br />
<br />
# list aller Sensoren<br />
while 1:<br />
response = s.recv(1024).rstrip("\n")<br />
if not response: break<br />
if response != "OK":<br />
sensors.append(response)<br />
else:<br />
break<br />
<br />
# wert konvertieren<br />
for sensor in sensors:<br />
s.send("1w convert " + sensor + "\n")<br />
while 1:<br />
response = s.recv(1024).rstrip("\n")<br />
if response == "OK":<br />
break <br />
<br />
# wert auslesen <br />
s.send("1w get " + sensor + "\n")<br />
response = s.recv(1024).rstrip("\n").lstrip()<br />
sensors_result[sensor] = response<br />
return(sensors_result)<br />
<br />
s = connectEP()<br />
for sensor, value in getTemperature().iteritems():<br />
print sensor + " " + value<br />
</source><br />
<br />
==== PHP ====<br />
<br />
<source lang="php"><br />
<br />
<html><br />
<br />
<head><br />
<title>ethersex php example</title><br />
</head><br />
<br />
<body><br />
<br />
<?php<br />
<br />
define(IP, '192.168.10.9'); // deine ethersex ip adresse<br />
define(PORT, 2701); // standart port im image<br />
<br />
request("1w convert");<br />
<br />
$response = request("1w list");<br />
$explode = explode("\n", $response);<br />
<br />
for ($i=0; $i < count($explode)-2; $i++) {<br />
echo "Sensor: " . trim($explode[$i]);<br />
echo " -- Wert: " . request("1w get " . $explode[$i]);<br />
echo "<br>\n";<br />
}<br />
<br />
function request($request) {<br />
$rs = fsockopen(IP, PORT);<br />
<br />
if (!$rs) {<br />
$response = "Kann Verbindung nicht aufbauen!";<br />
}<br />
else {<br />
$response ="";<br />
$request = "!" . $request . "\r\n";<br />
<br />
fputs($rs, $request);<br />
<br />
while (!feof($rs)) {<br />
$response .= fgets($rs, 128);<br />
}<br />
fclose($rs);<br />
}<br />
<br />
return $response;<br />
}<br />
<br />
?><br />
<br />
</body><br />
</source><br />
<br />
[[Category:Ethersex]]<br />
[[Category:StepByStep]]<br />
[[Category:Onewire]]<br />
<br />
=== Günstiger Einkauf von Temperatursensoren bei k1w1 (Michael) ===<br />
Vom Michael Schultz (k1w1) hab ich die Info erhalten, das er immer DS1820 auf Lager hat und sie sehr günstig weiterverkaufen kann.<br />
Auch Mindermengen.<br />
Mail: ethersex [AT] keyb [DOT] de</div>Videopixhttp://old.ethersex.de/index.php?title=Datei:DS1820_230V.gif&diff=5152Datei:DS1820 230V.gif2011-09-08T12:24:22Z<p>Videopix: </p>
<hr />
<div></div>Videopixhttp://old.ethersex.de/index.php?title=Datei:DS1820_switch.gif&diff=5151Datei:DS1820 switch.gif2011-09-08T12:23:53Z<p>Videopix: </p>
<hr />
<div></div>Videopixhttp://old.ethersex.de/index.php?title=Download&diff=5148Download2011-09-04T15:43:30Z<p>Videopix: </p>
<hr />
<div>== Der Quellcode von Ethersex ==<br />
Ethersex ist ein freies Softwareprojekt, das unter der GNU General Public License Version 3 steht. Die Firmware befindet sich derzeit in aktiver Entwicklung, wobei wir darauf achten, dass sie stets (zumindest ziemlich) stabil funktioniert. Selbstverständlich ist dies nicht immer 100 %-ig möglich :-)<br />
<br />
Der Quellcode wird in einem Git Repository auf [http://github.com github.com] gepflegt und kann von dort als <br />
[http://github.com/ethersex/ethersex/tarball/master aktueller Tarball] heruntergeladen werden.<br />
<br />
=== Direkter Zugriff auf das [[Git]] Repository ===<br />
Ist mittels<br />
<br />
git clone git://github.com/ethersex/ethersex.git<br />
<br />
oder wenn dies nicht geht:<br />
<br />
git clone http://github.com/ethersex/ethersex.git<br />
<br />
möglich. Eine bereits heruntergeladene Kopie des Repositories kann mittels<br />
<br />
git pull origin<br />
<br />
aktualisiert werden. Im Übrigen sei auf die einschlägige Literatur zu dem Quellcode-Verwaltungssystem Git verwiesen. Eine kurze Anleitung findet man auch [[Git|hier]].<br />
<br />
Darüber hinaus kann der Quellcode im Internet unter http://github.com/ethersex/ethersex eingesehen werden.<br />
<br />
==== Springe zum letzten als funktional markierten Version ====<br />
<br />
Zunächst muss eine aktuelle Kopie von ethersex Repository vorhanden sein<br />
git pull<br />
<br />
dann kann mittels "git checkout TAGNAME" zu der Marke gesprungen werden. Momentan gibt es nur eine Marke (Tag) namens "snapshot_compile_ok" die regelmäßig aktualisiert wird.<br />
<br />
git checkout snapshot_compile_ok<br />
<br />
=== Eigene Änderungen am Code mit GitHub ===<br />
Will man änderungen an ethersex vornehmen, die wieder zurückfließen sollen kann man folgendes vorgehen wählen:<br />
Wenn man bei github angemeldet ist, kann man das ethersex Repository einfach durch einen klick auf "Fork" in seine github Sammlung kopieren. Dies ist dann das eigene ethersex Repository, dass man verändern kann wie man lustig ist. Von diesem persöhnlichen Repo kann man nun einfach sich lokal clonen<br />
<br />
git clone git@github.com:username/ethersex.git<br />
<br />
Dort macht man dann einfach seine commits und pushed es wieder nach github:<br />
<br />
git push origin master<br />
<br />
Wenn man nun bei github auf den 'Send Pull request' Button klickt, bekommen die ethersex maintainer ne Mail und können die änderungen leicht einpflegen. Dies ist fuer Betreuer des Repositories um Größenordnungen einfacher als mit patches zu hantieren.<br />
<br />
=== Eigene Änderungen am Code in GIT ===<br />
<br />
Für eigene Änderungen oder Ergänzungen empfiehlt es sich unter Umständen gleich einen eigenen Branch zu verwenden und nicht mit dem master Branch des lokalen Repositories zu arbeiten.<br />
Andernfalls können neue Changes aus dem Upstream Repository nicht mehr per Fast-Forward in den lokalen master Branch aufgenommen werden und &quot;git pull origin&quot; produziert jedes mal ein merge-commit.<br />
<br />
Bei mir hat sich folgende Vorgehensweise bewährt:<br />
<br />
git checkout -b local-mods<br />
<br />
Eigene Änderungen können nun wie gewohnt mit &quot;git commit&quot; in diesen Branch aufgenommen werden. Der master Branch kann davon zunächst völlig unabhängig mit dem remote branch synchronisiert werden. Allerdings muss man ggf. den Branch explizit spezifizieren, falls wie im Beispiel noch &quot;local-mods&quot; Branch aktiv ist:<br />
<br />
git pull origin master<br />
<br />
Möchte man nun die neuen upstream changes auch in den eigenen topic branch (local-mods) übernehmen, kann das mit git-rebase erledigt werden, da man sich so ebenfalls den merge commit spart:<br />
<br />
git checkout local-mods # (Falls man gerade noch im master branch sein sollte )<br />
git rebase master<br />
<br />
Damit wird der topic branch local-mods auf das letzte commit des master branches rebased.<br />
<br />
Sicher wäre es auch möglich Änderungen direkt am Master Branch durchzuführen, und diesen mittels rebase auf origin/master zu aktualisieren. Allerdings hat man dann nicht mehr die Möglichkeit zu differenzieren welche Changes nur lokale Experimente darstellen und welche später evtl. an das upstream repository zurückgegeben werden sollen. Diese können vermutlich auch bei der beschriebenen Strategie gut im master branch untergebracht werden.<br />
<br />
[[Category:Ethersex]]<br />
[[Category:Git]]</div>Videopixhttp://old.ethersex.de/index.php?title=Git_HowTo&diff=5147Git HowTo2011-09-04T14:19:25Z<p>Videopix: /* 'Commits' ändern */</p>
<hr />
<div>= Git Snippets =<br />
<br />
Hier entsteht eine Sammlung von git-Befehlen.<br />
<br />
Für Platzhalter in den Befehlen verwende ich hier &quot;Anführungszeichen&quot;. <br />
<br />
Da diese Sammlung in dieser Reihenfolge dazu führt, einen 'patch' zu extrahieren, kommen doppelte Einträge vor.<br />
<br />
== Herunterladen der aktuellen Version in einen neuen Ordner: MeinOrdner ==<br />
<br />
git clone git://github.com/ethersex/ethersex.git &quot;MeinOrdner&quot;<br />
<br />
== Aktualisierung der Heruntergeladen Dateien ==<br />
<br />
git pull origin<br />
<br />
== 'Status' der lokalen Dateien ==<br />
<br />
git status<br />
<br />
== 'Log' ansehen ==<br />
<br />
git log<br />
<br />
== Änderungen an Heruntergeladenen Dateien 'committen' ==<br />
<br />
git commit &quot;Herruntergeladenen Dateien&quot;<br />
<br />
== Eigene Dateien 'adden' ==<br />
<br />
git add &quot;Eigene Dateien&quot;<br />
<br />
== Eigene Dateien 'commiten' ==<br />
<br />
git commit &quot;Eigene Dateien&quot;<br />
<br />
== Änderungen an den Dateien als Textdatei exportieren ==<br />
<br />
git format-patch &quot;commit id von vor der Eigenen Änderungen&quot;<br />
<br />
oder<br />
<br />
git format-patch -1<br />
<br />
Jedoch ist das verwenden von [http://github.com github] um einiges einfacher zu handeln, als Patches umherzusenden.<br />
<br />
== 'Commits' ändern ==<br />
<br />
git rebase -i &lt;COMMIT-ID-EINS-VORHER&gt;<br />
<br />
oder den letzten 'commit' mit <br />
<br />
git commit --amend<br />
<br />
== Git mit dem 'server' syncronisieren ==<br />
<br />
git fetch<br />
git rebase origin master<br />
<br />
= Git Beispiel =<br />
<br />
Hier hat mir stesie das mal erklaert...<br />
<br />
<pre> <br />
so, jetzt habe ich eine version des rf12_powerswitch fertig; habe ein paar aenderungen an vorhandenen dateien gemacht und ein paar neue dateien angelegt...<br />
<br />
wie mach ich das denn jetzt am schlauesten mit git?<br />
<br />
habs in ein frisch gepulltes verzeichniss eingebaut!<br />
<br />
erst ma ein git-add, oder lieber erst die aenderungen der vorhandenen dateien als patch extrahieren?<br />
<br />
&gt; wenn die dateien nur mit dem powerswitch zu tun haben, dann alles in eines<br />
<br />
&gt; sind fehler in rfm12 berichtigt, dann separat<br />
<br />
&gt; neue funktionen in rfm12 imho auch separat<br />
<br />
&gt; anders ausgedrueckt, wenn in zukunft jemand powerswitch los haben will und dann die aenderungen in der rfm12.c z.b. auch nicht mehr braucht, dann in eines<br />
<br />
&gt; solltest halt immer vom gedanken eines versionskontrollsystems ausgehen, und der ist ja, dass man die entwicklung nachvollziehen bzw. zuruecknehmen koennen <br />
soll<br />
<br />
ne nix repariert oder in rfm12 hinzugefuegt, lediglich die defines fuer rfm12_prologue und epilouge in die rfm12.h verschoben<br />
<br />
&gt; das wuerd ich separat comitten<br />
<br />
ok, also erstma git-comit rfm12/rfm12.* ?<br />
<br />
&gt; jo<br />
<br />
git-commit rfm12/rfm12.*<br />
<br />
Created commit f26e3e9: moved rfm12_prologue and epilogue to rfm12.h<br />
<br />
2 files changed, 8 insertions(+), 7 deletions(-)<br />
<br />
sieht gut aus, oder?<br />
<br />
&gt; schon<br />
<br />
ok, jetzt den patch extrahieren? git-??<br />
<br />
&gt; patch extrahieren, was hast du vor?<br />
<br />
&gt; committe doch erstmal noch den rest<br />
<br />
ah, wenn man das so seperat committet, reicht ein patch per mail?<br />
<br />
&gt; etz committe erstmal<br />
<br />
und die commits bleiben so erhlaten...<br />
<br />
&gt; dann machen wir weiter<br />
<br />
&gt; genau<br />
<br />
&gt; der exportiert dann pro committ eine .patch datei<br />
<br />
&gt; also etz mit commit add die neuen adden<br />
<br />
&gt; dann git commit<br />
<br />
ok, dann jetzt die aenderungen an den anderen vorhandenen dateien, oder erst adden?<br />
<br />
&gt; und du willst dich ein bisl an den anderen commit messages orientieren, d.h. den subsystem-namen voran stellen, also z.b. ein &quot;rfm12: moved rfm12_prolgue and <br />
rfm12_epilogue functions to rfm12.h&quot;<br />
<br />
&gt; wobei's in dem fall sogar noch relativ offensichtlich ist<br />
<br />
habe /rfm12/rf12_powerswtich.c/h und in ecmd/ noch was<br />
<br />
&gt; im zweifel in git status gucken ;)<br />
<br />
&gt; naja, dann git add rfm12/rf12_powerswitch.[ch]<br />
<br />
ah, da ist auch noch die config.in; habe ich in anlogie zu usb-config.in bennant: rf12-powerswitch-confi.in<br />
<br />
&gt; das kannste imho auch in die existierende rfm12/config.in packen<br />
<br />
&gt; git format-patch id...<br />
<br />
&gt; und statt `id' die commit id ab dem du exportieren willst<br />
<br />
&gt; siehe `git log'<br />
<br />
&gt; also im stile git format-patch 4afce1e9178397db61f962a874c984df2ddfbb65..<br />
<br />
&gt; das schreibt dann n *.patch dateien ins aktuelle verzeichnis<br />
<br />
jo, nach dem adden, muss ich die dateien auch noch commiten?<br />
<br />
&gt; ja<br />
<br />
&gt; weil, git commit bla.c<br />
<br />
&gt; ist nur eine abkuerzung fuer<br />
<br />
&gt; git add bla.c<br />
<br />
&gt; git commit<br />
<br />
&gt; funktioniert aber nur mit bereits im repository existierenden dateien<br />
<br />
oki, dann sowas wie rf12_powerswitch: initial commit fuers adden und ausfuehrlicher beim commiten?<br />
<br />
&gt; beim add fragt er doch keine nachricht ab<br />
<br />
&gt; die fraegt er nur beim commit<br />
<br />
&gt; und da halt sowas in dem stile, also irgendwie rf12_powerswitch: initial commit. RET RET rf12_powerswitch is a new application, that allows to ...<br />
<br />
und wenn ich dann alles geadded und committet habe kann ich mit git-diff gucken, ob ich alles drin habe?<br />
<br />
&gt; nein<br />
<br />
&gt; git diff zeigt dir NUR aenderungen an Dateien, die bereits im repository lagen<br />
<br />
&gt; wenn du irgendwo neu eine datei hinzugefuegt hast, zeigt er das nicht an<br />
<br />
&gt; du willst wirklich(--foorce) git status verwenden<br />
<br />
&gt; und du kannst in .git/info/exclude dateien eintragen, die er dir gar nicht erst anzeigen soll<br />
<br />
&gt; also in die .git/info/exclude halt sowas eintragen:<br />
<br />
&gt; *.[oda]<br />
<br />
&gt; *~<br />
<br />
&gt; .config<br />
<br />
&gt; .config.old<br />
<br />
&gt; .subdirs<br />
<br />
&gt; ecmd_parser/ecmd_defs.c<br />
<br />
&gt; pinning.c<br />
<br />
&gt; config.mk<br />
<br />
&gt; autoconf.h<br />
<br />
ah cool<br />
<br />
so jetzt kopiere ich mir erst einmal unsere unterhlatung, um es dann in nen wiki artikel einzubauen...<br />
</pre><br />
<br />
... nachdem die dateien per mail versand sind und ins git repository eingepflegt...<br />
<br />
<pre> <br />
mh, mache mir wohl am besten einen branch dafuer, oder?<br />
<br />
damit ich auch mit euch syncron beleiben kann;-)<br />
<br />
&gt; branch?<br />
<br />
&gt; mach doch etz einfach ein<br />
<br />
&gt; git fetch<br />
<br />
&gt; git rebase origin master<br />
<br />
&gt; ok<br />
<br />
&gt; das sollte dann feststellen, dass deine aenderungen jetzt upstream integriert wurden<br />
<br />
&gt; und das entsprechend nicht einspielen<br />
</pre><br />
<br />
== Neue Branch für Änderungen die man gemacht hat erstellen (bevor man commited) ==<br />
<br />
zuerst ''NICHT COMMITTEN''<br />
<br />
# Neue Branch erstellen ''git branch wip-ecmd-callback''<br />
# Zur Branch wechseln ''git checkout wip-ecmd-callback''<br />
# Jetzt seine commits druchführen ''git commit -a''<br />
# und so zum Server übertragen ''git push origin wip-ecmd-callback''<br />
<br />
wenn man fertig ist wirds so zu master übertragen<br />
<br />
# ''git checkout master''<br />
# ''git merge wip-ecmd-callback''<br />
<br />
== Links zu git ==<br />
<br />
* http://excess.org/article/2008/07/ogre-git-tutorial/ - Vortrag ueber git mit vielen Tips<br />
* http://git.or.cz/course/svn.html - Git How To für SVN-User<br />
<br />
[[Category:Zerties]]<br />
[[Category:Ethersex]]<br />
[[Category:Git]]<br />
[[Category:Snippet]]</div>Videopixhttp://old.ethersex.de/index.php?title=TCP-Client_als_FRITZ!Box_Call_Monitor&diff=5146TCP-Client als FRITZ!Box Call Monitor2011-09-02T21:36:39Z<p>Videopix: Seite in Category:Control6 Examples eingefügt</p>
<hr />
<div>Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Der Call Monitor wird bei der FRITZ!Box einmalig durch Anruf von '''#96*5*''' an einem Analogtelefon eingeschaltet und sendet dann auf Port 1012. Nähere Angaben zum Message-Format stehen z.B. im AVM Wiki [http://www.wehavemorefun.de/fritzbox/index.php/Callmonitor]. <br />
<br />
Das folgende Programm verbindet sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an:<br />
CONTROL_START<br />
<br />
TCP_HANDLER_PERSIST(callmonitor)<br />
for (;;) {<br />
if (uip_newdata ()) {<br />
uint8_t j;<br />
uint8_t part=0;<br />
uint8_t call_type=0;<br />
uint16_t call_len=0;<br />
char caller[15]="";<br />
char called[15]="";<br />
<br />
char *ptr = (char *) uip_appdata;<br />
ptr[uip_len] = 0;<br />
<br />
dnl parse the message string in ptr<br />
for (uint8_t i=0; i<uip_len; i++) {<br />
if (ptr[i]==';') {<br />
part++;<br />
j=0;<br />
} else {<br />
if (part==1 && ptr[i]=='R') call_type=1; dnl RING<br />
if (part==1 && ptr[i]=='D') call_type=2; dnl DISCONNECT<br />
if (part==3 && call_type==1) {<br />
caller[j]=ptr[i]; dnl copy to string<br />
j++;<br />
caller[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==4 && call_type==1) {<br />
called[j]=ptr[i]; dnl copy to string<br />
j++;<br />
called[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==3 && call_type==2) {<br />
call_len = call_len*10 + ptr[i] - '0'; dnl convert to int<br />
}<br />
}<br />
}<br />
<br />
dnl print what we know to lcd<br />
hd44780_goto(2, 0); dnl prepare lcd print location<br />
if (call_type==1) {<br />
fputs(caller, lcd);<br />
fputs(" calling ", lcd);<br />
fputs(called, lcd);<br />
}<br />
if (call_type==2) {<br />
char buffer[27];<br />
sprintf(buffer, "Connection time: %d sec.", call_len);<br />
fputs(buffer, lcd);<br />
}<br />
call_type=0; dnl only needed if you defined calltype globally<br />
}<br />
PT_YIELD(pt);<br />
}<br />
TCP_HANDLER_END();<br />
<br />
ON STARTUP DO<br />
TCP_CONNECT(xxx.xxx.xxx.xxx, 1012, callmonitor);<br />
END<br />
<br />
CONTROL_END<br />
Statt xxx.xxx.xxx.xxx ist natürlich die IP-Adresse der FRITZ!Box anzugeben.<br />
Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.<br />
<br />
[[Category:Control6 Examples]]</div>Videopixhttp://old.ethersex.de/index.php?title=TCP-Client_als_FRITZ!Box_Call_Monitor&diff=5145TCP-Client als FRITZ!Box Call Monitor2011-09-02T21:06:38Z<p>Videopix: </p>
<hr />
<div>Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Der Call Monitor wird bei der FRITZ!Box einmalig durch Anruf von '''#96*5*''' an einem Analogtelefon eingeschaltet und sendet dann auf Port 1012. Nähere Angaben zum Message-Format stehen z.B. unter [http://www.wehavemorefun.de/fritzbox/index.php/Callmonitor]. <br />
<br />
Das folgende Programm verbindet sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an:<br />
CONTROL_START<br />
<br />
TCP_HANDLER_PERSIST(callmonitor)<br />
for (;;) {<br />
if (uip_newdata ()) {<br />
uint8_t j;<br />
uint8_t part=0;<br />
uint8_t call_type=0;<br />
uint16_t call_len=0;<br />
char caller[15]="";<br />
char called[15]="";<br />
<br />
char *ptr = (char *) uip_appdata;<br />
ptr[uip_len] = 0;<br />
<br />
dnl parse the message string in ptr<br />
for (uint8_t i=0; i<uip_len; i++) {<br />
if (ptr[i]==';') {<br />
part++;<br />
j=0;<br />
} else {<br />
if (part==1 && ptr[i]=='R') call_type=1; dnl RING<br />
if (part==1 && ptr[i]=='D') call_type=2; dnl DISCONNECT<br />
if (part==3 && call_type==1) {<br />
caller[j]=ptr[i]; dnl copy to string<br />
j++;<br />
caller[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==4 && call_type==1) {<br />
called[j]=ptr[i]; dnl copy to string<br />
j++;<br />
called[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==3 && call_type==2) {<br />
call_len = call_len*10 + ptr[i] - '0'; dnl convert to int<br />
}<br />
}<br />
}<br />
<br />
dnl print what we know to lcd<br />
hd44780_goto(2, 0); dnl prepare lcd print location<br />
if (call_type==1) {<br />
fputs(caller, lcd);<br />
fputs(" calling ", lcd);<br />
fputs(called, lcd);<br />
}<br />
if (call_type==2) {<br />
char buffer[27];<br />
sprintf(buffer, "Connection time: %d sec.",call_len);<br />
fputs(buffer, lcd);<br />
}<br />
call_type=0; dnl only needed if you defined calltype globally<br />
}<br />
PT_YIELD(pt);<br />
}<br />
TCP_HANDLER_END();<br />
<br />
ON STARTUP DO<br />
TCP_CONNECT(xxx.xxx.xxx.xxx, 1012, callmonitor);<br />
END<br />
<br />
CONTROL_END<br />
<br />
Statt xxx.xxx.xxx.xxx ist natürlich die IP-Adresse der FRITZ!Box anzugeben.<br />
Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.</div>Videopixhttp://old.ethersex.de/index.php?title=TCP-Client_als_FRITZ!Box_Call_Monitor&diff=5143TCP-Client als FRITZ!Box Call Monitor2011-08-28T22:40:51Z<p>Videopix: Formatting tweeks</p>
<hr />
<div>Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Dieses Programm verbindet sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an.<br />
CONTROL_START<br />
<br />
TCP_HANDLER_PERSIST(callmonitor)<br />
for (;;) {<br />
if (uip_newdata ()) {<br />
uint8_t j;<br />
uint8_t part=0;<br />
uint8_t call_type=0;<br />
uint16_t call_len=0;<br />
char caller[15]="";<br />
char called[15]="";<br />
<br />
char *ptr = (char *) uip_appdata;<br />
ptr[uip_len] = 0;<br />
<br />
dnl parse the message string in ptr<br />
for (uint8_t i=0; i<uip_len; i++) {<br />
if (ptr[i]==';') {<br />
part++;<br />
j=0;<br />
} else {<br />
if (part==1 && ptr[i]=='R') call_type=1; dnl RING<br />
if (part==1 && ptr[i]=='D') call_type=2; dnl DISCONNECT<br />
if (part==3 && call_type==1) {<br />
caller[j]=ptr[i]; dnl copy to string<br />
j++;<br />
caller[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==4 && call_type==1) {<br />
called[j]=ptr[i]; dnl copy to string<br />
j++;<br />
called[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==3 && call_type==2) {<br />
call_len = call_len*10 + ptr[i] - '0'; dnl convert to int<br />
}<br />
}<br />
}<br />
<br />
dnl print what we know to lcd<br />
hd44780_goto(2, 0); dnl prepare lcd print location<br />
if (call_type==1) {<br />
fputs(caller, lcd);<br />
fputs(" calling ", lcd);<br />
fputs(called, lcd);<br />
}<br />
if (call_type==2) {<br />
char buffer[27];<br />
sprintf(buffer, "Connection time: %d sec.",call_len);<br />
fputs(buffer, lcd);<br />
}<br />
call_type=0; dnl only needed if you defined calltype globally<br />
}<br />
PT_YIELD(pt);<br />
}<br />
TCP_HANDLER_END();<br />
<br />
ON STARTUP DO<br />
TCP_CONNECT(10.0.0.2, 1012, callmonitor);<br />
END<br />
<br />
CONTROL_END<br />
Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.<br />
Der Call Monitor wird bei der FRITZ!Box einmalig durch Anruf von '''#96*5*''' an einem Analogtelefon eingeschaltet und sendet dann auf Port 1012.</div>Videopixhttp://old.ethersex.de/index.php?title=TCP-Client_als_FRITZ!Box_Call_Monitor&diff=5142TCP-Client als FRITZ!Box Call Monitor2011-08-28T22:33:16Z<p>Videopix: </p>
<hr />
<div>Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Dieses Programm verbindes sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an.<br />
CONTROL_START<br />
TCP_HANDLER_PERSIST(callmonitor)<br />
for (;;) {<br />
if (uip_newdata ()) {<br />
uint8_t j;<br />
uint8_t part=0;<br />
uint8_t call_type=0;<br />
uint16_t call_len=0;<br />
char caller[15]="";<br />
char called[15]="";<br />
<br />
char *ptr = (char *) uip_appdata;<br />
ptr[uip_len] = 0;<br />
<br />
debug_printf("fritz says: %s\n", ptr);<br />
<br />
dnl parse the message<br />
for (uint8_t i=0; i<uip_len; i++) {<br />
if (ptr[i]==';') {<br />
part++;<br />
j=0;<br />
} else {<br />
if (part==1 && ptr[i]=='R') call_type=1; dnl RING<br />
if (part==1 && ptr[i]=='D') call_type=2; dnl DISCONNECT<br />
if (part==3 && call_type==1) {<br />
caller[j]=ptr[i]; dnl copy to string<br />
j++;<br />
caller[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==4 && call_type==1) {<br />
called[j]=ptr[i]; dnl copy to string<br />
j++;<br />
called[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==3 && call_type==2) {<br />
call_len = call_len*10 + ptr[i] - '0'; dnl convert to int<br />
}<br />
}<br />
}<br />
<br />
dnl print what we know to lcd<br />
hd44780_goto(2, 0); dnl prepare lcd print location<br />
if (call_type==1) {<br />
fputs(caller, lcd);<br />
fputs(" calling ", lcd);<br />
fputs(called, lcd);<br />
}<br />
if (call_type==2) {<br />
char buffer[27];<br />
sprintf(buffer, "Connection time: %d sec.",call_len);<br />
fputs(buffer, lcd);<br />
}<br />
call_type=0; dnl only needed if you defined calltype globally<br />
}<br />
PT_YIELD(pt);<br />
}<br />
TCP_HANDLER_END();<br />
<br />
ON STARTUP DO<br />
TCP_CONNECT(10.0.0.2, 1012, callmonitor);<br />
END<br />
CONTROL_END<br />
Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.<br />
Der Call Monitor wird bei der FRITZ!Box einmalig durch Anruf von '''#96*5*''' an einem Analogtelefon eingeschaltet und sendet dann auf Port 1012.</div>Videopixhttp://old.ethersex.de/index.php?title=TCP-Client_als_FRITZ!Box_Call_Monitor&diff=5141TCP-Client als FRITZ!Box Call Monitor2011-08-28T22:27:27Z<p>Videopix: </p>
<hr />
<div>Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Dieses Programm verbindes sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an.<br />
<br />
TCP_HANDLER_PERSIST(callmonitor)<br />
for (;;) {<br />
if (uip_newdata ()) {<br />
uint8_t j;<br />
uint8_t part=0;<br />
uint8_t call_type=0;<br />
uint16_t call_len=0;<br />
char caller[15]="";<br />
char called[15]="";<br />
<br />
char *ptr = (char *) uip_appdata;<br />
ptr[uip_len] = 0;<br />
<br />
debug_printf("fritz says: %s\n", ptr);<br />
<br />
dnl parse the message<br />
for (uint8_t i=0; i<uip_len; i++) {<br />
if (ptr[i]==';') {<br />
part++;<br />
j=0;<br />
} else {<br />
if (part==1 && ptr[i]=='R') call_type=1; dnl RING<br />
if (part==1 && ptr[i]=='D') call_type=2; dnl DISCONNECT<br />
if (part==3 && call_type==1) {<br />
caller[j]=ptr[i]; dnl copy to string<br />
j++;<br />
caller[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==4 && call_type==1) {<br />
called[j]=ptr[i]; dnl copy to string<br />
j++;<br />
called[j]='\0'; dnl prepare end of string<br />
}<br />
if (part==3 && call_type==2) {<br />
call_len = call_len*10 + ptr[i] - '0'; dnl convert to int<br />
}<br />
}<br />
}<br />
<br />
dnl print what we know to lcd<br />
hd44780_goto(2, 0); dnl prepare lcd print location<br />
if (call_type==1) {<br />
fputs(caller, lcd);<br />
fputs(" calling ", lcd);<br />
fputs(called, lcd);<br />
}<br />
if (call_type==2) {<br />
char buffer[27];<br />
sprintf(buffer, "Connection time: %d sec.",call_len);<br />
fputs(buffer, lcd);<br />
}<br />
call_type=0; dnl only needed if you defined calltype globally<br />
}<br />
PT_YIELD(pt);<br />
}<br />
TCP_HANDLER_END();<br />
<br />
ON STARTUP DO<br />
TCP_CONNECT(10.0.0.2, 1012, callmonitor);<br />
END<br />
<br />
Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.<br />
Der Call Monitor wird bei der FRITZ!Box einmalig durch Anruf von '''#96*5*''' an einem Analogtelefon eingeschaltet und sendet dann auf Port 1012.</div>Videopixhttp://old.ethersex.de/index.php?title=TCP-Client_als_FRITZ!Box_Call_Monitor&diff=5140TCP-Client als FRITZ!Box Call Monitor2011-08-28T22:20:57Z<p>Videopix: Die Seite wurde neu angelegt: „Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindu…“</p>
<hr />
<div>Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Dieses Programm verbindes sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowei nach Gesprächsende die Verbindungszeit an.<br />
<br />
Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.</div>Videopixhttp://old.ethersex.de/index.php?title=Control6&diff=5139Control62011-08-28T22:12:37Z<p>Videopix: </p>
<hr />
<div>'''Control6''' ist eine auf [http://de.wikipedia.org/wiki/Protothread Protothreads] fußende Art von Skriptsprache, die ein wenig von ''Basic'' inspiriert ist.<br />
Control6 soll insbesondere dazu dienen, dass man die einzelnen Komponenten von Ethersex schnell zusammenfügen kann.<br />
Beispielsweise können in einer Endlosschleife die Temperaturen von KTY-Sensoren ausgelesen werden und in Abhängigkeit der Werte dann Pins geschaltet, [[SYSLOG]]-Nachrichten abgesetzt oder [[ECMD]]-Befehle versendet werden.<br />
<br />
Die Skripte werden während des Kompiliervorgangs in C-Code übersetzt und letztlich mit in die Firmware einkompiliert.<br />
Sie sind somit ''statisch'' und nur durch Neuprogrammierung änderbar. <br />
<br />
== So fängt man an ==<br />
Standardmäßig werden, wenn in Menuconfig die Funktion ''Control6'' aktiviert wurde, die Instruktionen aus der Datei '''control6/control6.src''' in die Firmware eingebunden. Für Eigenentwicklungen, die nicht in die "Distribution" aufgenommen werden sollen, empfiehlt es sich separate Dateien in der Ethersex Ordnerstruktur anzulegen, sodass es zu keinen (oder zumindest seltener) zu Konflikten beim Update auf eine neuere offizielle Firmwareversion kommt.<br />
<br />
Dazu einfach eine beliebige Datei im Stile der o.g. ''control6.src'' anlegen, zum Beispiel eine ''control6/erste-schritte.src'' und diese dem Makesystem bekannt machen. Letzteres durch folgenden Eintrag in der Datei [[config.mk]] im Hauptverzeichnis (wenn diese noch nicht existiert, einfach eine neue Datei anlegen und nur diese Zeile eintragen):<br />
C6_SOURCE = $(TOPDIR)/control6/erste-schritte.src<br />
<br />
* [[:Kategorie:Control6 Examples|Control6 Beispielcode]]<br />
* [[PIN_Commands|Wie schreibe ich ein Control6 Skript]]<br />
<br />
== Konzepte ==<br />
* Ein Control6-Skript wird immer von den Tags '''CONTROL_START''' und '''CONTROL_END''' umschlossen.<br />
* Mit '''THREAD''' resp. '''THREAD_END''' können leicht quasi nebenläufige Programmabschnitte erstellt werden. Dies ermöglicht mehrere Aufgaben, die miteinander nichts zu tun haben, auch getrennt voneinander im Control6-Code abzubilden.<br />
<br />
== Befehlssatz ==<br />
Control6 ist momentan schon relativ mächtig und stellt durchaus eine Alternative zum Verfassen von C-Code dar. Es werden aber nachwievor nicht alle Aspekte von Ethersex auch in Control6 abgebildet (und noch weniger werden hier im Wiki bislang thematisiert). Wenn du möchtest, du bist herzlich willkommen beim Ausbau der Funktionalität mitzuhelfen :-)<br />
<br />
* übergreifende Funktionen<br />
** [[Globale Variablen]]<br />
** [[PIN-Befehle]], Threading, Timer und Events<br />
** [[Bedingungen]]<br />
* Einzelaspekte, siehe<br />
** [[ADC-Werte abfragen]]<br />
** [[Zugriff auf die Systemuhr]]<br />
** [[Debug-Meldungen und SYSLOG]]<br />
** [[ECMD-Befehle absetzen]]<br />
** [[Jabber]]<br />
** [[eMail versenden]]<br />
** [[Dallas 1-wire Bus]]<br />
** [[KTY81]]<br />
** [[Einfaches Menüsystem|TTY und Menü-System]]<br />
** [[IRMP|IR-Empfänger abfragen]]<br />
** [[TCP-Client als FRITZ!Box Call Monitor]]<br />
<br />
[[Kategorie:Ethersex]]<br />
[[Kategorie:Control6|!]]</div>Videopixhttp://old.ethersex.de/index.php?title=LCD&diff=5127LCD2011-08-26T07:40:45Z<p>Videopix: /* Pollin AVR-NET-IO */</p>
<hr />
<div>Diese Seite beschäftigt sich damit ein LCD an die Platine anzuschliessen und zu betreiben.<br />
==HD44780==<br />
Die folgenden Displays wurden gestestet:<br />
* Pollin, SC1604A, Bstnr. 120 572 (gestestet von #OR)<br />
* Pollin, TC1604A-01 Bstnr. 120 628 (getestet von Chefkoch mit I2C) - LCD-Controller SPLC780D<br />
* Pollin, YL162-90, Bstnr. 120 060 (getestet von SuperRiggi)<br />
* Pollin, TC1602E-01, Bstnr. 120 420 (getestet von Bitfehler)<br />
* Solomon, LM1180SYL (getestet von Doozer)<br />
* Conrad, AV2040, Bstnr. 181657-62, - Controller Type ks0067b auswählen - (getestet von punktl)<br />
* Bürklin, Peaktech P204A, Bstnr. 72S1170, - Controller ks0067b (getestet von michi)<br />
* TC1602E-01 (getestet von afloria)<br />
* Reichelt, Displaytech 162<br />
* [[WINTEK WD-C2704M-1HNN]] (getestet von VBen)<br />
* SD1602QULB (Datenblatt: [http://www.toshinkk.co.jp/product/pdf2/SD1602Q.pdf]) - Controller ks0066 auswählen (getestet: weef)<br />
* weitere?<br />
<br />
=== Pollin AVR-NET-IO ===<br />
Da ich ein Pollin Board verwende, hier also die Beschreibung für ein AVR-NET-IO (:biggrin:). Den Anschluss des LCD habe ich von http://www.sprut.de/electronic/lcd/lcd.gif übernommen. Die folgende Grafik zeigt den Anschluss an den Controller:<br />
<br />
[[Bild:ethersex_LCD.png]]<br />
<br />
Wer ein bißchen besser löten kann, benötigt keine Anschlussplatine und kann das Ganze auch direkt auf einen SUB-D Stecker löten, die Stiftnummern stehen in der Grafik dabei.<br />
<br />
Bei dem YL162-90 ist zu beachten, dass Vo (Kontrast) nicht mit positiver Spannung anzusteuern ist. Die negative Spannung ist am besten über ein 10kOhm-Potentiometer vom Pin 6 des RS232-Bausteines (Pollin AVR Board) abzugreifen. Bei ca. 5kOhm ist das Display gut zu erkennen.<br />
<br />
Danach muss nochmal compiliert werden:<br />
<br />
* make menuconfig<br />
* Menüpunkg &quot;I/O --->&quot;<br />
* Untermenu &quot;LCD Displays --->&quot;<br />
* den Punkt &quot;HD44780 module driver (Character-LCD) --->&quot; aktivieren<br />
* in selbiges Untermenu abtauchen und noch &quot;Readback Support&quot; aktivieren<br />
* danach rausgehen, speichern, compilieren, laden <br />
<br />
Anmerkung für Anwender die schon länger mit Ethersex arbeiten: Die alte Konfigurationsoption '&quot;Use Port C&quot; ist seit mind. Nov. 2009 nicht mehr im Menü vorhanden. Also manuell in der Konfigurationsdatei des ausgewählten Hardwareprofils (pinning/hardware/...) pinnen:<br />
<br />
ifdef(`conf_HD44780', `<br />
pin(HD44780_RS, PC0)<br />
pin(HD44780_RW, PC1)<br />
pin(HD44780_EN1, PC2)<br />
pin(HD44780_D4, PC3)<br />
pin(HD44780_D5, PC4)<br />
pin(HD44780_D6, PC5)<br />
pin(HD44780_D7, PC6)<br />
')<br />
<br />
Mehr Info dazu auch unter [[Pins_in_Ethersex_definieren]] und [[Ethersex_Hardware_hinzufügen]].<br />
<br />
Das LCD macht nach dem Einschalten erstmal gar nix. Zum Testen geht am besten der ECMD.<br />
* ''netcat 192.168.0.90 2701'' aufrufen<br />
* dann ''lcd write Hallo'' eingeben<br />
<br />
Man sollte jetzt etwas auf dem LCD lesen können.<br />
<br />
<br />
In Programmen kann man das LCD z.B. so nutzen:<br />
<br />
char buffer [20];<br />
fputs ("Hallo", lcd);<br />
<br />
Oder für Texte, die auch Variablen enthalten:<br />
<br />
sprintf (buffer,"%2u:%04X:%04X:%02X", IRMP_PROTOCOL, IRMP_ADDRESS, IRMP_COMMAND, IRMP_FLAGS);<br />
fputs (buffer, lcd);<br />
<br />
Etwas ab einer bestimmten Position schreiben glückt mit:<br />
<br />
hd44780_goto(zeile,spalte);<br />
<br />
Achtung: die Zählung der Zeilen und Spalten beginnt hier mit 0!<br />
<br />
=== 2-Draht-LCD ===<br />
Anbindung eines HD44780 (kompatiblen) LCD über ein Schieberegister.<br />
Benötigt nur zwei Portpins am Mikrocontroller.<br />
<br />
Aufbau und Ansteuerung: [http://www.cczwei.de/atm18_downloads/071148-D%20CC2-AVR-board-2.pdf CC2 2-Draht-LCD]<br />
[http://streifenraster.de.vu Aufbau auf Streifenrasterplatine] (Projekte -> 2-Draht-LCD)<br />
<br />
Hardware-Pinning anpassen:<br />
<br />
ifdef(`HD44780_2WIRE', `<br />
pin(HD44780_2WIRE_D, PC0)<br />
pin(HD44780_2WIRE_CLK, PC1)<br />
')<br />
<br />
HD474780 Unterstützung in menuconfig aktivieren und connection-type &quot;2WIRE(74hct4094)&quot; wählen.<br />
<br />
=== I2C-LCD ===<br />
<br />
Anbindung eines HD44780 (kompatiblen) LCD über ein I2C Portexpander (z.B. Pollin LCD I2C Adapterboard).<br />
Benötigt nur die zwei Portpins des I2C-Bus des Mikrocontroller.<br />
<br />
Wenn man die I2C Adresse noch nicht weis, kann man sich eine vorab Firmware mit I2c Mastersupport, I2C Read/Write Support sowie I2C Detect Support kompilieren.<br />
<br />
I/O ---><br />
I2C Master Support (EXPERIMENTAL) ---><br />
[*] I2C detection support<br />
[*] I2C generic read/write support<br />
[*] I2C PCF8574X Port extention<br />
<br />
(Das PCF Modul wird später benötigt)<br />
<br />
Danach kann man über das ECMD Komando "i2c detect" einen I2C Slave Suchlauf starten.<br />
<br />
z.B. über den Webserver:<br />
<br />
http://192.168.0.90/ecmd?i2c+detect<br />
<br />
detected at: 0x21 (33)<br />
OK<br />
<br />
Woraus wir die Adresse 33 ablesen können.<br />
<br />
Diese wird benötigt um das HD44780 Modul einzustellen. Dazu wird das HD44780 Displaymodul aktiviert. Dann muss es auf Connection Type: I2C umgestellt werden und die I2C Adresse eingetragen werden.<br />
Readback Support dient der schnelleren Ansteuerung des Displays und Invert Backlight switch ist bedingt duch die Emitterschaltung der Hintergrundbeleuchtungsansteuerung.<br />
<br />
I/O ---><br />
LCD Displays ---><br />
[*] HD44780 module driver (Character-LCD) ---><br />
(Original) Controller type<br />
(I2C(pcf8574)) Connection type<br />
[*] Readback support<br />
(33) PCF8574 Address<br />
[*] Invert Backlight switch<br />
<br />
Danach kann ganz normal kompiliert werden und über ECMD LCD Komandos das Display gesteuert werden. (s.o.)<br />
<br />
=== Weitere Spielereien mit dem LCD ===<br />
Leider habe ich noch nicht rausbekommen, wie man zb. die 1wire Temperatursensoren oder die ADC oder die Ports möglichst elegant auf das LCD bekommt :-). Aber vielleicht hat ja von Euch einer eine Idee.<br />
* Unter [[Temperaturanzeige_mit_TTY]] findet sich ein kleines [[Control6]]-Skript, mit dem man die Messwerte von 1-wire Temperatursensoren mit Hilfe des TTY-Layers auf's Display zaubern kann. --[[Benutzer:Stella|Stella]] 15:19, 26. Jun. 2009 (UTC)<br />
<br />
==S1D15G10==<br />
Diesen LCDisplay Controller findet man in diversen Mobiltelefonen. Ich habe das LCDisplay aus einem Nokia6610 ausgebaut.<br />
<br />
Einige Online Portale/Händler bieten es auch incl. Anschlussplatine an.<br />
<br />
Die folgenden Displays wurden getestet:<br />
* Epson, S1D15G10, ausgebaut aus Nokia6610 (getestet von veyron)<br />
* weitere?<br />
<br />
Das 130x130 1.5" FarbLCD mit dem integrierten Controller S1D15G10 wird zB. so angeschlossen:<br />
<br />
RESET, PB0<br />
DATA, SPI_MOSI<br />
CLK, SPI_SCK<br />
CS, PD7<br />
<br />
Beispiel für Atmega644: pinning/hardware/etherrape.m4<br />
<br />
ifdef(`conf_S1D15G10', `dnl<br />
/* port config for s1d15g10 lcd */<br />
pin(S1D15G10_CS, PA3, OUTPUT)<br />
pin(S1D15G10_RESET, PA1, OUTPUT)<br />
')<br />
<br />
Da die Daten via SPI generiert werden, können nur die Pins für RESET und ChipSelect frei gewählt werden.<br />
<br />
Die Stromversorgung für den LCDController sollte '''nicht''' über 4V liefern! Die Pins sollten 3.6V '''nicht''' übersteigen! Die Hintergrundbeleuchtung braucht 6V - 7V.<br />
<br />
Da der AVR meines etherrapes mit 5V läuft, hab ich jeweils eine 3V6 Zenerdiode und einen 1k5Ohm Pullup zwischen AVR und LCD gehangen.<br />
<br />
In menuconfig:<br />
│ │ Load a Default Configuration ---><br />
│ │ General Setup ---><br />
│ │ Network protocols ---><br />
│ │ I/O support ---><br />
...<br />
│ │ [*] S1D15G10 module driver (130x130-R/G/B-LCD)<br />
<br />
Auf dem LCD wird dann ein bisschen farbiger Text auf schwarzem Hintergrund und das E-Sex Logo angezeigt.<br />
<br />
Ist Debug und ECMD via UART aktiv, wird dies auch auf dem LCD ausgeben.<br />
<br />
Das sieht dann so aus:<br />
<br />
[[Bild:veyrons_ethersex_S1D15G10.jpg]]<br />
<br />
=== Bezugsquellen ===<br />
<br />
* [http://www.sparkfun.com/commerce/product_info.php?products_id=569 Sparkfun] vertreibt das LCD incl. Anschlussplatine<br />
* In folgenden Nokia Handys wurden diese LCDs verbaut:<br />
**6100, 6610, 7210, 7250, und 5100<br />
Andere Webseiten auf denen die Möglichkeiten und Anschluß ersichtlich wird.<br />
http://thomaspfeifer.net/nokia_6100_display.htm<br />
<br />
==Ansteuerung per ECMD==<br />
<br />
Folgende Befehle sind für's LCD vorhanden:<br />
{| border=1 cellspacing=0 padding=4 class=wikitable<br />
! Kommando !! Funktion <br />
|- <br />
|lcd char N D1 D2 D3 D4 D5 D6 D7 D8 || Benutzer-definierbares Zeichen N erstellen mit den Daten D1..D8 (in Hex) <br />
|- <br />
|lcd clear ZEILE || Lösche ZEILE (0..3) oder das ganze Display (wenn ohne Parameter) <br />
|- <br />
|lcd goto ZEILE SPALTE || Setze den Cursor auf ZEILE und SPALTE (Ursprung ist 0/0) <br />
|- <br />
|lcd reinit CURSOR BLINK || Reinitialisiere das Display, schalte CURSOR aus oder ein (0 oder 1) und ob der Cursor BLINKen soll <br />
|- <br />
|lcd shift RICHTUNG || Schiebe die ganze Anzeige in RICHTUNG (entweder 'left' oder 'right') <br />
|- <br />
|lcd write TEXT || Schreibe TEXT an die momentane Cursorposition <br />
|}<br />
<br />
Diese Tabelle wurde von [[Ecmd_Reference | Ecmd Reference]] übernommen und übersetzt.<br />
<br />
Anmerkung: Das Zeichen-definieren scheint zu funktionieren, jedenfalls wird "OK" zurückgegeben. Aber wie rufe ich das Zeichen auf, d.h. wie übergebe ich 'lcd write <hex00>'?<br />
<br />
==S1D13305==<br />
Dies ist ein schon etwas älterer schwarz/weiss LCD Controller von Epson (Nachfolger: S1D13700).<br />
[http://www.alldatasheet.com/datasheet-pdf/pdf/230048/EPSON/S1D13305.html Link zum Datenblatt]<br />
<br />
Der Controller kann Displays bis zu einer Grösse von 640*256 Pixel ansteuern und<br />
bis zu 3 Textlayer, 3 Grafiklayer oder Text/Grafiklayer gemischt anzeigen.<br />
Der Controller hat einen eingebauten Zeichensatz, es ist aber auch möglich eigene Zeichensätze<br />
ins RAM des Controllers zu laden (zur Zeit noch nicht unterstützt)<br />
<br />
=== Aktivierung ===<br />
In menuconfig unter<br />
* I/O -><br />
* LCD Displays -><br />
* S1D13305 module Driver (GLCD)<br />
<br />
Hier kann jetzt der Display modus eingestellt werden, die Displaygrösse und ob das Backlight schaltbar ist.<br />
Die Einstellung von XTAL und Refresh rate muss an den LCD-Controller und das Display angepasst werden.<br />
Normalerweise wird der LCD-Controller mit 10MHz betrieben, die von Epson empfohlene Refreshrate ist 75 Hz.<br />
<br />
Die Implementierung des Treibers unterstützt 2 Modi: <br />
* Text/Grafik gemischt, wobei dann Layer 1 der Textlayer ist Layer 2 der Grafiklayer<br />
* Nur Grafik, dann sind 3 Grafiklayer verfügbar.<br />
<br />
Pinning: (an eigene HW anpassen!):<br />
<br />
/* ports the s1d13305 is attached to */<br />
ifdef(`conf_S1D13305', `dnl<br />
S1D13305_DATA_PORT(A)<br />
pin(S1D13305_CS, PC6, OUTPUT)<br />
pin(S1D13305_RES, PD4, OUTPUT)<br />
pin(S1D13305_A0, PD5, OUTPUT)<br />
pin(S1D13305_RD, PD6, OUTPUT)<br />
pin(S1D13305_WR, PD7, OUTPUT)<br />
ifdef(`conf_LCD_BACKLIGHT', `dnl<br />
pin(LCD_BACKLIGHT, PC7, OUTPUT)<br />
')dnl<br />
')dnl<br />
<br />
Nach der Initialisierung sollte das Display leer sein und nicht flimmern.<br />
Man kann jetzt z.b. mit <br />
<br />
lcd_writeTextPos(5,5,"Hallo Welt", 10);<br />
<br />
einen Text auf dem Display ausgeben.<br />
<br />
Wenn man eine Grafik ausgeben möchte, muss man im eigenen Code LCD_DRAWBITMAP_USED definieren und lcd_getBMPData implementieren.<br />
Beispiel:<br />
<br />
#define LCD_DRAWBITMAP_USED<br />
uint8_t lcd_getBMPData(uint16_t address_ui16)<br />
{<br />
return pgm_read_byte(yourBMP+address_ui16);<br />
}<br />
<br />
Dann ruft man lcd_drawBitmap auf.<br />
Z.b. so:<br />
<br />
lcd_drawBitmap(LCD_LAYER_2, 10, 10, 20, 30);<br />
<br />
Zu beachten ist hier, dass der vierte Parameter die Breite der Bitmap in BYTE erwartet, nicht in Pixeln!<br />
lcd_DrawBitmap ruft jetzt lcd_getBMPData auf um die zu zeichnende Bitmap zu holen.<br />
<br />
=== Todo ===<br />
* ECMD Unterstützung<br />
* Grafikbibliothek für einfache Zeichenoperationen (evtl. gemeinsam für alle Displays?)<br />
* Laden von eigenen Zeichensätzen<br />
<br />
=== Bezugsquellen ===<br />
Eine Bezugsquelle für Platinen ist z.b. [http://www.mdejong.de/ Mark de Jong]<br />
Displays und die passenden Flachkabelstecker bekommt man gelegtlich bei [http://www.pollin.de/ Pollin]<br />
oder bei [http://wallbraun-electronics.de/index.html Wallbraun-Electronics] im Shop.<br />
<br />
[[Category:Ethersex]]<br />
[[Category:StepByStep]]<br />
[[Category:LCD]]</div>Videopixhttp://old.ethersex.de/index.php?title=WINTEK_WD-C2704M-1HNN&diff=5103WINTEK WD-C2704M-1HNN2011-08-17T16:47:25Z<p>Videopix: </p>
<hr />
<div>Das Display hat 4x27 Zeichen mit 2 Controllern.<br />
Die oberen beiden Zeilen sind dem Controller mit dem Enable E1 zugeordnet, die unteren beiden Zeilen dem Controller mit dem Enable E2.<br />
<br />
Um das Display korrekt nutzen zu können ist der HD44780_MULTIENABLE Support erforderlich.<br />
<br />
<br />
Weitere Daten zum Display unter: [http://www.pollin.de/shop/downloads/D120232S.ZIP Pollin Download]</div>Videopixhttp://old.ethersex.de/index.php?title=Live_CD&diff=4908Live CD2011-06-10T20:57:06Z<p>Videopix: </p>
<hr />
<div>Du verwendest noch Fensterle und möchtest mal Ethersex testen? Oder Du hast ein Produktivsystem, zwar unter GNU/Linux, möchtest aber nicht nur um mal zu probieren allen möglichen, anderen, neuen Kram installieren?<br />
<br />
Kein Ding, dafür gibt's Live-CDs :-)<br />
<br />
Lade Dir am besten fd0's AVR-Live-CD von<br />
http://www.lochraster.org/rumpus/data/ubuntu-8.04.01-avr-livecd-20080811.iso<br />
herunter und starte diese. Wahlweise das ISO auf CD brennen und nativ starten, oder emuliert/virtualisiert, zum Beispiel mit ''Virtual Box'' oder ''qemu''.<br />
<br />
Wenn Du das System startest, sollte das in etwa so aussehen:<br />
<br />
[[Bild:1_terminal-oeffnen.jpg]]<br />
<br />
Du wirst nicht umhin kommen, ab und an die Konsole zu verwenden -- die taugt auch wesentlich mehr wie die Eingabeaufforderung unter Windows %) --, dazu klicken wir auf Applications &gt; Accessories &gt; Terminal, vgl. oben.<br />
<br />
Die Live-CD bringt schon so ziemlich alles mit, was wir brauchen. Nur eine Bibliothek fehlt, die wir für ''menuconfig'' später brauchen werden, deswegen installieren wir die noch kurz nach:<br />
<br />
[[Bild:2_installation_ncurses.jpg]]<br />
<br />
Jetzt haben wir alles, was wir brauchen. Nächster Schritt: Ethersex aus dem Git Repository auschecken:<br />
Achtung: Der Pfad hat sich geändert! Im Unterschied zum Screenshot heißt der Checkout-Befehl<br />
<strike>git clone http://github.com/ethersex/ethersex.git</strike>git clone git://github.com/ethersex/ethersex.git<br />
<br />
[[Bild:3_git_clone.jpg]]<br />
<br />
Ethersex ist nicht ganz klein, das dauert eine ganze Weile ..., danach betreten wir das Verzeichnis ''ethersex'' (wie unter Windows mit ''cd'') und rufen <br />
make menuconfig<br />
die Konfigurationsoberfläche von Ethersex, auf ...<br />
<br />
[[Bild:4_make_menuconfig.jpg]]<br />
<br />
[[Bild:5_make_menuconfig_2.jpg]]<br />
<br />
Wenn Du Dir Dein Ethersex soweit konfiguriert hast, unten auf Exit, Speichern, ja ...<br />
zurück an der Konsole musst Du <br />
make<br />
eingeben, um den Kompilierungsvorgang anzustoßen. Das kann einige Sekunden dauern und erzeugt ziemlich viele Bildschirmausgaben :-)<br />
<br />
Wenn alles glatt geht, solltest Du eine Meldung ''ethersex compile for''... bekommen nebst Größenangabe von Firmware (in diesem Fall 34150 Bytes ohne die Webserver-Daten) und den unmittelbaren RAM-Verbrauch (2329 Bytes in diesem Fall):<br />
<br />
[[Bild:6_avrdude.jpg]]<br />
<br />
Wenn es Probleme beim kompilieren gibt, sind wahrscheinlich die speziellen PINNINGS für das eigene Projekt bzw. die benötigte Hardware noch nicht eingetragen. Mehr Infos dazu unter [[Ethersex_Hardware_hinzufügen|Neue Hardware in Ethersex unterstützen ]].<br />
<br />
Um die Firmware jetzt zu flashen, kannst Du ''avrdude'' verwenden. Wenn Du einen usbtiny hast, kannst Du z. B.<br />
avrdude -p m644 -c usbtiny -U flash:w:ethersex.hex<br />
verwenden. Für andere Programmiergeräte entsprechend anders...<br />
<br />
'''Diese Seite ist noch nicht fertig, sie soll wachsen! Dies hier ist ein Wiki, das heißt, auch Du kannst diese Seite abändern und ergänzen, einfach anmelden und auf bearbeiten klicken :-) ...'''<br />
<br />
[[Kategorie:Ethersex]]</div>Videopixhttp://old.ethersex.de/index.php?title=Ethersex&diff=4907Ethersex2011-06-10T20:45:52Z<p>Videopix: </p>
<hr />
<div><div style="float:right"><br />
{| class="toc"<br />
|+ id="tocoverview" | '''Projektübersicht'''<br />
|-<br />
| Lizenz:<br />
| [http://en.wikipedia.org/wiki/GNU_General_Public_License GPL v3]<br />
|-<br />
| Sprache:<br />
| C<br />
|-<br />
| Plattform:<br />
| Atmel AVR ATmega<br />
|}<br />
<br />
<br />
</div><br />
<br />
== Das Ethersex-Projekt ... ==<br />
<br />
ist eine universelle Plattform um Mikrocontroller per IP-Protokoll anzusprechen und stellt eine solide Basis für eigene Entwicklungen dar.<br />
Ethersex wurde im August 2007 von stesie als alternative Firmware für fd0s [http://www.lochraster.org/etherrape/ Etherrape] ins Leben gerufen. Namensgebend war seinerzeit die Erweiterung um [[IPv6]]-Unterstützung. Seither hat sich jedoch viel getan, sodass inzwischen nicht mehr nur die Etherrape-Hardware als Plattform unterstützt wird, sondern auch diverse andere Atmega Hardware Projekte. Der Code ist inzwischen weitgehend stabil und wird auch im professionellen Umfeld eingesetzt.<br />
<br />
=== Hardware ===<br />
Das Ethersex-Projekt bietet keine Bausätze oder Fertiggeräte zum Verkauf an. Hier sei auf das von Alexander Neumann angebotene [[Etherrape]], das [[AVR Webmodul]] von Ulrich Radig oder das Pollin [[AVR-NET-IO]] hingewiesen. Wer mit Lochrasterplatinen &amp; Co. schon ein wenig Erfahrung gesammelt hat, kann auch einen individuellen Nachbau in Eigenregie erwägen. Einen Überblick bietet die Galerie [[Unterstützte Hardware|unterstützter Hardware]].<br />
<br />
=== Was zeichnet Ethersex aus? ===<br />
* TCP/IP (insbesondere auch [[IPv6]]), [[ZBUS]] und diverse andere Protokolle<br />
* Datenübertragung per Ethernet, Funk ([[RFM12]]), über [[USB]] oder USART (RS232 usw)<br />
* Verschlüsselte Kommunikation [[OpenVPN]]<br />
* Steuerung über mächtiges, eigenes '''Ethersex Command''' ([[ECMD]]) Protokoll per [[ECMD Protocols#ECMD via HTTP|http]], [[ECMD Protocols#ECMD via TCP|TCP/IP]], UDP/IP, [[I2C]] und [[USB]] sowie über [[Control6]]<br />
* Datenablage auf [[DataFlash]]-Speicher, SD-Karten, I2C-EEPROMs oder dem eingebautem EEPROM<br />
* Leichte Erweiterbarkeit mit eigenen Modulen<br />
* Module können über eine Bedienoberfläche einfach ein und ausgeschaltet werden, so dass nur das gewünschte auch in der Firmware landet<br />
... und vieles mehr, siehe [[Feature Liste]] oder [[Screenprint]]<br />
<br />
=== Erste Schritte ===<br />
* [[Voraussetzungen|Voraussetzungen]] um ethersex compilieren zu können (Anfänger nutzen am besten die [[Live CD]])<br />
* Den Quellcode wie unter [[Download]] beschrieben herunterladen<br />
* [[:Kategorie:StepByStep|Schritt für Schritt]] zum eigenen Firmware Image<br />
* Was muß ich tun wenn ich externe [[Feature_Liste#Kontakt_zur_Au.C3.9Fenwelt|Schaltungen]] ansteuern oder anschließen will, zum Beispiel Temperatursensoren oder ein [[LCD]]?<br />
* [[:Kategorie:Erfahrungsberichte|Erfahrungsberichte]] anderer Anwender<br />
* Wenn du Fragen hast, ist es sinnvoll, erst einmal die [[FAQ|Häufig gestellten Fragen]] zu lesen. Du kannst dich auch direkt an unsere Mailingliste wenden. Details siehe [[Community]].<br />
* Ein [http://www.youtube.com/watch?v=VBy8b5OCBzA Video-Tutorial] zur Einrichtung eines Webservers mit SD-Karte (YouTube)<br />
<br />
Es gibt auch einen [http://www.ethersex.de/firmware-builder/list.cgi Ethersex Firmware Builder], der soweit vorgefertigte Firmware-Images individualisiert und fertig zum Herunterladen anbietet, z.B. für das [http://www.ethersex.de/firmware-builder/input.cgi?profile=avr-net-io AVR-NET-IO von Pollin]. Diese Images eigenen sich insbesondere für erste Gehversuche und können nur in sehr geringem Umfang konfiguriert werden.<br />
<br />
=== Bugs ===<br />
* Bitte prüfe erst, ob deine Entwicklungsumgebung alle [[Voraussetzungen]] erfüllt. In nicht wenigen Fällen fehlt z.B. das Tool m4.<br />
* Du kannst Kontakt mit uns über die Mailingliste aufnehmen. Details siehe [[Community]].<br />
* Nutze unseren [http://bugs.ethersex.de Bugtracker]<br />
<br />
=== Mitmachen ===<br />
Die Ethersex Webseite basiert auf einer Wiki Software, d.h. sobald du dich angemeldet hast, kannst du hier eigene Beiträge verfassen oder bestehende verbessern. Wenn du am Projekt mitarbeiten willst, findest du vielleicht folgende Artikel ganz interessant:<br />
* [[Coding style]]<br />
* Wie erstellt man [[Patches]] richtig<br />
* Hinweise für Chips mit mehr als [[128K|64K]] Flash<br />
* Hinweise für [[Code Optimierungen]] (Geschwindigkeit und Platzoptimierungen)<br />
* [[Eigenes Modul hinzufügen]] (Neuer i2c Chip? Neue Funksteckdosen? Hier ist ein Einstieg für das Erstellen eines eigenen Moduls.)<br />
* [[Ethersex Core]] (Erklärt die grundlegenden Hardwareabstraktionen von Ethersex.)<br />
* [[Hilfe:Hilfe|Dokumentation zur Wiki Software]]<br />
* [[Ethersex_History|Ethersex History]] (Was die letzten Monate an ethersex passiert ist)<br />
<br />
[[Category:Ethersex]]<br />
[[Category:Zerties]]</div>Videopixhttp://old.ethersex.de/index.php?title=Ethersex&diff=4906Ethersex2011-06-10T20:37:28Z<p>Videopix: </p>
<hr />
<div><div style="float:right"><br />
{| class="toc"<br />
|+ id="tocoverview" | '''Projektübersicht'''<br />
|-<br />
| Lizenz:<br />
| [http://en.wikipedia.org/wiki/GNU_General_Public_License GPL v3]<br />
|-<br />
| Sprache:<br />
| C<br />
|-<br />
| Plattform:<br />
| Atmel AVR ATmega<br />
|}<br />
<br />
<br />
</div><br />
<br />
== Das Ethersex-Projekt ... ==<br />
<br />
ist eine universelle Plattform um Mikrocontroller per IP-Protokoll anzusprechen und stellt eine solide Basis für eigene Entwicklungen dar.<br />
Ethersex wurde im August 2007 von stesie als alternative Firmware für fd0s [http://www.lochraster.org/etherrape/ Etherrape] ins Leben gerufen. Namensgebend war seinerzeit die Erweiterung um [[IPv6]]-Unterstützung. Seither hat sich jedoch viel getan, sodass inzwischen nicht mehr nur die Etherrape-Hardware als Plattform unterstützt wird, sondern auch diverse andere Atmega Hardware Projekte. Der Code ist inzwischen weitgehend stabil und wird auch im professionellen Umfeld eingesetzt.<br />
<br />
=== Hardware ===<br />
Das Ethersex-Projekt bietet keine Bausätze oder Fertiggeräte zum Verkauf an. Hier sei auf das von Alexander Neumann angebotene [[Etherrape]], das [[AVR Webmodul]] von Ulrich Radig oder das Pollin [[AVR-NET-IO]] hingewiesen. Wer mit Lochrasterplatinen &amp; Co. schon ein wenig Erfahrung gesammelt hat, kann auch einen individuellen Nachbau in Eigenregie erwägen. Einen Überblick bietet die Galerie [[Unterstützte Hardware|unterstützter Hardware]].<br />
<br />
=== Was zeichnet Ethersex aus? ===<br />
* TCP/IP (insbesondere auch [[IPv6]]), [[ZBUS]] und diverse andere Protokolle<br />
* Datenübertragung per Ethernet, Funk ([[RFM12]]), über [[USB]] oder USART (RS232 usw)<br />
* Verschlüsselte Kommunikation [[OpenVPN]]<br />
* Steuerung über mächtiges, eigenes '''Ethersex Command''' ([[ECMD]]) Protokoll per [[ECMD Protocols#ECMD via HTTP|http]], [[ECMD Protocols#ECMD via TCP|TCP/IP]], UDP/IP, [[I2C]] und [[USB]] sowie über [[Control6]]<br />
* Datenablage auf [[DataFlash]]-Speicher, SD-Karten, I2C-EEPROMs oder dem eingebautem EEPROM<br />
* Leichte Erweiterbarkeit mit eigenen Modulen<br />
* Module können über eine Bedienoberfläche einfach ein und ausgeschaltet werden, so dass nur das gewünschte auch in der Firmware landet<br />
... und vieles mehr, siehe [[Feature Liste]] oder [[Screenprint]]<br />
<br />
=== Erste Schritte ===<br />
* [[Voraussetzungen|Voraussetzungen]] um ethersex compilieren zu können<br />
* Den Quellcode wie unter [[Download]] beschrieben herunterladen<br />
* [[:Kategorie:StepByStep|Schritt für Schritt]] zum eigenen Firmware Image<br />
* Was muß ich tun wenn ich externe [[Feature_Liste#Kontakt_zur_Au.C3.9Fenwelt|Schaltungen]] ansteuern oder anschließen will, zum Beispiel Temperatursensoren oder ein [[LCD]]?<br />
* [[:Kategorie:Erfahrungsberichte|Erfahrungsberichte]] anderer Anwender<br />
* Wenn du Fragen hast, ist es sinnvoll, erst einmal die [[FAQ|Häufig gestellten Fragen]] zu lesen. Du kannst dich auch direkt an unsere Mailingliste wenden. Details siehe [[Community]].<br />
* Ein [http://www.youtube.com/watch?v=VBy8b5OCBzA Video-Tutorial] zur Einrichtung eines Webservers mit SD-Karte (YouTube)<br />
<br />
Es gibt auch einen [http://www.ethersex.de/firmware-builder/list.cgi Ethersex Firmware Builder], der soweit vorgefertigte Firmware-Images individualisiert und fertig zum Herunterladen anbietet, z.B. für das [http://www.ethersex.de/firmware-builder/input.cgi?profile=avr-net-io AVR-NET-IO von Pollin]. Diese Images eigenen sich insbesondere für erste Gehversuche und können nur in sehr geringem Umfang konfiguriert werden.<br />
<br />
=== Bugs ===<br />
* Bitte prüfe erst, ob deine Entwicklungsumgebung alle [[Voraussetzungen]] erfüllt. In nicht wenigen Fällen fehlt z.B. das Tool m4.<br />
* Du kannst Kontakt mit uns über die Mailingliste aufnehmen. Details siehe [[Community]].<br />
* Nutze unseren [http://bugs.ethersex.de Bugtracker]<br />
<br />
=== Mitmachen ===<br />
Die Ethersex Webseite basiert auf einer Wiki Software, d.h. sobald du dich angemeldet hast, kannst du hier eigene Beiträge verfassen oder bestehende verbessern. Wenn du am Projekt mitarbeiten willst, findest du vielleicht folgende Artikel ganz interessant:<br />
* [[Coding style]]<br />
* Wie erstellt man [[Patches]] richtig<br />
* Hinweise für Chips mit mehr als [[128K|64K]] Flash<br />
* Hinweise für [[Code Optimierungen]] (Geschwindigkeit und Platzoptimierungen)<br />
* [[Eigenes Modul hinzufügen]] (Neuer i2c Chip? Neue Funksteckdosen? Hier ist ein Einstieg für das Erstellen eines eigenen Moduls.)<br />
* [[Ethersex Core]] (Erklärt die grundlegenden Hardwareabstraktionen von Ethersex.)<br />
* [[Hilfe:Hilfe|Dokumentation zur Wiki Software]]<br />
* [[Ethersex_History|Ethersex History]] (Was die letzten Monate an ethersex passiert ist)<br />
<br />
[[Category:Ethersex]]<br />
[[Category:Zerties]]</div>Videopixhttp://old.ethersex.de/index.php?title=Live_CD&diff=3514Live CD2010-02-01T12:59:01Z<p>Videopix: </p>
<hr />
<div>Du verwendest noch Fensterle und möchtest mal Ethersex testen? Oder Du hast ein Produktivsystem, zwar unter GNU/Linux, möchtest aber nicht nur um mal zu probieren allen möglichen, anderen, neuen Kram installieren?<br />
<br />
Kein Ding, dafür gibt's Live-CDs :-)<br />
<br />
Lade Dir am besten fd0's AVR-Live-CD von<br />
http://www.lochraster.org/rumpus/data/ubuntu-8.04.01-avr-livecd-20080811.iso<br />
herunter und starte diese. Wahlweise das ISO auf CD brennen und nativ starten, oder emuliert/virtualisiert, zum Beispiel mit ''Virtual Box'' oder ''qemu''.<br />
<br />
Wenn Du das System startest, sollte das in etwa so aussehen:<br />
<br />
[[Bild:1_terminal-oeffnen.jpg]]<br />
<br />
Du wirst nicht umhin kommen, ab und an die Konsole zu verwenden -- die taugt auch wesentlich mehr wie die Eingabeaufforderung unter Windows %) --, dazu klicken wir auf Applications &gt; Accessories &gt; Terminal, vgl. oben.<br />
<br />
Die Live-CD bringt schon so ziemlich alles mit, was wir brauchen. Nur eine Bibliothek fehlt, die wir für ''menuconfig'' später brauchen werden, deswegen installieren wir die noch kurz nach:<br />
<br />
[[Bild:2_installation_ncurses.jpg]]<br />
<br />
Jetzt haben wir alles, was wir brauchen. Nächster Schritt: Ethersex aus dem Git Repository auschecken:<br />
Achtung: Der Pfad hat sich geändert! Im Unterschied zum Screenshot heißt der Checkout-Befehl<br />
git clone http://github.com/ethersex/ethersex.git<br />
<br />
[[Bild:3_git_clone.jpg]]<br />
<br />
Ethersex ist nicht ganz klein, das dauert eine ganze Weile ..., danach betreten wir das Verzeichnis ''ethersex'' (wie unter Windows mit ''cd'') und rufen <br />
make menuconfig<br />
die Konfigurationsoberfläche von Ethersex, auf ...<br />
<br />
[[Bild:4_make_menuconfig.jpg]]<br />
<br />
[[Bild:5_make_menuconfig_2.jpg]]<br />
<br />
Wenn Du Dir Dein Ethersex soweit konfiguriert hast, unten auf Exit, Speichern, ja ...<br />
zurück an der Konsole musst Du <br />
make<br />
eingeben, um den Kompilierungsvorgang anzustoßen. Das kann einige Sekunden dauern und erzeugt ziemlich viele Bildschirmausgaben :-)<br />
<br />
Wenn alles glatt geht, solltest Du eine Meldung ''ethersex compile for''... bekommen nebst Größenangabe von Firmware (in diesem Fall 34150 Bytes ohne die Webserver-Daten) und den unmittelbaren RAM-Verbrauch (2329 Bytes in diesem Fall):<br />
<br />
[[Bild:6_avrdude.jpg]]<br />
<br />
Um die Firmware jetzt zu flashen, kannst Du ''avrdude'' verwenden. Wenn Du einen usbtiny hast, kannst Du z. B.<br />
avrdude -p m644 -c usbtiny -U flash:w:ethersex.hex<br />
verwenden. Für andere Programmiergeräte entsprechend anders...<br />
<br />
'''Diese Seite ist noch nicht fertig, sie soll wachsen! Dies hier ist ein Wiki, das heißt, auch Du kannst diese Seite abändern und ergänzen, einfach anmelden und auf bearbeiten klicken :-) ...'''<br />
<br />
[[Kategorie:Ethersex]]</div>Videopix