Listings der Auflage 8

Wenn Sie die Beispiele im Buch selber nachvollziehen möchten, kann es hilfreich sein, die Listings nicht abtippen zu müsen. Deshalb möchte ich Ihnen den Service bieten, ausgewählte Listings von dieser Seite einfach in Ihre Zwischenablage kopieren zu können.

Kapitel 38

Listing 38.1: Mit Hilfe einer Schleife durchsuchen Sie Ihr Subnetz.

for /L %i in (1,1,254) do @(ping -n 1 -w 20 192.168.1.%i|find ".%i: B")

Kapitel 40

Listing 40.1: Die Anbindung von Asterisk an Sipgate

type=peer
host=sipgate.de
outboundproxy=sipgate.de
nat=yes
port=5060
username=<Sipgate-ID>
fromuser=<Sipgate-ID>
secret=<SIP-Passwort>
fromdomain=sipgate.de
dtmfmode=rfc2833
insecure=port,invite
canreinvite=no
registertimeout=600
disallow=all
allow=alaw
allow=ulaw

Listing 40.2: Die Konfiguration für eigehende Anrufe

secret=<SIP-Passwort>
type=user
context=from-trunk

Kapitel 41

Listing 41.1: Authentifizierungsinformationen des Postfix.

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth

Listing 41.2: Die Fetchmail-Konfiguration für einen Benutzer.

set daemon 600
poll mail.hosteurope.de proto pop3 user "test" pass "geheim" is klaus fetchall

Kapitel 46

Listing 46.1: Standardattribute von FHEM.

attr global userattr devStateIcon devStateStyle icon setList sortby webCmd widgetOverride

Listing 46.2: Eine FS20-Funktionsgruppe für Dimmer.

define fg_dimmer FS20 12341234 4412
attr fg_dimmer IODev CUL_0
attr fg_dimmer eventMap on:ein off:aus
attr fg_dimmer webCmd aus:ein

Listing 46.3: Ein globaler und ein lokaler FS20-Master.

# globaler Master für das ganze Haus
define gm_haus FS20 12341234 4444
attr gm_haus IODev CUL_0
attr gm_haus eventMap on:ein off:aus
attr gm_haus webCmd ein:aus

# lokaler Master für die Terrasse
define lm_terrasse FS20 12341234 1144
attr lm_terrasse IODev CUL_0
attr lm_terrasse eventMap on:ein off:aus
attr lm_terrasse webCmd ein:aus
attr lm_terrasse room terrasse

Listing 46.4: Die Definition eines FS20-RSU.

define markise1 FS20 12341234 1111 lm 1144 gm 4444
attr markise1 IODev CUL_0
attr markise1 devStateIcon einfahren:awning.off ausfahren:awning
attr markise1 eventMap on:ausfahren off:einfahren
attr markise1 icon icoMarkise.png
attr markise1 model fs20rsu
attr markise1 room Terrasse

Listing 46.5: Steuerung nach Astrozeit.

define markise1_sonnenuntergang at *{sunset(0,"19:30","21:00")} set markise1 einfahren

Listing 46.6: Steuerung nach Sonnenwinkel.

define markise1_sonnenuntergang at *{sunset("horizon=15")} set markise1 einfahren

Listing 46.7: Die Definition eines FS20-Dimmers.

define ddimmer1 FS20 12341234 1112 fg 4412 lm 1144 gm 4444
attr ddimmer1 IODev CUL_0
attr ddimmer1 eventMap on:ein off:aus
attr ddimmer1 model fs20di

Listing 46.8: Die Definition eines Dummys.

define dimmer1 dummy
attr dimmer1 eventMap on:ein off:aus
attr dimmer1 group Licht
attr dimmer1 icon icoDimmer.png
attr dimmer1 room Terrasse
attr dimmer1 setList dim:slider,25,6.25,100
attr dimmer1 webCmd ein:aus:dim

define dd1_d1_dim notify dimmer1 set ddimmer1 $EVENT

Listing 46.9: Ein Event löst ein anderes Event aus.

define d1_m1_ein notify dimmer1:ein set markise1 einfahren
define m1_d1 notify markise1:ausfahren set dimmer1 aus

