Archiv der Kategorie: Elektro

Schaltung Netz Notstrom

Um ein Notstromaggregat ins Hausnetz einzubinden ist ein Umschalter notwendig. Dieser trennt das öffentliche Netz vom Notstrom-Netz. Optional kann noch eine Phasenkontrolle eingebaut werden welche leuchtet wenn das öffentliche Netz wieder verfügbar ist. Dann kann wieder umgeschaltet werden.

Folgend der Schaltplan und der Link zum Umschalter bzw. Phasenkontolle

Phansenkontrolle: https://amzn.to/2U9d2zt

Umschalter: https://amzn.to/2U9dT39

Onkyo hoher Standby Verbrauch – TX-NR545

Ich habe mich immer gewundert warum mein Onkyo so viel Strom im ausgeschalteten Zustand benötigt.

Hier kurz zum Verbrauch:
Musik hören (SONOS als ext. Zuspieler)
mit normaler Lautstärke (Vol. 20): ca. 33Wh
Standby: ca. 26Wh

ich habe alle Zusatzfeatures wie HDMI-thru, Bluetooth oder WLAN deaktiviert

dann habe ich auf dem Display gesehen dass „Zone 2“ leuchtet
Sofort ins Menü und „Zone 2“ deaktiviert
und siehe da der Standby-Verbrauch fiel auf ca. 2Wh

Viel Spaß beim Ausprobieren.

Lupusec Tür-/Fensterkontakt mit Akku betreiben

Um Kosten im laufenden Betrieb der Lupusec XT1/XT2 Alarmanlage zu sparen wird in diesem Betrag der Betrieb mit Akkus beschrieben.

Verwendet werden können Akkus im Format CR2 bzw. 1/2 AA.
Diese 3V Akkus sind mit einer Kapazität von 250mA zu haben.

Achtung: CR123 passen nicht in die Lupusec Tür-/Fensterkontakte.

Lupusec gibt eine Laufzeit von 2,5 Jahren für 850mAh-Batterien an. (bei unserer Testanlage waren die ersten nach 6 Monate leer)
Wie lange die Laufzeit mit den Akkus ist werde ich hier posten – rein rechnerisch müssten diese rund 8-9 Monate halten.

Unterschied Makita Akkus (Ah und B) BL1830 und BL1830B

Der Zusatz B (z.B.: BL1820B oder BL1830B) gibt an ob die optische LED-Ladestatusanzeige an der Rückseite der Akkus vorhanden ist. Akkus ohne B haben keine Ladezustandsanzeige.

unterschied makita BL18XX BL18XXB

Folgende 18V-Akkus sind verfügbar:

Bezeichnung Spannung [V] Kapazität [Ah] Leistung [Wh]
BL 1815 18 1,5 27
BL 1820 18 2,0 36
BL 1830 / BL 1830B 18 3,0 54
BL 1840 / BL 1840B 18 4,0 72
BL 1850 / BL 1850B 18 5,0 90
BL 1860 / BL 1860B 18 6,0 108

Makita Akkus günstig kaufen >>>

Smarte KNX Klingel mit Sonos, Gira und Wiregate

Nachdem ich jetzt schon zwei Jahre im Haus wohne und der ständige Batteriewechsel der Funk-Klingel lästig war habe ich mich entschlossen endlich meine Vorstellung einer smarten Klingel zu realisieren.
Grundgedanke war es die vorhandenen Decken-Lautsprecher in das System mit einzubeziehen.
Hier nun zu meiner Anleitung wie ich es gemacht habe:
Material:
Gira Türstation (Klingel)
Gira Türkommunikation Audio oder Video
Gira Türkommunikation Schaltaktor
KNX Binäreingang
Wiregate
Sonos Connect AMP
Funktion Allgemein:
Ein Drücken an der Gira Türstation schaltet den Gira Türkommunikation Schaltaktor. Der Ausgang des Schaltaktors führt auf den Binäreingang und signalisiert dem KNX-Bus dass jemand geklingelt hat. Dieses Signal auf der Gruppenadresse überwacht das Wiregate und startet ein Pearl-Script welches den Sonos Connect AMP den Befehl gibt eine selbst definierte MP3 abzuspielen.
Funktion Sonos-Klingel:
Da sich die Sonos Player im StandBy Modus befinden wird das MP3 sofort abgespielt. Werden in verschiedenen Zonen Musiktitel aus der Playlist oder Webradio abgespielt merkt sich das Skript den aktuellen Titel, unterbricht diesen (inkl. Volume down), spielt den Klingelton ab und startet wieder mit der Playlist bzw. dem Webradio (inkl. Volume up).
Die Klingel via Sonos ist wenn die notwendige Ausstattung vorhanden ist relativ einfach zu realisieren und ist eine meiner Meinung nach sehr feine Sache.

Hier das Wiregate-Plugin welches die Gruppenadresse der Gira Türstation überwacht und das PHP-Skript startet:

1/4: Wiregate Plugin für Sonos-Klingel:

#!/usr/bin/perl
use strict;
use LWP::Simple;
my @GAs;
&readConf;
$plugin_info{$plugname.'_cycle'} = 86400; 

