Category Archives: How-to

HowTo: FHEM: Remote Control a SONOS Speaker with an Intertechno Remote

If you have a Sonos Loudspeaker, you know that you have to control them with your smartphone or tablet. But sometimes I don’t want to get my phone out to do some basic tasks like play/pause, volume up/down or next/previous track. I had an Intertechno Remote as leftover lying around and decided to use it as an remote control for my Sonos Play:1.
A prerequisite for this is, that you have already defined your Sonos Play:1 in FHEM and are able to fully control it. Because i found it very practically i decided to share the script with you.

I defined the buttons with their name staring the same and appended the row number at the end.

IT_Remote FHEM
IT_Remote FHEM

Then I wrote this script to control my Sonos Play:1:

define ny_IT_Remote1 notify IT_Remote1.* {
 my $r1 = "_1";
 my $r2 = "_2";
 my $r3 = "_3";
 my $r4 = "_4";
 my $dev = "[YOUR SONOS DEVICE]";
 my $sleepincr = 900;
 my $sleeptimer;
 my @sleeparray;
 my $sleepseconds;
 my $row = substr($NAME,-2);
 if ($row eq $r1) {
  if ($EVENT eq "off") {
   fhem("set " . $dev . " VolumeU");
  } else {
   fhem("set " . $dev . " VolumeD");
  }
 } elsif ($row eq $r2) {
  if ($EVENT eq "off") {
   fhem("set " . $dev . " Next");
  } else {
   fhem("set " . $dev . " Previous");
  }
 } elsif ($row eq $r3) {
  if ($EVENT eq "off") {
   $sleeptimer = ReadingsVal($dev,"SleepTimer","off");
   if ($sleeptimer ne "off") {
    @sleeparray = split /:/, $sleeptimer;
    $sleepseconds = int($sleeparray[0]) * 3600 + int($sleeparray[1]) * 60 + int($sleeparray[2]) + $sleepincr;
   } else {
    $sleepseconds = $sleepincr;
   }
   fhem("set " . $dev . " SleepTimer +" . $sleepseconds);
   fhem("set " . $dev . " speak +0 en Sleeptimer is set to " . int($sleepseconds / 60) . " minutes");
  } else {
   fhem("set " . $dev . " SleepTimer off");
   fhem("set " . $dev . " speak +0 en Sleeptimer disabled");
  }
 } elsif ($row eq $r4) {
  if (ReadingsVal($dev,"transportState","PLAYING") eq "PLAYING") {
   fhem("set " . $dev . " Pause");
  } else {
   fhem("set " . $dev . " Play");
  }
 }
}

This means, that i use the first row of buttons to change the volume, the second one to skip to the previous/next song and the “ALL OFF”-Button for play/pause. Also, I use the third row to set the sleep timer, the left one to turn the sleep timer off and the right one to increase it for 900($sleepincr) seconds. I like to know if the sleep timer was set correctly, so I use sonosspeak to let the speaker tell me the minutes left on the sleep timer.

Howto: FHEM: Kindle Display: Refresh on state/value change

I’m using FHEM a lot these days, so i decided to buy an Amazon Kindle and make a status display with it.
The KindleDisplay-Article on fhemwiki.de helped me a lot doing these thing, the only downside was that it would only update every couple of minutes, which is a bit boring.

So there are two problems in my way to have a realtime Kindle-Display:
1. Update the Status-Image with FReplacer everytime something shown on the display changes.
2. Tell the Kindle to fetch a new picture.

The first problem is solved pretty easy, you just define a dummy-variable to safe the old values in there:

define kindledisplayvalues dummy

Then make an at to check every couple seconds (i do this every 5 seconds) if something has changed:

define kindlerefresh at +*00:00:05 {
 my $display="[PUT THE NAME OF YOUR FREPLACER HERE]";
 my $oldvals="kindledisplayvalues";
 my $attrvalue="";
 my $valuename="";
 my $attr="";
 my @attrs=split / /, AttrVal($display,"userattr","none");
 my @attrvalues="";
 my $updatedisplay="no";
 if ($attrs[0] eq "none") {
  return;
 }
 foreach $attr (@attrs) {
  if (index($attr, "Reading") ne -1) {
   $valuename=AttrVal($display,$attr,"none");
   if (index($valuename, $display . ":LastUpdate") eq -1) {
    if (index($valuename, ":") ne -1) {
     @attrvalues=split /:/, $valuename;
     $attrvalue=ReadingsVal($attrvalues[0],$attrvalues[1],"none");
    } else {
     $attrvalue=Value($valuename);
    }
    if (ReadingsVal($oldvals,$valuename,"none") ne $attrvalue) {
     fhem("setreading " . $oldvals . " " . $valuename . " " . $attrvalue);
     $updatedisplay="yes";
    }
   }
  }
 }
 if ($updatedisplay eq "yes") {
  Log 2, "Updating Kindle Display";
  fhem("set ". $display ." ReplaceNow");
 }
}

