<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ritchie</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ritchie"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Ritchie"/>
	<updated>2026-04-12T17:40:48Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_Emulation_per_ATTiny&amp;diff=12487</id>
		<title>1-Wire Emulation per ATTiny</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_Emulation_per_ATTiny&amp;diff=12487"/>
		<updated>2015-10-11T15:54:58Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Tipfehler im Namen beseitigt (Thomas -&amp;gt; Tobias)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Der Atmel Atiny oder andere Mikrokontroller des Atmel Familie lassen sich mittels Software zu einem 1-Wire Baustein konfigurieren. Basis dieses Gedanken war die Tatsache das der Zählerbaustein DS2423 von Dallas abgekündigt wurde. Jedoch wurden mit diesem Baustein viele Schaltung realisiert und aus diesem Grund wurde eine Software-Lösung gefunden. Die Software Lösung bietet aber noch weitere Vorteile, welche die Standard-Bausteine nicht bieten. So können z.B. Kurze Impulse festgehalten werden, Steuerfunktionen und Notfunktionen dezentral gelöst werden ohne den Busmaster mit diesen Funktionen zu belasten.&lt;br /&gt;
=== Foren Links ===&lt;br /&gt;
* Wer sich für den Nachbau des DS2423 interessiert, sollte sich diesen Thread durchlesen/verfolgen. [http://forum.fhem.de/index.php?t=msg&amp;amp;th=10962&amp;amp;start=0&amp;amp;rid=118 Alternative zum DS2423 Counter]&lt;br /&gt;
* der hier besprochene Quellcode basiert auf dieser Software [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 AVR Attiny44A als 1Wire Slave konfiguierbar DS2423/DS18BS20/DS2413/DS2408]&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== ATtiny44A ===&lt;br /&gt;
[[Bild:atmel1wireslaveschaltung.png|mini|100px|rechts|1-Wire Slave Schaltung]]&lt;br /&gt;
Die hier gezeigte Schaltung zeigt einen ATTINY44A als 1-Wire Slave, welcher folgende Funktionen hat:&lt;br /&gt;
* 4 Status LED&#039;s, welche den Zustand der Eingänge anzeigt.&lt;br /&gt;
* 1 Taster. Zeigt bei Betätigung den Status der Eingänge&lt;br /&gt;
* 4 Eingänge über je einen Operationsverstärker, welcher als Vergleicher arbeitet&lt;br /&gt;
* 1 Programmierschnittstelle 6 polig zum laden der Software&lt;br /&gt;
=== ATtiny25 ===&lt;br /&gt;
Die Hardware vom DS2423, welcher hier im Forum sehr bekannt ist, &lt;br /&gt;
kann von seiner Webseite [http://m1n1.de/html/1w_counter_v1_7.html] eingesehen werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Grundfunktion der Software wurde von Maximum in der [http://www.maximintegrated.com/en/app-notes/index.mvp/id/126 Applikation Note 126] beschrieben. Hier hat Tobias Mueller eine gute Implementierung der Umsetzung auf seiner [http://www.tm3d.de/index.php/1-wire-device-mit-avr Webseite] gemacht. Er zeigt hier das Signalverhalten und die einzelnen Schritte der Software in verschiedenen Diagrammen. Für ein generelles Verständnis ist diese Webseite ein guter Einstieg.&lt;br /&gt;
Der hier vorgestellte Quellcode basiert auf seiner Vorlage. Es wurden jedoch die bestehenden 1-Wire Typen DS2423 &amp;amp; DS18BS20 in eine Datei von Ihm übernommen. Zusätzlich sind der 1-Wire DS2408/DS2413 eingefügt worden. Die Code wurde aufgeräumt und nochmals zusätzlich modularisiert und dokumentiert.&lt;br /&gt;
Der Quellcode wurde in diesem [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 Forumsthread] abgelegt.&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Die Software ist in C geschrieben und verwendet hierbei die speziellen Funktionen des Controllers. Eine genaues Einlesen in das Handbuch des Mikrocontroller ist hierbei unerlässlich, um die einzelnen Funktionen zu verstehen. Dies ist auch notwendig, wenn man die bestehende Software auf einen anderen Controller umschreiben will. Wie im im Schaltplan erkennen kann, werden die einzelnen Pin&#039;s mehrfach belegt.&lt;br /&gt;
=== Datenblätter ===&lt;br /&gt;
Hier findet man das Datenblatt zum Mikrocontroller. In diesem Dokument sind alle Funktionen und Register des jeweiligen Mikrocontroller in englisch beschrieben. Für das Verständnis der Funktionen des Mikrocontroller ist eine Kenntnis diese Dokument notwendig.&lt;br /&gt;
[http://www.atmel.com/Images/doc8006.pdf Datenblatt von Attiny 24/44/88]&lt;br /&gt;
=== Programmierumgebungen ===&lt;br /&gt;
* AVR Studio&lt;br /&gt;
* AVRDude&lt;br /&gt;
=== Der Quellcode ===&lt;br /&gt;
Die Funktionen der Software werden in drei Teile getrennt. &lt;br /&gt;
* Zeitkritische Funktionen, welche über einen PIN - Interrupt realisiert sind&lt;br /&gt;
* Zeitabhängige Funktionen, welcher über einen Timer - Interrupt realisiert sind&lt;br /&gt;
* Zeitunkritische Funktionen, welche über das Hauptprogramm realisiert sind&lt;br /&gt;
 &lt;br /&gt;
Im folgenden Abschnitt werden die einzelnen Funktion des Quellcodes erklärt. &lt;br /&gt;
==== Allgemeine Deklaration ====&lt;br /&gt;
 // selection of the used &lt;br /&gt;
 //#define		DS2423		1&lt;br /&gt;
 //#define		DS18BS20	1&lt;br /&gt;
 #define		DS2408		1&lt;br /&gt;
 //#define		DS2413		1&lt;br /&gt;
 ...&lt;br /&gt;
 #define SET_BIT(PORT, BITNUM)	((PORT) |= (1&amp;lt;&amp;lt;(BITNUM)))&lt;br /&gt;
 #define CLEAR_BIT(PORT, BITNUM) ((PORT) &amp;amp;= ~(1&amp;lt;&amp;lt;(BITNUM)))&lt;br /&gt;
In dieser Sektion sind generelle Deklarationen definiert.&lt;br /&gt;
So wird hier durch die Definitionen DS2423...DS2413 der jeweilige 1-Wire Slave Typ bei der nächsten Kompilierung erstellt.&lt;br /&gt;
Es darf nur ein Typ ausgewählt sein, da es sonst zu nicht funktionsfähigen Code kommt.&lt;br /&gt;
==== Controller Spezifische Deklarationen ====&lt;br /&gt;
 #ifdef __AVR_ATtiny44A__&lt;br /&gt;
 // OW_PORT Pin 7  - PB2&lt;br /&gt;
 //&lt;br /&gt;
 //OW Pin&lt;br /&gt;
 //&lt;br /&gt;
 #define OW_PORT PORTB								//1 Wire Port&lt;br /&gt;
 #define OW_PIN PINB									//1 Wire Pin as number&lt;br /&gt;
 ...&lt;br /&gt;
 #endif // __AVR_ATtiny44a__ &lt;br /&gt;
In dieser Sektion können die jeweiligen Realisierungen der verschiedenen Mikrocontroller Typen abgelegt werden.&lt;br /&gt;
Da die Registerbelegung von Controller zu Controller unterschiedlich sind, können diese dem Compiler mittels Makroanweisungen hier&lt;br /&gt;
entsprechend zugewiesen werden.&lt;br /&gt;
==== 1-Wire Baustein spezifische Deklarationen ====&lt;br /&gt;
 #ifdef DS2423&lt;br /&gt;
 #define PC_INT_ISR ISR(PCINT0_vect) { /*ATT44 with 0 by PCINT*/ \&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA4))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA4))==(1&amp;lt;&amp;lt;PINA4))) {	Counter[0]++;	}		\&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA3))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA3))==(1&amp;lt;&amp;lt;PINA3))) {	Counter[1]++;	}		\&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA0))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA0))==(1&amp;lt;&amp;lt;PINA0)))	\&lt;br /&gt;
 { \&lt;br /&gt;
 eeprom_write_byte((uint8_t *)0,0x55);\&lt;br /&gt;
 eeprom_write_dword((uint32_t *)1,Counter[0]);\&lt;br /&gt;
 eeprom_write_dword((uint32_t *)5,Counter[1]);  \&lt;br /&gt;
 }	\						&lt;br /&gt;
 istat=PINA;}					&lt;br /&gt;
 #define INIT_COUNTER_PINS 	/* Counter Interrupt */ \&lt;br /&gt;
 GIMSK|=  (1&amp;lt;&amp;lt;PCIE0);\&lt;br /&gt;
 PCMSK0=  (1&amp;lt;&amp;lt;PCINT3)|(1&amp;lt;&amp;lt;PCINT4)|(1&amp;lt;&amp;lt;PCINT0);	\&lt;br /&gt;
 DDRA &amp;amp;=~ (1&amp;lt;&amp;lt;PINA1) | (1&amp;lt;&amp;lt;PINA2); \&lt;br /&gt;
 istat=PINB;	 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Über eine solche Deklaration wird dem bei dem jeweiligen 1-Wire Type die entsprechende Konstante entsprechend konfiguriert.&lt;br /&gt;
Für weitere 1-Wire Typen sind entsprechende Konstanten vorzusehen. Einige der Deklarationen sind nur für den jeweiligen Type&lt;br /&gt;
notwendig, andere sind für jeden Typ notwendig.&lt;br /&gt;
==== Globale Variablen Deklarationen ====&lt;br /&gt;
 // --------------------- Device depending variables ------------------------------------&lt;br /&gt;
 #ifdef DS2423&lt;br /&gt;
 typedef union &lt;br /&gt;
 {&lt;br /&gt;
 volatile uint8_t bytes[13];//={1,1,2,0,0,0,0,0,0,0,0,5,5};&lt;br /&gt;
 struct &lt;br /&gt;
 {&lt;br /&gt;
 uint16_t addr;&lt;br /&gt;
 uint8_t read;&lt;br /&gt;
 uint32_t counter;&lt;br /&gt;
 uint32_t zero;&lt;br /&gt;
 uint16_t crc;&lt;br /&gt;
 };&lt;br /&gt;
 } counterpack_t;&lt;br /&gt;
 counterpack_t counterpack;&lt;br /&gt;
 volatile uint32_t Counter[2];										// Counter Buffer&lt;br /&gt;
 #endif&lt;br /&gt;
In diesem Bereich werden globale Variablen definiert, welche nur für den jeweiligen 1-Wire Typen notwendig sind.&lt;br /&gt;
==== Byte Definitionen des 1-Wire Bus ====&lt;br /&gt;
 #define OWM_SLEEP									0			//Waiting for next reset pulse&lt;br /&gt;
 #define OWM_RESET									1			//Reset pulse received &lt;br /&gt;
 #define OWM_PRESENCE								2			//sending presence pulse&lt;br /&gt;
 ...&lt;br /&gt;
 #define OW_RESET_ACTIVITY_LATCHES			0xC3&lt;br /&gt;
In diesem Bereich sind die einzelnen Kommandos und Status Variablen des 1-Wire Bus deklariert. Diese Definitionen finden sich in den einzelnen&lt;br /&gt;
Datenblätter der 1-Wire Bausteine wieder.&lt;br /&gt;
==== PIN Interrupt Routine ====&lt;br /&gt;
 PIN_INT &lt;br /&gt;
 {&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
In dieser Routine wird das Datenhandling bei Statuswechsel des 1-Wire PIN&#039;s durchgeführt.&lt;br /&gt;
&lt;br /&gt;
==== PIN Interrupt Routine / EEPROM sichern ====&lt;br /&gt;
Ebenso wird die Routine auch aufgerufen, wenn die Spannung an dem Spannungsteiler R1/R2 auf Low Level geht. Hierdurch wird der folgende Programmteil durchlaufen und die entsprechenden Werte des jeweiligen Chip ins EEPROM geschrieben.&lt;br /&gt;
&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA0))==0))&lt;br /&gt;
 { /* Power fail signal */&lt;br /&gt;
 uint8_t		i;&lt;br /&gt;
 cli();									/* disable any interrupt */&lt;br /&gt;
 eeprom_update_byte((uint8_t *)0,0x0);	/*clear the magic number */&lt;br /&gt;
 for (i=0;i&amp;lt;sizeof(Register_state);i++)&lt;br /&gt;
   {&lt;br /&gt;
   eeprom_update_byte((uint8_t *)(i+1),Register_state[i]);&lt;br /&gt;
   }&lt;br /&gt;
 eeprom_update_byte((uint8_t *)0,0x55); /*value is now valid */&lt;br /&gt;
 software_reset();		 /* Wait until the the system get reset (or power off)  */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Timer Interrupt Routine ====&lt;br /&gt;
 TIMER_INT &lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
Alle zeitbasierenden Funktionen werden über diesen Interrupt ausgeführt. Wartezeiten mit Signalprüfungen und dergleichen.&lt;br /&gt;
==== Main Routine / Start up ====&lt;br /&gt;
 Main()&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
In dieser Funktion wird der Mikrocontroller und dessen Hardware aufgesetzt. Danach erfolgt die eigentliche&lt;br /&gt;
1-Wire Steuerung nur über Interrupts. In der Mainroutine können zusätzlich Funktionen programmiert werden.&lt;br /&gt;
Es kann jedoch kein Zugriff auf Interrupt-Funktionen verwendet werden (z.B. SPI, I2C via Interrupt) da hierdurch&lt;br /&gt;
das Timing des 1-Wire Bus nicht mehr garantiert werden kann (Vorsetzung bei diesem Mikrocontroller Type).&lt;br /&gt;
=== Slave-ID Berechnung ===&lt;br /&gt;
Sollte man eigene Slave erstellen wollen, so ist es notwendig die Slave ID entsprechend berechnen zu lassen.&lt;br /&gt;
Der Rechner von [http://www.tm3d.de/index.php/tools#berechnungid Tobias Mueller] ist hier ein nützliches Werkzeug.&lt;br /&gt;
=== Fuse Bits ===&lt;br /&gt;
[[Bild:FuseBits.png|mini|100px|rechts|Fuse Bit des Controllers]]&lt;br /&gt;
Der Controller verwendet nur BODLEVEL von 4.3 Volt. Bei Erreichen dieser Versorgungsspannung wird der Controller automatisch in&lt;br /&gt;
den Reset-Modus gesetzt. Der Watchdog wird per Software eingeschaltet. Die CPU arbeitet mit 8Mhz ohne externen Quarz.&lt;br /&gt;
&lt;br /&gt;
= Quellen =&lt;br /&gt;
== Webseite ==&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=10962&amp;amp;start=0&amp;amp;rid=118 Alternative zum DS2423 Counter]&lt;br /&gt;
* [http://www.tm3d.de/index.php/1-wire-device-mit-avr 1-Wire Device mit AR-Mikrocontroller]&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 AVR Attiny44A als 1Wire Slave konfigurierbar DS2423/DS18BS20/DS2413/DS2408]&lt;br /&gt;
* [https://www.mikrocontroller.net/articles/Atmel_Studio Hinweis zum AVR Studio]&lt;br /&gt;
* [http://www.atmel.com Hersteller der Mikrocontroller Atmel]&lt;br /&gt;
&lt;br /&gt;
== Datenblätter ==&lt;br /&gt;
* [https://datasheets.maximintegrated.com/en/ds/DS2408.pdf Datenblatt des DS2408]&lt;br /&gt;
* [http://datasheets.maximintegrated.com/en/ds/DS2423.pdf Datenblatt des DS2423]&lt;br /&gt;
* [http://datasheets.maximintegrated.com/en/ds/DS2413.pdf Datenblatt des DS2413]&lt;br /&gt;
* [http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf Datenblatt des DS18B20]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_Emulation_per_ATTiny&amp;diff=12475</id>
		<title>1-Wire Emulation per ATTiny</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_Emulation_per_ATTiny&amp;diff=12475"/>
		<updated>2015-10-10T16:48:18Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Weitere Links eingefügt, Fusebit Bild eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Der Atmel Atiny oder andere Mikrokontroller des Atmel Familie lassen sich mittels Software zu einem 1-Wire Baustein konfigurieren. Basis dieses Gedanken war die Tatsache das der Zählerbaustein DS2423 von Dallas abgekündigt wurde. Jedoch wurden mit diesem Baustein viele Schaltung realisiert und aus diesem Grund wurde eine Software-Lösung gefunden. Die Software Lösung bietet aber noch weitere Vorteile, welche die Standard-Bausteine nicht bieten. So können z.B. Kurze Impulse festgehalten werden, Steuerfunktionen und Notfunktionen dezentral gelöst werden ohne den Busmaster mit diesen Funktionen zu belasten.&lt;br /&gt;
=== Foren Links ===&lt;br /&gt;
* Wer sich für den Nachbau des DS2423 interessiert, sollte sich diesen Thread durchlesen/verfolgen. [http://forum.fhem.de/index.php?t=msg&amp;amp;th=10962&amp;amp;start=0&amp;amp;rid=118 Alternative zum DS2423 Counter]&lt;br /&gt;
* der hier besprochene Quellcode basiert auf dieser Software [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 AVR Attiny44A als 1Wire Slave konfiguierbar DS2423/DS18BS20/DS2413/DS2408]&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== ATtiny44A ===&lt;br /&gt;
[[Bild:atmel1wireslaveschaltung.png|mini|100px|rechts|1-Wire Slave Schaltung]]&lt;br /&gt;
Die hier gezeigte Schaltung zeigt einen ATTINY44A als 1-Wire Slave, welcher folgende Funktionen hat:&lt;br /&gt;
* 4 Status LED&#039;s, welche den Zustand der Eingänge anzeigt.&lt;br /&gt;
* 1 Taster. Zeigt bei Betätigung den Status der Eingänge&lt;br /&gt;
* 4 Eingänge über je einen Operationsverstärker, welcher als Vergleicher arbeitet&lt;br /&gt;
* 1 Programmierschnittstelle 6 polig zum laden der Software&lt;br /&gt;
=== ATtiny25 ===&lt;br /&gt;
Die Hardware vom DS2423, welcher hier im Forum sehr bekannt ist, &lt;br /&gt;
kann von seiner Webseite [http://m1n1.de/html/1w_counter_v1_7.html] eingesehen werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Grundfunktion der Software wurde von Maximum in der [http://www.maximintegrated.com/en/app-notes/index.mvp/id/126 Applikation Note 126] beschrieben. Hier hat Tobias Mueller eine gute Implementierung der Umsetzung auf seiner [http://www.tm3d.de/index.php/1-wire-device-mit-avr Webseite] gemacht. Er zeigt hier das Signalverhalten und die einzelnen Schritte der Software in verschiedenen Diagrammen. Für ein generelles Verständnis ist diese Webseite ein guter Einstieg.&lt;br /&gt;
Der hier vorgestellte Quellcode basiert auf seiner Vorlage. Es wurden jedoch die bestehenden 1-Wire Typen DS2423 &amp;amp; DS18BS20 in eine Datei von Ihm übernommen. Zusätzlich sind der 1-Wire DS2408/DS2413 eingefügt worden. Die Code wurde aufgeräumt und nochmals zusätzlich modularisiert und dokumentiert.&lt;br /&gt;
Der Quellcode wurde in diesem [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 Forumsthread] abgelegt.&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Die Software ist in C geschrieben und verwendet hierbei die speziellen Funktionen des Controllers. Eine genaues Einlesen in das Handbuch des Mikrocontroller ist hierbei unerlässlich, um die einzelnen Funktionen zu verstehen. Dies ist auch notwendig, wenn man die bestehende Software auf einen anderen Controller umschreiben will. Wie im im Schaltplan erkennen kann, werden die einzelnen Pin&#039;s mehrfach belegt.&lt;br /&gt;
=== Datenblätter ===&lt;br /&gt;
Hier findet man das Datenblatt zum Mikrocontroller. In diesem Dokument sind alle Funktionen und Register des jeweiligen Mikrocontroller in englisch beschrieben. Für das Verständnis der Funktionen des Mikrocontroller ist eine Kenntnis diese Dokument notwendig.&lt;br /&gt;
[http://www.atmel.com/Images/doc8006.pdf Datenblatt von Attiny 24/44/88]&lt;br /&gt;
=== Programmierumgebungen ===&lt;br /&gt;
* AVR Studio&lt;br /&gt;
* AVRDude&lt;br /&gt;
=== Der Quellcode ===&lt;br /&gt;
Die Funktionen der Software werden in drei Teile getrennt. &lt;br /&gt;
* Zeitkritische Funktionen, welche über einen PIN - Interrupt realisiert sind&lt;br /&gt;
* Zeitabhängige Funktionen, welcher über einen Timer - Interrupt realisiert sind&lt;br /&gt;
* Zeitunkritische Funktionen, welche über das Hauptprogramm realisiert sind&lt;br /&gt;
 &lt;br /&gt;
Im folgenden Abschnitt werden die einzelnen Funktion des Quellcodes erklärt. &lt;br /&gt;
==== Allgemeine Deklaration ====&lt;br /&gt;
 // selection of the used &lt;br /&gt;
 //#define		DS2423		1&lt;br /&gt;
 //#define		DS18BS20	1&lt;br /&gt;
 #define		DS2408		1&lt;br /&gt;
 //#define		DS2413		1&lt;br /&gt;
 ...&lt;br /&gt;
 #define SET_BIT(PORT, BITNUM)	((PORT) |= (1&amp;lt;&amp;lt;(BITNUM)))&lt;br /&gt;
 #define CLEAR_BIT(PORT, BITNUM) ((PORT) &amp;amp;= ~(1&amp;lt;&amp;lt;(BITNUM)))&lt;br /&gt;
In dieser Sektion sind generelle Deklarationen definiert.&lt;br /&gt;
So wird hier durch die Definitionen DS2423...DS2413 der jeweilige 1-Wire Slave Typ bei der nächsten Kompilierung erstellt.&lt;br /&gt;
Es darf nur ein Typ ausgewählt sein, da es sonst zu nicht funktionsfähigen Code kommt.&lt;br /&gt;
==== Controller Spezifische Deklarationen ====&lt;br /&gt;
 #ifdef __AVR_ATtiny44A__&lt;br /&gt;
 // OW_PORT Pin 7  - PB2&lt;br /&gt;
 //&lt;br /&gt;
 //OW Pin&lt;br /&gt;
 //&lt;br /&gt;
 #define OW_PORT PORTB								//1 Wire Port&lt;br /&gt;
 #define OW_PIN PINB									//1 Wire Pin as number&lt;br /&gt;
 ...&lt;br /&gt;
 #endif // __AVR_ATtiny44a__ &lt;br /&gt;
In dieser Sektion können die jeweiligen Realisierungen der verschiedenen Mikrocontroller Typen abgelegt werden.&lt;br /&gt;
Da die Registerbelegung von Controller zu Controller unterschiedlich sind, können diese dem Compiler mittels Makroanweisungen hier&lt;br /&gt;
entsprechend zugewiesen werden.&lt;br /&gt;
==== 1-Wire Baustein spezifische Deklarationen ====&lt;br /&gt;
 #ifdef DS2423&lt;br /&gt;
 #define PC_INT_ISR ISR(PCINT0_vect) { /*ATT44 with 0 by PCINT*/ \&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA4))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA4))==(1&amp;lt;&amp;lt;PINA4))) {	Counter[0]++;	}		\&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA3))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA3))==(1&amp;lt;&amp;lt;PINA3))) {	Counter[1]++;	}		\&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA0))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA0))==(1&amp;lt;&amp;lt;PINA0)))	\&lt;br /&gt;
 { \&lt;br /&gt;
 eeprom_write_byte((uint8_t *)0,0x55);\&lt;br /&gt;
 eeprom_write_dword((uint32_t *)1,Counter[0]);\&lt;br /&gt;
 eeprom_write_dword((uint32_t *)5,Counter[1]);  \&lt;br /&gt;
 }	\						&lt;br /&gt;
 istat=PINA;}					&lt;br /&gt;
 #define INIT_COUNTER_PINS 	/* Counter Interrupt */ \&lt;br /&gt;
 GIMSK|=  (1&amp;lt;&amp;lt;PCIE0);\&lt;br /&gt;
 PCMSK0=  (1&amp;lt;&amp;lt;PCINT3)|(1&amp;lt;&amp;lt;PCINT4)|(1&amp;lt;&amp;lt;PCINT0);	\&lt;br /&gt;
 DDRA &amp;amp;=~ (1&amp;lt;&amp;lt;PINA1) | (1&amp;lt;&amp;lt;PINA2); \&lt;br /&gt;
 istat=PINB;	 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Über eine solche Deklaration wird dem bei dem jeweiligen 1-Wire Type die entsprechende Konstante entsprechend konfiguriert.&lt;br /&gt;
Für weitere 1-Wire Typen sind entsprechende Konstanten vorzusehen. Einige der Deklarationen sind nur für den jeweiligen Type&lt;br /&gt;
notwendig, andere sind für jeden Typ notwendig.&lt;br /&gt;
==== Globale Variablen Deklarationen ====&lt;br /&gt;
 // --------------------- Device depending variables ------------------------------------&lt;br /&gt;
 #ifdef DS2423&lt;br /&gt;
 typedef union &lt;br /&gt;
 {&lt;br /&gt;
 volatile uint8_t bytes[13];//={1,1,2,0,0,0,0,0,0,0,0,5,5};&lt;br /&gt;
 struct &lt;br /&gt;
 {&lt;br /&gt;
 uint16_t addr;&lt;br /&gt;
 uint8_t read;&lt;br /&gt;
 uint32_t counter;&lt;br /&gt;
 uint32_t zero;&lt;br /&gt;
 uint16_t crc;&lt;br /&gt;
 };&lt;br /&gt;
 } counterpack_t;&lt;br /&gt;
 counterpack_t counterpack;&lt;br /&gt;
 volatile uint32_t Counter[2];										// Counter Buffer&lt;br /&gt;
 #endif&lt;br /&gt;
In diesem Bereich werden globale Variablen definiert, welche nur für den jeweiligen 1-Wire Typen notwendig sind.&lt;br /&gt;
==== Byte Definitionen des 1-Wire Bus ====&lt;br /&gt;
 #define OWM_SLEEP									0			//Waiting for next reset pulse&lt;br /&gt;
 #define OWM_RESET									1			//Reset pulse received &lt;br /&gt;
 #define OWM_PRESENCE								2			//sending presence pulse&lt;br /&gt;
 ...&lt;br /&gt;
 #define OW_RESET_ACTIVITY_LATCHES			0xC3&lt;br /&gt;
In diesem Bereich sind die einzelnen Kommandos und Status Variablen des 1-Wire Bus deklariert. Diese Definitionen finden sich in den einzelnen&lt;br /&gt;
Datenblätter der 1-Wire Bausteine wieder.&lt;br /&gt;
==== PIN Interrupt Routine ====&lt;br /&gt;
 PIN_INT &lt;br /&gt;
 {&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
In dieser Routine wird das Datenhandling bei Statuswechsel des 1-Wire PIN&#039;s durchgeführt.&lt;br /&gt;
&lt;br /&gt;
==== PIN Interrupt Routine / EEPROM sichern ====&lt;br /&gt;
Ebenso wird die Routine auch aufgerufen, wenn die Spannung an dem Spannungsteiler R1/R2 auf Low Level geht. Hierdurch wird der folgende Programmteil durchlaufen und die entsprechenden Werte des jeweiligen Chip ins EEPROM geschrieben.&lt;br /&gt;
&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA0))==0))&lt;br /&gt;
 { /* Power fail signal */&lt;br /&gt;
 uint8_t		i;&lt;br /&gt;
 cli();									/* disable any interrupt */&lt;br /&gt;
 eeprom_update_byte((uint8_t *)0,0x0);	/*clear the magic number */&lt;br /&gt;
 for (i=0;i&amp;lt;sizeof(Register_state);i++)&lt;br /&gt;
   {&lt;br /&gt;
   eeprom_update_byte((uint8_t *)(i+1),Register_state[i]);&lt;br /&gt;
   }&lt;br /&gt;
 eeprom_update_byte((uint8_t *)0,0x55); /*value is now valid */&lt;br /&gt;
 software_reset();		 /* Wait until the the system get reset (or power off)  */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Timer Interrupt Routine ====&lt;br /&gt;
 TIMER_INT &lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
Alle zeitbasierenden Funktionen werden über diesen Interrupt ausgeführt. Wartezeiten mit Signalprüfungen und dergleichen.&lt;br /&gt;
==== Main Routine / Start up ====&lt;br /&gt;
 Main()&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
In dieser Funktion wird der Mikrocontroller und dessen Hardware aufgesetzt. Danach erfolgt die eigentliche&lt;br /&gt;
1-Wire Steuerung nur über Interrupts. In der Mainroutine können zusätzlich Funktionen programmiert werden.&lt;br /&gt;
Es kann jedoch kein Zugriff auf Interrupt-Funktionen verwendet werden (z.B. SPI, I2C via Interrupt) da hierdurch&lt;br /&gt;
das Timing des 1-Wire Bus nicht mehr garantiert werden kann (Vorsetzung bei diesem Mikrocontroller Type).&lt;br /&gt;
=== Slave-ID Berechnung ===&lt;br /&gt;
Sollte man eigene Slave erstellen wollen, so ist es notwendig die Slave ID entsprechend berechnen zu lassen.&lt;br /&gt;
Der Rechner von [http://www.tm3d.de/index.php/tools#berechnungid Thomas Mueller] ist hier ein nützliches Werkzeug.&lt;br /&gt;
=== Fuse Bits ===&lt;br /&gt;
[[Bild:FuseBits.png|mini|100px|rechts|Fuse Bit des Controllers]]&lt;br /&gt;
Der Controller verwendet nur BODLEVEL von 4.3 Volt. Bei Erreichen dieser Versorgungsspannung wird der Controller automatisch in&lt;br /&gt;
den Reset-Modus gesetzt. Der Watchdog wird per Software eingeschaltet. Die CPU arbeitet mit 8Mhz ohne externen Quarz.&lt;br /&gt;
&lt;br /&gt;
= Quellen =&lt;br /&gt;
== Webseite ==&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=10962&amp;amp;start=0&amp;amp;rid=118 Alternative zum DS2423 Counter]&lt;br /&gt;
* [http://www.tm3d.de/index.php/1-wire-device-mit-avr 1-Wire Device mit AR-Mikrocontroller]&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 AVR Attiny44A als 1Wire Slave konfigurierbar DS2423/DS18BS20/DS2413/DS2408]&lt;br /&gt;
* [https://www.mikrocontroller.net/articles/Atmel_Studio Hinweis zum AVR Studio]&lt;br /&gt;
* [http://www.atmel.com Hersteller der Mikrocontroller Atmel]&lt;br /&gt;
&lt;br /&gt;
== Datenblätter ==&lt;br /&gt;
* [https://datasheets.maximintegrated.com/en/ds/DS2408.pdf Datenblatt des DS2408]&lt;br /&gt;
* [http://datasheets.maximintegrated.com/en/ds/DS2423.pdf Datenblatt des DS2423]&lt;br /&gt;
* [http://datasheets.maximintegrated.com/en/ds/DS2413.pdf Datenblatt des DS2413]&lt;br /&gt;
* [http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf Datenblatt des DS18B20]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Atmel1wireslaveschaltung.png&amp;diff=12474</id>
		<title>Datei:Atmel1wireslaveschaltung.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Atmel1wireslaveschaltung.png&amp;diff=12474"/>
		<updated>2015-10-10T16:27:49Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Ritchie lud eine neue Version von Datei:Atmel1wireslaveschaltung.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Schaltung zeigt eine mögliche Schaltung für einen 1-Wire Slave.&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:FuseBits.png&amp;diff=12471</id>
		<title>Datei:FuseBits.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:FuseBits.png&amp;diff=12471"/>
		<updated>2015-10-10T11:36:28Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Fuse Bit des Attiny 44a für die Programmierung eines 1-Wire Slaves auf Basis eines Atmel Controllers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fuse Bit des Attiny 44a für die Programmierung eines 1-Wire Slaves auf Basis eines Atmel Controllers&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_Emulation_per_ATTiny&amp;diff=11141</id>
		<title>1-Wire Emulation per ATTiny</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_Emulation_per_ATTiny&amp;diff=11141"/>
		<updated>2015-05-02T21:47:01Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Erstellung der Basisartikel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Der Atmel Atiny oder andere Mikrokontroller des Atmel Familie lassen sich mittels Software zu einem 1-Wire Baustein konfigurieren. Basis dieses Gedanken war die Tatsache das der Zählerbaustein DS2423 von Dallas abgekündigt wurde. Jedoch wurden mit diesem Baustein viele Schaltung realisiert und aus diesem Grund wurde eine Software-Lösung gefunden. Die Software Lösung bietet aber noch weitere Vorteile, welche die Standard-Bausteine nicht bieten. So können z.B. Kurze Impulse festgehalten werden, Steuerfunktionen und Notfunktionen dezentral gelöst werden ohne den Busmaster mit diesen Funktionen zu belasten.&lt;br /&gt;
=== Foren Links ===&lt;br /&gt;
* Wer sich für den Nachbau des DS2423 interessiert, sollte sich diesen Thread durchlesen/verfolgen. [http://forum.fhem.de/index.php?t=msg&amp;amp;th=10962&amp;amp;start=0&amp;amp;rid=118 Alternative zum DS2423 Counter]&lt;br /&gt;
* der hier besprochene Quellcode basiert auf dieser Software [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 AVR Attiny44A als 1Wire Slave konfiguierbar DS2423/DS18BS20/DS2408/DS2408]&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== ATtiny44A ===&lt;br /&gt;
[[Bild:atmel1wireslaveschaltung.png|mini|100px|rechts|1-Wire Slave Schaltung]]&lt;br /&gt;
Die hier gezeigte Schaltung zeigt einen ATTINY44A als 1-Wire Slave, welcher folgende Funktionen hat:&lt;br /&gt;
* 4 Status LED&#039;s, welche den Zustand der Eingänge anzeigt.&lt;br /&gt;
* 1 Taster. Zeigt bei Betätigung den Status der Eingänge&lt;br /&gt;
* 4 Eingänge über je einen Operationsverstärker, welcher als Vergleicher arbeitet&lt;br /&gt;
* 1 Programmierschnittstelle 6 polig zum laden der Software&lt;br /&gt;
=== ATtiny25 ===&lt;br /&gt;
Die Hardware vom DS2423, welcher hier im Forum sehr bekannt ist, &lt;br /&gt;
kann von seiner Webseite [http://m1n1.de/html/1w_counter_v1_7.html] eingesehen werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Grundfunktion der Software wurde von Maximum in der [http://www.maximintegrated.com/en/app-notes/index.mvp/id/126 Applikation Note 126] beschrieben. Hier hat Tobias Mueller eine gute Implementierung der Umsetzung auf seiner [http://www.tm3d.de/index.php/1-wire-device-mit-avr Webseite] gemacht. Er zeigt hier das Signalverhalten und die einzelnen Schritte der Software in verschiedenen Diagrammen. Für ein generelles Verständnis ist diese Webseite ein guter Einstieg.&lt;br /&gt;
Der hier vorgestellte Quellcode basiert auf seiner Vorlage. Es wurden jedoch die bestehenden 1-Wire Typen DS2423 &amp;amp; DS18BS20 in eine Datei von Ihm übernommen. Zusätzlich sind der 1-Wire DS2408/DS2413 eingefügt worden. Die Code wurde aufgeräumt und nochmals zusätzlich modularisiert und dokumentiert.&lt;br /&gt;
Der Quellcode wurde in diesem [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 Forumsthread] abgelegt.&lt;br /&gt;
&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Die Software ist in C geschrieben und verwendet hierbei die speziellen Funktionen des Controllers. Eine genaues Einlesen in das Handbuch des Mikrocontroller ist hierbei unerlässlich, um die einzelnen Funktionen zu verstehen. Dies ist auch notwendig, wenn man die bestehende Software auf einen anderen Controller umschreiben will. Wie im im Schaltplan erkennen kann, werden die einzelnen Pin&#039;s mehrfach belegt.&lt;br /&gt;
=== Datenblätter ===&lt;br /&gt;
Hier findet man das Datenblatt zum Mikrocontroller. In diesem Dokument sind alle Funktionen und Register des jeweiligen Mikrocontroller in englisch beschrieben. Für das Verständnis der Funktionen des Mikrocontroller ist eine Kenntnis diese Dokument notwendig.&lt;br /&gt;
[http://www.atmel.com/Images/doc8006.pdf Datenblatt von Attiny 24/44/88]&lt;br /&gt;
=== Programmierumgebungen ===&lt;br /&gt;
* AVR Studio&lt;br /&gt;
* AVRDude&lt;br /&gt;
=== Der Quellcode ===&lt;br /&gt;
Die Funktionen der Software werden in drei Teile getrennt. &lt;br /&gt;
* Zeitkritische Funktionen, welche über einen PIN - Interrupt realisiert sind&lt;br /&gt;
* Zeitabhängige Funktionen, welcher über einen Timer - Interrupt realisiert sind&lt;br /&gt;
* Zeitunkritische Funktionen, welche über das Hauptprogramm realisiert sind&lt;br /&gt;
 &lt;br /&gt;
Im folgenden Abschnitt werden die einzelnen Funktion des Quellcodes erklärt. &lt;br /&gt;
==== Allgemeine Deklaration ====&lt;br /&gt;
 // selection of the used &lt;br /&gt;
 //#define		DS2423		1&lt;br /&gt;
 //#define		DS18BS20	1&lt;br /&gt;
 #define		DS2408		1&lt;br /&gt;
 //#define		DS2413		1&lt;br /&gt;
 ...&lt;br /&gt;
 #define SET_BIT(PORT, BITNUM)	((PORT) |= (1&amp;lt;&amp;lt;(BITNUM)))&lt;br /&gt;
 #define CLEAR_BIT(PORT, BITNUM) ((PORT) &amp;amp;= ~(1&amp;lt;&amp;lt;(BITNUM)))&lt;br /&gt;
In dieser Sektion sind generelle Deklarationen definiert.&lt;br /&gt;
So wird hier durch die Definitionen DS2423...DS2413 der jeweilige 1-Wire Slave Typ bei der nächsten Kompilierung erstellt.&lt;br /&gt;
Es darf nur ein Typ ausgewählt sein, da es sonst zu nicht funktionsfähigen Code kommt.&lt;br /&gt;
==== Controller Spezifische Deklarationen ====&lt;br /&gt;
 #ifdef __AVR_ATtiny44A__&lt;br /&gt;
 // OW_PORT Pin 7  - PB2&lt;br /&gt;
 //&lt;br /&gt;
 //OW Pin&lt;br /&gt;
 //&lt;br /&gt;
 #define OW_PORT PORTB								//1 Wire Port&lt;br /&gt;
 #define OW_PIN PINB									//1 Wire Pin as number&lt;br /&gt;
 ...&lt;br /&gt;
 #endif // __AVR_ATtiny44a__ &lt;br /&gt;
In dieser Sektion können die jeweiligen Realisierungen der verschiedenen Mikrocontroller Typen abgelegt werden.&lt;br /&gt;
Da die Registerbelegung von Controller zu Controller unterschiedlich sind, können diese dem Compiler mittels Makroanweisungen hier&lt;br /&gt;
entsprechend zugewiesen werden.&lt;br /&gt;
==== 1-Wire Baustein spezifische Deklarationen ====&lt;br /&gt;
 #ifdef DS2423&lt;br /&gt;
 #define PC_INT_ISR ISR(PCINT0_vect) { /*ATT44 with 0 by PCINT*/ \&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA4))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA4))==(1&amp;lt;&amp;lt;PINA4))) {	Counter[0]++;	}		\&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA3))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA3))==(1&amp;lt;&amp;lt;PINA3))) {	Counter[1]++;	}		\&lt;br /&gt;
 if (((PINA&amp;amp;(1&amp;lt;&amp;lt;PINA0))==0)&amp;amp;&amp;amp;((istat&amp;amp;(1&amp;lt;&amp;lt;PINA0))==(1&amp;lt;&amp;lt;PINA0)))	\&lt;br /&gt;
 { \&lt;br /&gt;
 eeprom_write_byte((uint8_t *)0,0x55);\&lt;br /&gt;
 eeprom_write_dword((uint32_t *)1,Counter[0]);\&lt;br /&gt;
 eeprom_write_dword((uint32_t *)5,Counter[1]);  \&lt;br /&gt;
 }	\						&lt;br /&gt;
 istat=PINA;}					&lt;br /&gt;
 #define INIT_COUNTER_PINS 	/* Counter Interrupt */ \&lt;br /&gt;
 GIMSK|=  (1&amp;lt;&amp;lt;PCIE0);\&lt;br /&gt;
 PCMSK0=  (1&amp;lt;&amp;lt;PCINT3)|(1&amp;lt;&amp;lt;PCINT4)|(1&amp;lt;&amp;lt;PCINT0);	\&lt;br /&gt;
 DDRA &amp;amp;=~ (1&amp;lt;&amp;lt;PINA1) | (1&amp;lt;&amp;lt;PINA2); \&lt;br /&gt;
 istat=PINB;	 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Über eine solche Deklaration wird dem bei dem jeweiligen 1-Wire Type die entsprechende Konstante entsprechend konfiguriert.&lt;br /&gt;
Für weitere 1-Wire Typen sind entsprechende Konstanten vorzusehen. Einige der Deklarationen sind nur für den jeweiligen Type&lt;br /&gt;
notwendig, andere sind für jeden Typ notwendig.&lt;br /&gt;
==== Globale Variablen Deklarationen ====&lt;br /&gt;
 // --------------------- Device depending variables ------------------------------------&lt;br /&gt;
 #ifdef DS2423&lt;br /&gt;
 typedef union &lt;br /&gt;
 {&lt;br /&gt;
 volatile uint8_t bytes[13];//={1,1,2,0,0,0,0,0,0,0,0,5,5};&lt;br /&gt;
 struct &lt;br /&gt;
 {&lt;br /&gt;
 uint16_t addr;&lt;br /&gt;
 uint8_t read;&lt;br /&gt;
 uint32_t counter;&lt;br /&gt;
 uint32_t zero;&lt;br /&gt;
 uint16_t crc;&lt;br /&gt;
 };&lt;br /&gt;
 } counterpack_t;&lt;br /&gt;
 counterpack_t counterpack;&lt;br /&gt;
 volatile uint32_t Counter[2];										// Counter Buffer&lt;br /&gt;
 #endif&lt;br /&gt;
In diesem Bereich werden globale Variablen definiert, welche nur für den jeweiligen 1-Wire Typen notwendig sind.&lt;br /&gt;
==== Byte Definitionen des 1-Wire Bus ====&lt;br /&gt;
 #define OWM_SLEEP									0			//Waiting for next reset pulse&lt;br /&gt;
 #define OWM_RESET									1			//Reset pulse received &lt;br /&gt;
 #define OWM_PRESENCE								2			//sending presence pulse&lt;br /&gt;
 ...&lt;br /&gt;
 #define OW_RESET_ACTIVITY_LATCHES			0xC3&lt;br /&gt;
In diesem Bereich sind die einzelnen Kommandos und Status Variablen des 1-Wire Bus deklariert. Diese Definitionen finden sich in den einzelnen&lt;br /&gt;
Datenblätter der 1-Wire Bausteine wieder.&lt;br /&gt;
==== PIN Interrupt Routine ====&lt;br /&gt;
 PIN_INT &lt;br /&gt;
 {&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
In dieser Routine wird das Datenhandling bei Statuswechsel des 1-Wire PIN&#039;s durchgeführt.&lt;br /&gt;
==== Timer Interrupt Routine ====&lt;br /&gt;
 TIMER_INT &lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
Alle zeitbasierenden Funktionen werden über diesen Interrupt ausgeführt. Wartezeiten mit Signalprüfungen und dergleichen.&lt;br /&gt;
==== Main Routine / Start up ====&lt;br /&gt;
 Main()&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
In dieser Funktion wird der Mikrocontroller und dessen Hardware aufgesetzt. Danach erfolgt die eigentliche&lt;br /&gt;
1-Wire Steuerung nur über Interrupts. In der Mainroutine können zusätzlich Funktionen programmiert werden.&lt;br /&gt;
Es kann jedoch kein Zugriff auf Interrupt-Funktionen verwendet werden (z.B. SPI, I2C via Interrupt) da hierdurch&lt;br /&gt;
das Timing des 1-Wire Bus nicht mehr garantiert werden kann (Vorsetzung bei diesem Mikrocontroller Type).&lt;br /&gt;
=== Slave-ID Berechnung ===&lt;br /&gt;
Sollte man eigene Slave erstellen wollen, so ist es notwendig die Slave ID entsprechend berechnen zu lassen.&lt;br /&gt;
Der Rechner von [http://www.tm3d.de/index.php/tools#berechnungid Thomas Mueller] ist hier ein nützliches Werkzeug.&lt;br /&gt;
=== Compilieren ===&lt;br /&gt;
kommt noch&lt;br /&gt;
=== Programm in den Atmel laden ===&lt;br /&gt;
kommt noch&lt;br /&gt;
&lt;br /&gt;
= Quellen =&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=10962&amp;amp;start=0&amp;amp;rid=118 Alternative zum DS2423 Counter]&lt;br /&gt;
* [http://www.tm3d.de/index.php/1-wire-device-mit-avr 1-Wire Device mit AR-Mikrocontroller]&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105 AVR Attiny44A als 1Wire Slave konfigurierbar DS2423/DS18BS20/DS2408/DS2408]&lt;br /&gt;
* [http://www.atmel.com Hersteller der Mikrocontroller Atmel]&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Atmel1wireslaveschaltung.png&amp;diff=11139</id>
		<title>Datei:Atmel1wireslaveschaltung.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Atmel1wireslaveschaltung.png&amp;diff=11139"/>
		<updated>2015-05-02T17:48:42Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Diese Schaltung zeigt eine mögliche Schaltung für einen 1-Wire Slave.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Schaltung zeigt eine mögliche Schaltung für einen 1-Wire Slave.&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_St%C3%B6rungsbeseitigung&amp;diff=11116</id>
		<title>1-Wire Störungsbeseitigung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_St%C3%B6rungsbeseitigung&amp;diff=11116"/>
		<updated>2015-04-29T19:53:13Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Bild für das Signalverhalten eines 1-Wire Impulse eingefügt. Kleine Korrekuren im Text.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generell beschreiben die folgenden Punkte Informationen aus dem Dokument [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“]. Dieser Absatz soll eine zusätzliche Hilfe darstellen und bezieht sich aus den Informationen des obigen Dokuments mit einigen praktischen Hinweisen. &lt;br /&gt;
== Bus Fehler feststellen==&lt;br /&gt;
Der OWServer und die entsprechende Webseite des Servers bietet einige Möglichkeiten um Fehler auf dem 1-Wire Bus festzustellen. Die Fehler können innerhalb der Statistik des OW Servers gesehen werden.&lt;br /&gt;
=== CRC Fehler ===&lt;br /&gt;
[[Bild:1wireowservererrorstatus.png|mini|100px|rechts|Anzeige der CRC Fehler für den Bus]]&lt;br /&gt;
Die [http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung CRC Fehler] werden auf der Seite „http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/statistics/errors“ dargestellt. Hier sieht man die Anzahl der übertragenen Pakete und deren Fehleranzahl. Bei einem guten Bus sollte die Anzahl der CRC8 / CRC16 = 0 sein. Generell kann man sagen, je größer diese Zahl im Verhältnis zu den gesendeten Protokollen ist, umso schlechter ist der Bus.&lt;br /&gt;
&lt;br /&gt;
=== Search Fehler ===&lt;br /&gt;
[[Bild:1wireowserversearcherror.png|mini|100px|rechts|Anzeige des Fehlerstatus für den Bus]]&lt;br /&gt;
Sollten während der Suche von Busteilnehmer auf dem 1-Wire Bus Fehler auftreten, werden diese auf diese Webseite des OW Server dargestellt. Hier sollte auch immer eine 0 stehen. Generell kann man sagen, je größer diese Zahl im Verhältnis zu den Suchanfragen ist, umso schlechter ist der Bus. http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/bus.2/interface/statistics/search_errors&lt;br /&gt;
&lt;br /&gt;
=== Generelle Fehler===&lt;br /&gt;
Sollten werden eine Schreibvorgangs oder Lesevorgangs generelle Fehler auftauchen, so werden hier die entsprechenden Fehlerzähler angezeigt. Im Normalfall sollte auch hier 0 stehen. http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/bus.0/interface/statistics&lt;br /&gt;
&lt;br /&gt;
== Bus Fehler Ursache suchen ==&lt;br /&gt;
Um die Fehlerquellen entsprechend einzukreisen, kann man wie folgt vorgehen, um die Ursache zu finden und entsprechend zu beseitigen.&lt;br /&gt;
Es wird generell von einer korrekten Konfiguration des OW-Servers ausgegangen.&lt;br /&gt;
=== Kurzschluss prüfen ===&lt;br /&gt;
Zeigen sich auf dem 1-Wire Bus keine Teilnehmer, liegt die Vermutung nahe, das ein Kurzschluss auf dem Bus vorhanden ist (oder auch die Datenleitung durch einen 1-Wire Teilnehmer auf 0 Volt gezogen wird. Dies kann durch Software 1-Wire Bausteine auch passieren).&lt;br /&gt;
&lt;br /&gt;
Alle Teilnehmer entfernen und die Leitungen entsprechend durchmessen. Hierbei kann auch eine hochohmige Verbindung (kein direkter Kurzschluss) eine Problem sein. Um diese auszuschließen muss das Multimeter im Mega-Ohm Bereich eingestellt werden und die Leitungen prüfen. Danach jeden Teilnehmer einzeln wieder in den Bus aufnehmen und prüfen, ob der Bus noch in Ordnung ist (Error Counter prüfen).&lt;br /&gt;
=== Leitungsbruch prüfen ===&lt;br /&gt;
Sind an allen Teilnehmer alle Leitungen korrekt angeschlossen. Sind Klemmen verwendet, da sollte man prüfen, ob alle Drähte fest angeschlossen. Man sollte an den Drähten ziehen können, ohne das sich der Draht löst. Wenn man LSA Klemmen verwendet, sollte man prüfen, ob der Draht auch wirklich tief in die Klemme gedrückt wurde. Evtl. einfach nochmals alle Kontakte nachdrücken. Kalte Lötstellen sind auch eine mögliche Problemstelle. &lt;br /&gt;
&lt;br /&gt;
=== Spannungsversorgung prüfen ===&lt;br /&gt;
Damit der 1-Wire Bus stabil arbeiten kann, muss die Spannungsversorgung aller Busteilnehmer stabil sein.&lt;br /&gt;
Einen ersten Test kann man mit einem normalen Multimeter durchführen. Hierbei sollte die Spannung an allen&lt;br /&gt;
Teilstrecken des Bus zwischen 4,9V und 5.2Volt liegen. &#039;&#039;&#039;Ein Multimeter kann kurzzeitige Spannungseinbrüche nicht messen!&#039;&#039;&#039;&lt;br /&gt;
Hier ist ein Oszilloskope für die genaue Messung notwendig. Dann kann auch die Brummspannung (Ripple) auf der 5V Leitung gemessen werden. Eine Brummspannung größer 100mV (eigentlich weniger) ist ein Zeichen für eine fehlerhafte Spannungsversorgung und sollte geprüft werden. Hier könnten Filterschaltungen oder ein besseres Netzteil Abhilfe schaffen.&lt;br /&gt;
&lt;br /&gt;
=== Signalverhalten prüfen ===&lt;br /&gt;
[[Bild:1wiresignal.png|mini|100px|rechts|Signalverhalten des 1-Wire Bus]]&lt;br /&gt;
Ein Fehler, welcher bei Leitungen im kurzen und mittleren Leitungsbereich gerne auftritt, ist das „&#039;&#039;&#039;ringing/undershoot&#039;&#039;&#039;“ Signal.&lt;br /&gt;
Hierbei wird kurzzeitige das 1-Wire Signal in den negativen Spannungsbereich gezogen (Impulse von bis -0.5Volt und mehr sind keine Seltenheit).&lt;br /&gt;
Ein entsprechendes Bild des Signalverlauf kann man auf der Seite 10 (Appendix D. Waveform Examples) des [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“] sehen.&lt;br /&gt;
&lt;br /&gt;
Dieser Effekt wird durch die angeschlossenen Client&#039;s bei einem Bus Reset durch den Master erzeugt. &lt;br /&gt;
Diese Impulse können hierbei die angeschlossenen 1-Wire Teilnehmer in der Signalfolge des 1-Wire Protokolle aus dem Tritt bringen.&lt;br /&gt;
Der Effekt zeigt sich z.B. durch kommen und gehende Teilnehmer in der Device-Übersicht des OW Servers.&lt;br /&gt;
Diesen Effekt kann man nur mit einem Oszilloskope messen/darstellen.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Abhilfe&#039;&#039;&#039; ist hier nur die Einbringung eines &#039;&#039;&#039;RC-Glied&#039;&#039;&#039; in den Anfang des betroffenen 1-Wire Bus. &lt;br /&gt;
Laut Guideline von Maxim sollte es ein 68 Ohm Widerstand sein und ein 470pF oder 4700pF je nach Leitungslänge sein.&lt;br /&gt;
Der entsprechend Schaltplan ist auf der Seite 9 des [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“] zu sehen.&lt;br /&gt;
&lt;br /&gt;
== Bus Erweiterungen ==&lt;br /&gt;
Wenn der 1-wire Bus erweitert wird, kann sich das Leitungsverhalten ändern, insbesondere dann, wenn man nicht die optimale Netztopologie &amp;quot;Linear&amp;quot; verwendet.&lt;br /&gt;
=== Stubs vermeiden ===&lt;br /&gt;
Hier können die sogenannten &#039;&#039;&#039;Stub&#039;&#039;&#039;, Abzweigungen vom Hauptstrang zum Problem werden. Sind diese Abzweigungen länger als 3m, beeinflussen sie nachweislich das Signalverhalten, da man in diesem Fall nicht mehr von einem linearen Bus, sondern einem &#039;&#039;&#039;stubbed&#039;&#039;&#039; Topologie redet. Die Leitungsrefektionen dieser Seitenarme können den Bus stören und sind daher zu vermeiden.&lt;br /&gt;
=== Slave Device Weight prüfen ===&lt;br /&gt;
Das Slave Device Weight ist eine Kenngröße für die Kabellänge in Verbindung mit den angeschlossenen Devices innerhalb eines Bus Strangs. Hierbei wird die Kabellänge und die Anzahl der angeschlossenen 1-wire Slaves zu einem &amp;quot;Gewicht&amp;quot; ermittelt. Hierbei hat ein iButton die Kenngröße &amp;quot;1m&amp;quot; und normale Devices eine Kenngröße von &amp;quot;0.5m&amp;quot; in Verbindung mit der Kabellänge kann man so den maximalen Ausbau seines möglichen Bus ermitteln.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:1wiresignal.png&amp;diff=11115</id>
		<title>Datei:1wiresignal.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:1wiresignal.png&amp;diff=11115"/>
		<updated>2015-04-29T19:48:24Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Signal behavior of a 1-Wire Signal
Red line shows the 1-Wire Signal (a Part of the Signal) and a small under shoot. The yellow line show the voltage ripple during 1-Wire signal.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Signal behavior of a 1-Wire Signal&lt;br /&gt;
Red line shows the 1-Wire Signal (a Part of the Signal) and a small under shoot. The yellow line show the voltage ripple during 1-Wire signal.&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_St%C3%B6rungsbeseitigung&amp;diff=11114</id>
		<title>1-Wire Störungsbeseitigung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_St%C3%B6rungsbeseitigung&amp;diff=11114"/>
		<updated>2015-04-29T18:36:12Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Einfügen eines Bild für die Darstellung der Search Fehler aus dem Webinterface&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generell beschreiben die folgenden Punkte Informationen aus dem Dokument [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“]. Dieser Absatz soll eine zusätzliche Hilfe darstellen und bezieht sich aus den Informationen des obigen Dokuments mit einigen praktischen Hinweisen. &lt;br /&gt;
== Bus Fehler feststellen==&lt;br /&gt;
Der OWServer und die entsprechende Webseite des Servers bietet einige Möglichkeiten um Fehler auf dem 1-Wire Bus festzustellen. Die Fehler können innerhalb der Statistik des OW Servers gesehen werden.&lt;br /&gt;
=== CRC Fehler ===&lt;br /&gt;
[[Bild:1wireowservererrorstatus.png|mini|100px|rechts|Anzeige der CRC Fehler für den Bus]]&lt;br /&gt;
Die [http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung CRC Fehler] werden auf der Seite „http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/statistics/errors“ dargestellt. Hier sieht man die Anzahl der übertragenen Pakete und deren Fehleranzahl. Bei einem guten Bus sollte die Anzahl der CRC8 / CRC16 = 0 sein. Generell kann man sagen, je größer diese Zahl im Verhältnis zu den gesendeten Protokollen ist, umso schlechter ist der Bus.&lt;br /&gt;
&lt;br /&gt;
=== Search Fehler ===&lt;br /&gt;
[[Bild:1wireowserversearcherror.png|mini|100px|rechts|Anzeige des Fehlerstatus für den Bus]]&lt;br /&gt;
Sollten während der Suche von Busteilnehmer auf dem 1-Wire Bus Fehler auftreten, werden diese auf diese Webseite des OW Server dargestellt. Hier sollte auch immer eine 0 stehen. Generell kann man sagen, je größer diese Zahl im Verhältnis zu den Suchanfragen ist, umso schlechter ist der Bus. http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/bus.2/interface/statistics/search_errors&lt;br /&gt;
&lt;br /&gt;
=== Generelle Fehler===&lt;br /&gt;
Sollten werden eine Schreibvorgangs oder Lesevorgangs generelle Fehler auftauchen, so werden hier die entsprechenden Fehlerzähler angezeigt. Im Normalfall sollte auch hier 0 stehen. http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/bus.0/interface/statistics&lt;br /&gt;
&lt;br /&gt;
== Bus Fehler Ursache suchen ==&lt;br /&gt;
Um die Fehlerquellen entsprechend einzukreisen, kann man wie folgt vorgehen, um die Ursache zu finden und entsprechend zu beseitigen.&lt;br /&gt;
Es wird generell von einer korrekten Konfiguration des OW-Servers ausgegangen.&lt;br /&gt;
=== Kurzschluss prüfen ===&lt;br /&gt;
Zeigen sich auf dem 1-Wire Bus keine Teilnehmer, liegt die Vermutung nahe, das ein Kurzschluss auf dem Bus vorhanden ist (oder auch die Datenleitung durch einen 1-Wire Teilnehmer auf 0 Volt gezogen wird. Dies kann durch Software 1-Wire Bausteine auch passieren).&lt;br /&gt;
&lt;br /&gt;
Alle Teilnehmer entfernen und die Leitungen entsprechend durchmessen. Hierbei kann auch eine hochohmige Verbindung (kein direkter Kurzschluss) eine Problem sein. Um diese auszuschließen muss das Multimeter im Mega-Ohm Bereich eingestellt werden und die Leitungen prüfen. Danach jeden Teilnehmer einzeln wieder in den Bus aufnehmen und prüfen, ob der Bus noch in Ordnung ist (Error Counter prüfen).&lt;br /&gt;
=== Leitungsbruch prüfen ===&lt;br /&gt;
Sind an allen Teilnehmer alle Leitungen korrekt angeschlossen. Sind Klemmen verwendet, da sollte man prüfen, ob alle Drähte fest angeschlossen. Man sollte an den Drähten ziehen können, ohne das sich der Draht löst. Wenn man LSA Klemmen verwendet, sollte man prüfen, ob der Draht auch wirklich tief in die Klemme gedrückt wurde. Evtl. einfach nochmals alle Kontakte nachdrücken. Kalte Lötstellen sind auch eine mögliche Problemstelle. &lt;br /&gt;
&lt;br /&gt;
=== Spannungsversorgung prüfen ===&lt;br /&gt;
Damit der 1-Wire Bus stabil arbeiten kann, muss die Spannungsversorgung aller Busteilnehmer stabil sein.&lt;br /&gt;
Einen ersten Test kann man mit einem normalen Multimeter durchführen. Hierbei sollte die Spannung an allen&lt;br /&gt;
Teilstrecken des Bus zwischen 4,9V und 5.2Volt liegen. &#039;&#039;&#039;Ein Multimeter kann kurzzeitige Spannungseinbrüche nicht messen!&#039;&#039;&#039;&lt;br /&gt;
Hier ist ein Oszilloskope für die genaue Messung notwendig. Dann kann auch die Brummspannung (Ripple) auf der 5V Leitung gemessen werden. Eine Brummspannung größer 100mV (eigentlich weniger) ist ein Zeichen für eine fehlerhafte Spannungsversorgung und sollte geprüft werden. Hier könnten Filterschaltungen oder ein besseres Netzteil Abhilfe schaffen.&lt;br /&gt;
&lt;br /&gt;
=== Signalverhalten prüfen ===&lt;br /&gt;
Ein Fehler, welcher bei Leitungen im kurzen und mittleren Bereich gerne auftritt, ist das „&#039;&#039;&#039;ringing/undershoot&#039;&#039;&#039;“ Signal.&lt;br /&gt;
Hierbei wird kurzzeitige das 1-Wire Signal in den negativen Spannungsbereich gezogen (Impulse von bis -0.5Volt und mehr sind keine Seltenheit).&lt;br /&gt;
Ein entsprechendes Bild des Signalverlauf kann man auf der Seite 10 (Appendix D. Waveform Examples) des [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“] sehen.&lt;br /&gt;
&lt;br /&gt;
Dieser Effekt wird durch die angeschlossenen Client&#039;s bei einem Bus Reset durch den Master erzeugt. &lt;br /&gt;
Diese Impulse können hierbei die angeschlossenen 1-wire Teilnehmer in der Signalfolge des 1-wire Protokolle aus dem Tritt bringen.&lt;br /&gt;
Der Effekt zeigt sich z.B. durch kommen und gehende Teilnehmer in der Device-Übersicht des OW Servers.&lt;br /&gt;
Diesen Effekt kann man nur mit einem Oszilloskope messen/darstellen.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Abhilfe&#039;&#039;&#039; ist hier nur die Einbringung eines &#039;&#039;&#039;RC-Glied&#039;&#039;&#039; in den Anfang des betroffenen 1-Wire Bus. &lt;br /&gt;
Laut Guideline von Maxim sollte es ein 68 Ohm Widerstand sein und ein 470pF oder 4700pF je nach Leitungslänge sein.&lt;br /&gt;
Der entsprechend Schaltplan ist auf der Seite 9 des [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“] zu sehen.  &lt;br /&gt;
== Bus Erweiterungen ==&lt;br /&gt;
Wenn der 1-wire Bus erweitert wird, kann sich das Leitungsverhalten ändern, insbesondere dann, wenn man nicht die optimale Netztopologie &amp;quot;Linear&amp;quot; verwendet.&lt;br /&gt;
=== Stubs vermeiden ===&lt;br /&gt;
Hier können die sogenannten &#039;&#039;&#039;Stub&#039;&#039;&#039;, Abzweigungen vom Hauptstrang zum Problem werden. Sind diese Abzweigungen länger als 3m, beeinflussen sie nachweislich das Signalverhalten, da man in diesem Fall nicht mehr von einem linearen Bus, sondern einem &#039;&#039;&#039;stubbed&#039;&#039;&#039; Topologie redet. Die Leitungsrefektionen dieser Seitenarme können den Bus stören und sind daher zu vermeiden.&lt;br /&gt;
=== Slave Device Weight prüfen ===&lt;br /&gt;
Das Slave Device Weight ist eine Kenngröße für die Kabellänge in Verbindung mit den angeschlossenen Devices innerhalb eines Bus Strangs. Hierbei wird die Kabellänge und die Anzahl der angeschlossenen 1-wire Slaves zu einem &amp;quot;Gewicht&amp;quot; ermittelt. Hierbei hat ein iButton die Kenngröße &amp;quot;1m&amp;quot; und normale Devices eine Kenngröße von &amp;quot;0.5m&amp;quot; in Verbindung mit der Kabellänge kann man so den maximalen Ausbau seines möglichen Bus ermitteln.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:1wireowserversearcherror.png&amp;diff=11113</id>
		<title>Datei:1wireowserversearcherror.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:1wireowserversearcherror.png&amp;diff=11113"/>
		<updated>2015-04-29T18:34:02Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Display of the search errors of the 1-Wire Bus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Display of the search errors of the 1-Wire Bus&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_St%C3%B6rungsbeseitigung&amp;diff=11112</id>
		<title>1-Wire Störungsbeseitigung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_St%C3%B6rungsbeseitigung&amp;diff=11112"/>
		<updated>2015-04-29T18:30:06Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Bild des Webinterface für die Anzeige eines CRC Fehler vom owserver eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generell beschreiben die folgenden Punkte Informationen aus dem Dokument [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“]. Dieser Absatz soll eine zusätzliche Hilfe darstellen und bezieht sich aus den Informationen des obigen Dokuments mit einigen praktischen Hinweisen. &lt;br /&gt;
== Bus Fehler feststellen==&lt;br /&gt;
Der OWServer und die entsprechende Webseite des Servers bietet einige Möglichkeiten um Fehler auf dem 1-Wire Bus festzustellen. Die Fehler können innerhalb der Statistik des OW Servers gesehen werden.&lt;br /&gt;
=== CRC Fehler ===&lt;br /&gt;
[[Bild:1wireowservererrorstatus.png|mini|100px|rechts|Anzeige der CRC Fehler für den Bus]]&lt;br /&gt;
Die [http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung CRC Fehler] werden auf der Seite „http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/statistics/errors“ dargestellt. Hier sieht man die Anzahl der übertragenen Pakete und deren Fehleranzahl. Bei einem guten Bus sollte die Anzahl der CRC8 / CRC16 = 0 sein. Generell kann man sagen, je größer diese Zahl im Verhältnis zu den gesendeten Protokollen ist, umso schlechter ist der Bus.&lt;br /&gt;
&lt;br /&gt;
=== Search Fehler ===&lt;br /&gt;
Sollten während der Suche von Busteilnehmer auf dem 1-Wire Bus Fehler auftreten, werden diese auf diese Webseite des OW Server dargestellt. Hier sollte auch immer eine 0 stehen. Generell kann man sagen, je größer diese Zahl im Verhältnis zu den Suchanfragen ist, umso schlechter ist der Bus. http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/bus.2/interface/statistics/search_errors&lt;br /&gt;
=== Generelle Fehler===&lt;br /&gt;
Sollten werden eine Schreibvorgangs oder Lesevorgangs generelle Fehler auftauchen, so werden hier die entsprechenden Fehlerzähler angezeigt. Im Normalfall sollte auch hier 0 stehen. http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/bus.0/interface/statistics&lt;br /&gt;
&lt;br /&gt;
== Bus Fehler Ursache suchen ==&lt;br /&gt;
Um die Fehlerquellen entsprechend einzukreisen, kann man wie folgt vorgehen, um die Ursache zu finden und entsprechend zu beseitigen.&lt;br /&gt;
Es wird generell von einer korrekten Konfiguration des OW-Servers ausgegangen.&lt;br /&gt;
=== Kurzschluss prüfen ===&lt;br /&gt;
Zeigen sich auf dem 1-Wire Bus keine Teilnehmer, liegt die Vermutung nahe, das ein Kurzschluss auf dem Bus vorhanden ist (oder auch die Datenleitung durch einen 1-Wire Teilnehmer auf 0 Volt gezogen wird. Dies kann durch Software 1-Wire Bausteine auch passieren).&lt;br /&gt;
&lt;br /&gt;
Alle Teilnehmer entfernen und die Leitungen entsprechend durchmessen. Hierbei kann auch eine hochohmige Verbindung (kein direkter Kurzschluss) eine Problem sein. Um diese auszuschließen muss das Multimeter im Mega-Ohm Bereich eingestellt werden und die Leitungen prüfen. Danach jeden Teilnehmer einzeln wieder in den Bus aufnehmen und prüfen, ob der Bus noch in Ordnung ist (Error Counter prüfen).&lt;br /&gt;
=== Leitungsbruch prüfen ===&lt;br /&gt;
Sind an allen Teilnehmer alle Leitungen korrekt angeschlossen. Sind Klemmen verwendet, da sollte man prüfen, ob alle Drähte fest angeschlossen. Man sollte an den Drähten ziehen können, ohne das sich der Draht löst. Wenn man LSA Klemmen verwendet, sollte man prüfen, ob der Draht auch wirklich tief in die Klemme gedrückt wurde. Evtl. einfach nochmals alle Kontakte nachdrücken. Kalte Lötstellen sind auch eine mögliche Problemstelle. &lt;br /&gt;
&lt;br /&gt;
=== Spannungsversorgung prüfen ===&lt;br /&gt;
Damit der 1-Wire Bus stabil arbeiten kann, muss die Spannungsversorgung aller Busteilnehmer stabil sein.&lt;br /&gt;
Einen ersten Test kann man mit einem normalen Multimeter durchführen. Hierbei sollte die Spannung an allen&lt;br /&gt;
Teilstrecken des Bus zwischen 4,9V und 5.2Volt liegen. &#039;&#039;&#039;Ein Multimeter kann kurzzeitige Spannungseinbrüche nicht messen!&#039;&#039;&#039;&lt;br /&gt;
Hier ist ein Oszilloskope für die genaue Messung notwendig. Dann kann auch die Brummspannung (Ripple) auf der 5V Leitung gemessen werden. Eine Brummspannung größer 100mV (eigentlich weniger) ist ein Zeichen für eine fehlerhafte Spannungsversorgung und sollte geprüft werden. Hier könnten Filterschaltungen oder ein besseres Netzteil Abhilfe schaffen.&lt;br /&gt;
&lt;br /&gt;
=== Signalverhalten prüfen ===&lt;br /&gt;
Ein Fehler, welcher bei Leitungen im kurzen und mittleren Bereich gerne auftritt, ist das „&#039;&#039;&#039;ringing/undershoot&#039;&#039;&#039;“ Signal.&lt;br /&gt;
Hierbei wird kurzzeitige das 1-Wire Signal in den negativen Spannungsbereich gezogen (Impulse von bis -0.5Volt und mehr sind keine Seltenheit).&lt;br /&gt;
Ein entsprechendes Bild des Signalverlauf kann man auf der Seite 10 (Appendix D. Waveform Examples) des [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“] sehen.&lt;br /&gt;
&lt;br /&gt;
Dieser Effekt wird durch die angeschlossenen Client&#039;s bei einem Bus Reset durch den Master erzeugt. &lt;br /&gt;
Diese Impulse können hierbei die angeschlossenen 1-wire Teilnehmer in der Signalfolge des 1-wire Protokolle aus dem Tritt bringen.&lt;br /&gt;
Der Effekt zeigt sich z.B. durch kommen und gehende Teilnehmer in der Device-Übersicht des OW Servers.&lt;br /&gt;
Diesen Effekt kann man nur mit einem Oszilloskope messen/darstellen.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Abhilfe&#039;&#039;&#039; ist hier nur die Einbringung eines &#039;&#039;&#039;RC-Glied&#039;&#039;&#039; in den Anfang des betroffenen 1-Wire Bus. &lt;br /&gt;
Laut Guideline von Maxim sollte es ein 68 Ohm Widerstand sein und ein 470pF oder 4700pF je nach Leitungslänge sein.&lt;br /&gt;
Der entsprechend Schaltplan ist auf der Seite 9 des [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“] zu sehen.  &lt;br /&gt;
== Bus Erweiterungen ==&lt;br /&gt;
Wenn der 1-wire Bus erweitert wird, kann sich das Leitungsverhalten ändern, insbesondere dann, wenn man nicht die optimale Netztopologie &amp;quot;Linear&amp;quot; verwendet.&lt;br /&gt;
=== Stubs vermeiden ===&lt;br /&gt;
Hier können die sogenannten &#039;&#039;&#039;Stub&#039;&#039;&#039;, Abzweigungen vom Hauptstrang zum Problem werden. Sind diese Abzweigungen länger als 3m, beeinflussen sie nachweislich das Signalverhalten, da man in diesem Fall nicht mehr von einem linearen Bus, sondern einem &#039;&#039;&#039;stubbed&#039;&#039;&#039; Topologie redet. Die Leitungsrefektionen dieser Seitenarme können den Bus stören und sind daher zu vermeiden.&lt;br /&gt;
=== Slave Device Weight prüfen ===&lt;br /&gt;
Das Slave Device Weight ist eine Kenngröße für die Kabellänge in Verbindung mit den angeschlossenen Devices innerhalb eines Bus Strangs. Hierbei wird die Kabellänge und die Anzahl der angeschlossenen 1-wire Slaves zu einem &amp;quot;Gewicht&amp;quot; ermittelt. Hierbei hat ein iButton die Kenngröße &amp;quot;1m&amp;quot; und normale Devices eine Kenngröße von &amp;quot;0.5m&amp;quot; in Verbindung mit der Kabellänge kann man so den maximalen Ausbau seines möglichen Bus ermitteln.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:1wireowservererrorstatus.png&amp;diff=11111</id>
		<title>Datei:1wireowservererrorstatus.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:1wireowservererrorstatus.png&amp;diff=11111"/>
		<updated>2015-04-29T18:12:46Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Display of the bus error status of the selected
1-Wire Bus, using the owserver web interface&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Display of the bus error status of the selected&lt;br /&gt;
1-Wire Bus, using the owserver web interface&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_St%C3%B6rungsbeseitigung&amp;diff=11105</id>
		<title>1-Wire Störungsbeseitigung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_St%C3%B6rungsbeseitigung&amp;diff=11105"/>
		<updated>2015-04-26T15:04:06Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Die Seite wurde neu angelegt: „Generell beschreiben die folgenden Punkte Informationen aus dem Dokument [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliab…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generell beschreiben die folgenden Punkte Informationen aus dem Dokument [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“]. Dieser Absatz soll eine zusätzliche Hilfe darstellen und bezieht sich aus den Informationen des obigen Dokuments mit einigen praktischen Hinweisen. &lt;br /&gt;
== Bus Fehler feststellen==&lt;br /&gt;
Der OWServer und die entsprechende Webseite des Servers bietet einige Möglichkeiten um Fehler auf dem 1-Wire Bus festzustellen. Die Fehler können innerhalb der Statistik des OW Servers gesehen werden.&lt;br /&gt;
=== CRC Fehler ===&lt;br /&gt;
Die [http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung CRC Fehler] werden auf der Seite „http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/statistics/errors“ dargestellt. Hier sieht man die Anzahl der übertragenen Pakete und deren Fehleranzahl. Bei einem guten Bus sollte die Anzahl der CRC8 / CRC16 = 0 sein. Generell kann man sagen, je größer diese Zahl im Verhältnis zu den gesendeten Protokollen ist, umso schlechter ist der Bus. &lt;br /&gt;
&lt;br /&gt;
=== Search Fehler ===&lt;br /&gt;
Sollten während der Suche von Busteilnehmer auf dem 1-Wire Bus Fehler auftreten, werden diese auf diese Webseite des OW Server dargestellt. Hier sollte auch immer eine 0 stehen. Generell kann man sagen, je größer diese Zahl im Verhältnis zu den Suchanfragen ist, umso schlechter ist der Bus. http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/bus.2/interface/statistics/search_errors&lt;br /&gt;
=== Generelle Fehler===&lt;br /&gt;
Sollten werden eine Schreibvorgangs oder Lesevorgangs generelle Fehler auftauchen, so werden hier die entsprechenden Fehlerzähler angezeigt. Im Normalfall sollte auch hier 0 stehen. http://&amp;lt;IP-OWSERVER&amp;gt;:2121/bus.0/bus.0/interface/statistics&lt;br /&gt;
&lt;br /&gt;
== Bus Fehler Ursache suchen ==&lt;br /&gt;
Um die Fehlerquellen entsprechend einzukreisen, kann man wie folgt vorgehen, um die Ursache zu finden und entsprechend zu beseitigen.&lt;br /&gt;
Es wird generell von einer korrekten Konfiguration des OW-Servers ausgegangen.&lt;br /&gt;
=== Kurzschluss prüfen ===&lt;br /&gt;
Zeigen sich auf dem 1-Wire Bus keine Teilnehmer, liegt die Vermutung nahe, das ein Kurzschluss auf dem Bus vorhanden ist (oder auch die Datenleitung durch einen 1-Wire Teilnehmer auf 0 Volt gezogen wird. Dies kann durch Software 1-Wire Bausteine auch passieren).&lt;br /&gt;
&lt;br /&gt;
Alle Teilnehmer entfernen und die Leitungen entsprechend durchmessen. Hierbei kann auch eine hochohmige Verbindung (kein direkter Kurzschluss) eine Problem sein. Um diese auszuschließen muss das Multimeter im Mega-Ohm Bereich eingestellt werden und die Leitungen prüfen. Danach jeden Teilnehmer einzeln wieder in den Bus aufnehmen und prüfen, ob der Bus noch in Ordnung ist (Error Counter prüfen).&lt;br /&gt;
=== Leitungsbruch prüfen ===&lt;br /&gt;
Sind an allen Teilnehmer alle Leitungen korrekt angeschlossen. Sind Klemmen verwendet, da sollte man prüfen, ob alle Drähte fest angeschlossen. Man sollte an den Drähten ziehen können, ohne das sich der Draht löst. Wenn man LSA Klemmen verwendet, sollte man prüfen, ob der Draht auch wirklich tief in die Klemme gedrückt wurde. Evtl. einfach nochmals alle Kontakte nachdrücken. Kalte Lötstellen sind auch eine mögliche Problemstelle. &lt;br /&gt;
&lt;br /&gt;
=== Spannungsversorgung prüfen ===&lt;br /&gt;
Damit der 1-Wire Bus stabil arbeiten kann, muss die Spannungsversorgung aller Busteilnehmer stabil sein.&lt;br /&gt;
Einen ersten Test kann man mit einem normalen Multimeter durchführen. Hierbei sollte die Spannung an allen&lt;br /&gt;
Teilstrecken des Bus zwischen 4,9V und 5.2Volt liegen. &#039;&#039;&#039;Ein Multimeter kann kurzzeitige Spannungseinbrüche nicht messen!&#039;&#039;&#039;&lt;br /&gt;
Hier ist ein Oszilloskope für die genaue Messung notwendig. Dann kann auch die Brummspannung (Ripple) auf der 5V Leitung gemessen werden. Eine Brummspannung größer 100mV (eigentlich weniger) ist ein Zeichen für eine fehlerhafte Spannungsversorgung und sollte geprüft werden. Hier könnten Filterschaltungen oder ein besseres Netzteil Abhilfe schaffen.&lt;br /&gt;
&lt;br /&gt;
=== Signalverhalten prüfen ===&lt;br /&gt;
Ein Fehler, welcher bei Leitungen im kurzen und mittleren Bereich gerne auftritt, ist das „&#039;&#039;&#039;ringing/undershoot&#039;&#039;&#039;“ Signal.&lt;br /&gt;
Hierbei wird kurzzeitige das 1-Wire Signal in den negativen Spannungsbereich gezogen (Impulse von bis -0.5Volt und mehr sind keine Seltenheit).&lt;br /&gt;
Ein entsprechendes Bild des Signalverlauf kann man auf der Seite 10 (Appendix D. Waveform Examples) des [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“] sehen.&lt;br /&gt;
&lt;br /&gt;
Dieser Effekt wird durch die angeschlossenen Client&#039;s bei einem Bus Reset durch den Master erzeugt. &lt;br /&gt;
Diese Impulse können hierbei die angeschlossenen 1-wire Teilnehmer in der Signalfolge des 1-wire Protokolle aus dem Tritt bringen.&lt;br /&gt;
Der Effekt zeigt sich z.B. durch kommen und gehende Teilnehmer in der Device-Übersicht des OW Servers.&lt;br /&gt;
Diesen Effekt kann man nur mit einem Oszilloskope messen/darstellen.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Abhilfe&#039;&#039;&#039; ist hier nur die Einbringung eines &#039;&#039;&#039;RC-Glied&#039;&#039;&#039; in den Anfang des betroffenen 1-Wire Bus. &lt;br /&gt;
Laut Guideline von Maxim sollte es ein 68 Ohm Widerstand sein und ein 470pF oder 4700pF je nach Leitungslänge sein.&lt;br /&gt;
Der entsprechend Schaltplan ist auf der Seite 9 des [http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 „Guidelines for Reliable Long 1-Wire Networks.“] zu sehen.  &lt;br /&gt;
== Bus Erweiterungen ==&lt;br /&gt;
Wenn der 1-wire Bus erweitert wird, kann sich das Leitungsverhalten ändern, insbesondere dann, wenn man nicht die optimale Netztopologie &amp;quot;Linear&amp;quot; verwendet.&lt;br /&gt;
=== Stubs vermeiden ===&lt;br /&gt;
Hier können die sogenannten &#039;&#039;&#039;Stub&#039;&#039;&#039;, Abzweigungen vom Hauptstrang zum Problem werden. Sind diese Abzweigungen länger als 3m, beeinflussen sie nachweislich das Signalverhalten, da man in diesem Fall nicht mehr von einem linearen Bus, sondern einem &#039;&#039;&#039;stubbed&#039;&#039;&#039; Topologie redet. Die Leitungsrefektionen dieser Seitenarme können den Bus stören und sind daher zu vermeiden.&lt;br /&gt;
=== Slave Device Weight prüfen ===&lt;br /&gt;
Das Slave Device Weight ist eine Kenngröße für die Kabellänge in Verbindung mit den angeschlossenen Devices innerhalb eines Bus Strangs. Hierbei wird die Kabellänge und die Anzahl der angeschlossenen 1-wire Slaves zu einem &amp;quot;Gewicht&amp;quot; ermittelt. Hierbei hat ein iButton die Kenngröße &amp;quot;1m&amp;quot; und normale Devices eine Kenngröße von &amp;quot;0.5m&amp;quot; in Verbindung mit der Kabellänge kann man so den maximalen Ausbau seines möglichen Bus ermitteln.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PDF_Datei_darstellen&amp;diff=4058</id>
		<title>PDF Datei darstellen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PDF_Datei_darstellen&amp;diff=4058"/>
		<updated>2013-12-27T16:27:00Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* FireFox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PDF Dateien unter FHEM darstellen =&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Zeilen kann man eine PDF Datei direkt in seiner FHEM Webseite darstellen. Der PDF&lt;br /&gt;
Reader wird in dem entsprechenden Frame des Computers geöffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### Aufruf der FHEM Anfänger Anleitung via https&lt;br /&gt;
define FhemDoc weblink iframe https://fhem:8083/fhem/docs/fhem-floorplan-installation-guide_de.pdf&lt;br /&gt;
attr FhemDoc room Anleitung&lt;br /&gt;
attr FhemDoc htmlattr width=&amp;quot;600&amp;quot; height=&amp;quot;900&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels des &amp;quot;htmlattr&amp;quot; kann man die Größe des PDF-Viewers innerhalb der Webseite bestimmen.&lt;br /&gt;
&lt;br /&gt;
Hierbei wird bei Anwahl des Menüpunkt &amp;quot;Fhemdoc&amp;quot; innerhalb des gleichen Frames ein PDF Reader geöffnet und&lt;br /&gt;
dieser zeigt dann die entsprechende PDF Seite an.&lt;br /&gt;
== PC basierend ==&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Das Darstellen oder Einbinden von Dokumentation ist auf linux PC ist generell einfach, da durch den Aufruf automatisch ein entsprechender Reader geladen wird.  Unter Linux (kubuntu) wird automatisch okula geöffnet.&lt;br /&gt;
=== Windows/Mac ===&lt;br /&gt;
Auf einer Windows-Maschine oder Mac Maschine ist meist der Acrobat Reader installiert und sollte daher auch sofort arbeitet. Sollte die Darstellung nicht arbeiten, fehlt meistens das Acrobat Reader Plug-in des Internet Browsers.&lt;br /&gt;
== Android basierend ==&lt;br /&gt;
=== Standard Browser ===&lt;br /&gt;
Standardmäßig stellt der WEB Browser eines Android Handy&#039;s oder Tablet keine PDF Dateien dar. Die Datei wird automatisch gedownloaded und muss dann manuell mit einem PDF Reader geöffnet.&lt;br /&gt;
=== FireFox ===&lt;br /&gt;
Der Browser &amp;quot;FireFox&amp;quot; biete die Möglichkeit von Addons, welche den Browser um weitere Funktionen erweitert.&lt;br /&gt;
&lt;br /&gt;
Nachdem man im Google Play Store das Programm-Paket &amp;quot;Fire Fox&amp;quot; hinzugefügt hat und diesen nach seinen Wünschen konfiguiert hat, muss hier noch das Addon für &amp;quot;Fire Fox&amp;quot; namens &amp;quot;PDF Viewer&amp;quot; zu Firefox hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
;HInweis zum Browser FireFox&lt;br /&gt;
*Firefox scheint ein Problem mit dem &amp;quot;iFrame&amp;quot; Code zu haben, da ein entsprechender Code nicht auf der Webseite darstellt wird.&lt;br /&gt;
*Firefox ist generell nicht der schnellste Browser&lt;br /&gt;
&lt;br /&gt;
; Nachteile der PDF Viewer Lösung&lt;br /&gt;
* Die Software wandelt die PDF Datei beim Öffnen der PDF-Datei diese in HTML5 um. Hierdurch ist die Darstellung der PDF Datei sehr langsam. Leider ist dies derzeit die einzige Lösung (Stand 12.2013), wie man in Webseiten eine PDF Datei unter Fire Fox darstellen kann.&lt;br /&gt;
&lt;br /&gt;
=== Dolphin Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Boat Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Maxthon Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Opera Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== UC Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Chrome Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PDF_Datei_darstellen&amp;diff=3900</id>
		<title>PDF Datei darstellen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PDF_Datei_darstellen&amp;diff=3900"/>
		<updated>2013-12-13T17:03:03Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* PDF Dateien unter FHEM darstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PDF Dateien unter FHEM darstellen =&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Zeilen kann man eine PDF Datei direkt in seiner FHEM Webseite darstellen. Der PDF&lt;br /&gt;
Reader wird in dem entsprechenden Frame des Computers geöffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### Aufruf der FHEM Anfänger Anleitung via https&lt;br /&gt;
define FhemDoc weblink iframe https://fhem:8083/fhem/docs/fhem-floorplan-installation-guide_de.pdf&lt;br /&gt;
attr FhemDoc room Anleitung&lt;br /&gt;
attr FhemDoc htmlattr width=&amp;quot;600&amp;quot; height=&amp;quot;900&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels des &amp;quot;htmlattr&amp;quot; kann man die Größe des PDF-Viewers innerhalb der Webseite bestimmen.&lt;br /&gt;
&lt;br /&gt;
Hierbei wird bei Anwahl des Menüpunkt &amp;quot;Fhemdoc&amp;quot; innerhalb des gleichen Frames ein PDF Reader geöffnet und&lt;br /&gt;
dieser zeigt dann die entsprechende PDF Seite an.&lt;br /&gt;
== PC basierend ==&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Das Darstellen oder Einbinden von Dokumentation ist auf linux PC ist generell einfach, da durch den Aufruf automatisch ein entsprechender Reader geladen wird.  Unter Linux (kubuntu) wird automatisch okula geöffnet.&lt;br /&gt;
=== Windows/Mac ===&lt;br /&gt;
Auf einer Windows-Maschine oder Mac Maschine ist meist der Acrobat Reader installiert und sollte daher auch sofort arbeitet. Sollte die Darstellung nicht arbeiten, fehlt meistens das Acrobat Reader Plug-in des Internet Browsers.&lt;br /&gt;
== Android basierend ==&lt;br /&gt;
=== Standard Browser ===&lt;br /&gt;
Standardmäßig stellt der WEB Browser eines Android Handy&#039;s oder Tablet keine PDF Dateien dar. Die Datei wird automatisch gedownloaded und muss dann manuell mit einem PDF Reader geöffnet.&lt;br /&gt;
=== FireFox ===&lt;br /&gt;
Der Browser &amp;quot;FireFox&amp;quot; biete die Möglichkeit von Addons, welche den Browser um weitere Funktionen erweitert.&lt;br /&gt;
&lt;br /&gt;
Nachdem man im Google Play Store das Programm-Paket &amp;quot;Fire Fox&amp;quot; hinzugefügt hat und diesen nach seinen Wünschen konfiguiert hat, muss hier noch das Addon für &amp;quot;Fire Fox&amp;quot; namens &amp;quot;PDF Viewer&amp;quot; zu Firefox hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
; Nachteile der PDF Viewer Lösung&lt;br /&gt;
* Die Software wandelt die PDF Datei beim Öffnen der PDF-Datei diese in HTML5 um. Hierdurch ist die Darstellung der PDF Datei sehr langsam. Leider ist dies derzeit die einzige Lösung (Stand 12.2013), wie man in Webseiten eine PDF Datei unter Fire Fox darstellen kann.&lt;br /&gt;
=== Dolphin Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Boat Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Maxthon Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Opera Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== UC Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Chrome Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PDF_Datei_darstellen&amp;diff=3899</id>
		<title>PDF Datei darstellen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PDF_Datei_darstellen&amp;diff=3899"/>
		<updated>2013-12-13T17:00:43Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Die Seite wurde neu angelegt: „= PDF Dateien unter FHEM darstellen =  Mit den folgenden Zeilen kann man eine PDF Datei direkt in seiner FHEM Webseite darstellen. Der PDF Reader wird in dem e…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PDF Dateien unter FHEM darstellen =&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Zeilen kann man eine PDF Datei direkt in seiner FHEM Webseite darstellen. Der PDF&lt;br /&gt;
Reader wird in dem entsprechenden Frame des Computers geöffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### Aufruf der FHEM Anfänger Anleitung via https&lt;br /&gt;
define FhemDoc weblink iframe https://fhem:8083/fhem/docs/fhem-floorplan-installation-guide_de.pdf&lt;br /&gt;
attr FhemDoc room Anleitung&lt;br /&gt;
attr FhemDoc htmlattr width=&amp;quot;600&amp;quot; height=&amp;quot;900&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels des &amp;quot;htmlattr&amp;quot; kann man die Größe des PDF-Viewers innerhalb der Webseite bestimmen.&lt;br /&gt;
&lt;br /&gt;
Hierbei wird bei Anwahl des Menüpunkt &amp;quot;Fhemdoc&amp;quot; innerhalb des gleichen Frames ein PDF Reader geöffnet und&lt;br /&gt;
dieser zeigt dann die entsprechende PDF Seite an.&lt;br /&gt;
== PC basierend ==&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Das Darstellen oder Einbinden von Dokumentation ist auf linux PC ist generell einfach, da durch den Aufruf automatisch ein entsprechender Reader geladen wird.  Unter Linux (kubuntu) wird automatisch okula geöffnet.&lt;br /&gt;
=== Windows/Mac ===&lt;br /&gt;
Auf einer Windows-Maschine oder Mac Maschine ist meist der Acrobat Reader installiert und sollte daher auch sofort arbeitet. Sollte die Darstellung nicht arbeiten, fehlt meistens das Acrobat Reader Plug-in des Internet Browsers.&lt;br /&gt;
== Android basierend ==&lt;br /&gt;
=== Standard Browser ===&lt;br /&gt;
Standardmäßig stellt der WEB Browser eines Android Handy&#039;s oder Tablet keine PDF Dateien dar. Die Datei wird automatisch gedownloaded und muss dann manuell mit einem PDF Reader geöffnet.&lt;br /&gt;
=== FireFox ===&lt;br /&gt;
Der Browser &amp;quot;FireFox&amp;quot; biete die Möglichkeit von Addons, welche den Browser um weitere Funktionen erweitert.&lt;br /&gt;
&lt;br /&gt;
Nachdem man im Google Play Store das Programm-Paket &amp;quot;Fire Fox&amp;quot; hinzugefügt hat und diesen nach seinen Wünschen konfiguiert hat, muss hier noch das Addon für &amp;quot;Fire Fox&amp;quot; namens &amp;quot;PDF Viewer&amp;quot; zu Firefox hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
; Nachteile der PDF Viewer Lösung&lt;br /&gt;
* Die Software wandelt die PDF Datei beim Öffnen der PDF-Datei diese in HTML5 um. Hierdurch ist die Darstellung der PDF Datei sehr langsam. Leider ist dies derzeit die einzige Lösung (Stand 12.2013), wie man in Webseiten eine PDF Datei unter Fire Fox darstellen kann.&lt;br /&gt;
=== Dolphin Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Boat Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Maxthon Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Opera Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== UC Browser ===&lt;br /&gt;
Infos fehlen noch&lt;br /&gt;
=== Chrome Browser ===&lt;br /&gt;
Infos fehlen noch&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=3898</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=3898"/>
		<updated>2013-12-13T16:15:59Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* SkyTC Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ListenLive ist eine&lt;br /&gt;
* alternative Firmware für eine Reihe von Webradio Geräten (dadurch wird es für FHEM relevant)&lt;br /&gt;
* Datenbank mit Informationen und Links zu Webradio und WebTV Sendern&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
Die Firmware von ListenLive arbeitet mit einer Vielzahl von Webradio Geräten zusammen. Einen Überblick über unterstützte Geräte geben die folgenden Abschnitte. Eine detaillierte aktuelle Liste findet sich jeweils auf der [http://listenlive.nl/dl.php ListenLive Webseite].&lt;br /&gt;
&lt;br /&gt;
== Penbex Hardware ==&lt;br /&gt;
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson, &lt;br /&gt;
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, &lt;br /&gt;
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, &lt;br /&gt;
Pbirkit2, Konig HAV-20/21/22&lt;br /&gt;
&lt;br /&gt;
== SkyTC Hardware ==&lt;br /&gt;
Mediabox 135, Arnova WebRadio &amp;amp; TV, [[Xoro HMT 350]], XORO HMT370, &lt;br /&gt;
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235, &lt;br /&gt;
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
Auf der ListenLive Webseite gibt es für Webradios der Hersteller PenPex und SkytV eine alternative Firmware. Die derzeitige Version 1.49 (Stand 06.2013) wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert. &lt;br /&gt;
Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket. &lt;br /&gt;
Die gesendeten Befehle werden jeweils mit dem Text &amp;quot;OK&amp;quot; beantwortet. &lt;br /&gt;
Im Wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Schnittstellenparameter ==&lt;br /&gt;
Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig.&lt;br /&gt;
Das Radio sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen, &lt;br /&gt;
dass man in den Netzwerkeinstellungen für dieses Geräte die Einstellung &lt;br /&gt;
* &amp;quot;Diesem Gerät immer die gleiche IP Adresse vergeben.&amp;quot;&lt;br /&gt;
verwendet.&lt;br /&gt;
Die korrekte Erkennung des Radios erfolgt hierbei über die Mac-Adresse des WLAN Interfaces&lt;br /&gt;
* IP Adresse des Radios (z.B. 192.168.1.33)&lt;br /&gt;
* Port 8080&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die myUtils:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.0.55&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorgehensweise für Radioansteuerung (derzeit) ==&lt;br /&gt;
; Laufende Applikation beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; , &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot; an das Radio senden&lt;br /&gt;
oder&amp;lt;br /&amp;gt;&lt;br /&gt;
; Das Radio einschalten (Hier muss FHEM ein Merker halten, ob das Radio an/aus ist)&lt;br /&gt;
* &amp;quot;POWER&amp;quot; an das Radio senden&lt;br /&gt;
; Das Radio in das Hauptmenu mit dem Eintrag &amp;quot;Favoriten&amp;quot; einstellen&lt;br /&gt;
* &amp;quot;HOME&amp;quot; an das Radio senden&lt;br /&gt;
; In den Menüeintrag &amp;quot;Favoriten&amp;quot; wechseln&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
; Den Eintrag &amp;quot;Internet-Radio Favoriten auswählen&amp;quot;&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden.&lt;br /&gt;
; jetzt den Radiosender auswählen&lt;br /&gt;
* &amp;quot;DOWN&amp;quot; an das Radio senden (Eintragsnr -1 ) mal senden&lt;br /&gt;
; Jetzt das Radio hören starten&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
Während das Radio abgespielt wird, kann man noch auf die Wettervorhersage wechseln. Dies geht mit den folgenden Kommandos:&lt;br /&gt;
; Akuelles Wetter auswählen&lt;br /&gt;
* &amp;quot;MENU&amp;quot; an das Radio senden&lt;br /&gt;
; 5 Tage Vorhersage auswählen (wenn Wetter angezeigt wird)&lt;br /&gt;
* &amp;quot;LEFT&amp;quot; an das Radio senden&lt;br /&gt;
* nochmals &amp;quot;RIGHT&amp;quot; zeigt wieder das aktuelle Wetter an&lt;br /&gt;
; Wetter Anzeige wieder beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; senden&lt;br /&gt;
; Die Uhrzeit anzeigen &lt;br /&gt;
* &amp;quot;CLOCK&amp;quot; an das Radio senden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; beendet die Anzeige der Uhrzeit wieder&lt;br /&gt;
; Die Lautstärke ändert&lt;br /&gt;
* &amp;quot;VOLp&amp;quot; für lauter und &amp;quot;VOLm&amp;quot; für leiser an das Radio sendet&lt;br /&gt;
&lt;br /&gt;
== Ansatz für eine erste Lösung des Steuerproblems ==&lt;br /&gt;
Eine Klasse schreiben, welche die Steuerung der Menupunkt innerhalb der Klasse kapselt. Der Anwender sollte hierbei nur Kommandos wie &amp;quot;Radio.SenderAbspielen(1)&amp;quot; verwenden müssen. Die aktuelle Position innerhalb der Menustruktur sollte die Klasse festhalten.&lt;br /&gt;
&lt;br /&gt;
== Beispielcode für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das Ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;br /&gt;
[[Kategorie:Socks]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=3897</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=3897"/>
		<updated>2013-12-13T16:15:12Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* SkyTC Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ListenLive ist eine&lt;br /&gt;
* alternative Firmware für eine Reihe von Webradio Geräten (dadurch wird es für FHEM relevant)&lt;br /&gt;
* Datenbank mit Informationen und Links zu Webradio und WebTV Sendern&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
Die Firmware von ListenLive arbeitet mit einer Vielzahl von Webradio Geräten zusammen. Einen Überblick über unterstützte Geräte geben die folgenden Abschnitte. Eine detaillierte aktuelle Liste findet sich jeweils auf der [http://listenlive.nl/dl.php ListenLive Webseite].&lt;br /&gt;
&lt;br /&gt;
== Penbex Hardware ==&lt;br /&gt;
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson, &lt;br /&gt;
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, &lt;br /&gt;
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, &lt;br /&gt;
Pbirkit2, Konig HAV-20/21/22&lt;br /&gt;
&lt;br /&gt;
== SkyTC Hardware ==&lt;br /&gt;
Mediabox 135, Arnova WebRadio &amp;amp; TV, [[Xoro HMT 350]], XORO HMT370, &lt;br /&gt;
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235, &lt;br /&gt;
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv&lt;br /&gt;
&lt;br /&gt;
[[Darstellung einer PDF Seite im Handy oder Tablet]]&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
Auf der ListenLive Webseite gibt es für Webradios der Hersteller PenPex und SkytV eine alternative Firmware. Die derzeitige Version 1.49 (Stand 06.2013) wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert. &lt;br /&gt;
Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket. &lt;br /&gt;
Die gesendeten Befehle werden jeweils mit dem Text &amp;quot;OK&amp;quot; beantwortet. &lt;br /&gt;
Im Wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Schnittstellenparameter ==&lt;br /&gt;
Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig.&lt;br /&gt;
Das Radio sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen, &lt;br /&gt;
dass man in den Netzwerkeinstellungen für dieses Geräte die Einstellung &lt;br /&gt;
* &amp;quot;Diesem Gerät immer die gleiche IP Adresse vergeben.&amp;quot;&lt;br /&gt;
verwendet.&lt;br /&gt;
Die korrekte Erkennung des Radios erfolgt hierbei über die Mac-Adresse des WLAN Interfaces&lt;br /&gt;
* IP Adresse des Radios (z.B. 192.168.1.33)&lt;br /&gt;
* Port 8080&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die myUtils:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.0.55&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorgehensweise für Radioansteuerung (derzeit) ==&lt;br /&gt;
; Laufende Applikation beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; , &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot; an das Radio senden&lt;br /&gt;
oder&amp;lt;br /&amp;gt;&lt;br /&gt;
; Das Radio einschalten (Hier muss FHEM ein Merker halten, ob das Radio an/aus ist)&lt;br /&gt;
* &amp;quot;POWER&amp;quot; an das Radio senden&lt;br /&gt;
; Das Radio in das Hauptmenu mit dem Eintrag &amp;quot;Favoriten&amp;quot; einstellen&lt;br /&gt;
* &amp;quot;HOME&amp;quot; an das Radio senden&lt;br /&gt;
; In den Menüeintrag &amp;quot;Favoriten&amp;quot; wechseln&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
; Den Eintrag &amp;quot;Internet-Radio Favoriten auswählen&amp;quot;&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden.&lt;br /&gt;
; jetzt den Radiosender auswählen&lt;br /&gt;
* &amp;quot;DOWN&amp;quot; an das Radio senden (Eintragsnr -1 ) mal senden&lt;br /&gt;
; Jetzt das Radio hören starten&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
Während das Radio abgespielt wird, kann man noch auf die Wettervorhersage wechseln. Dies geht mit den folgenden Kommandos:&lt;br /&gt;
; Akuelles Wetter auswählen&lt;br /&gt;
* &amp;quot;MENU&amp;quot; an das Radio senden&lt;br /&gt;
; 5 Tage Vorhersage auswählen (wenn Wetter angezeigt wird)&lt;br /&gt;
* &amp;quot;LEFT&amp;quot; an das Radio senden&lt;br /&gt;
* nochmals &amp;quot;RIGHT&amp;quot; zeigt wieder das aktuelle Wetter an&lt;br /&gt;
; Wetter Anzeige wieder beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; senden&lt;br /&gt;
; Die Uhrzeit anzeigen &lt;br /&gt;
* &amp;quot;CLOCK&amp;quot; an das Radio senden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; beendet die Anzeige der Uhrzeit wieder&lt;br /&gt;
; Die Lautstärke ändert&lt;br /&gt;
* &amp;quot;VOLp&amp;quot; für lauter und &amp;quot;VOLm&amp;quot; für leiser an das Radio sendet&lt;br /&gt;
&lt;br /&gt;
== Ansatz für eine erste Lösung des Steuerproblems ==&lt;br /&gt;
Eine Klasse schreiben, welche die Steuerung der Menupunkt innerhalb der Klasse kapselt. Der Anwender sollte hierbei nur Kommandos wie &amp;quot;Radio.SenderAbspielen(1)&amp;quot; verwenden müssen. Die aktuelle Position innerhalb der Menustruktur sollte die Klasse festhalten.&lt;br /&gt;
&lt;br /&gt;
== Beispielcode für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das Ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;br /&gt;
[[Kategorie:Socks]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fritzbox_via_URL_(http)_steuern&amp;diff=2563</id>
		<title>Fritzbox via URL (http) steuern</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fritzbox_via_URL_(http)_steuern&amp;diff=2563"/>
		<updated>2013-07-16T16:46:54Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Wlan ein/ausschalten */  Fritzbox System Log Eintrag eingefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz  zu der Anderen hier vorgestellten Lösung arbeitet diese Lösung mit einem PHP Programm, welches einige API Funktionen der Fritzbox zur Verfügung stellt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hierbei erfolgt die Steuerung der Fritzbox mittels eines Remote Login in der gleichen Weise, wie es mittels der WEB Oberfläche der Administrator Oberfläche geschieht. Es ist also nicht zwingend notwendig, das dieser Script direkt auf der Fritzbox läuft.&lt;br /&gt;
= Voraussetzung = &lt;br /&gt;
Es muss PHP 5 (PHP 5.3 und 5.4) auf dem System (Raspberry PI) installiert sein.&lt;br /&gt;
&lt;br /&gt;
Die Installation von PHP kann man unter anderem mit folgenden Befehlen bewerkstelligen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo bash&lt;br /&gt;
sudo apt-get install php5&lt;br /&gt;
sudo apt-get install libapache2-mod-php5 libapache2-mod-perl2 php5 php5-cli \ &lt;br /&gt;
     php5-common php5-curl php5-dev php5-gd php5-imap php5-ldap php5-mhash \&lt;br /&gt;
     php5-mysql php5-odbc php-pear php-apc&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Dies ist nur eine der Möglichkeiten um PHP zu installieren und auf einem Raspberry PI hat diese Procedure ohne Probleme gearbeitet. In dieser Version werden alle notwendigen Lib für das Betreiben eines Webservers installieren. Hierbei sind sicherlich mehr Libs installiert, als für diese Funktion notwendig ist.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Installation kann etwas dauern. Daher sollte man das nicht so zwischendurch machen.&lt;br /&gt;
&lt;br /&gt;
= Basisfunktion für die Steuerung = &lt;br /&gt;
Um eine Fritzbox mittels remote Funktionen via einer URL zu steuern, muss ein bestimmtes Anmeldeverfahren (Login-Session) verwendet werden. Eine entsprechende Funktion wird im IP-Phone Forum sehr ausführlich beschrieben und auch weiterentwickelt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hier hat sich das Mitglied &amp;quot;Spackmat&amp;quot; sehr intensive mit dem Thema beschäftigt und eine API Funktion  und einige kleine Hilfeprogramme als Download bereitgestellt. Direkten Support gibt es nicht (Freiberufler, gegen Bezahlung natürlich doch), aber es gibt genügend Hinweise und Hilfe von anderen Beträgen.&lt;br /&gt;
&lt;br /&gt;
Hier der Link zum Download der API und Basis Thread, welcher Grundlage für diesen Artikel ist&lt;br /&gt;
[http://www.ip-phone-forum.de/showthread.php?t=196309&amp;amp;p=1369463&amp;amp;viewfull=1#post1369463  Fritz!Box API für PHP (inkl. Login-Sessions) im IP-phone-forum]&lt;br /&gt;
&lt;br /&gt;
Ein Download kann nur von dieser Seite gemacht werden, da hier immer die aktuelle Version vorliegt. Es lohnt sich bei Interesse die einzelnen Beträge durchzulesen, da man hier auch andere Funktionen auffinden kann (z.B. reboot der Fritzbox).&lt;br /&gt;
&#039;&#039;&#039;Folgende Scripte liegen hier bei (Stand 07.2013):&#039;&#039;&#039;&lt;br /&gt;
== Basis Klasse „fritzbox_api.class.php“ ==&lt;br /&gt;
Die Basis Klasse, welche alle Basis Funktionen zur Steuerung des Login Verfahren beinhaltet. Änderungen sind in dieser Datei eigentlich nicht notwendig.&lt;br /&gt;
== Konfigurationsdatei „fritzbox_user.conf.php“ ==&lt;br /&gt;
In dieser Datei müssen die entsprechenden Parameter der Fritzbox eingetragen werden.&lt;br /&gt;
Als da wären die IP Adresse, das Passwort der Weboberfläche der Fritzbox, da der Script die gleichen Aktionen wie die Weboberfläche durchführt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# use the new .lua login method in current (end 2012) labor and newer firmwares (Fritz!OS 5.50 and up)&lt;br /&gt;
$this-&amp;gt;config-&amp;gt;setItem(&#039;use_lua_login_method&#039;, true);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Bei älteren Fritzboxen muss man hier &#039;false&#039; eintragen. Dies war für eine 7570 notwendig.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# set to your Fritz!Box IP address or DNS name (defaults to fritz.box), for remote config mode, use the dyndns-name like example.dyndns.org&lt;br /&gt;
$this-&amp;gt;config-&amp;gt;setItem(&#039;fritzbox_ip&#039;, &#039;fritz.box&#039;);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Hier muss die IP Adresse der Fritzbox eingetragen werden. Die meisten Fritzboxen reagieren aber genau auf die url.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# set to your Fritz!Box password (defaults to no password, will be ignored, when remote config is enabled)&lt;br /&gt;
$this-&amp;gt;config-&amp;gt;setItem(&#039;password&#039;, &#039;Hier das Password&#039;);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Hier muss das Password der Fritzbox eingetragen werden, damit die Anmeldung des Scripts an die Fritzbox korrekt arbeitet.&lt;br /&gt;
== Gast Wlan ein / ausschalten ==&lt;br /&gt;
Mit dieser Funktion kann man das Gast Wlan der Fritzbox ein und ausschalten. Der Parameter 0 schaltet es aus, 1 ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;fritzbox_guestwlan_on_off.php  0 | 1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Telefon anrufen ==&lt;br /&gt;
Mit dieser Funktion kann man eine Telefonnummer anrufen. Getestet wurde es mit dem Fritz-Fon. Die Rufnummer steht am Anfang der Datei und ruft in dieser Version das erste Fritz-Fon an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_ring_phone.php&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Rufumleitung aktivieren ==&lt;br /&gt;
Hiermit wird die Rufumleitung ein/ausgeschaltet, welche in der Fritzbox entsprechend vorher konfiguiert wurde.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_diversity0on.php 0 | 1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Gast LAN (Port 4) Schnittstellen ein/ausschalten ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_guestlan_on_off.php 0 | 1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Anrufliste auslesen ==&lt;br /&gt;
Hier kann man die Anrufliste auslesen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_get_foncallslist.php&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Anrufbeantworter ein/ausschalten ==&lt;br /&gt;
Die Funktion schaltet den Anrufbeantworter der Fritzbox ein/aus.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_tam_on_off.php 0 | 1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Wlan ein/ausschalten ==&lt;br /&gt;
Der folgende Code schaltet das WLAN der Fritzbox ein / aus. Der Parameter ist 0 | 1.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$dial = &#039;&#039;; // set to the number to dial&lt;br /&gt;
// init the output message&lt;br /&gt;
$message = date(&#039;Y-m-d H:i&#039;) . &#039; &#039;;&lt;br /&gt;
try&lt;br /&gt;
{ &lt;br /&gt;
  // load the fritzbox_api class&lt;br /&gt;
  require_once(__DIR__ . &#039;/fritzbox_api.class.php&#039;);&lt;br /&gt;
  $fritz = new fritzbox_api();&lt;br /&gt;
&lt;br /&gt;
  // handle the CLI arguments or give a help message&lt;br /&gt;
  if (isset($argv[1]) &amp;amp;&amp;amp; ($argv[1] == 0 || $argv[1] == 1) )&lt;br /&gt;
  {&lt;br /&gt;
    $mode = (bool)$argv[1];&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
  $mode = 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if( $mode == 1 )&lt;br /&gt;
	 {&lt;br /&gt;
	 $dial = &#039;#96*1*&#039;; // set to the number to dial&lt;br /&gt;
	 }&lt;br /&gt;
  else&lt;br /&gt;
	 {&lt;br /&gt;
	 $dial = &#039;#96*0*&#039;; // set to the number to dial&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  // update the setting&lt;br /&gt;
&lt;br /&gt;
  $formfields = array(&lt;br /&gt;
    &#039;telcfg:command/Dial&#039;      =&amp;gt; $dial,&lt;br /&gt;
  );&lt;br /&gt;
  $fritz-&amp;gt;doPostForm($formfields);&lt;br /&gt;
}&lt;br /&gt;
catch (Exception $e)&lt;br /&gt;
{&lt;br /&gt;
  $message .= $e-&amp;gt;getMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// log the result&lt;br /&gt;
if ( isset($fritz) &amp;amp;&amp;amp; is_object($fritz) &amp;amp;&amp;amp; get_class($fritz) == &#039;fritzbox_api&#039; )&lt;br /&gt;
{&lt;br /&gt;
  $fritz-&amp;gt;logMessage($message);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  echo($message);&lt;br /&gt;
}&lt;br /&gt;
$fritz = null; // destroy the object to log out&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Da dieser Befehl derzeit noch nicht in der ZIP Datei eingepflegt ist, hier ein direkter Auszug des Quell Code. Der Code basiert im Grund auf der &amp;quot;Dial&amp;quot; Funktion und verwendet die entsprechenden Rufnummern der Fritzbox zum Ein &#039;#96*1*&#039; und Ausschalten &#039;#96*0*&#039; der WLAN Verbindung.&lt;br /&gt;
&lt;br /&gt;
Das Abschalten des WLAN kann man im Systemlog der Fritzbox einsehen. Hier wird folgender Logeintrag für das Ausschalten und Einschalten erzeugt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
16.07.13	17:53:18	WLAN wurde über das Telefon aktiviert (2,4 GHz).&lt;br /&gt;
16.07.13	17:52:44	WLAN wurde über das Telefon deaktiviert (2,4 GHz).&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
Weiterführende Information zu diesem Thema findet man hier [http://www.wehavemorefun.de/ AVM Wiki der Fritz Box]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fritzbox_via_URL_(http)_steuern&amp;diff=2558</id>
		<title>Fritzbox via URL (http) steuern</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fritzbox_via_URL_(http)_steuern&amp;diff=2558"/>
		<updated>2013-07-15T20:19:14Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Basisartikel angelegt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz  zu der Anderen hier vorgestellten Lösung arbeitet diese Lösung mit einem PHP Programm, welches einige API Funktionen der Fritzbox zur Verfügung stellt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hierbei erfolgt die Steuerung der Fritzbox mittels eines Remote Login in der gleichen Weise, wie es mittels der WEB Oberfläche der Administrator Oberfläche geschieht. Es ist also nicht zwingend notwendig, das dieser Script direkt auf der Fritzbox läuft.&lt;br /&gt;
= Voraussetzung = &lt;br /&gt;
Es muss PHP 5 (PHP 5.3 und 5.4) auf dem System (Raspberry PI) installiert sein.&lt;br /&gt;
&lt;br /&gt;
Die Installation von PHP kann man unter anderem mit folgenden Befehlen bewerkstelligen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo bash&lt;br /&gt;
sudo apt-get install php5&lt;br /&gt;
sudo apt-get install libapache2-mod-php5 libapache2-mod-perl2 php5 php5-cli \ &lt;br /&gt;
     php5-common php5-curl php5-dev php5-gd php5-imap php5-ldap php5-mhash \&lt;br /&gt;
     php5-mysql php5-odbc php-pear php-apc&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Dies ist nur eine der Möglichkeiten um PHP zu installieren und auf einem Raspberry PI hat diese Procedure ohne Probleme gearbeitet. In dieser Version werden alle notwendigen Lib für das Betreiben eines Webservers installieren. Hierbei sind sicherlich mehr Libs installiert, als für diese Funktion notwendig ist.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Installation kann etwas dauern. Daher sollte man das nicht so zwischendurch machen.&lt;br /&gt;
&lt;br /&gt;
= Basisfunktion für die Steuerung = &lt;br /&gt;
Um eine Fritzbox mittels remote Funktionen via einer URL zu steuern, muss ein bestimmtes Anmeldeverfahren (Login-Session) verwendet werden. Eine entsprechende Funktion wird im IP-Phone Forum sehr ausführlich beschrieben und auch weiterentwickelt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hier hat sich das Mitglied &amp;quot;Spackmat&amp;quot; sehr intensive mit dem Thema beschäftigt und eine API Funktion  und einige kleine Hilfeprogramme als Download bereitgestellt. Direkten Support gibt es nicht (Freiberufler, gegen Bezahlung natürlich doch), aber es gibt genügend Hinweise und Hilfe von anderen Beträgen.&lt;br /&gt;
&lt;br /&gt;
Hier der Link zum Download der API und Basis Thread, welcher Grundlage für diesen Artikel ist&lt;br /&gt;
[http://www.ip-phone-forum.de/showthread.php?t=196309&amp;amp;p=1369463&amp;amp;viewfull=1#post1369463  Fritz!Box API für PHP (inkl. Login-Sessions) im IP-phone-forum]&lt;br /&gt;
&lt;br /&gt;
Ein Download kann nur von dieser Seite gemacht werden, da hier immer die aktuelle Version vorliegt. Es lohnt sich bei Interesse die einzelnen Beträge durchzulesen, da man hier auch andere Funktionen auffinden kann (z.B. reboot der Fritzbox).&lt;br /&gt;
&#039;&#039;&#039;Folgende Scripte liegen hier bei (Stand 07.2013):&#039;&#039;&#039;&lt;br /&gt;
== Basis Klasse „fritzbox_api.class.php“ ==&lt;br /&gt;
Die Basis Klasse, welche alle Basis Funktionen zur Steuerung des Login Verfahren beinhaltet. Änderungen sind in dieser Datei eigentlich nicht notwendig.&lt;br /&gt;
== Konfigurationsdatei „fritzbox_user.conf.php“ ==&lt;br /&gt;
In dieser Datei müssen die entsprechenden Parameter der Fritzbox eingetragen werden.&lt;br /&gt;
Als da wären die IP Adresse, das Passwort der Weboberfläche der Fritzbox, da der Script die gleichen Aktionen wie die Weboberfläche durchführt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# use the new .lua login method in current (end 2012) labor and newer firmwares (Fritz!OS 5.50 and up)&lt;br /&gt;
$this-&amp;gt;config-&amp;gt;setItem(&#039;use_lua_login_method&#039;, true);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Bei älteren Fritzboxen muss man hier &#039;false&#039; eintragen. Dies war für eine 7570 notwendig.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# set to your Fritz!Box IP address or DNS name (defaults to fritz.box), for remote config mode, use the dyndns-name like example.dyndns.org&lt;br /&gt;
$this-&amp;gt;config-&amp;gt;setItem(&#039;fritzbox_ip&#039;, &#039;fritz.box&#039;);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Hier muss die IP Adresse der Fritzbox eingetragen werden. Die meisten Fritzboxen reagieren aber genau auf die url.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# set to your Fritz!Box password (defaults to no password, will be ignored, when remote config is enabled)&lt;br /&gt;
$this-&amp;gt;config-&amp;gt;setItem(&#039;password&#039;, &#039;Hier das Password&#039;);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Hier muss das Password der Fritzbox eingetragen werden, damit die Anmeldung des Scripts an die Fritzbox korrekt arbeitet.&lt;br /&gt;
== Gast Wlan ein / ausschalten ==&lt;br /&gt;
Mit dieser Funktion kann man das Gast Wlan der Fritzbox ein und ausschalten. Der Parameter 0 schaltet es aus, 1 ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;fritzbox_guestwlan_on_off.php  0 | 1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Telefon anrufen ==&lt;br /&gt;
Mit dieser Funktion kann man eine Telefonnummer anrufen. Getestet wurde es mit dem Fritz-Fon. Die Rufnummer steht am Anfang der Datei und ruft in dieser Version das erste Fritz-Fon an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_ring_phone.php&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Rufumleitung aktivieren ==&lt;br /&gt;
Hiermit wird die Rufumleitung ein/ausgeschaltet, welche in der Fritzbox entsprechend vorher konfiguiert wurde.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_diversity0on.php 0 | 1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Gast LAN (Port 4) Schnittstellen ein/ausschalten ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_guestlan_on_off.php 0 | 1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Anrufliste auslesen ==&lt;br /&gt;
Hier kann man die Anrufliste auslesen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_get_foncallslist.php&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Anrufbeantworter ein/ausschalten ==&lt;br /&gt;
Die Funktion schaltet den Anrufbeantworter der Fritzbox ein/aus.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
fritzbox_tam_on_off.php 0 | 1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Wlan ein/ausschalten ==&lt;br /&gt;
Der folgende Code schaltet das WLAN der Fritzbox ein / aus. Der Parameter ist 0 | 1.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$dial = &#039;&#039;; // set to the number to dial&lt;br /&gt;
// init the output message&lt;br /&gt;
$message = date(&#039;Y-m-d H:i&#039;) . &#039; &#039;;&lt;br /&gt;
try&lt;br /&gt;
{ &lt;br /&gt;
  // load the fritzbox_api class&lt;br /&gt;
  require_once(__DIR__ . &#039;/fritzbox_api.class.php&#039;);&lt;br /&gt;
  $fritz = new fritzbox_api();&lt;br /&gt;
&lt;br /&gt;
  // handle the CLI arguments or give a help message&lt;br /&gt;
  if (isset($argv[1]) &amp;amp;&amp;amp; ($argv[1] == 0 || $argv[1] == 1) )&lt;br /&gt;
  {&lt;br /&gt;
    $mode = (bool)$argv[1];&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
  $mode = 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if( $mode == 1 )&lt;br /&gt;
	 {&lt;br /&gt;
	 $dial = &#039;#96*1*&#039;; // set to the number to dial&lt;br /&gt;
	 }&lt;br /&gt;
  else&lt;br /&gt;
	 {&lt;br /&gt;
	 $dial = &#039;#96*0*&#039;; // set to the number to dial&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  // update the setting&lt;br /&gt;
&lt;br /&gt;
  $formfields = array(&lt;br /&gt;
    &#039;telcfg:command/Dial&#039;      =&amp;gt; $dial,&lt;br /&gt;
  );&lt;br /&gt;
  $fritz-&amp;gt;doPostForm($formfields);&lt;br /&gt;
}&lt;br /&gt;
catch (Exception $e)&lt;br /&gt;
{&lt;br /&gt;
  $message .= $e-&amp;gt;getMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// log the result&lt;br /&gt;
if ( isset($fritz) &amp;amp;&amp;amp; is_object($fritz) &amp;amp;&amp;amp; get_class($fritz) == &#039;fritzbox_api&#039; )&lt;br /&gt;
{&lt;br /&gt;
  $fritz-&amp;gt;logMessage($message);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  echo($message);&lt;br /&gt;
}&lt;br /&gt;
$fritz = null; // destroy the object to log out&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Da dieser Befehl derzeit noch nicht in der ZIP Datei eingepflegt ist, hier ein direkter Auszug des Quell Code. Der Code basiert im Grund auf der &amp;quot;Dial&amp;quot; Funktion und verwendet die entsprechenden Rufnummern der Fritzbox zum Ein &#039;#96*1*&#039; und Ausschalten &#039;#96*0*&#039; der WLAN Verbindung.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
Weiterführende Information zu diesem Thema findet man hier [http://www.wehavemorefun.de/ AVM Wiki der Fritz Box]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2428</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2428"/>
		<updated>2013-07-08T07:15:01Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* SkyTC Hardware */  Link für XORO angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hardware =&lt;br /&gt;
Die Firmware von Listenliste arbeitet derzeit (Stand 06.2013) mit der folgenden Hardware für die unter aufgeführten Produkte zusammen.&lt;br /&gt;
== Penbex Hardware ==&lt;br /&gt;
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson,&amp;lt;br /&amp;gt;&lt;br /&gt;
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, &amp;lt;br /&amp;gt;&lt;br /&gt;
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, &amp;lt;br /&amp;gt;&lt;br /&gt;
Pbirkit2, Konig HAV-20/21/22 &amp;lt;br /&amp;gt;&lt;br /&gt;
== SkyTC Hardware ==&lt;br /&gt;
Mediabox 135, Arnova WebRadio &amp;amp; TV, [http://www.fhemwiki.de/wiki/Xoro_HMT_350 XORO-HMT350] XORO HMT370, &amp;lt;br /&amp;gt;&lt;br /&gt;
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235,&amp;lt;br /&amp;gt;&lt;br /&gt;
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für Webradios der Serie (PenPex und SkytV) eine alternative Firmware. Die derzeit Version 1.49 (Stand 06.2013)&amp;lt;br /&amp;gt;&lt;br /&gt;
wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die gesendeten Befehle werden jeweils mit dem Text &amp;quot;OK&amp;quot; beantwortet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&amp;lt;br /&amp;gt;&lt;br /&gt;
== Schnittstellenparameter ==&lt;br /&gt;
Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die IP Adresse des Radios sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen,&amp;lt;br /&amp;gt;&lt;br /&gt;
das man in den Netzwerkeinstellung für dieses Geräte die Einstellung. &amp;lt;br /&amp;gt;&lt;br /&gt;
*&amp;quot;Diesem Gerät immer die gleiche IP Adresse vergeben.&amp;quot;&lt;br /&gt;
einstellt.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die korrekte Erkennung des Radios erfolgt hierbei über die Mac-Adresse des WLAN Interface.&amp;lt;br /&amp;gt;&lt;br /&gt;
* IP Adresse des Radios (z.B. 192.168.1.33)&lt;br /&gt;
* Port 8080&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die myUtils:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.0.55&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorgehensweise für Radioansteuerung (derzeit) ==&lt;br /&gt;
; Laufende Applikation beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; , &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot; an das Radio senden&lt;br /&gt;
oder&amp;lt;br /&amp;gt;&lt;br /&gt;
; Das Radio einschalten (Hier muss FHEM ein Merker halten, ob das Radio an/aus ist)&lt;br /&gt;
* &amp;quot;POWER&amp;quot; an das Radio senden&lt;br /&gt;
; Das Radio in das Hauptmenu mit dem Eintrag &amp;quot;Favoriten&amp;quot; einstellen&lt;br /&gt;
* &amp;quot;HOME&amp;quot; an das Radio senden&lt;br /&gt;
; In den Menüeintrag &amp;quot;Favoriten&amp;quot; wechseln&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
; Den Eintrag &amp;quot;Internet-Radio Favoriten auswählen&amp;quot;&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden.&lt;br /&gt;
; jetzt den Radiosender auswählen&lt;br /&gt;
* &amp;quot;DOWN&amp;quot; an das Radio senden (Eintragsnr -1 ) mal senden&lt;br /&gt;
; Jetzt das Radio hören starten&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
Während das Radio abgespielt wird, kann man noch auf die Wettervorhersage wechseln. Dies geht mit den folgenden Kommandos:&lt;br /&gt;
; Akuelles Wetter auswählen&lt;br /&gt;
* &amp;quot;MENU&amp;quot; an das Radio senden&lt;br /&gt;
; 5 Tage Vorhersage auswählen (wenn Wetter angezeigt wird)&lt;br /&gt;
* &amp;quot;LEFT&amp;quot; an das Radio senden&lt;br /&gt;
* nochmals &amp;quot;RIGHT&amp;quot; zeigt wieder das aktuelle Wetter an&lt;br /&gt;
; Wetter Anzeige wieder beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; senden&lt;br /&gt;
; Die Uhrzeit anzeigen &lt;br /&gt;
* &amp;quot;CLOCK&amp;quot; an das Radio senden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; beendet die Anzeige der Uhrzeit wieder&lt;br /&gt;
; Die Lautstärke ändert&lt;br /&gt;
* &amp;quot;VOLp&amp;quot; für lauter und &amp;quot;VOLm&amp;quot; für leiser an das Radio sendet&lt;br /&gt;
&lt;br /&gt;
== Ansatz für eine erste Lösung des Steuerproblems ==&lt;br /&gt;
Eine Klasse schreiben, welche die Steuerung der Menupunkt innerhalb der Klasse kapselt. Der Anwender sollte hierbei nur Kommandos wie &amp;quot;Radio.SenderAbspielen(1) verwenden müssen. Die aktuelle Position innerhalb der Menustruktur sollte die Klasse festhalten.&lt;br /&gt;
== Beispielcode für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Xoro_HMT_350&amp;diff=2413</id>
		<title>Xoro HMT 350</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Xoro_HMT_350&amp;diff=2413"/>
		<updated>2013-07-07T17:14:56Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Technische Daten */  Formatierung bearbeitet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Webradio mit ListenLive Firmware ==&lt;br /&gt;
[[Datei:XORO350.JPG]]&lt;br /&gt;
&lt;br /&gt;
Diese Radio kann nach dem einspielen der Firmware von ListenLive mittels eines TCP/IP Socket über FHEM gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
== Kosten ==&lt;br /&gt;
Das Radio kostet im Internet ca. 100 Euro. Bei Pearl kann man es hin und wieder als B Ware für  um die 60€ kaufen.&lt;br /&gt;
&lt;br /&gt;
== Nachfolgemodell ==&lt;br /&gt;
Es gibt bereits ein Nachfolgemodell (HMT 370) dieses Radios, welches ein größeres Display hat. Verschiedene Kritiken im Internet zeigten unterschiedliche Meinungen, hier sollte jeder sein eigene Endscheidung treffen. Fakt ist jedoch der höhere Stromverbrauch des XORO 370 bedingt durch das größere Display (7 Zoll), was der klare Vorteil des XORO 350 ist.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&#039;&#039;&#039;Stromverbrauch&#039;&#039;&#039;&lt;br /&gt;
* Display komplett dunkel 1,8 Watt &lt;br /&gt;
* Display Normal im Menue 2,3 Watt &lt;br /&gt;
* Internet-Radiobetrieb 2,9 Watt&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Display Größe&#039;&#039;&#039;&lt;br /&gt;
*3.5 Zoll&lt;br /&gt;
&#039;&#039;&#039;Fernbedienung&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
*IR Fernbedienung&lt;br /&gt;
&#039;&#039;&#039;Anschlüsse&#039;&#039;&#039;&lt;br /&gt;
* FM Antenne&lt;br /&gt;
* Stereo Eingang (Line In)&lt;br /&gt;
* Kartenleser für SD Karten&lt;br /&gt;
* Strom Mini USB&lt;br /&gt;
&lt;br /&gt;
== IR Fernbedienung ==&lt;br /&gt;
Dem Gerät ist eine IR Fernbedienung beigelegt. Diese Fernbedienung benötigt direkten Sichtkontakt zu Radio und bei einer Entfernung von mehr als 3m ist das Erkennen von Kommandos schon schwieriger.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:Xoro350IRFernbedienung.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Softwarefehler in der Originalsoftware ==&lt;br /&gt;
Laut ListenLive befindet sich in der Originalfirmware des XORO 350, welche er mit &amp;quot;[http://de.wikipedia.org/wiki/Reverse_Engineering reverse engineering]&amp;quot; analysiert hat und dann in seine eigene Version umgeändert hat, ein Programmteil, welche nach einem Zufallsverfahren das eingebaute FLASH mit übermässigen Schreibbefehlen kapputt schreibt. Hierdurch soll es zu einem vorzeitigen Geräteausfall kommen. Dieser &amp;quot;Fehler&amp;quot; wird durch dem Austausch der Firmware beseitigt.&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2412</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2412"/>
		<updated>2013-07-07T17:13:16Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Vorgehensweise für Radioansteuerung (derzeit) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hardware =&lt;br /&gt;
Die Firmware von Listenliste arbeitet derzeit (Stand 06.2013) mit der folgenden Hardware für die unter aufgeführten Produkte zusammen.&lt;br /&gt;
== Penbex Hardware ==&lt;br /&gt;
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson,&amp;lt;br /&amp;gt;&lt;br /&gt;
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, &amp;lt;br /&amp;gt;&lt;br /&gt;
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, &amp;lt;br /&amp;gt;&lt;br /&gt;
Pbirkit2, Konig HAV-20/21/22 &amp;lt;br /&amp;gt;&lt;br /&gt;
== SkyTC Hardware ==&lt;br /&gt;
Mediabox 135, Arnova WebRadio &amp;amp; TV, [http://www.fhemwiki.de/wiki/xorohmt350 XORO-HMT350] XORO HMT370, &amp;lt;br /&amp;gt;&lt;br /&gt;
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235,&amp;lt;br /&amp;gt;&lt;br /&gt;
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für Webradios der Serie (PenPex und SkytV) eine alternative Firmware. Die derzeit Version 1.49 (Stand 06.2013)&amp;lt;br /&amp;gt;&lt;br /&gt;
wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die gesendeten Befehle werden jeweils mit dem Text &amp;quot;OK&amp;quot; beantwortet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&amp;lt;br /&amp;gt;&lt;br /&gt;
== Schnittstellenparameter ==&lt;br /&gt;
Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die IP Adresse des Radios sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen,&amp;lt;br /&amp;gt;&lt;br /&gt;
das man in den Netzwerkeinstellung für dieses Geräte die Einstellung. &amp;lt;br /&amp;gt;&lt;br /&gt;
*&amp;quot;Diesem Gerät immer die gleiche IP Adresse vergeben.&amp;quot;&lt;br /&gt;
einstellt.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die korrekte Erkennung des Radios erfolgt hierbei über die Mac-Adresse des WLAN Interface.&amp;lt;br /&amp;gt;&lt;br /&gt;
* IP Adresse des Radios (z.B. 192.168.1.33)&lt;br /&gt;
* Port 8080&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die myUtils:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.0.55&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorgehensweise für Radioansteuerung (derzeit) ==&lt;br /&gt;
; Laufende Applikation beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; , &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot; an das Radio senden&lt;br /&gt;
oder&amp;lt;br /&amp;gt;&lt;br /&gt;
; Das Radio einschalten (Hier muss FHEM ein Merker halten, ob das Radio an/aus ist)&lt;br /&gt;
* &amp;quot;POWER&amp;quot; an das Radio senden&lt;br /&gt;
; Das Radio in das Hauptmenu mit dem Eintrag &amp;quot;Favoriten&amp;quot; einstellen&lt;br /&gt;
* &amp;quot;HOME&amp;quot; an das Radio senden&lt;br /&gt;
; In den Menüeintrag &amp;quot;Favoriten&amp;quot; wechseln&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
; Den Eintrag &amp;quot;Internet-Radio Favoriten auswählen&amp;quot;&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden.&lt;br /&gt;
; jetzt den Radiosender auswählen&lt;br /&gt;
* &amp;quot;DOWN&amp;quot; an das Radio senden (Eintragsnr -1 ) mal senden&lt;br /&gt;
; Jetzt das Radio hören starten&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
Während das Radio abgespielt wird, kann man noch auf die Wettervorhersage wechseln. Dies geht mit den folgenden Kommandos:&lt;br /&gt;
; Akuelles Wetter auswählen&lt;br /&gt;
* &amp;quot;MENU&amp;quot; an das Radio senden&lt;br /&gt;
; 5 Tage Vorhersage auswählen (wenn Wetter angezeigt wird)&lt;br /&gt;
* &amp;quot;LEFT&amp;quot; an das Radio senden&lt;br /&gt;
* nochmals &amp;quot;RIGHT&amp;quot; zeigt wieder das aktuelle Wetter an&lt;br /&gt;
; Wetter Anzeige wieder beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; senden&lt;br /&gt;
; Die Uhrzeit anzeigen &lt;br /&gt;
* &amp;quot;CLOCK&amp;quot; an das Radio senden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; beendet die Anzeige der Uhrzeit wieder&lt;br /&gt;
; Die Lautstärke ändert&lt;br /&gt;
* &amp;quot;VOLp&amp;quot; für lauter und &amp;quot;VOLm&amp;quot; für leiser an das Radio sendet&lt;br /&gt;
&lt;br /&gt;
== Ansatz für eine erste Lösung des Steuerproblems ==&lt;br /&gt;
Eine Klasse schreiben, welche die Steuerung der Menupunkt innerhalb der Klasse kapselt. Der Anwender sollte hierbei nur Kommandos wie &amp;quot;Radio.SenderAbspielen(1) verwenden müssen. Die aktuelle Position innerhalb der Menustruktur sollte die Klasse festhalten.&lt;br /&gt;
== Beispielcode für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2411</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2411"/>
		<updated>2013-07-07T17:09:37Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Schnittstellenparameter */  Satzstellung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hardware =&lt;br /&gt;
Die Firmware von Listenliste arbeitet derzeit (Stand 06.2013) mit der folgenden Hardware für die unter aufgeführten Produkte zusammen.&lt;br /&gt;
== Penbex Hardware ==&lt;br /&gt;
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson,&amp;lt;br /&amp;gt;&lt;br /&gt;
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, &amp;lt;br /&amp;gt;&lt;br /&gt;
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, &amp;lt;br /&amp;gt;&lt;br /&gt;
Pbirkit2, Konig HAV-20/21/22 &amp;lt;br /&amp;gt;&lt;br /&gt;
== SkyTC Hardware ==&lt;br /&gt;
Mediabox 135, Arnova WebRadio &amp;amp; TV, [http://www.fhemwiki.de/wiki/xorohmt350 XORO-HMT350] XORO HMT370, &amp;lt;br /&amp;gt;&lt;br /&gt;
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235,&amp;lt;br /&amp;gt;&lt;br /&gt;
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für Webradios der Serie (PenPex und SkytV) eine alternative Firmware. Die derzeit Version 1.49 (Stand 06.2013)&amp;lt;br /&amp;gt;&lt;br /&gt;
wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die gesendeten Befehle werden jeweils mit dem Text &amp;quot;OK&amp;quot; beantwortet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&amp;lt;br /&amp;gt;&lt;br /&gt;
== Schnittstellenparameter ==&lt;br /&gt;
Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die IP Adresse des Radios sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen,&amp;lt;br /&amp;gt;&lt;br /&gt;
das man in den Netzwerkeinstellung für dieses Geräte die Einstellung. &amp;lt;br /&amp;gt;&lt;br /&gt;
*&amp;quot;Diesem Gerät immer die gleiche IP Adresse vergeben.&amp;quot;&lt;br /&gt;
einstellt.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die korrekte Erkennung des Radios erfolgt hierbei über die Mac-Adresse des WLAN Interface.&amp;lt;br /&amp;gt;&lt;br /&gt;
* IP Adresse des Radios (z.B. 192.168.1.33)&lt;br /&gt;
* Port 8080&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die myUtils:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.0.55&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorgehensweise für Radioansteuerung (derzeit) ==&lt;br /&gt;
; Laufende Applikation beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; , &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot; an das Radio senden&lt;br /&gt;
oder&amp;lt;br /&amp;gt;&lt;br /&gt;
; Das Radio einschalten (Hier muss FHEM ein Merker halten, ob das Radio an/aus ist)&lt;br /&gt;
* &amp;quot;POWER&amp;quot; an das Radio senden&lt;br /&gt;
; Das Radio in das Hauptmenu mit dem Eintrag &amp;quot;Favoriten&amp;quot; einstellen&lt;br /&gt;
* &amp;quot;HOME&amp;quot; an das Radio senden&lt;br /&gt;
; In den Menüeintrag &amp;quot;Favoriten&amp;quot; wechseln&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
; Den Eintrag &amp;quot;Internet-Radio Favoriten auswählen&amp;quot;&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden.&lt;br /&gt;
; jetzt den Radiosender auswählen&lt;br /&gt;
* &amp;quot;DOWN&amp;quot; an das Radio senden (Eintragsnr -1 ) mal senden&lt;br /&gt;
; Jetzt das Radio hören starten&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
Während das Radio abgespielt wird, kann man noch auf die Wettervorhersage wechseln. Dies geht mit den folgenden Kommandos:&lt;br /&gt;
; Akuelles Wetter auswählen&lt;br /&gt;
* &amp;quot;MENU&amp;quot; an das Radio senden&lt;br /&gt;
; 5 Tage Vorhersage auswählen (wenn Wetter angezeigt wird)&lt;br /&gt;
* &amp;quot;LEFT&amp;quot; an das Radio senden&lt;br /&gt;
* nochmals &amp;quot;RIGHT&amp;quot; zeigt wieder das aktuelle Wetter an&lt;br /&gt;
; Wetter Anzeige wieder beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; senden&lt;br /&gt;
== Ansatz für eine erste Lösung des Steuerproblems ==&lt;br /&gt;
Eine Klasse schreiben, welche die Steuerung der Menupunkt innerhalb der Klasse kapselt. Der Anwender sollte hierbei nur Kommandos wie &amp;quot;Radio.SenderAbspielen(1) verwenden müssen. Die aktuelle Position innerhalb der Menustruktur sollte die Klasse festhalten.&lt;br /&gt;
== Beispielcode für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2408</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2408"/>
		<updated>2013-07-06T18:35:29Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Beispiel für das Einschalten des Radio mit dem ersten Favoriten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hardware =&lt;br /&gt;
Die Firmware von Listenliste arbeitet derzeit (Stand 06.2013) mit der folgenden Hardware für die unter aufgeführten Produkte zusammen.&lt;br /&gt;
== Penbex Hardware ==&lt;br /&gt;
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson,&amp;lt;br /&amp;gt;&lt;br /&gt;
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, &amp;lt;br /&amp;gt;&lt;br /&gt;
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, &amp;lt;br /&amp;gt;&lt;br /&gt;
Pbirkit2, Konig HAV-20/21/22 &amp;lt;br /&amp;gt;&lt;br /&gt;
== SkyTC Hardware ==&lt;br /&gt;
Mediabox 135, Arnova WebRadio &amp;amp; TV, [http://www.fhemwiki.de/wiki/xorohmt350 XORO-HMT350] XORO HMT370, &amp;lt;br /&amp;gt;&lt;br /&gt;
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235,&amp;lt;br /&amp;gt;&lt;br /&gt;
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für Webradios der Serie (PenPex und SkytV) eine alternative Firmware. Die derzeit Version 1.49 (Stand 06.2013)&amp;lt;br /&amp;gt;&lt;br /&gt;
wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die gesendeten Befehle werden jeweils mit dem Text &amp;quot;OK&amp;quot; beantwortet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&amp;lt;br /&amp;gt;&lt;br /&gt;
== Schnittstellenparameter ==&lt;br /&gt;
Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die IP Adresse des Radios sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen,&amp;lt;br /&amp;gt;&lt;br /&gt;
das man in den Netzwerkeinstellung für dieses Geräte die Einstellung. &amp;lt;br /&amp;gt;&lt;br /&gt;
Diesem Gerät immer die gleiche IP Adresse vergeben. Die korrekte Erkennung des Radios erfolgt hierbei mit der Mac-Adresse.&amp;lt;br /&amp;gt;&lt;br /&gt;
* IP Adresse des Radios (z.B. 192.168.1.33)&lt;br /&gt;
* Port 8080 &lt;br /&gt;
== Der Code ==&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die myUtils:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.0.55&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorgehensweise für Radioansteuerung (derzeit) ==&lt;br /&gt;
; Laufende Applikation beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; , &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot;, &amp;quot;EXIT&amp;quot; an das Radio senden&lt;br /&gt;
oder&amp;lt;br /&amp;gt;&lt;br /&gt;
; Das Radio einschalten (Hier muss FHEM ein Merker halten, ob das Radio an/aus ist)&lt;br /&gt;
* &amp;quot;POWER&amp;quot; an das Radio senden&lt;br /&gt;
; Das Radio in das Hauptmenu mit dem Eintrag &amp;quot;Favoriten&amp;quot; einstellen&lt;br /&gt;
* &amp;quot;HOME&amp;quot; an das Radio senden&lt;br /&gt;
; In den Menüeintrag &amp;quot;Favoriten&amp;quot; wechseln&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
; Den Eintrag &amp;quot;Internet-Radio Favoriten auswählen&amp;quot;&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden.&lt;br /&gt;
; jetzt den Radiosender auswählen&lt;br /&gt;
* &amp;quot;DOWN&amp;quot; an das Radio senden (Eintragsnr -1 ) mal senden&lt;br /&gt;
; Jetzt das Radio hören starten&lt;br /&gt;
* &amp;quot;OK&amp;quot; an das Radio senden&lt;br /&gt;
Während das Radio abgespielt wird, kann man noch auf die Wettervorhersage wechseln. Dies geht mit den folgenden Kommandos:&lt;br /&gt;
; Akuelles Wetter auswählen&lt;br /&gt;
* &amp;quot;MENU&amp;quot; an das Radio senden&lt;br /&gt;
; 5 Tage Vorhersage auswählen (wenn Wetter angezeigt wird)&lt;br /&gt;
* &amp;quot;LEFT&amp;quot; an das Radio senden&lt;br /&gt;
* nochmals &amp;quot;RIGHT&amp;quot; zeigt wieder das aktuelle Wetter an&lt;br /&gt;
; Wetter Anzeige wieder beenden&lt;br /&gt;
* &amp;quot;EXIT&amp;quot; senden&lt;br /&gt;
== Ansatz für eine erste Lösung des Steuerproblems ==&lt;br /&gt;
Eine Klasse schreiben, welche die Steuerung der Menupunkt innerhalb der Klasse kapselt. Der Anwender sollte hierbei nur Kommandos wie &amp;quot;Radio.SenderAbspielen(1) verwenden müssen. Die aktuelle Position innerhalb der Menustruktur sollte die Klasse festhalten.&lt;br /&gt;
== Beispielcode für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Xoro_HMT_350&amp;diff=2405</id>
		<title>Xoro HMT 350</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Xoro_HMT_350&amp;diff=2405"/>
		<updated>2013-07-06T17:41:24Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Technische Daten */ Einfügen der Sektion Fernbedienung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Webradio mit ListenLive Firmware ==&lt;br /&gt;
[[Datei:XORO350.JPG]]&lt;br /&gt;
&lt;br /&gt;
Diese Radio kann nach dem einspielen der Firmware von ListenLive mittels eines TCP/IP Socket über FHEM gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
== Kosten ==&lt;br /&gt;
Das Radio kostet im Internet ca. 100 Euro. Bei Pearl kann man es hin und wieder als B Ware für  um die 60€ kaufen.&lt;br /&gt;
&lt;br /&gt;
== Nachfolgemodell ==&lt;br /&gt;
Es gibt bereits ein Nachfolgemodell (HMT 370) dieses Radios, welches ein größeres Display hat. Verschiedene Kritiken im Internet zeigten unterschiedliche Meinungen, hier sollte jeder sein eigene Endscheidung treffen. Fakt ist jedoch der höhere Stromverbrauch des XORO 370 bedingt durch das größere Display (7 Zoll), was der klare Vorteil des XORO 350 ist.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&#039;&#039;&#039;Stromverbrauch&#039;&#039;&#039;&lt;br /&gt;
* Display komplett dunkel 1,8 Watt &lt;br /&gt;
* Display Normal im Menue 2,3 Watt &lt;br /&gt;
* Internet-Radiobetrieb 2,9 Watt&lt;br /&gt;
&#039;&#039;&#039;Display Größe&#039;&#039;&#039;&lt;br /&gt;
3.5 Zoll&lt;br /&gt;
&#039;&#039;&#039;Fernbedienung&#039;&#039;&#039;&lt;br /&gt;
IR Fernbedienung&lt;br /&gt;
&#039;&#039;&#039;Anschlüsse&#039;&#039;&#039;&lt;br /&gt;
* FM Antenne&lt;br /&gt;
* Stereo Eingang (Line In)&lt;br /&gt;
* Kartenleser für SD Karten&lt;br /&gt;
* Strom Mini USB&lt;br /&gt;
&lt;br /&gt;
== IR Fernbedienung ==&lt;br /&gt;
Dem Gerät ist eine IR Fernbedienung beigelegt. Diese Fernbedienung benötigt direkten Sichtkontakt zu Radio und bei einer Entfernung von mehr als 3m ist das Erkennen von Kommandos schon schwieriger.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:Xoro350IRFernbedienung.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Softwarefehler in der Originalsoftware ==&lt;br /&gt;
Laut ListenLive befindet sich in der Originalfirmware des XORO 350, welche er mit &amp;quot;[http://de.wikipedia.org/wiki/Reverse_Engineering reverse engineering]&amp;quot; analysiert hat und dann in seine eigene Version umgeändert hat, ein Programmteil, welche nach einem Zufallsverfahren das eingebaute FLASH mit übermässigen Schreibbefehlen kapputt schreibt. Hierdurch soll es zu einem vorzeitigen Geräteausfall kommen. Dieser &amp;quot;Fehler&amp;quot; wird durch dem Austausch der Firmware beseitigt.&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Xoro350IRFernbedienung.JPG&amp;diff=2404</id>
		<title>Datei:Xoro350IRFernbedienung.JPG</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Xoro350IRFernbedienung.JPG&amp;diff=2404"/>
		<updated>2013-07-06T17:33:07Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Das Bild zeigt die Standard Fernbedienung des XORO HMT 350.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Bild zeigt die Standard Fernbedienung des XORO HMT 350.&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2403</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2403"/>
		<updated>2013-07-06T17:31:50Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Listenlive.nl Firmware */ Schnittstellenparameter eingeführt &amp;amp; Firmwarebeschreibung erweitert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hardware =&lt;br /&gt;
Die Firmware von Listenliste arbeitet derzeit (Stand 06.2013) mit der folgenden Hardware für die unter aufgeführten Produkte zusammen.&lt;br /&gt;
== Penbex Hardware ==&lt;br /&gt;
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson,&amp;lt;br /&amp;gt;&lt;br /&gt;
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, &amp;lt;br /&amp;gt;&lt;br /&gt;
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, &amp;lt;br /&amp;gt;&lt;br /&gt;
Pbirkit2, Konig HAV-20/21/22 &amp;lt;br /&amp;gt;&lt;br /&gt;
== SkyTC Hardware ==&lt;br /&gt;
Mediabox 135, Arnova WebRadio &amp;amp; TV, [http://www.fhemwiki.de/wiki/xorohmt350 XORO-HMT350] XORO HMT370, &amp;lt;br /&amp;gt;&lt;br /&gt;
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235,&amp;lt;br /&amp;gt;&lt;br /&gt;
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für Webradios der Serie (PenPex und SkytV) eine alternative Firmware. Die derzeit Version 1.49 (Stand 06.2013)&amp;lt;br /&amp;gt;&lt;br /&gt;
wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die gesendeten Befehle werden jeweils mit dem Text &amp;quot;OK&amp;quot; beantwortet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&amp;lt;br /&amp;gt;&lt;br /&gt;
== Schnittstellenparameter ==&lt;br /&gt;
Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die IP Adresse des Radios sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen,&amp;lt;br /&amp;gt;&lt;br /&gt;
das man in den Netzwerkeinstellung für dieses Geräte die Einstellung. &amp;lt;br /&amp;gt;&lt;br /&gt;
Diesem Gerät immer die gleiche IP Adresse vergeben. Die korrekte Erkennung des Radios erfolgt hierbei mit der Mac-Adresse.&amp;lt;br /&amp;gt;&lt;br /&gt;
* IP Adresse des Radios (z.B. 192.168.1.33)&lt;br /&gt;
* Port 8080 &lt;br /&gt;
== Der Code ==&lt;br /&gt;
&#039;&#039;&#039;Für fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die myUtils:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.0.55&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2401</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2401"/>
		<updated>2013-07-06T17:15:05Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Hardware */  Produktbasis erweitert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hardware =&lt;br /&gt;
Die Firmware von Listenliste arbeitet derzeit (Stand 06.2013) mit der folgenden Hardware für die unter aufgeführten Produkte zusammen.&lt;br /&gt;
== Penbex Hardware ==&lt;br /&gt;
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson,&amp;lt;br /&amp;gt;&lt;br /&gt;
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, &amp;lt;br /&amp;gt;&lt;br /&gt;
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, &amp;lt;br /&amp;gt;&lt;br /&gt;
Pbirkit2, Konig HAV-20/21/22 &amp;lt;br /&amp;gt;&lt;br /&gt;
== SkyTC Hardware ==&lt;br /&gt;
Mediabox 135, Arnova WebRadio &amp;amp; TV, [http://www.fhemwiki.de/wiki/xorohmt350 XORO-HMT350] XORO HMT370, &amp;lt;br /&amp;gt;&lt;br /&gt;
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235,&amp;lt;br /&amp;gt;&lt;br /&gt;
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation erfolgt über socks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&lt;br /&gt;
Die IP Adresse des Radios müsst ihr ändern, der Rest ist ok, so wie es ist :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die myUtils:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.5.56&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Xoro_HMT_350&amp;diff=2400</id>
		<title>Xoro HMT 350</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Xoro_HMT_350&amp;diff=2400"/>
		<updated>2013-07-06T14:09:41Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Technische Daten */  Neue Sektion &amp;quot;Software Fehler&amp;quot; eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Webradio mit ListenLive Firmware ==&lt;br /&gt;
[[Datei:XORO350.JPG]]&lt;br /&gt;
&lt;br /&gt;
Diese Radio kann nach dem einspielen der Firmware von ListenLive mittels eines TCP/IP Socket über FHEM gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
== Kosten ==&lt;br /&gt;
Das Radio kostet im Internet ca. 100 Euro. Bei Pearl kann man es hin und wieder als B Ware für  um die 60€ kaufen.&lt;br /&gt;
&lt;br /&gt;
== Nachfolgemodell ==&lt;br /&gt;
Es gibt bereits ein Nachfolgemodell (HMT 370) dieses Radios, welches ein größeres Display hat. Verschiedene Kritiken im Internet zeigten unterschiedliche Meinungen, hier sollte jeder sein eigene Endscheidung treffen. Fakt ist jedoch der höhere Stromverbrauch des XORO 370 bedingt durch das größere Display (7 Zoll), was der klare Vorteil des XORO 350 ist.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&#039;&#039;&#039;Stromverbrauch&#039;&#039;&#039;&lt;br /&gt;
* Display komplett dunkel 1,8 Watt &lt;br /&gt;
* Display Normal im Menue 2,3 Watt &lt;br /&gt;
* Internet-Radiobetrieb 2,9 Watt&lt;br /&gt;
&#039;&#039;&#039;Display Größe&#039;&#039;&#039;&lt;br /&gt;
3.5 Zoll&lt;br /&gt;
&#039;&#039;&#039;Fernbedienung&#039;&#039;&#039;&lt;br /&gt;
IR Fernbedienung&lt;br /&gt;
&#039;&#039;&#039;Anschlüsse&#039;&#039;&#039;&lt;br /&gt;
* FM Antenne&lt;br /&gt;
* Stereo Eingang (Line In)&lt;br /&gt;
* Kartenleser für SD Karten&lt;br /&gt;
* Strom Mini USB&lt;br /&gt;
&lt;br /&gt;
== Softwarefehler in der Originalsoftware ==&lt;br /&gt;
Laut ListenLive befindet sich in der Originalfirmware des XORO 350, welche er mit &amp;quot;[http://de.wikipedia.org/wiki/Reverse_Engineering reverse engineering]&amp;quot; analysiert hat und dann in seine eigene Version umgeändert hat, ein Programmteil, welche nach einem Zufallsverfahren das eingebaute FLASH mit übermässigen Schreibbefehlen kapputt schreibt. Hierdurch soll es zu einem vorzeitigen Geräteausfall kommen. Dieser &amp;quot;Fehler&amp;quot; wird durch dem Austausch der Firmware beseitigt.&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Xoro_HMT_350&amp;diff=2399</id>
		<title>Xoro HMT 350</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Xoro_HMT_350&amp;diff=2399"/>
		<updated>2013-07-06T13:59:46Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Nachfolgemodell */  Satzstellung und Hinweis erweitert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Webradio mit ListenLive Firmware ==&lt;br /&gt;
[[Datei:XORO350.JPG]]&lt;br /&gt;
&lt;br /&gt;
Diese Radio kann nach dem einspielen der Firmware von ListenLive mittels eines TCP/IP Socket über FHEM gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
== Kosten ==&lt;br /&gt;
Das Radio kostet im Internet ca. 100 Euro. Bei Pearl kann man es hin und wieder als B Ware für  um die 60€ kaufen.&lt;br /&gt;
&lt;br /&gt;
== Nachfolgemodell ==&lt;br /&gt;
Es gibt bereits ein Nachfolgemodell (HMT 370) dieses Radios, welches ein größeres Display hat. Verschiedene Kritiken im Internet zeigten unterschiedliche Meinungen, hier sollte jeder sein eigene Endscheidung treffen. Fakt ist jedoch der höhere Stromverbrauch des XORO 370 bedingt durch das größere Display (7 Zoll), was der klare Vorteil des XORO 350 ist.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&#039;&#039;&#039;Stromverbrauch&#039;&#039;&#039;&lt;br /&gt;
* Display komplett dunkel 1,8 Watt &lt;br /&gt;
* Display Normal im Menue 2,3 Watt &lt;br /&gt;
* Internet-Radiobetrieb 2,9 Watt&lt;br /&gt;
&#039;&#039;&#039;Display Größe&#039;&#039;&#039;&lt;br /&gt;
3.5 Zoll&lt;br /&gt;
&#039;&#039;&#039;Fernbedienung&#039;&#039;&#039;&lt;br /&gt;
IR Fernbedienung&lt;br /&gt;
&#039;&#039;&#039;Anschlüsse&#039;&#039;&#039;&lt;br /&gt;
* FM Antenne&lt;br /&gt;
* Stereo Eingang (Line In)&lt;br /&gt;
* Kartenleser für SD Karten&lt;br /&gt;
* Strom Mini USB&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2387</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2387"/>
		<updated>2013-07-05T21:15:46Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Listenlive.nl Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hardware =&lt;br /&gt;
Die Firmware unter anderm auf diesen Geräten &lt;br /&gt;
[http://www.fhemwiki.de/wiki/xorohmt350 XORO-HMT350]&lt;br /&gt;
= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation erfolgt über socks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&lt;br /&gt;
Die IP Adresse des Radios müsst ihr ändern, der Rest ist ok, so wie es ist :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die myUtils:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.5.56&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&lt;br /&gt;
#Power on with the first radio sender&lt;br /&gt;
#&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:XORO350.JPG&amp;diff=2386</id>
		<title>Datei:XORO350.JPG</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:XORO350.JPG&amp;diff=2386"/>
		<updated>2013-07-05T21:02:55Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein Foto des Hauptmenues des Webradios XORO HMT 350 mit der Firmware von ListenLive&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:XORO350.JPG&amp;diff=2385</id>
		<title>Datei:XORO350.JPG</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:XORO350.JPG&amp;diff=2385"/>
		<updated>2013-07-05T21:02:17Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: Ein Foto des Hauptmenues des Webradios XORO 350 mit der Firmware von ListenLive&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein Foto des Hauptmenues des Webradios XORO 350 mit der Firmware von ListenLive&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2383</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2383"/>
		<updated>2013-07-05T15:46:14Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Probleme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation erfolgt über socks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&lt;br /&gt;
Die IP Adresse des Radios müsst ihr ändern, der Rest ist ok, so wie es ist :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die myUtils:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.5.56&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
&amp;amp;#35; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;#35; Power on with the first radio sender&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;#35; &amp;lt;br /&amp;gt;&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
* Generell hilft hier derzeit nur das ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden&lt;br /&gt;
* Die Firmware wird derzeit nur von einer Person gewartet, welcher aber sehr aktiv an dem Projekt arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2382</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2382"/>
		<updated>2013-07-05T15:41:27Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Links */ Examples eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation erfolgt über socks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&lt;br /&gt;
Die IP Adresse des Radios müsst ihr ändern, der Rest ist ok, so wie es ist :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die myUtils:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.5.56&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
&amp;amp;#35; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;#35; Power on with the first radio sender&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;#35; &amp;lt;br /&amp;gt;&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2381</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2381"/>
		<updated>2013-07-05T15:39:29Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Beispiel für das Einschalten des Radio mit dem ersten Favoriten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation erfolgt über socks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&lt;br /&gt;
Die IP Adresse des Radios müsst ihr ändern, der Rest ist ok, so wie es ist :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die myUtils:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.5.56&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
&amp;amp;#35; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;#35; Power on with the first radio sender&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;#35; &amp;lt;br /&amp;gt;&lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2380</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2380"/>
		<updated>2013-07-05T15:38:20Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Probleme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation erfolgt über socks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&lt;br /&gt;
Die IP Adresse des Radios müsst ihr ändern, der Rest ist ok, so wie es ist :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die myUtils:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.5.56&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel für das Einschalten des Radio mit dem ersten Favoriten ==&lt;br /&gt;
&amp;amp;#35; &lt;br /&gt;
&amp;amp;#35; Power on with the first radio sender&lt;br /&gt;
&amp;amp;#35; &lt;br /&gt;
sub SwitchRadioOn&lt;br /&gt;
{&lt;br /&gt;
  radio(&amp;quot;POWER&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;HOME&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  radio(&amp;quot;OK&amp;quot;);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2379</id>
		<title>Listenlive</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Listenlive&amp;diff=2379"/>
		<updated>2013-07-05T15:34:09Z</updated>

		<summary type="html">&lt;p&gt;Ritchie: /* Der Code */  Update des Programmcodes noch eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listenlive.nl Firmware =&lt;br /&gt;
Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation erfolgt über socks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.&lt;br /&gt;
&lt;br /&gt;
== Der Code ==&lt;br /&gt;
&lt;br /&gt;
Die IP Adresse des Radios müsst ihr ändern, der Rest ist ok, so wie es ist :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;### WebRadio&lt;br /&gt;
define WebRadio dummy&lt;br /&gt;
attr WebRadio room Wohnzimmer&lt;br /&gt;
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK&lt;br /&gt;
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK&lt;br /&gt;
define myWebRadio notify WebRadio {radio($EVENT)};;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die myUtils:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use CGI qw(:standard);&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
use IO::Socket::INET;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
use Time::HiRes qw(usleep nanosleep); &lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Listenlive Radio&lt;br /&gt;
#&lt;br /&gt;
sub radio($)&lt;br /&gt;
{&lt;br /&gt;
  my ($socket,$client_socket);&lt;br /&gt;
  my $response =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Create a socket object for the communication with the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket = new IO::Socket::INET (&lt;br /&gt;
		PeerHost =&amp;gt; &#039;192.168.5.56&#039;, ########## &amp;lt;- hier eure IP Adresse eingeben&lt;br /&gt;
		PeerPort =&amp;gt; &#039;8080&#039;,&lt;br /&gt;
		Proto =&amp;gt; &#039;tcp&#039;,&lt;br /&gt;
  ) or die &amp;quot;ERROR in Socket Creation : $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Send the given command into the socket&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;send(@_);&lt;br /&gt;
#&lt;br /&gt;
# get the radio some time to execute the command (300ms )&lt;br /&gt;
#&lt;br /&gt;
  usleep(30000);   ###### &amp;lt;- erhöhen, wenn das Radio Kommandos verschluckt&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# get the answer of the radio&lt;br /&gt;
#&lt;br /&gt;
  $socket-&amp;gt;recv($response, 2);&lt;br /&gt;
&lt;br /&gt;
  if($response !~  m/OK/)&lt;br /&gt;
    {&lt;br /&gt;
	 Log 1, &amp;quot;Error from radio ! Response from Radio : $response&amp;quot; ;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
  $socket-&amp;gt;close();&lt;br /&gt;
  return;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.&lt;br /&gt;
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.&lt;br /&gt;
&lt;br /&gt;
== Wie es weitergeht ==&lt;br /&gt;
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert&lt;br /&gt;
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://forum.fhem.de/index.php?t=msg&amp;amp;th=12571&amp;amp;start=0&amp;amp;rid=1421 Forumthread]&lt;br /&gt;
* [http://listenlive.nl/ Homepage von Listenlive.nl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;/div&gt;</summary>
		<author><name>Ritchie</name></author>
	</entry>
</feed>