foreach my $curr_ga (@GAs) 
{
	 my $temp_value_ga = knx_read($curr_ga->{ga},0,1);
     $plugin_subscribe{$curr_ga->{ga}}{$plugname} = 1; #An Gruppenadresse anmelden 
     if (($msg{'apci'} eq "A_GroupValue_Write") and ($msg{'dst'} eq ($curr_ga->{ga})) and ($temp_value_ga eq "1")) {    
		plugin_log($plugname,'Es wurde geklingelt.' );
        knx_write($curr_ga->{ga},$curr_ga->{value_aus},1); # Dimmwert senden
		plugin_log($plugname,'GA '.$curr_ga->{ga}. ' (Klingel) auf "'.$curr_ga->{value_aus}.'" gesetzt.' );
    	get( "http://".$curr_ga->{PATH}."/".$curr_ga->{URL});
		plugin_log($plugname,'Aufrufen: ' .  "http://".$curr_ga->{PATH}."/".$curr_ga->{URL} );
	}
return("Status Plugin Klingel: OK");
}

### READ CONF ###
sub readConf
{
 my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
 if (! -f $confFile) {
  plugin_log($plugname, "no conf file [$confFile] found."); 
 } else {
  #plugin_log($plugname, "reading conf file [$confFile]."); 
  open(CONF, $confFile);
  my @lines = ;
  close($confFile);
  my $result = eval("@lines");
  #($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
  if ($@) {
   plugin_log($plugname, "ERR: conf file [$confFile] returned:");
   my @parts = split(/\n/, $@);
   plugin_log($plugname, "--> $_") foreach (@parts);
  }
 }
}

2/4: Wiregate Plugin Konfigurationsdatei:

push @GAs, { URL=> "sonos_2.php", ga => "7/7/0", 
audio => "doorbell_01.mp3", value_ein => 1, value_aus =>0, PATH => "wiregate256/visu_svn_neu/plugins/klingel"};

3/4: Und hier der Link zum txt-File des PHP-Sourcecodes welcher den Sonos-Player die Befehle gibt:

4/4: PHPSonos.inc.php






'
;
*/
$header='POST /DeviceProperties/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:DeviceProperties:1#GetZoneAttributes"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='




';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

$returnContent = $this->XMLsendPacket($content);


		$xmlParser = xml_parser_create("UTF-8");
		xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
		xml_parse_into_struct($xmlParser, $returnContent, $vals, $index);
		xml_parser_free($xmlParser);


		$ZoneAttributes = Array();

		$key="CurrentZoneName"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneAttributes[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneAttributes[$key] = ""; }

		$key="CurrentIcon"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneAttributes[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneAttributes[$key] = ""; }


		return $ZoneAttributes; //Assoziatives Array
 	}

	public function GetZoneInfo() // added br
	{
/*
$content='POST /DeviceProperties/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:DeviceProperties:1#GetZoneInfo"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400
Content-Length: 295






'
;
*/
$header='POST /DeviceProperties/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:DeviceProperties:1#GetZoneInfo"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='




';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

$returnContent = $this->XMLsendPacket($content);


		$xmlParser = xml_parser_create("UTF-8");
		xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
		xml_parse_into_struct($xmlParser, $returnContent, $vals, $index);
		xml_parser_free($xmlParser);


		$ZoneInfo = Array();

		$key="SerialNumber"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }

		$key="SoftwareVersion"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }

		$key="SoftwareVersion"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }

		$key="DisplaySoftwareVersion"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }

		$key="HardwareVersion"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }

		$key="IPAddress"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }


		$key="MACAddress"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }


		$key="CopyrightInfo"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }


		$key="ExtraInfo"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneInfo[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneInfo[$key] = ""; }


		return $ZoneInfo; //Assoziatives Array
 	}





	public function SetLEDState($state) // added br
	{
   if($state=="On") { $state = "On"; } else
		{	if($state=="Off") { $state = "Off"; } else {
      		if($state) { $state = "On"; } else { $state = "Off"; }
      	}
		}
		
$content='POST /DeviceProperties/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 250
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:DeviceProperties:1#SetLEDState"

' .$state. '';

		return (bool)$this->sendPacket($content);
	}
	public function GetLEDState() // added br
	{

$content='POST /DeviceProperties/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 250
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:DeviceProperties:1#GetLEDState"

0';

		if ($this->sendPacket($content)=="On") { return(true); }else return(false);
	}
/* urn:upnp-org:serviceId:GroupManagement */

	public function AddMember($MemberID) // added br
	// Joins a group 1st Arg is RINCON_MAC1400
	// Returns assoziative Array with CurrentSettings and GroupUUIDJoined
		{

$header='POST /GroupManagement/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:GroupManagement:1#AddMember"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='
' . $MemberID . '
';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;


$returnContent = $this->XMLsendPacket($content);

		$xmlParser = xml_parser_create("UTF-8");
		xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
		xml_parse_into_struct($xmlParser, $returnContent, $vals, $index);
		xml_parser_free($xmlParser);


		$ZoneAttributes = Array();

		$key="CurrentTransportSettings"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneAttributes[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneAttributes[$key] = ""; }

		$key="GroupUUIDJoined"; // Lookfor
		if ( isset($index[strtoupper($key)][0]) and isset($vals[ $index[strtoupper($key)][0] ]['value'])) {$ZoneAttributes[$key] = $vals[ $index[strtoupper($key)][0] ]['value'];
      } else { $ZoneAttributes[$key] = ""; }


		return $ZoneAttributes; //Assoziatives Array
		// set AVtransporturi ist notwendig
 	}