Only downside: If you have “RepXXExpr” atrributes in your FReplacer defined, you should consider defining “RepXXReading” attributes (just use some numbers where there is no “RegXXRegex”) with the devicenames used in the expr, so that the Script checks those too.

First problem solved.

Second Problem:

This is a bit of fiddling around, but still doable.
First of all, you copy the ssh public key of your fhem-user to the Kindle.

sudo scp /opt/fhem/.ssh/id_rsa.pub root@<ip_of_your_kindle>:/mnt/us/usbnet/etc/authorized_keys

After you did that, FHEM should be able to Login on the Kindle via SSH without putting in a password.

Now we tell the FReplacer to Login on the Kindle and Fetch a new Image when it is finished:

attr kindledisplay PostCommand convert /opt/fhem/www/images/KindleDisplay.svg -type GrayScale -depth 8 /opt/fhem/www/images/KindleDisplay.png 2>/dev/null;;ssh root@<ip_of_your_kindle> '/mnt/us/extensions/onlinescreensaver/bin/update.sh' 2>/dev/null &

A small hint: If you don’t want the display to flicker when it gets updated: Search for “eips” in the update.sh and remove the “-f” behind it, the Kindle does only incremental updates then.
I copied the update.sh to smallupdate.sh, removed the “-f” and call the “smallupdate.sh” now with the FReplacer. This means it makes an incremental displayrefresh on change and i let it still call the normal update.sh every hour, so i don’t get any ghosting on the display.

HowTo: FHEM: Check if all windows are closed when leaving

As I’m always worried if all my windows are closed when I leave my house, I decided to let FHEM check if they are closed.
My windows are monitored with MAX! Shutter contacts, which are compatible with FHEM, so it can always see if they are open or closed.

To do the job, I wrote a script which sends me a push-message, stating if all windows are closed and if not, telling me which windows are open. In FHEM you put that script into a notify, with this notify we can then trigger the script whenever we want. For your setup you need to change the device names and add/delete devices in the script. Things you have to change are in bold and brackets:

define checkWindows notify checkWindows {
 my $winKitchen=Value("[Name of the Shutter contact in the Kitchen]");
 my $winSleepingroom=Value("[Name of the Shutter contact in the Sleepingroom]");
 my $winLivingroom=Value("[Name of the Shutter contact in the Livingroom]");
 my $winBath=Value("[Name of the Shutter contact in the Bathingroom]");
 if (($winKitchen ne "closed") || ($winSleepingroom ne "closed") || ($winLivingroom ne "closed") || ($winBath ne "closed")) {
  my $openWindows="";
  if ($winKitchen ne "closed") { $openWindows="Kitchen "; }
  if ($winSleepingroom ne "closed") { $openWindows=$openWindows . "Sleepingroom "; }
  if ($winLivingroom ne "closed") { $openWindows=$openWindows . "Livingroom "; }
  if ($winBath ne "closed") { $openWindows=$openWindows . "Bathingroom"; }
  fhem("set push msg 'ATTENTION: Window(s) open!' '" . $openWindows . "' '[Push Device]' 1 ''");
 } else {
  fhem("set push msg 'SAVE' 'All windows are closed.' '[Push Device]' -1 ''");
 }
}

After we created the notify we need to trigger the script when we leave. To check if you are at home or not, we can use presence and check the bluetooth address of our smartphone, because we always take our smartphone with us :). Just fill in the bluetooth address of your smartphone instead of the bold text:

define Smartphone PRESENCE local-bluetooth [Bluetooth address of your Smartphone]
attr Smartphone absenceThreshold 2

For example:

define Smartphone PRESENCE local-bluetooth 01:23:45:67:89:AB
attr Smartphone absenceThreshold 2

The absenceThreshold set to 2 tells FHEM to check twice before saying that your smartphone is away.
Now we need to trigger our checkWindows script as soon as our smartphone goes absent with a DOIF:

define di_WindowChecker DOIF ([Smartphone] eq "absent") (trigger checkWindows)

That’s it! Now you always get a message telling you the state of your windows when leaving!

HowTo: Climate Control at home with FHEM

As I have many houseautomation devices at home, I thought it would be a good idea to use them to tell me when I should open my windows and when to close them again.
For this little project I used the Netatmo Weatherstation with an additional Sensor for a second room to readout the temperature, dewpoint and co2 of my rooms and temperature and dewpoint outside. Additionally I use my eq-3 MAX! heating control for the actual set temperature at the radiators and the state (open/closed) of my windows in that rooms.
First thing i though about was, what do I want to have in my room, so I made a mindmap that shows what conditions the room should have in best case.