Listing 46.10: Filtern von Events mit Regular Expressions.

define d1_m1_dim notify dimmer1:dim.* set markise1 einfahren

Listing 46.11: Definition eines FS20"=Schalters.

define sender_kanal1 FS20 43214321 1311
attr sender_kanal1 IODev CUL_0
attr sender_kanal1 room FS20
define sender_kanal2 FS20 43214321 1312
attr sender_kanal2 IODev CUL_0
attr sender_kanal2 room FS20

define sk1_m1 notify sender_kanal1 set markise1 $EVENT
define sk1_d1 notify sender_kanal2 set dimmer1 $EVENT

Listing 46.12: Definition von eines HMLAN für HomeMatic in FHEM.

define HM_CFG_USB_2 HMLAN :
attr HM_CFG_USB_2 hmId 
attr HM_CFG_USB_2 hmLanQlen 1_min
attr HM_CFG_USB_2 loadLevel 0:low,40:batchLevel,90:high,99:suspended

Listing 46.13: Definition des Modules HMInfo in FHEM.

define hm HMinfo

Listing 46.14: Definition einer VCCU für HomeMatic in FHEM.

define VCCU CUL_HM 
attr VCCU IOList HM_CFG_USB_2,myHmUART
attr VCCU model CCU-FHEM
attr VCCU subType virtual
attr VCCU webCmd virtual:update

Listing 46.15: Das Modul Twilight steuert den Garagentorantrieb.

define garage_zu at *{twilight("myTL","ss_civil","19:00","22:00")} set sgaragentor on-for-timer 1

Listing 46.16: Ein Dummy für den Status des Feuermelders

define Brand dummy
attr Brand webCmd ja:nein

Listing 46.17: Der Dummy kennt nur "Brand ja" und "Brand nein".

define fire_c notify Ei413_Sw_02_Relais:.*contact:.closed.* set Brand ja
define fire_o notify Ei413_Sw_02_Relais:.*contact:.open.* set Brand nein

Listing 46.18: FHEM schreibt alle Mitglieder der Telegram-Gruppe "Haus" an.