/* urn:upnp-org:serviceId:MusicServices */
	// Not implemented
/* urn:upnp-org:serviceId:SystemProperties */
	// Not implemented
/* urn:upnp-org:serviceId:ZoneGroupTopology */
	// Not implemented

	public function RemoveMember($MemberID) // added br
	// Leaves a Group
	// Returns None
		{

$header='POST /GroupManagement/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:GroupManagement:1#RemoveMember"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='
' . $MemberID . '
';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

	echo $this->sendPacket($content);

		// set AVtransporturi ist für STOP notwendig
 	}

/* urn:upnp-org:serviceId:MusicServices */
	// Not implemented
/* urn:upnp-org:serviceId:SystemProperties */
	// Not implemented
/* urn:upnp-org:serviceId:ZoneGroupTopology */
	// Not implemented


/******************* urn:schemas-upnp-org:device:MediaRenderer:1 ***********

***************************************************************************/

/* urn:upnp-org:serviceId:RenderingControl */

	public function RampToVolume($ramp_type, $volume) //added br
	/* Ramps Vol to $volume using the Method mentioned in $ramp_type as string:
	"SLEEP_TIMER_RAMP_TYPE" - mutes and ups Volume per default within 17 seconds to desiredVolume
	"ALARM_RAMP_TYPE" -Switches audio off and slowly goes to volume
	"AUTOPLAY_RAMP_TYPE" - very fast and smooth; Implemented from Sonos for the unofficial autoplay feature.
	When you switch on a Sonos Device it plays its autoplay Command/Playlist and Settings. It´s all there but currently no GUI setting is possible.
	*Should return Rampseconds* but this is not implemented! */
	{


$header='POST /MediaRenderer/RenderingControl/Control HTTP/1.1
HOST: '.$this->address.':1400
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#RampToVolume"
';
$xml='
0Master'.$ramp_type.''.$volume.'
';
$content=$header . 'Content-Length: '. strlen($xml) .'

'. $xml;


		return (int) $this->sendPacket($content);

	}