fhem_cc_room_conditions

Then I thought about what values I get from my devices:

fhem_cc_values

Based on this two things, I considered which conditions I would open the window and at what conditions I would close it:

fhem_cc_conditions

To see the relation between my values and my conditions I drew some arrows in it:

fhem_cc_conditions_with_arrows

The advantage of using the dewpoint is, that humidity is only relative humidity, whereas the dewpoint gives a clue about the absolute humidity of the air. The higher the dewpoint is, the more water is in the air. You should try to get your dewpoint as low as possible and never get with your room temperature near or under the dewpoint.

Hint: If your devices don’t have the dewpoint value but temperature and humidity, you can add the dewpoint with following command:

define dew_all dewpoint dewpoint .* temperature humidity dewpoint

The conditions to open my windows are pretty clear:
– Keep CO2 low
– Keep the air as dry as possible
– Try to get to my set temperature

So all the Script does is, if you are at home, send you a push message on your phone to open or close a certain window. Also it sets a dummy variable which you can use for visualisation in the fhem webinterface. The states are “OK” if no action is needed, “open” if you need to open a window and “close” if you should close the window again. Also it will create dummy variables for the maximum allowed co2, the dew point offset (because the air near the window and walls are a bit colder, so you need to use a lower value), the set temperature for the summer and an offset for the set temperature.

Here is the script I wrote, you need to fill in your own values at the bold written places which are also marked with brackets.

