OpenHAB – Rolladen über den Sonnenstand steuern mit Astro-Binding

In sehr interessantes Binding für OpenHAB ist das Astro-Binding. Hiermit lassen Sich z.B. Schalter erstellen, die dann bei Sonnen Auf- oder Untergang auslösen. Auch den aktuellen Sonnenstand (Azimuth und Höhe) kann man auslesen oder auch die Mondphasen.

Mit Hilfe dieses Bindings war es mir möglich, meinen Rolladen als Sichtschutz von außen bei Sonnenuntergang ein Stück herunterzufahren. Wie das funktioniert, zeige ich euch in diesem Artikel.

„OpenHAB — Rolladen über den Sonnenstand steuern mit Astro-Binding“ weiterlesen

OpenHAB, Z-Wave und Fibaro Motion Sensor + Jalousiesteuerung

Es war so weit, die ersten beiden Fibaro-Geräte erhielten Einzug:

Natürlich brauchte der Server noch einen USB-Stick um auch Z-Wave fähig zu werden, hier habe ich mich für den Z-Wave ZME_UZB1 entschieden, da dieser nach Recherchen auf jeden Fall auch mit OpenHAB funktionsfähig sein sollte.

Die Einrichtung des USB-Sticks verlief problemlos. Treiber installiert, in der OpenHAB-Konfiguration den COM-Port eingetragen, neu gestartet und das wars.

„OpenHAB, Z-Wave und Fibaro Motion Sensor + Jalousiesteuerung“ weiterlesen

Heimautomatisierung, meine Anfänge

Schon seit längerer Zeit hatte ich mich für das Thema Smart Home und die Automatisierung interessiert, jedoch hatten mich die Preise der Geräte doch immer wieder davon abgehalten, in ein System zu investieren.

Irgendwann im Frühjahr 2015 machte ich ein Foto von meinem Stromzähler wegen des Zählerstandes und war verwundert, dass auf dem Handy ein Blinken zu erkennen war, das mit bloßem Auge nicht zu erkennen war. Offenbar war es Infrarotstrahlung, die die Handykamera nicht vernünftig filterte.

„Heimautomatisierung, meine Anfänge“ weiterlesen

Bandwidth metering my ISP: Unitymedia

As my internet line bandwidth is terrible every day during „prime time“ (about between 8pm and 11pm) I wanted to create a small test to have a proof to show to my ISP as well as to find out the critical hours.

As my ISP always tells me to test with a specific speed test (actually it resides on a web page owned by the provider, giving a small distance in hops), I started analyzing what the speed test really does.

The page is http://speedtest-1.unitymedia.de/

As it turns out, the speed test is a flash application. When analyzing the network traffic you quickly find out that the speed test basically does nothing more than downloading a huge 4000 x 4000 pixels random jpg file and then measuring the time it took to download it:

http://speedtest-1.unitymedia.de/speedtest/random4000x4000.jpg?x=randomnumber

The address is called with a parameter called ‚x‘ which is randomized at every new test.

Knowing how to do it, I fired up Notepad++ and created a small script in node.js that repeats this test every two minutes and dumps the result in a syslog file that I can feed into my small Splunk instance to be able to graph it:

var syslog = require('./syslog');
var syslog = require('./syslog');
var http = require('http');

var intervalSeconds = 120;

var totalMBit = 0;
var totalBytesPerSec = 0;
var numRunning = 0;

function bpsToMBit(_bps)
{
	return _bps * 8.0 / (1024 * 1024);
}

function testBandwidthMultiple()
{
	if( numRunning > 0 )
		return;

	totalMBit = 0;

	for( var i=0; i<6; ++i )
	{
		++numRunning;
		testBandwidth();
	}
}
function testBandwidth()
{
//	var url = 'http://speedtest-1.unitymedia.de/speedtest/random4000x4000.jpg';
	var url = 'xxxxx';

	url = url + "?x=" + (Math.random() * 100000.0 + 10000.0);

	var size = 0;

	var t0 = 0;
	var t1 = 0;

	console.log( "Connecting to " + url );

	var request = http.get(url, function(res)
	{
		res.setEncoding('binary')
//		console.log('HEADERS: ' + JSON.stringify(res.headers));

		res.on('end', function()
		{
			var dt = t1 - t0;
			
			var bytesPerSec = size / dt * 1000.0;

			var mbit = bpsToMBit(bytesPerSec);
			
			totalMBit += mbit;
			totalBytesPerSec += bytesPerSec;
			
			--numRunning;
			
			console.log( "size " + size + ", bytes per sec " + bytesPerSec + ", mbit " + mbit + ", " + numRunning + " parts left" );			

			if( numRunning == 0 )
			{
				console.log( "finished, size " + size + ", total bytes per sec " + totalBytesPerSec  + ", total mbit " + totalMBit );

				syslog.log( "BANDWIDTH"	, "isp", "Unitymedia"
										, "mbit", totalMBit
										, "bytespersec", totalBytesPerSec
										, "size", size ); 
			}
		})
		
		res.on('data', function(data)
		{
			var tCurrent = Date.now();

			if( t0 == 0 )
			{
				t0 = tCurrent;
			}
			else
			{
				size += data.length;
			}

			t1 = tCurrent;
		})
		
		res.on('error', function(e)
		{
			console.log("Error: " + e);
		})
	});
}

testBandwidthMultiple();

setInterval( testBandwidthMultiple, 1000 * intervalSeconds);

So while typing this article, the test is now running since some minutes and the first graph can be shown:

unitymedia_bandwidth

Given the fact that I pay for a 100 mbit line, this is terrible. Of course, I’ll post a longer graph tomorrow when the script has been run for a longer time.

Update October 1st, 2015:

So as promised, here is a graph for the last 24 hours:

unitymedia_geschwindigkeit_splunk

As you can see, there is a huge bandwidth drop starting at about 6pm, lasting until about 1am. This also happend one day before.

Additionally, you can see that I never managed to get above 50MBit and I was starting to hunt for a bug in my code but didn’t find one. I modified the code now to use five connections at once (code snipped above is updated), but still there was no large increase. Then suddently the speed test from Unitymedia went down and I was no longer able to test it further so I had to find a new host where I can download test data from.

At first, I tried my small V-Server but as you can see, it couldn’t provide enough bandwidth. But after that, finally I’ve found a new host so the tests can continue. As you can see, I finally reach the promised 100 Mbits so this evening will be the first day where you can see the full bandwidth drop. The next image will be posted tomorrow.

Update October 6th, 2015:

Sorry for being late, but here are the new graphs:

unitymediabandwidth_week unitymediabandwidth_2

As you can see, the problem gets worse on weekends. So far, a Unitymedia guy will be here on Wednesday to check my line. Doesn’t make much sense in my case because the SNR levels on the modem look okay, but anyway he will be there.