/* urn:upnp-org:serviceId:AVTransport */
// If you don´t set $id you may get duplicate playlists!!!

 	public function SaveQueue($title,$id="") // added br
    {

        $header='POST /MediaRenderer/AVTransport/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SaveQueue"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='0'.$title.''.$id.'

';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

    $returnContent = $this->sendPacket($content);
	}
	
	public function GetCrossfadeMode() // added br
	{

$header='POST /MediaRenderer/AVTransport/Control HTTP/1.1
HOST: '.$this->address.':1400
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#GetCrossfadeMode"
';
$xml='
0
';
$content=$header . 'Content-Length: '. strlen($xml) .'

'. $xml;

		return (bool)$this->sendPacket($content);
	}

	public function SetCrossfadeMode($mode) // added br
	{


		if($mode) { $mode = "1"; } else { $mode = "0"; }
$header='POST /MediaRenderer/AVTransport/Control HTTP/1.1
HOST: '.$this->address.':1400
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetCrossfadeMode"
';
$xml='
0'.$mode.'';
$content=$header . 'Content-Length: '. strlen($xml) .'

'. $xml;

	$this->sendPacket($content);
		

	}

	public function Stop()
	{
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 250
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Stop"

0';

		$this->sendPacket($content);
	}




	public function Pause()
	{
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 252
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Pause"

0';

		$this->sendPacket($content);
	}

	public function Play()
	{

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 266
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"

01';

		$this->sendPacket($content);
	}
	
	public function Next()
	{
	
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 250
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Next"

0';

		$this->sendPacket($content);
	}
	
	public function Previous()
	{
	
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 258
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Previous"

0';

		$this->sendPacket($content);
	}
	
	public function Seek($arg1,$arg2="NONE")
	{
// Abwärtskompatibel zu Paresys Original sein
	if ($arg2=="NONE"){
		$Unit="REL_TIME"; $position=$arg1;
	} else {$Unit=$arg1; $position=$arg2;}

 $header='POST /MediaRenderer/AVTransport/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Seek"
CONTENT-TYPE: text/xml; charset="utf-8"
CONNECTION: close
HOST: '.$this->address.':1400';
$xml='
0'. $Unit .''.$position.'';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

    $returnContent = $this->sendPacket($content);



	}
	
	public function Rewind()
	{
	
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 296
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Seek"

0REL_TIME00:00:00';

		$this->sendPacket($content);
	}
	
	public function SetVolume($volume)
	{

$content='POST /MediaRenderer/RenderingControl/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 32'.strlen($volume).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#SetVolume"

0Master'.$volume.'';

		$this->sendPacket($content);
	}
	
	public function GetVolume()
	{

$content='POST /MediaRenderer/RenderingControl/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 290
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#GetVolume"

0Master';

		return (int)$this->sendPacket($content);
	}
	
	public function SetMute($mute)
	{

		if($mute) { $mute = "1"; } else { $mute = "0"; }

$content='POST /MediaRenderer/RenderingControl/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 314
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#SetMute"

0Master'.$mute.'';

		$this->sendPacket($content);
	}
	
	public function GetMute()
	{

$content='POST /MediaRenderer/RenderingControl/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 286
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#GetMute"

0Master';

		return (bool)$this->sendPacket($content);
	}
	
	public function SetPlayMode($mode)
	{

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: '.(291+strlen($mode)).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetPlayMode"

0'.$mode.'';

		$this->sendPacket($content);
	}
	
	public function GetTransportSettings()
	{

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 282
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#GetTransportSettings"

0';

		$returnContent = $this->sendPacket($content);

//	echo "\n===" . $this->address. "====\n" . $returnContent . "\n===\n";

		if (strstr($returnContent, "NORMAL") !== false) {
			return Array (
				"repeat" => false,
				"shuffle" => false
			);
		} elseif (strstr($returnContent, "REPEAT_ALL") !== false) {
			return Array (
				"repeat" => true,
				"shuffle" => false
			);	
		
		} elseif (strstr($returnContent, "SHUFFLE_NOREPEAT") !== false) {
			return Array (
				"repeat" => false,
				"shuffle" => true
			);

		} elseif (strstr($returnContent, "SHUFFLE") !== false) {
			return Array (
				"repeat" => true,
				"shuffle" => true
			);
   	}
   	/* what is PLAYING??? br */
   /*	} elseif (strstr($returnContent, "PLAYING") !== false) {
			return Array (
				"repeat" => false,
				"shuffle" => true
			);
   	} */

	}

	public function GetTransportInfo()
	{

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 274
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#GetTransportInfo"

0';

		$returnContent = $this->sendPacket($content);
		
		if (strstr($returnContent, "PLAYING") !== false) {
		   return 1;
		} elseif (strstr($returnContent, "PAUSED_PLAYBACK") !== false) {
		   return 2;
		} elseif (strstr($returnContent, "STOPPED") !== false) {
		   return 3;
		}
		
	}
	
		public function GetMediaInfo()
	{

// NOTEBR: diese F. ist aktuell noch buggy

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 266
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo"

0';

		$returnContent = $this->XMLsendPacket($content);
		
/*		$returnContent = substr($returnContent, stripos($returnContent, '<'));
		$returnContent = substr($returnContent, 0, strrpos($returnContent, '>') + 4);
		$returnContent = str_replace(array("<", ">", """, "&", "%3a", "%2f", "%25"), array("<", ">", "\"", "&", ":", "/", "%"), $returnContent);
*/
		$xmlParser = xml_parser_create("UTF-8");
		xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
		xml_parse_into_struct($xmlParser, $returnContent, $vals, $index);
		xml_parser_free($xmlParser);

		$mediaInfo = Array();

		if (isset($index["DC:TITLE"]) and isset($vals[$index["DC:TITLE"][0]]["value"])) {
			$mediaInfo["title"] = $vals[$index["DC:TITLE"][0]]["value"];
		} else {
			$mediaInfo["title"] = "";
		}
		if (isset($vals[5]["value"])) {
			$mediaInfo["CurrentURI"] = $vals[5]["value"];
		} else {
			$mediaInfo["CurrentURI"] = "";
		}
				if (isset($vals[6]["value"])) {
			$mediaInfo["CurrentURIMetaData"] = $vals[6]["value"];
		} else {
			$mediaInfo["CurrentURIMetaData"] = "";
		}
		return $mediaInfo;
		
	}
	
	public function GetPositionInfo()
	{

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 272
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo"

0';

		$returnContent = $this->sendPacket($content);
	
		$position = substr($returnContent, stripos($returnContent, "NOT_IMPLEMENTED") - 7, 7);

		$returnContent = substr($returnContent, stripos($returnContent, '<'));
		$returnContent = substr($returnContent, 0, strrpos($returnContent, '>') + 4);
		$returnContent = str_replace(array("<", ">", """, "&", "%3a", "%2f", "%25"), array("<", ">", "\"", "&", ":", "/", "%"), $returnContent);
		
		
		$xmlParser = xml_parser_create("UTF-8");
		xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, "UTF-8");
		xml_parse_into_struct($xmlParser, $returnContent, $vals, $index);
		xml_parser_free($xmlParser);
	
		$positionInfo = Array ();
		
		$positionInfo["position"] = $position;
		$positionInfo["RelTime"] = $position;
		
	
		if (isset($index["RES"]) and isset($vals[$index["RES"][0]]["attributes"]["DURATION"])) {
			$positionInfo["duration"] = $vals[$index["RES"][0]]["attributes"]["DURATION"];
				$positionInfo["TrackDuration"] = $vals[$index["RES"][0]]["attributes"]["DURATION"];
		} else {
			$positionInfo["duration"] = "";
				$positionInfo["TrackDuration"] = "";
		}

		
		if (isset($index["RES"]) and isset($vals[$index["RES"][0]]["value"])) {
			$positionInfo["URI"] = $vals[$index["RES"][0]]["value"];
			$positionInfo["TrackURI"] = $vals[$index["RES"][0]]["value"];
		} else {
			$positionInfo["URI"] = "";
			$positionInfo["TrackURI"] = "";
		}
		
		if (isset($index["DC:CREATOR"]) and isset($vals[$index["DC:CREATOR"][0]]["value"])) {
			$positionInfo["artist"] = $vals[$index["DC:CREATOR"][0]]["value"];
		} else {
			$positionInfo["artist"] = "";
		}
		
		if (isset($index["DC:TITLE"]) and isset($vals[$index["DC:TITLE"][0]]["value"])) {
			$positionInfo["title"] = $vals[$index["DC:TITLE"][0]]["value"];
		} else {
			$positionInfo["title"] = "";
		}
		
		if (isset($index["UPNP:ALBUM"]) and isset($vals[$index["UPNP:ALBUM"][0]]["value"])) {
			$positionInfo["album"] = $vals[$index["UPNP:ALBUM"][0]]["value"];
		} else {
			$positionInfo["album"] = "";
		}
		
		if (isset($index["UPNP:ALBUMARTURI"]) and isset($vals[$index["UPNP:ALBUMARTURI"][0]]["value"])) {
			$positionInfo["albumArtURI"] = "http://" . $this->address . ":1400" . $vals[$index["UPNP:ALBUMARTURI"][0]]["value"];
		} else {
			$positionInfo["albumArtURI"] = "";
		}
		
		if (isset($index["R:ALBUMARTIST"]) and isset($vals[$index["R:ALBUMARTIST"][0]]["value"])) {
			$positionInfo["albumArtist"] = $vals[$index["R:ALBUMARTIST"][0]]["value"];
		} else {
			$positionInfo["albumArtist"] = "";
		}
		
		if (isset($index["UPNP:ORIGINALTRACKNUMBER"]) and isset($vals[$index["UPNP:ORIGINALTRACKNUMBER"][0]]["value"])) {
			$positionInfo["albumTrackNumber"] = $vals[$index["UPNP:ORIGINALTRACKNUMBER"][0]]["value"];
		} else {
			$positionInfo["albumTrackNumber"] = "";
		}
		
		if (isset($index["R:STREAMCONTENT"]) and isset($vals[$index["R:STREAMCONTENT"][0]]["value"])) {
			$positionInfo["streamContent"] = $vals[$index["R:STREAMCONTENT"][0]]["value"];
		} else {
			$positionInfo["streamContent"] = "";
		}
		// added br if this contains "rincon" we are slave to a coordinator mentioned in this field (otherwise path to the file is provided)!
		// implemented via second XMLsendpacket to not break michaels current code


/*		if (isset($index["RES"][0]) and isset($vals[($index["RES"][0])]["value"])) {
			$positionInfo["trackURI"] = $vals[($index["RES"][0])]["value"];

        } else {
*/
			$returnContent = $this->XMLsendPacket($content);

			$xmlParser = xml_parser_create("UTF-8");
			xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
			xml_parse_into_struct($xmlParser, $returnContent, $vals, $index);
			xml_parser_free($xmlParser);
//	  }

			if (isset($index["TRACKURI"][0]) and isset($vals[($index["TRACKURI"][0])]["value"])) {
			$positionInfo["trackURI"] = $vals[($index["TRACKURI"][0])]["value"];
			$positionInfo["TrackURI"] = $vals[($index["TRACKURI"][0])]["value"];
			} else {
				$positionInfo["trackURI"] = "";
			}
		
			// Track Number in Playlist
			if (isset($index["TRACK"][0]) and isset($vals[($index["TRACK"][0])]["value"])) {
			$positionInfo["Track"] = $vals[($index["TRACK"][0])]["value"];;

			} else {
				$positionInfo["Track"] = "";
			}
			

		
		return $positionInfo;
	}
	
	public function SetRadio($radio,$Name="IP-Symcon Radio")
	{
	$Metadata="<DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="R:0/0/0" parentID="R:0/0" restricted="true"><dc:title>".$Name."</dc:title><upnp:class>object.item.audioItem.audioBroadcast</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">SA_RINCON65031_</desc></item></DIDL-Lite>";

 	$this->SetAVTransportURI($radio,$MetaData);

	}

	public function SetAVTransportURI($tspuri,$MetaData="")
	{

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: '.(342+strlen(htmlspecialchars($tspuri))+strlen(htmlspecialchars($MetaData))).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"

0'.htmlspecialchars($tspuri).''.htmlspecialchars($MetaData).'.';

		$this->sendPacket($content);
	}
	
	public function SetQueue($queue,$MetaData="")
	{
 	$this->SetAVTransportURI($queue,$MetaData);

	}

	public function ClearQueue()
	{

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 290
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#RemoveAllTracksFromQueue"

0';

		$this->sendPacket($content);
	}

	public function AddToQueue($file)
	{
	
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: '.(438+strlen(htmlspecialchars($file))).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#AddURIToQueue"

0'.htmlspecialchars($file).'01';

		$this->sendPacket($content);
	}
	
	public function RemoveFromQueue($track)
	{

$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: '.(307+strlen($track)).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#RemoveTrackFromQueue"

0Q:0/'.$track.'';

		$this->sendPacket($content);
	}
	
	public function SetTrack($track)
	{
	
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: '.(288+strlen($track)).'
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Seek"

0TRACK_NR'.$track.'';

		$this->sendPacket($content);
	}
/******************* // urn:schemas-upnp-org:device:MediaServer:1 ***********

***************************************************************************/
/* urn:upnp-org:serviceId:ContentDirectory */
 // MERKERTITLE
    //Gibt ein Array mit den Songs der aktuellen Playlist
    public function GetCurrentPlaylist()
    {
        $header='POST /MediaServer/ContentDirectory/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='


Q:0BrowseDirectChildren01000

';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

    $returnContent = $this->sendPacket($content);

        $returnContent = substr($returnContent, stripos($returnContent, '<'));
        $returnContent = substr($returnContent, 0, strrpos($returnContent, '>') + 4);
        $returnContent = str_replace(array("<", ">", """, "&", "%3a", "%2f", "%25"), array("<", ">", "\"", "&", ":", "/", "%"), $returnContent);

        $xml = new SimpleXMLElement($returnContent);
        $liste = array();
        for($i=0,$size=count($xml);$i<$size;$i++)
        {
            $aktrow = $xml->item[$i];
            $albumart = $aktrow->xpath("upnp:albumArtURI");
            $title = $aktrow->xpath("dc:title");
            $artist = $aktrow->xpath("dc:creator");
            $album = $aktrow->xpath("upnp:album");
            $liste[$i]['listid']=$i+1;
            if(isset($albumart[0])){
                $liste[$i]['albumArtURI']="http://" . $this->address . ":1400".(string)$albumart[0];
            }else{
                $liste[$i]['albumArtURI'] ="";
            }
            $liste[$i]['title']=(string)$title[0];
            if(isset($artist[0])){
                $liste[$i]['artist']=(string)$artist[0];
            }else{
                $liste[$i]['artist']="";
            }
            if(isset($album[0])){
                $liste[$i]['album']=(string)$album[0];
            }else{
                $liste[$i]['album']="";
            }
        }
return $liste;
    }



    //Liefert ein Array mit allen Sonos Wiedergabelisten und deren Aufrufinformationen
    public function GetSonosPlaylists()
    {
        $header='POST /MediaServer/ContentDirectory/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='


SQ:BrowseDirectChildren0100

';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

    $returnContent = $this->sendPacket($content);
    $returnContent = substr($returnContent, stripos($returnContent, '<'));
        $returnContent = substr($returnContent, 0, strrpos($returnContent, '>') + 4);
        $returnContent = str_replace(array("<", ">", """, "&", "%3a", "%2f", "%25"), array("<", ">", "\"", "&", ":", "/", "%"), $returnContent);

        $xml = new SimpleXMLElement($returnContent);
        $liste = array();
        for($i=0,$size=count($xml);$i<$size;$i++)
        {
            $attr = $xml->container[$i]->attributes();
            $liste[$i]['id'] = (string)$attr['id'];
            $title = $xml->container[$i];
            $title = $title->xpath('dc:title');
            $liste[$i]['title'] = (string)$title[0];
            $liste[$i]['typ'] = "Sonos";
            $liste[$i]['file'] = (string)$xml->container[$i]->res;
        }


return $liste;
    }



    //Liefert ein Array mit allen "Importierte Playlisten" Wiedergabelisten und deren Aufrufinformationen
    public function GetImportedPlaylists()
    {
        $header='POST /MediaServer/ContentDirectory/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='


A:PLAYLISTSBrowseDirectChildren0100

';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

    $returnContent = $this->sendPacket($content);
    $returnContent = substr($returnContent, stripos($returnContent, '<'));
        $returnContent = substr($returnContent, 0, strrpos($returnContent, '>') + 4);
       $returnContent = str_replace(array("<", ">", """, "&", "%3a", "%2f", "%25"), array("<", ">", "\"", "&", ":", "/", "%"), $returnContent);

        $xml = new SimpleXMLElement($returnContent);
        $liste = array();
        for($i=0,$size=count($xml);$i<$size;$i++)
        {
            $attr = $xml->container[$i]->attributes();
            $liste[$i]['id'] = (string)$attr['id'];
            $title = $xml->container[$i];
            $title = $title->xpath('dc:title');
				// br substring use cuts my playlist names at the 4th char
			
				$liste[$i]['title'] = (string)$title[0];
					$liste[$i]['title']=preg_replace("/^(.+)\.m3u$/i","\\1",$liste[$i]['title']);
            $liste[$i]['typ'] = "Import";
            $liste[$i]['file'] = (string)$xml->container[$i]->res;
        }


return $liste;
    }



    //Gibt ein Array mit den einzelnen Songs der Playlist wieder
    //ObjektID aus GetSonosPlaylists() oder GetImportetPlaylists()
    public function GetPlaylist($value)
    {
        $header='POST /MediaServer/ContentDirectory/Control HTTP/1.1
SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$this->address.':1400';
$xml='


'.$value.'BrowseDirectChildren01000

';
$content=$header . '
Content-Length: '. strlen($xml) .'

'. $xml;

    $returnContent = $this->sendPacket($content);
    $xmlParser = xml_parser_create();
        $returnContent = substr($returnContent, stripos($returnContent, '<'));
        $returnContent = substr($returnContent, 0, strrpos($returnContent, '>') + 4);
        $returnContent = str_replace(array("<", ">", """, "&", "%3a", "%2f", "%25"), array("<", ">", "\"", "&", ":", "/", "%"), $returnContent);

        $xml = new SimpleXMLElement($returnContent);
        $liste = array();
        for($i=0,$size=count($xml);$i<$size;$i++)
        {
            $aktrow = $xml->item[$i];
            $albumart = $aktrow->xpath("upnp:albumArtURI");
            $title = $aktrow->xpath("dc:title");
            $artist = $aktrow->xpath("dc:creator");
            $album = $aktrow->xpath("upnp:album");
            $liste[$i]['listid']=$i+1;
            if(isset($albumart[0])){
                $liste[$i]['albumArtURI']="http://" . $this->address . ":1400".(string)$albumart[0];
            }else{
                $liste[$i]['albumArtURI'] ="";
            }
            $liste[$i]['title']=(string)$title[0];
            if(isset($interpret[0])){
                $liste[$i]['artist']=(string)$artist[0];
            }else{
                $liste[$i]['artist']="";
            }
            if(isset($album[0])){
                $liste[$i]['album']=(string)$album[0];
            }else{
                $liste[$i]['album']="";
            }
        }
return $liste;
    }






/***************************************************************************
				Helper / sendPacket
***************************************************************************/

/*
Unter LocalUID findet sich der String, den man im $sonos->SetQueue Befehl braucht.
Den String kann man z.B. über folgendes Codeschnipsel bekommen:
$url = "http://"..":1400/status/zp";
$xml = simpleXML_load_file($url);
$result = $xml->ZPInfo->LocalUID;
Quelle: http://www.ip-symcon.de/forum/f53/php-sonos-klasse-ansteuern-einzelner-player-7676/#post87054
*/

// do not filter xml answer

	private function XMLsendPacket( $content )
	{
		$fp = fsockopen($this->address, 1400 /* Port */, $errno, $errstr, 10);
		if (!$fp)
		    throw new Exception("Error opening socket: ".$errstr." (".$errno.")");
		    
		fputs ($fp, $content);
		$ret = "";
		$buffer = "";
		while (!feof($fp)) {
			$buffer = fgets($fp,128);
		//	echo "\n;" . $buffer . ";\n"; //DEBUG
			$ret.= $buffer;
		}

//		echo "\n\nReturn:" . $ret . "!!\n";
		fclose($fp);

		if(strpos($ret, "200 OK") === false)
			throw new Exception("Error sending command: ".$ret);
		$array = preg_split("/\n/", $ret);
		
		return $array[count($array) - 1];
	}



	private function sendPacket( $content )
	{
		$fp = fsockopen($this->address, 1400 /* Port */, $errno, $errstr, 10);
		if (!$fp)
		    throw new Exception("Error opening socket: ".$errstr." (".$errno.")");

		fputs ($fp, $content);
		$ret = "";
		while (!feof($fp)) {
			$ret.= fgetss($fp,128); // filter xml answer
		}
		fclose($fp);

		if(strpos($ret, "200 OK") === false)
   	throw new Exception("Error sending command: ".$ret);

		// echo "sendPacketDebug: "; //DEBUG
		// print_r($ret);
		
		$array = preg_split("/\n/", $ret);

		return $array[count($array) - 1];
	}

}

?>

Anbindung Somfy Funkbus an KNX/EIB Bus

Da ich bei der Bestellung meiner Unterglas-Markise nicht darauf geachtet habe das diese mit dem proprietären Funkbus von Somfy gesteuert wird musste ich eine Lösung finden wie ich die Markise auf den KNX/EIB Bus bekomme.
Dazu wird ein Baustein der Firma Somfy namens „Dry Contact Transmitter“ (Art.-Nr.: 1810334) benötigt. Dieses Modul wandelt externe Signale wie zum Beispiel von einem Schaltaktor oder Taster in Funksignale um.
somfy-knx-bus
Verkabelung:
Klemme 1 und 2 dienen zur Spannungsversorgung (230V)
Klemme 3 (C) dient als Masse
Klemme 4 und 5 sind die Eingänge für das öffnen/schließen bzw. hinaus- und hineinfahren

Es muss also die Verbindung zwischen Klemme 3 und Klemme 4 bzw. Klemme 3 und Klemme 5 durch einen Taster oder einen Schaltaktor geschlossen werden.
Ein gleichzeitiges Signal auf Klemme 4 und 5 generiert ein Stopp-Signal.

Im Falle der Verwendung eines Schaltaktors werden also 3 Kanäle benötigt.
Kanal A für das Öffnen/Hinausfahren
Kanal B für das Schließen/Hineinfahren
Kanal C für das Stoppsignal

Mit diesem Workaround ist es möglich den Somfy Funkmotor via KNX/EIB Bus zu bedienen.

Anmerkung:
– Achtung der Somfy Funkempfänger Dry Contact (Art.-Nr.: 1810750) macht genau das Gegenteil – bei der Bestellung aufpassen.
– Im Bild habe ich einen Jalousieaktor verwendet und das Stoppsignal nicht realisiert (wird mit der Cometvisu durch gleichzeitiges aufrufen der Gruppenadressen simuliert)

Umbau Neon-Röhre auf SMD-LED-Röhre

Um eine 230V T8 SMD-LED-Röhre in einer bestehenden Leuchte mit Leuchtröhre (Kaltkathodenröhre)
aus dem Baumarkt betreiben zu können müssen zwei Dinge geändert werden.

1.) den Starter ausbauen (Bild 4)
2.) den vorhandenen Trafo abklemmen und die Kabel überbrücken (Bild 5)

Da die SMD-LED-Röhre mit Netzspannung (230V) funktioniert wird kein Trafo benötigt.
Es muss lediglich auf der einen Fassung (z.B. links) der Neutralleiter (blau) anliegen und an der zweiten Fassung (z.B. rechts) die Phase (schwarz, braun oder grau).

Neon-Röhre vor Umbau auf SMD-LED Neon-Röhre nach Umbau auf SMD-LED Verkabelung Leuchte Neon-Röhre Verkabelung Leuchte SMD-LED Überbrückung Trafo Neon-Röhre

Vorteile der SMD-LED-Röhre gegenüber der guten alten Neon-Röhre ist:
– der geringere Energieverbrauch
– sofort Licht ohne das bekannte Zünden bzw. Aufblinken durch den Starter
– kein Brummen durch den Trafo

Hinweis.:
– Umbauten sollten nur von Profis durchgeführt werden
– Vor Umbau allpolig vom Versorgungsnetz trennen
– Es können natürlich auch zwei Fassungen mit G13-Sockel im entsprechenden Abstand montiert werden.
  Optisch finde ich aber eine Leuchte schöner

Unterschied SMD-LED-Röhre warmweiß kaltweiß

Da ich meinen Keller von Neon-Röhren auf SMD-LED-Röhren umstellen möchte habe ich zwei Modelle getestet.
Infos zu den T8-Röhren der neuen Generation findet ihr folgend:

1.) SMD-LED-Röhre (T8) warmweiß
Länge: 60cm
für Sockel: G13
Lichttemperatur: 3000-3500K laut Anbieter
Leistung: 10W
Kosten: ca. 15-20 Euro
test-vergleich-smd-led-roehre-warmweiss

2.) SMD-LED-Röhre (T8) kaltweiß
Länge: 60cm
für Sockel G13
Lichttemperatur: 6000-6500K (Kelvin) laut Anbieter
Leistung: 10W
Kosten: ca. 15-20 Euro
test-vergleich-smd-led-roehre-kaltweiss

SMD LED Röhre bei Amazon bestellen

Miele Knock2Open praxistauglich?

Tolle Innovation aus dem Haus Miele.
Ein vollintegrierbarer Geschirrspüler welcher ohne optisch störenden Griff auskommt.

Sesam / Geschirrspüler öffne dich!

knock2open-mieleDie "Knock2Open" Technologie
von Miele macht es möglich.
Einfach zweimal "anklopfen"
und der Geschirrspüler öffnet sich automatisch.

knock2open-miele-klopfenZweifelsfrei ein optischer und technischer Leckerbissen.
Ob es für die Praxis taugt?
Zum Beispiel Fehleranfälligkeit (Klopfen nicht erkannt) oder
Zeitverlust für das Klopfen (schneller beim Öffnen mit Griff)
kann ich nicht beurteilen da ich ein Modell mit dieser Technologie nicht zur Verfügung habe.

Das Modell G 6582 SCvi kostet fast 1800,00 Euro.

Erfahrungen mit dem neuen Produkt
sind in den Kommentaren gerne willkommen.

Alle Miele Produkte mit Knock2Open

Wann lohnt sich ein Elektroauto? Preisbeispiel

Das folgende Preisbeispiel orientiert sich an einem kleinen Stadtauto (Stand Februar 2014).
Ich habe zum Beispiel den VW e-up! (Elektro-Auto) und den Hyundai i10 1.0 Comfort genommen.
Die Garantie auf den Akku bei VW beträgt 8 Jahre.
Aus diesem Grund möchte ich die Berechnung auf 8 Jahre beschränken.

VW e-up!
Hyundai i10 1.0 Comfort
vw-e-up
Quelle: autobild.de
hyundai-i10
Quelle: hyundai.at
Preis: € 25.350,00
Verbrauch: 13 kWh/100 km
Preis/kWh: € 0,20
Bilanz 0 km: € – 14.360,00
Preis: € 10.990,00
Verbrauch: 6,5l/100 km
Preis/l: € 1,50
Bilanz 0 km: € + 14.360,00

Angenommen es werden im Jahr 10.000 km gefahren:

Verbrauch/Jahr: € 260,00
KFZ-Steuer/Jahr: € 000,00
Betriebskosten/Jahr: € 260,00
Betriebskosten/8 Jahre: € 2.080,00
Bilanz 10.000 km: € -7.320,00
Verbrauch/Jahr: € 975,00
KFZ-Steuer/Jahr: € 165,00
Betriebskosten/Jahr: € 1.140,00
Betriebskosten/8 Jahre: € 9.120,00
Bilanz 10.000 km: € +7.320,00

Angenommen es werden im Jahr 20.000 km gefahren:

Verbrauch/Jahr: € 520,00
KFZ-Steuer/Jahr: € 000,00
Betriebskosten/Jahr: € 520,00
Betriebskosten/8 Jahre: € 4.160,00
Bilanz 20.000 km: € -1.600,00
Verbrauch/Jahr: € 1950,00
KFZ-Steuer/Jahr: € 165,00
Betriebskosten/Jahr: € 2115,00
Betriebskosten/8 Jahre: € 16.920,00
Bilanz 20.000 km: € +1.600,00

Aus meiner Berechnung geht hervor dass sich
zur Zeit ein Elektroauto noch nicht wirklich rechnet.

Werden noch die Kosten für den Ölwechsel, Zahnriehmenwechsel, usw. berücksichtigt dann amortisiert sich ein Elektroauto erst nach
ca. 20 (10.000 km) bzw. 10 (bei 20.000 km) Jahren. Und dann ist ein neuer Akku fällig der mit ca. 6000 Euro zu Buche schlägt…