define ClimateControl at +*00:05:00 { 
 no warnings 'redefine';
 my $outTemp=ReadingsNum("[netatmo_XXX_XX_XX_XX_XX_XX]","temperature",0);
 my $outDew=ReadingsNum("[netatmo_XXX_XX_XX_XX_XX_XX]","dewpoint",100);
 
 my $sleepTemp=ReadingsNum("[netatmo_XXX_XX_XX_XX_XX_XX]","temperature",0);
 my $sleepDew=ReadingsNum("[netatmo_XXX_XX_XX_XX_XX_XX]","dewpoint",0);
 my $sleepCO2=ReadingsNum("[netatmo_XXX_XX_XX_XX_XX_XX]","co2",0);
 my $sleepWin=ReadingsVal("[MAX_XXXXXX]","state","none");
 my $sleepSetTemp=ReadingsVal("[MAX_XXXXXX]","desiredTemperature",20);
 my $sleepVar="[Sleepingroom]";

 my $livingTemp=ReadingsNum("[netatmo_XXX_XX_XX_XX_XX_XX]","temperature",0);
 my $livingDew=ReadingsNum("[netatmo_XXX_XX_XX_XX_XX_XX]","dewpoint",0);
 my $livingCO2=ReadingsNum("[netatmo_XXX_XX_XX_XX_XX_XX]","co2",0);
 my $livingWin=ReadingsVal("[MAX_XXXXXX]","state","none");
 my $livingSetTemp=ReadingsVal("[MAX_XXXXXX]","desiredTemperature",20);
 my $livingVar="[Livingroom]";

 $sleepSetTemp = SummerSetTemp($sleepVar,$sleepSetTemp);
 $livingSetTemp = SummerSetTemp($livingVar,$livingSetTemp);
 CheckRoom($outTemp, $outDew, $sleepTemp, $sleepDew, $sleepCO2, $sleepWin, $sleepSetTemp, $sleepVar);
 CheckRoom($outTemp, $outDew, $livingTemp, $livingDew, $livingCO2, $livingWin, $livingSetTemp, $livingVar);

 sub CheckRoom {
  die "Too many arguments for subroutine" unless @_ <= 8;
  die "Too few arguments for subroutine" unless @_ >= 8;

  my $outTemp=$_[0];
  my $outDew=$_[1];
  my $roomTemp=$_[2];
  my $roomDew=$_[3];
  my $roomCO2=$_[4];
  my $roomWin=$_[5];
  my $roomSetTemp=$_[6];
  my $roomVar=$_[7];
  my $roomVarState=ReadingsVal($roomVar,"state","undefined");
  my $dewOffset=ReadingsNum($roomVar . "DewOffset","state",999);
  my $setTempOffset=ReadingsNum($roomVar . "SetTempOffset","state",999);
  my $CO2max=ReadingsNum($roomVar . "maxCO2","state",9999);

  if ($roomVarState eq "undefined") {
   fhem("define " . $roomVar . " dummy");
   fhem("set " . $roomVar . " OK");
   fhem("attr " . $roomVar . " stateFormat Window: state");
  }
  if ($dewOffset eq 999) {
   fhem("define " . $roomVar . "DewOffset dummy");
   fhem("set " . $roomVar . "DewOffset 3");
   fhem("attr " . $roomVar . "DewOffset stateFormat state °C");
   $dewOffset = 3;
  }
  if ($setTempOffset eq 999) {
   fhem("define " . $roomVar . "SetTempOffset dummy");
   fhem("set " . $roomVar . "SetTempOffset 1");
   fhem("attr " . $roomVar . "SetTempOffset stateFormat state °C");
   $setTempOffset = 1;
  }
  if ($CO2max eq 9999) {
   fhem("define " . $roomVar . "maxCO2 dummy");
   fhem("set " . $roomVar . "maxCO2 1000");
   fhem("attr " . $roomVar . "maxCO2 stateFormat state ppm");
   $CO2max = 1000;
  }

  if (($outDew < $roomDew) && ($roomDew > ($roomTemp-$dewOffset))) {
   DoWinOpen($roomVar,$roomWin);
  }
  if ($roomCO2 > $CO2max) {
   DoWinOpen($roomVar,$roomWin);
  }
  if ($roomDew > $outDew) {
   if (($outTemp < $roomTemp) && ($roomSetTemp < $roomTemp)) {
    DoWinOpen($roomVar,$roomWin);
   }
   if (($outTemp > $roomTemp) && ($roomSetTemp > $roomTemp)) {
    DoWinOpen($roomVar,$roomWin);
   }
  }
  if (($roomCO2 < $CO2max) && ($roomDew < ($roomTemp-$dewOffset))) {
   if (($outTemp <= $roomTemp) && (($roomSetTemp-$setTempOffset) >= $roomTemp)) {
    DoWinClose($roomVar,$roomWin);
   }
   if (($outTemp >= $roomTemp) && ($roomSetTemp <= $roomTemp)) {
    DoWinClose($roomVar,$roomWin);
   }
  }
 } 
 sub DoWinOpen {
  die "Too many arguments for subroutine" unless @_ <= 2;
  die "Too few arguments for subroutine" unless @_ >= 2;
  my $roomVar=$_[0];
  my $winState=$_[1];
  my $roomState=ReadingsVal($roomVar,"state","none");
  if ($winState eq "opened") {
   fhem("set " . $roomVar . " OK");
  }
  if (($roomState ne "open") && ($winState eq "closed")) {
   fhem("set " . $roomVar . " open");
   if (ReadingsVal("[PRESENCE]","state","absent") ne "absent") {
    fhem("set push msg '" . $roomVar . "' 'Open the Window' '' 1 ''");
   }
  }
 }
 sub DoWinClose {
  die "Too many arguments for subroutine" unless @_ <= 2;
  die "Too few arguments for subroutine" unless @_ >= 2;
  my $roomVar=$_[0];
  my $winState=$_[1];
  my $roomState=ReadingsVal($roomVar,"state","none");
  if ($winState eq "closed") {
   fhem("set " . $roomVar . " OK");
  }
  if (($roomState ne "close") && ($winState eq "opened")) {
   fhem("set " . $roomVar . " close");
   if (ReadingsVal("[PRESENCE]","state","absent") ne "absent") {
    fhem("set push msg '" . $roomVar . "' 'Close the Window' '' 1 ''");
   }
  }
 }
 sub SummerSetTemp {
  die "Too many arguments for subroutine" unless @_ <= 2;
  die "Too few arguments for subroutine" unless @_ >= 2;
  my $roomVar=$_[0];
  my $roomSetTemp=$_[1];
  if ($roomSetTemp eq "off") {
   $roomSetTemp=ReadingsNum($roomVar . "SummerTemp","state",999);
   if ($roomSetTemp eq 999) {
    fhem("define " . $roomVar . "SummerTemp dummy");
    fhem("set " . $roomVar . "SummerTemp 20");
    fhem("attr " . $roomVar . "SummerTemp stateFormat state °C");
    $roomSetTemp=20;
   }
  }
  return $roomSetTemp;
 }
}

HowTo: Gewitterblitze fotografieren

Das Fotografieren von Blitzen ist mit dem richtigen Equipment eigentlich eine relativ unspektakuläre Sache.
Da viele allerdings glauben, man muss nach dem Gewitterblitz “jagen”, will ich hier die Möglichkeiten zur Blitzfotografie erläutern.

Zuerst: Was brauchen wir?

Als Erstes sollten wir uns ansehen, von wo unser Gewitter kommt, um zu sehen, in welche Richtung das Aufstellen am Sinnvollsten ist.
Hierzu kann man z.B. eine Blitzortungs-Seite nutzen. Zu Hause weiß man meistens die “Wetterseite” (also von wo das Gewitter häufig kommt) auch so (bei mir: Westen).