define fire DOIF ([Brand] eq "ja") ( set telegram message @#Haus Ei413 meldet Brand. ) DOELSEIF ([Brand] eq "nein") ( set telegram message @#Haus Ei413 meldet keinen Brand mehr. )

Listing 46.19: Wetterdaten in FHEM

# Wetterdaten Bonn erfassen
define MeinWetter Weather 640161 3600 de
attr MeinWetter room Wettervorhersage

# Logfile alle Wetter Daten
define FileLog_MeinWetter FileLog ./log/meinwetter-%Y-%m.log MeinWetter
attr FileLog_MeinWetter logtype text
attr FileLog_MeinWetter room Wettervorhersage

# Wetter Icons zur Weboberfläche hinzufuegen
define weblink_meinwetter weblink htmlCode {WeatherAsHtml("MeinWetter")}
attr weblink_meinwetter room Wettervorhersage

Listing 46.20: Steuerung abhängig vom Wetter.

define markise1_sonnenschein at *11:00:00 { if (( ReadingsVal('MeinWetter','temperature',0) > 15 ) && (( ReadingsVal('MeinWetter','condition',0) eq "sonnig" )) || ReadingsVal('MeinWetter','condition',0) eq "teilweise wolkig") { fhem('set markise1 ausfahren') }}

Listing 46.21: Logische Verknüpfung von Bedingungen.

define markise1_sonnenschein at *{sunrise("horizon=25")} { if (( ReadingsVal('MeinWetter','fc1_high_c',0) > 20 ) && { if ( ReadingsVal('MeinWetter','fc1_condition',0) =~ /sonnig|heiter|teilweise wolkig/ ) { fhem('set markise1 ausfahren') }}

Listing 46.22: Definition einer Fritz!Box in FHEM.

define fritz.box.aha FBAHA fritz.box:2002

Listing 46.23: Das neue FHEMWEB lauscht auf Port 8086

define WEBapi FHEMWEB 8086 global
attr WEBapi csrfToken 
define allowed_WEBapi allowed
attr allowed_WEBapi allowedCommands set,get
attr allowed_WEBapi validFor WEBapi

Listing 46.24: Let's Encrypt erzeugt ein Zertifikat für den Reverse Proxy.

$ sudo apt-get install git
$ cd /opt
$ sudo git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto certonly -d <Domäne>

Listing 46.25: Die Reverse Proxy Konfiguration

<IfModule mod_ssl.c><VirtualHost *:443>
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
 ServerName <Domäne>
 Include /etc/letsencrypt/options-ssl-apache.conf
 SSLCertificateFile /etc/letsencrypt/live/<Domäne>/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/<Domäne>/privkey.pem
 ProxyRequests           Off
 ProxyVia                Off
 ProxyPreserveHost       On
<Location /api>
 ProxyPass http://localhost:8086/fhem
 ProxyPassReverse http://localhost:8086/fhem
 AuthUserFile /etc/htpasswd.fhemapi
</Location>
<Proxy *> Order deny,allow Allow from all AuthType Basic AuthName "Bitte Passwort eingeben" Require valid-user </Proxy>
</VirtualHost>
</IfModule>

Listing 46.26: Jede Woche werden abgelaufene Zertifikate erneuert.

#!/bin/sh
/opt/letsencrypt/letsencrypt-auto renew
service apache2 restart

Kapitel 47

Listing 47.1: Herkömmliche IP"=Konfiguration von Raspbian

iface eth0 inet static
address 192.168.1.100  # Ihre IP-Adresse
netmask 255.255.255.0  # Ihre Netzwerkmaske
gateway 192.168.1.1    # Ihr Router

Listing 47.2: Aktuelle IP"=Konfiguration von Raspbian

interface enxb827eb77834d
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

Listing 47.3: WLAN"=Konfiguration von Raspbian

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="<WLAN-SSID>"
  psk="<WLAN-PASSWORT>"
  key_mgmt=WPA-PSK
}

Listing 47.4: Übertaktung eines Raspberry Pi B+ auf 800 MHz

##############################################
# Overclocking settings
arm_freq=800
core_freq=333
sdram_freq=450
gpu_freq=300

Listing 47.5: MPEG-2 und VC-1 Lizenzschlüssel

##############################################
# License keys to enable GPU hardware decoding
decode_MPG2=0x61b4f3d9
decode_WVC1=0x3caeb48b

Listing 47.6: Definition einer Bridge auf dem Raspberry Pi.

auto lo
auto br0
iface lo inet loopback
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
bridge_fd 1
bridge_hello 3
bridge_Maxage 10
bridge_stp off
bridge_ports eth0 wlan0
allow hotplug eth0
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet manual

Listing 47.7: Der hostapd baut einen 2,4 GHz WLAN Access Point auf.

interface=wlan0
bridge=br0
driver=nl80211
macaddr_acl=0
ssid=mitohnekabel
hw_mode=g
ieee80211n=1
channel=1
country_code=DE
wpa=2
wpa_passphrase=ganz_geheim
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

Listing 47.8: UMTSkeeper mit Optionen.

/usr/local/umtskeeper/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1001' SIM_PIN='1234' APN='CUSTOM_APN' CUSTOM_APN='internet.eplus.de' APN_USER='eplus' APN_PASS='internet'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no' --httpserver &>> /var/log/umtskeeper_error.log &

Listing 47.9: Die Konfiguration der NAT-Firewall.

IPT=/sbin/iptables
LOCAL_IFACE=br0
INET_IFACE=ppp0
# aufräumen
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
# forwarding
$IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT
$IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
# masquerading
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

Listing 47.10: Die DHCP-Konfiguration.

interface=br0
dhcp-range=192.168.1.100,192.168.1.199,255.255.255.0,24h

Listing 47.11: Definition des CUL in FHEM.

define CUL_0 CUL /dev/ttyACM0@9600 1234

Listing 47.12: Definition eines HMUARTLGW für HomeMatic in FHEM

define myHmUART HMUARTLGW /dev/ttyAMA0
attr myHmUART hmId 

Listing 47.13: Das Ausgabegerät des MPD.

audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"       # optional
}

Listing 47.14: Die Konfiguration der Fernbedienung mit lirc.

## irexec
begin
    prog = irexec
    button = KEY_PREVIOUS
    config = /usr/bin/mpc volume -2
    repeat = 0
end
begin
    prog = irexec
    button = KEY_FORWARD
    config = /usr/bin/mpc volume +2
    repeat = 0
end
begin
    prog = irexec
    button = KEY_CHANNELUP
    config = /usr/bin/mpc stop
    repeat = 0
end
begin
    prog = irexec
    button = KEY_CHANNELDOWN
    config = /usr/bin/mpc play
    repeat = 0
end
begin
    prog = irexec
    button = KEY_NUMERIC_1
    config = /usr/bin/mpc play 1
    repeat = 0
end
begin
    prog = irexec
    button = KEY_NUMERIC_2
    config = /usr/bin/mpc play 2
    repeat = 0
end
begin
    prog = irexec
    button = KEY_NUMERIC_3
    config = /usr/bin/mpc play 3
    repeat = 0
end

Listing 47.15: Die Anbindung eines Calenders aus dem Internet an FHEM.

define Ferien_NRW Calendar ical url https://calendar.google.com/calendar/ical/u5pdgv2fih5utqhlnps9ag96jqemk3ru%40import.calendar.google.com/public/basic.ics
attr Ferien_NRW room Kalender

Listing 47.16: Definition eines Dummys für die Schulferien.

define Schulferien dummy
attr Schulferien room Kalender
attr Schulferien webCmd ja:nein
define Ferienanfang notify Ferien_NRW:start:.* set Schulferien ja
define Ferienende notify Ferien_NRW:end:.* set Schulferien nein

Listing 47.17: Überblick über die nächsten Schaltzeiten in FHEM.

define SchaltzeitenWeblink weblink htmlCode { CalendarAsHtml("Schaltzeiten","next 3") }
attr SchaltzeitenWeblink room Kalender

Listing 47.18: Ein Kalender steuert Aktoren in FHEM.

define dummy_an notify Schaltzeiten:start:.* {my $reading = "$EVTPART0" ;; my $uid = "$EVTPART1" ;; my $actor = fhem("get Schaltzeiten summary $uid 1") ;; if(defined $actor) { fhem("set $actor on") } }
define dummy_aus notify Schaltzeiten:end:.* {my $reading = "$EVTPART0" ;; my $uid = "$EVTPART1" ;; my $actor = fhem("get Schaltzeiten summary $uid 1") ;; if(defined $actor) { fhem("set $actor off") } }

Listing 47.19: Die Definition eines Dummys für den Wecker.

define Wecken dummy
attr Wecken eventMap on:ja off:nein
attr Wecken room Julia
attr Wecken webCmd ja:nein

Listing 47.20: Das Kommando DOIF hält den jeweiligen Status fest.

define Klingeln DOIF ([Wecken] eq "ja") and ([Schulferien] eq "nein") ( set Radio play ) DOELSEIF ([Wecken] eq "nein") ( set Radio stop )

Listing 47.21: Ein Script führt das inkrementelle Backup aus.

HEUTE=$(date -I)
perl /opt/fhem/fhem.pl 7072 "set FBDECT_nas on"
sleep 600
ssh pi@<IP-Raspberry NAS> << EOF
rsync -xahP --delete --link-dest=/mnt/raid1/backupdir/latest -e '/usr/bin/ssh -i /home/pi/.ssh/id_rsa' <Benutzer>@<NAS>:/<Verzeichnis> /mnt/raid1/backupdir/${HEUTE}
if [ -d /mnt/raid1/backupdir/latest ]
then
 rm -r /mnt/raid1/backupdir/latest
fi
ln -s /mnt/raid1/backupdir/${HEUTE} /mnt/raid1/backupdir/latest
sudo /sbin/shutdown -h 0
EOF
sleep 300
perl /opt/fhem/fhem.pl 7072 "set FBDECT_nas off"

Listing 47.22: FHEM startet das Backup morgens um 4 Uhr.

define backup at *04:00:00 { system('/home/pi/rsync_nas.sh &') }

Previous page: PC Netzwerke Next page: Raspberry Pi