Danach stellen wir unsere Kamera mit Stativ an einem geschützten Ort auf, am besten eignet sich dazu ein Carport, ein Vordach oder eine Loggia. Möglich wäre auch ein Zelt oder Ähnliches, Hauptsache die Kamera bleibt trocken. (Gute Plätze können z.B. sein: Überdachte Bushaltestellen, Vordächer von Geschäften und Einkaufszentren, ggf. auch überdachte Mülltrennstellen bei Mehrparteienhäusern).

ISO 200
ISO-Empfindlichkeit: 200 (mit Tonwertpriorität)

Bei den Einstellungen ist es generell wichtig, die ISO so weit wie möglich nach unten zu stellen (ISO 100-200) und die Fokussierung des Objektivs auf unendlich zu stellen.

IMG_1596_web
Fokusring auf Unendlich gestellt

(Hier hilft ein Objektiv mit einem beschrifteten Fokusring).

Da wir die Fokussierung manuell auf unendlich gestellt haben, sollten wir ebenfalls den Autofokus deaktivieren, indem wir den Schieber am Objektiv auf “MF” stellen.

IMG_1590_web
MF = Manual Focus
IMG_1613_web
Rauchreduzierung bei Langzeitbelichtung deaktiviert

Auch sollte man vorher die Rauschreduzierung für Langzeitbelichtungen deaktivieren in den Einstellungen, da diese nach jedem Bild ein weiteres Dunkelbild macht. Das Dunkelbild dauert genauso lang wie das Blitzbild, führt aber zu keinem zusätzlichen Foto, sondern wird nur mit dem Bild gegengerechnet. Damit vermeidet man zwar Hot-Pixel, allerdings könnte es dadurch sein, dass man Blitze verpasst.


Kameraeinstellungen Variante 1 im M-Modus:

Eine relativ lange Belichtungszeit (10-15 Sekunden) ist von Vorteil, wenn es eher weniger blitzt, bei hoher Blitzrate sollte man die Zeit entsprechend kürzer wählen, weil man sonst zu viele Blitze auf einem Bild hat, was schnell zu einer Überbelichtung führen kann.

IMG_1616_web
Verschlusszeit: 10 Sekunden

Wenige Blitze pro Bild sind sinnvoller, am besten ein Blitz pro Bild, diese kann man dann mit einem Bildbearbeitungsprogramm auf ein Bild zusammenlegen, wenn es eindrucksvoller aussehen soll.

IMG_1617_web
Blende f/11

Die Blende stellt man sich so ein, dass das Bild eher unterbelichtet ist (-1 bis -3). Je nach Situation kann es sein, dass man einen Graufilter benötigt, meistens ist es jedoch Dunkel genug, um ohne zu fotografieren.


Kameraeinstellungen Variante 2 im Tv-Modus (Nikon: S-Modus):

Wem das Spielen mit der Blende zu viel Arbeit ist, der kann auch den Tv-Modus (Blendenautomatik, man wählt die Zeit aus und die Blende wird automatisch von der Kamera ausgewählt) verwenden.

IMG_1621_web
Zeit auf 10 Sekunden und Belichtung auf -2 fix eingestellt. Die Blende wählt automatisch die Kamera aus.

Hier wählt man wieder einen Zeitrahmen, in dem etwa 1 Blitz kommt (z.B. 10-15 Sekunden) und wählt eine Belichtung zw. -1 und -3.


Nun stellen wir noch die Kamera auf den Serienbildmodus, stecken die Kabelfernbedienung an und fixieren den Auslöser, sodass er dauerhaft gedrückt bleibt.

Eine weitere Möglichkeit wäre, auf der Kamera den Selbstauslöser mit einer definierten Anzahl von Serienbildern einzustellen (dies ist nicht auf allen Kameras möglich)

MS7D4267_web
Selbstauslöser mit Reihenaufnahme

Nun kann man nur noch abwarten, bis die Blitze kommen, ich stehe meistens daneben und löse nach einem Blitz den Auslöser um das Blitzbild gleich am Display kurz zu begutachten (bin halt doch sehr neugierig)


Für die volle Kontrolle: Kameraeinstellungen Variante 3 mit BULB-Modus:

Der BULB-Modus hat den Vorteil, dass wir die Zeit frei wählen können und so auf einzelne Blitze reagieren können. Nachteil hier ist, dass es leicht zu Über- oder Unterbelichtung kommen kann (Unterbelichtung ist hier meistens kein Problem, da Blitze sowieso sehr hell sind.)

IMG_1604_web
BULB-Modus: Es muss nur die Blende ausgewählt werden.

Im BULB-Modus wählen wir einfach nur die Blende aus, eine hohe Blendenzahl ist hier von Vorteil, damit das Bild nicht zu schnell überbelichtet wird. In diesem Modus muss man nur noch den Auslöser gedrückt halten, warten bis es blitzt und danach den Auslöser loslassen. Ggf. zwischendurch kurz loslassen, um ein neues Bild zu beginnen, damit es nicht überbelichtet wird. Auch hier ist eine Kabelfernbedienung von Vorteil, da man so Verwacklungen verhindern kann.

Ein gelungenes Gewitterblitz-Bild kann dann so aussehen, wie mein Bild des Monats vom August 2012:

August-2012
Bild des Monats August 2012

HowTo: ejabberd – Erlang Distribution Protocol Ports (4369 + dynamischer Port) auf localhost binden

Wer einen ejabberd Jabber-Server betreibt, dem ist bestimmt schon aufgefallen, dass der Prozess epmd auf Port 4369 und der Prozess beam auf einem dynamischen Port horcht:

(Ausgabe von netstat -ptnl, gekürzt)

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 1435/epmd
tcp 0 0 0.0.0.0:47064 0.0.0.0:* LISTEN 1632/beam
--skip--

Diese beiden Ports sind nach außen geöffnet, dies ist aber für den Betrieb des Jabber-Servers nicht relevant, deswegen ist es durchaus sinnvoll, diese nur auf localhost(127.0.0.1) laufen zu lassen, da dann ein Zugriff von außen ausgeschlossen werden kann.

Um nun den Prozess epmd auf localhost umzubiegen, brauchen wir nur in der /usr/sbin/ejabberctl folgende 2 Zeilen oben einfügen:

ERL_EPMD_ADDRESS=127.0.0.1
export ERL_EPMD_ADDRESS

Nach einem Neustart des Servers würde die Ausgabe von netstat wie folgt aussehen:

(Ausgabe von netstat -ptnl, gekürzt)

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:4369 0.0.0.0:* LISTEN 1435/epmd
tcp 0 0 0.0.0.0:47064 0.0.0.0:* LISTEN 1632/beam
--skip--

epmd horcht nun also auf localhost, sehr gut.
ACHTUNG: Der Befehl ejabberdctl funktioniert nun nicht mehr, da dieser Befehl versucht, auf den Hostnamen zuzugreifen, epmd aber nun am localhost horcht. Abhilfe kann ein Eintrag in /etc/hosts sein, allerdings ist das nicht die schönste Lösung.

Um nun noch den dynamischen Port auf localhost horchen zu lassen, müssen wir dem Jabber-Server sagen, dass alle Listener standardmäßig auf localhost laufen sollen.

Da der Jabber-Server selbst allerdings noch von außen erreichbar sein soll, müssen wir in der /etc/ejabberd/ejabberd.cfg bei den Listenern die IP ergänzen:

D.h. unter der Zeile:

{5222, ejabberd_c2s, [

folgendes einfügen:

{ip, {0, 0, 0, 0}},

Falls Server-zu-Server Verbindungen gewünscht sind (Kommunikation mit anderen Jabber Servern) unter der Zeile:

{5269, ejabberd_s2s_in, [

ebenfalls folgendes einfügen:

{ip, {0, 0, 0, 0}},

Sollte das Admin-Webinterface von außen erreichbar sein, auch unter:

{5280, ejabberd_http, [

die IP einfügen:

{ip, {0, 0, 0, 0}},

Nun da sichergestellt ist, dass unsere Jabber-Server-Services auf 0.0.0.0 hören, können wir definieren, dass alles andere auf localhost horchen soll:

Hierzu wird in /usr/sbin/ejabberd eine IF-Abfrage wie folgt geändert:

if [ "$FIREWALL_WINDOW" = "" ] ; then
KERNEL_OPTS="-kernel \
inet_dist_use_interface {127,0,0,1}"
else
KERNEL_OPTS="-kernel \
inet_dist_use_interface {127,0,0,1} \
inet_dist_listen_min ${FIREWALL_WINDOW%-*} \
inet_dist_listen_max ${FIREWALL_WINDOW#*-}"
fi

Im Prinzip wird damit in jedem Fall die Variable inet_dist_use_interface auf die loopback-Adresse 127.0.0.1 eingestellt.

Danach sollte die Ausgabe von netstat wie folgt aussehen:

(Ausgabe von netstat -ptnl, gekürzt)

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:4369 0.0.0.0:* LISTEN 1435/epmd
tcp 0 0 127.0.0.1:47064 0.0.0.0:* LISTEN 1632/beam
--skip--

Die beiden Ports horchen nun auf localhost.
Bitte bei Fragen oder Fehlern einfach die Kommentar-Funktion benutzen!

HowTo: Günstiger Einstieg in die Makrofotografie

Mit viel erstaunen sieht man sich die Makrofotos der Profis an und fragt sich, ob das nicht auch etwas für einen selbst wäre. Wenn man mit der Materie allerdings noch nicht so vertraut ist, weiß man nicht, ob man so viel Geld für ein Makroobjektiv ausgeben soll, diese sind ja doch vergleichsweise teuer. Darum will ich euch einen günstigen Einstieg in die Makrofotografie zeigen, und zwar ohne sich gleich ein teures Makroobjektiv zu leisten.

Ich halte es auch nicht für sonderlich sinnvoll, sich Nahlinsen zu kaufen, denn je günstiger sie sind, desto schlechter wird natürlich auch die Bildqualität damit. Dann sind diese oft an bestimmte Filterdurchmesser gebunden und können so nicht mit dem gesamten Objektivpark benutzt werden. Somit ist die wohl günstigste Alternative, welche am wenigsten Qualitätseinbußen bringt und am flexibelsten ist, Zwischenringe(Canon/Nikon).

Anfangs ist wohl ein Balgengerät(Canon/Nikon) noch verlockender als Zwischenringe, für Anfänger würde ich aber vom Balgengerät abraten, da diese durch das mechanische Verstellen anstrengend zu bedienen sind und man schnell den Spaß daran verliert. Außerdem haben günstigere Balgengeräte den Nachteil, dass sie nach Weichmachern stinken (irgendwie muss ja der Balgen weich bleiben).

Bei den Zwischenringen(Canon/Nikon) würde ich nur Automatik-Ringe kaufen, welche die Objektiv-Informationen vom Objektiv an die Kamera weitergeben, da man so auch die Blende problemlos an der Kamera einstellen kann und eingeschränkt sogar den Autofokus benutzen kann.

Bei Canon gibt es diese Ringe auch Original vom Hersteller mit je 12mm und 25mm, allerdings sind sie sehr teuer. Dadurch, dass in den Ringen keine Optik ist oder sonst irgendein Element, sie also rein nur den Abstand zwischen Sensor und Objektiv vergrößern, beeinflussen weder die teuren noch die billigen Zwischenringe die Bildqualität.

Mithilfe dieser Zwischenringe verstellt man im Prinzip die Naheinstellgrenze der eigenen Linse, dadurch kann man viel näher an das Objekt herangehen und so auch größere Abbildungsmaßstäbe erreichen. Prinzipiell funktionieren die Zwischenringe an jedem Objektiv, allerdings muss man bedenken, dass Objektive natürlich nicht für diese Nähe, die man mit den Zwischenringen erreicht, optimiert sind. Darum nimmt man für die Makrofotografie mit Zwischenringen am besten eine Fixbrennweite, die ohne Zwischenringe schon eine sehr gute Abbildungsqualität liefert. Um hier im günstigen Preisrahmen für den Anfänger zu bleiben, empfehle ich das 50mm f/1.8, dieses bewegt sich bei Canon, sowie auch bei Nikon im Bereich von etwa 100 Euro. Generell ist diese Fixbrennweite quasi ein Must-have, da man bei diesem Preis nichts falsch machen kann. Natürlich erreicht man mit dem Kit-Objektiv auch schon sehr gute Ergebnisse.

Als Beispiel, dieses Bild ist mithilfe der Zwischenringe und einer 50mm f/1.8 Fixbrennweite entstanden:

Januar 2012

HowTo: Sturzsicherung für Kameragurt

Hinweis: Die Idee wurde mittlerweile von der Firma Joby aufgegriffen und kann hier gekauft werden.

Am Anfang hat man mit Gurten, an denen die Kamera an der Stativgewindeschraube hängt, die Angst, dass die Kamera sich löst und runterfällt.
Deswegen hab ich mir überlegt, die Kamera an einem Seil noch zusätzlich zu sichern. Hierbei wird das eine Ende bzw. die eine Schlaufe des Seils fix mit einer Gurtöse der Kamera verbunden.
Das andere Ende wird dann mittels Karabinerhaken mit dem Gurt verbunden und kann so relativ schnell ge- und entsichert werden.

Was wird gebraucht?

– Weniger als einen Meter Polypropylen-Schnur 3mm
– 2x Kauschen für 3mm Seile
– 4x Simplex Seilklemme für 3mm Seile
– 2x Karabinerhaken
Schrumpfschlauch

Alle Teile sollten Rostfrei sein, da man sie doch des öfteren draussen benutzt.

Zusätzliches Werkzeug wird benötigt:
Spitzzange
Schere
Feuerzeug
Schraubenschlüssel bzw. Außensechskant-Schraubendreher

Achtung: Von der Befestigung des Seiles an der Gurtöse oder auch am Gurt mittels Schlüsselringen rate ich dringend ab, da sich diese bei starker Belastung einfach aufbiegen und so der gewünschten Nutzen einer Sicherung nicht gegeben ist. Bei einem echten Fall treten ja doch gewisse Kräfte auf.

Zuerst wird am einen ende das Seil um die Kausche herum gelegt und mittels der Simplex-Klemme fixiert, in diese Kausche wir dann der Karabiner eingehängt. Dieses Ende wird am Gurt eingehängt, was dann so aussieht:

MS7D1077_web

Nun lassen wir etwa 20cm Seillänge frei und machen dann eine weitere Schlaufe ohne Kausche, diese wird in die Kameraöse eingehängt und mittels der Simplex-Klemme fixiert. Hier wird deswegen keine Kausche verwendet, weil diese geschlossen ist und deswegen nicht in die Kameraöse passen würde, außerdem wird so die Kameraöse nicht zerkratzt. Um die Kamera noch zusätzlich vor Kratzern zu schützen, habe ich die Simplex-Klemme mit Schrumpfschlauch „umhüllt“. (Hier wird das Feuerzeug benötigt, um den Schrumpfschlauch zu schrumpfen.)

MS7D1075_web

Weiters braucht man dann auch die Schere, die Zange und das Feuerzeug um das Seil abzuschneiden, das Ende mit der Zange zu halten und dann mit dem Feuerzeug kurz zu erwärmen, damit das Ende zusammenschmilzt, damit sich das Seil nicht auflöst.

Die fertige Sicherung sieht dann so aus:

MS7D1079_web

Diese Sicherung legt man sich einfach für jede Kamera zu und lässt sie dauerhaft drauf.

Für mich ist es einfach die zusätzliche Sicherung, dass meine Kamera nicht am Boden aufschlägt, wenn ich die Sicherung an der Schnellwechseleinrichtung vergesse und bei dem Hebel zum Entriegeln irgendwo hängen bleibe. Denn sonst würde sich die Kamera vom Gurt lösen und hinunterfallen.

HowTo: SunSniper mit Manfrotto Schnellwechselplatte

Da ich schon seit Längerem nach einem Ersatz für den Standard-Kameragurt bin, allerdings meine Schnellwechselplatte dafür nicht jedes Mal abnehmen möchte, war ich auf der Suche nach einer Lösung.

Zu allererst ist mir in Verbindung mit der Manfrotto Schnellwechselplatte< die Lösung von Blackrapid untergekommen. Hier wird mittels einer Schraube die Schraube in der Schnellwechselplatte getauscht und an dieser dann der Haken des Blackrapid-Gurtes befestigt. Ganz zufrieden war ich mit dieser Lösung allerdings nicht.
Nachteil dieser Lösung ist, dass man den Haken des Blackrapid-Gurtes jedes Mal lösen muss, um die Kamera auf das Stativ zu setzen. Dies hatte ich vor einiger Zeit kurz zum Testen, fand das Ganze aber eher anstrengend. Erst vor Kurzem bin ich eigentlich durch Zufall darauf gestossen, dass man doch auf das Stativgewinde dieser Gurte auch einfach die Schnellwechseleinrichtung Manfrotto 323 montieren kann.

Gesagt, getan! Ich hab mir den SunSniper “The Pro” und die Schnellwechseleinrichtung um zusammen ca. 90 Euro bestellt.
Auch jeder andere Schultergurt ist geeignet, allerdings war das Stahlseil und die direktere Verbindung zw. Schraube und Gurt für mich das Kaufargument gegenüber z.B. einem Blackrapid mit Karabinerhaken.

Bei der Auswahl des SunSniper-Gurtes würde ich mindestens zum Sun Sniper “Steel” greifen, da dieser ein Stahlseil integriert hat. Der Pro hat noch zusätzlich ein Kugellager in der Schraube, was zum Vorteil hat, dass sich die Kamera frei drehen lässt und die Schraube sich nicht so einfach lösen kann.
Ob sich der SunSniper “The Pro II” auszahlt, kann ich nicht sagen, aber der normale SunSniper hat schon eine sehr gute Dämpfung und reicht deswegen (zumindest für mich) vollkommen aus.
Wer eher auf Leder steht, kann ja den SunSniper Ledergurt nehmen.

Die Schnellwechseleinrichtung von Manfrotto hat den Vorteil, dass man die Kamera schnell zwischen Gurt und Stativ wechseln kann, sowie auch alle seine Kameras mit der Schnellwechselplatte ausstatten und so schnell alle Kameras mit dem gleichen Gurt verwenden kann. Zusätzlich hat die Schnellwechseleinrichtung die mechanische Sicherung, welche das unbeabsichtigte Lösen der Kamera vom Gurt bzw. dem Stativ verhindert.

MS7D1070_webMS7D1072_web

Als weiteren Schritt kann man das Ganze noch mit einer Schraubensicherung zwischen Kameragurt und Schnellwechseleinrichtung ergänzen, dann kann sich die Schraube mit Sicherheit nicht mehr lösen.

PS: Auf meinem SunSniper habe ich ebenfalls die Lösung mit dem Klettstreifen für den Objektivdeckel umgesetzt.
MS7D1067_web