Einfügen statt Abtippen: Der Einfügeservice für die Leser des umfassenden Handbuchs der Heimautomation: Sie finden nachstehend einen oft gewünschten Buch-Auszug, zusammengestellt aus längeren Shell-Kommandos und Code-Beispielen.

Einfügeservice für das Heimautomations-Kompendium

Die folgenden Kapitel entsprechen der Buch Kapitel-Struktur und enthalten jeweils Code-Fragmente und Shell-Kommandos in der Reihenfolge des Auftretens im Buch. Nutzen Sie den Einfügeservice und kombinieren damit die Vorteile der gedruckten Ausgabe mit der einfachen Text-Übernahme in Shell oder Editor.

4.2.4 Installieren Sie den 1-Wire-Server OWFS

sudo apt-get update
sudo apt-get install automake autoconf autotools-dev
sudo apt-get install gcc-4.7
sudo apt-get install libtool libusb-dev libfuse-dev swig
sudo apt-get install python2.7-dev tcl8.5-dev php5-dev i2c-tools

Siehe dazu auch: Buch Errata

cd /usr/src
sudo wget --output-document=owfs-latest.tgz http://sourceforge.net/projects/owfs/files/latest/download
sudo tar xzvf owfs-latest.tgz

Siehe dazu auch: Buch Errata

cd owfs-2.9p5
sudo ./configure
sudo make
sudo make install
cd /etc/modprobe.d
sudo nano ds2490
sudo reboot
sudo mkdir /mnt/1wire
sudo nano /etc/fuse.conf
sudo /opt/owfs/bin/owfs -u --allow_other /mnt/1wire/
cd /etc/init.d
sudo nano start1wire.sh

Die Datei start1wire.sh füllen Sie mit diesem kurzen Skript:

#!/bin/bash
### BEGIN INIT INFO
# Provides: start1wire
# Required-Start: $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: OWFS während boot starten
# Description: OWFS während boot starten
### END INIT INFO
# Starts OWFS
/opt/owfs/bin/owhttpd -c /etc/owfs.conf --pid-file /var/run/owfs/owhttpd.pid -uall
/opt/owfs/bin/owserver -c /etc/owfs.conf --pid-file /var/run/owfs/owserver.pid -uall
#/opt/owfs/bin/owfs -c /etc/owfs.conf --pid-file /var/run/owfs/owfs.pid -uall --allow_other /mnt/1wire
sudo chmod +x start1wire.sh
sudo update-rc.d start1wire.sh defaults
# jeder Client benutzt owserver auf der lokalen Maschine
! server: server = localhost:4304
# owserver hört am Port 4304
server: port = localhost:4304
# owhttpd hört am Port 2121
http: port = 2121
cd ~
cp .bashrc .bashrc.bak
echo ' ' >> ~/.bashrc
echo 'PATH=$PATH:/opt/owfs/bin/' >> ~/.bashrc
echo 'export PATH' >> ~/.bashrc
owread /28.973B45050000/temperature

14.4.2 Arbeiten mit Netzwerkverzeichnissen

sudo mkdir /mnt/nas
sudo mount –t cifs –o username=,uid=1000,gid=1000,dir_mode=0700,file_mode=0600,nounix //NASName/home /mnt/nas
sudo apt-get install nfs-common portmap
sudo service rpcbind start
sudo mount –t nfs 192.168.178.12:/ /mnt/nas
192.168.178.12:/ /mnt/nas nfs defaults 0 0

14.4.3 Einbinden von lokal angeschlossenen Datenträgern

sudo mkdir /media/sdb1
sudo mount /dev/sdb1 /media/sdb1
sudo umount /media/sdb1
#File-System Mount-Point Typ Optionen Dump Pass
/dev/sdb1 /media/sdb1 ext4 rw 0 0

14.4.4 Automatisieren mit cron

10 * * * * pi /home/pi/testscript

14.6.6 Ein eigenes Init-Skript schreiben

#! /bin/sh
### BEGIN INIT INFO
# Provides: 
# Required-Start: 
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: 
# Description: 
### END INIT INFO
# Author: Name 
# Aktionen
case "$1" in
start)
/opt/IhrProgramm start
;;
stop)
/opt/IhrProgramm stop
;;
restart)
/opt/IhrProgramm restart
;;
esac
exit 0
sudo chmod 755 /etc/init.d/eibd
sudo update-rc.d eibd defaults
sudo update-rc.d –f eibd remove
sudo update-rc.d eibd disable
sudo update-rc.d eibd enable

15.1.2 Der richtige Umgang mit Logdateien

ls –lt /var/log/ | less
find /var/log/ -mmin -10
sudo tail –f /var/log/Messages

15.4.2 Linux Dash ist schnell installiert

git clone https://github.com/afaqurk/linux-dash.git

15.5.3 Schreibzugriffe auf die SD-Karte reduzieren

/etc/init.d/syslogd force-reload
/etc/init
/dev/mmcblk0p2 / ext4 defaults,nodiratime,noatime 0 1
sudo apt-get install rsync lsof
wget http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb
sudo dpkg -i ramlog_2.0.0_all.deb
# Required-Start: $remote_fs $time ramlog
# Required-Stop: umountnfs $time ramlog
sudo dpkg-reconfigure insserv
sudo /etc/init.d/ramlog enable

15.5.4 Dem Server eine feste IP-Adresse zuordnen

iface eth0 inet static
address 192.168.178.64
netmask 255.255.255.0
gateway 192.168.178.1
dns-nameservers 192.168.178.1
sudo ifdown eth0
sudo ifup eth0

15.5.5 Sparen Sie Strom mit hdparm

sudo hdparm -C /dev/sdb
sudo hdparm -y /dev/sdb
sudo hdparm -C /dev/sdb liefert
sudo hdparm -S 60 /dev/sdb
sudo blkid | grep sdb
/dev/disk/by-uuid/4c9dca33-e3e1-4a6a-a7d4-110cdbb4cfbe {
spindown_time = 60
}

19.6.2 Tcpdump schneidet mit

sudo tcpdump ip host rechner1 and not rechner2
sudo tcpdump -i wlan0 -q '(tcp port 80) or (tcp port 443)'
sudo tcpdump -s 0 -w ausgabe.dump tcp port 80

24.6.2 Sichern Sie SD-Karten im laufenden Betrieb

chmod +x Raspberry_Pi_Backup_Script.sh
sudo ./Raspberry_Pi_Backup_Script.sh

24.6.3 Richten Sie einen rsync-Daemon ein

sudo apt-get update
sudo apt-get -y install xinetd
service rsync
{
   disable = no
   socket_type = stream
   wait = no
   user = root
   server = /usr/bin/rsync
   server_args = --daemon
   log_on_failure += USERID
   flags = IPv6
}
max connections = 5
log file = /var/log/rsync.log
timeout = 600
 
[backup]
comment = Backup Server
path = /var/backup
read only = no
hosts allow = 192.168.178.60 192.168.178.12 127.0.0.1
list = yes
uid = rsync
gid = rsync
auth users = rsync
secrets file = /etc/rsyncd.secrets
sudo /etc/init.d/xinetd restart

24.6.4 Beispielanwendungen mit rsync

rsync -av ~/Schreibtisch /media/sdb1/rsync-backup/
rsync -avr ~/Schreibtisch rsync@192.168.178.15::backup
rsync -avr rsync@192.168.178.15::backup ~/Schreibtisch

49.1.3 Die Installation von MPD und MPC

sudo apt-get install mpd mpc

49.1.4 Den Service konfigurieren

music_directory "/media/sdb1/music"
laylist_directory "/media/sdb1/mpd/playlists"
db_file "/media/sdb1/mpd/mpd.db"
log_file "/media/sdb1/mpd/mpd.log"
pid_file "/media/sdb1/mpd/mpd.pid"
state_file "/media/sdb1/mpd/mpd.state"
audio_output {
   type "alsa"
   name "NUC-Esszimmer"
   mixer_type "software"
   device "esszimmer"
}

49.1.5 Versuchslauf: den ersten Sound mit MPC abspielen

mpc –p 6600 listall
mpc –p 6600 add "Titel"
mpc –p 6600 play
mpc –p 6600 volume <Lautstärke>

49.1.6 Was tun, wenn MPD Probleme macht?

mpd –v --stdout --no-daemon –verbose [Pfad zu Logfile]

49.1.7 Wichtige ALSA-Kommandos

cat /proc/asound/cards
cat /proc/asound/card2/stream0
cat /proc/asound/card2/pcm0p/sub0/hw_params
aplay -l
aplay -L
aplay -D esszimmer /usr/share/sounds/alsa/Front_Center.wav

49.2.1 Aufsetzen von Tvheadend

sudo apt-add-repository http://apt.tvheadend.org/stable
sudo apt-get update
sudo apt-get install tvheadend
sudo dpkgreconfigure tvheadend.

49.3.6 OpenELEC-Optimierungsmaßnahmen

mount /flash -o remount,rw
cd /flash
nano config.txt
# Force HDMI even if unplugged or powered off
hdmi_force_hotplug=1
# IR-Fernbedienung erlauben
device_tree_overlay=lirc-rpi
###########################################################
# License keys to enable GPU hardware decoding for various codecs
# to obtain keys visit the shop at http://www.raspberrypi.com
###########################################################
decode_MPG2=0x???????
# decode_WVC1=0x00000000
# decode_DTS=0x00000000
# decode_DDP=0x00000000
mount -o remount,ro /flash
reboot

49.3.7 Kodi fernsteuern

{"jsonrpc": "2.0", "method": "JSONRPC.Ping", "id": 1}
{"jsonrpc": "2.0", "method": "System.Shutdown"}
{"jsonrpc": "2.0", "method": "Application.SetVolume", "params": {"volume": <Lautstärke>}, "id": 1}
{"jsonrpc": "2.0", "method": "Player.PlayPause", "params": { "playerid": 0 }, "id": 1}

50.1.1 Die libSML kompilieren

sudo apt-get install uuid-dev uuid-runtime
cd /usr/src
sudo git clone https://github.com/dailab/libsml.git
cd libsml
sudo make

50.1.2 Ein erster Testlauf

sudo chown pi:pi examples
cd examples
sudo chown pi:pi *
dmesg |grep pl23
char *device = argv[1];
void transport_receiver(unsigned char *buffer, size_t buffer_len) {
   // Danke an Axel (tuxedo) für seinen Beispielcode
   int i;
   double value;
   sml_file *file = sml_file_parse(buffer + 8, buffer_len - 16);
   // the sml file is parsed now
   for (i = 0; i < file->messages_len; i++) {
      sml_message *message = file->messages[i];
      if (*message->message_body->tag == SML_MESSAGE_GET_LIST_RESPONSE) {
         sml_list *entry;
         sml_get_list_response *body;
         body = (sml_get_list_response *) message->message_body->data;
         for (entry = body->val_list; entry != NULL; entry = entry->next) {
            switch (entry->value->type) {
               case 0x51: value= *entry->value->data.int8; break;
               case 0x52: value= *entry->value->data.int16; break;
               case 0x54: value= *entry->value->data.int32; break;
               case 0x58: value= *entry->value->data.int64; break;
               case 0x61: value= *entry->value->data.uint8; break;
               case 0x62: value= *entry->value->data.uint16; break;
               case 0x64: value= *entry->value->data.uint32; break;
               case 0x68: value= *entry->value->data.uint64; break;
               default:
                  value = 0;
            }
            int scaler = (entry->scaler) ? *entry->scaler : 1;
            if (scaler==-1)
               value *= 0.0001;
               if (value) {
               printf("%d-%d:%d.%d.%d*%d#%.3f#\n",
               entry->obj_name->str[0], entry->obj_name->str[1],
               entry->obj_name->str[2], entry->obj_name->str[3],
               entry->obj_name->str[4], entry->obj_name->str[5], value);
            }
         }
         sml_file_free(file);
         exit(0); // processed first message - exit
      }
   }
}

50.2.1 Die Installation von eibd

cd /usr/src
sudo su
wget http://sourceforge.net/projects/bcusdk/files/pthsem/pthsem_2.0.8.tar.gz
wget http://downloads.sourceforge.net/project/bcusdk/bcusdk/bcusdk_0.0.5.tar.gz
tar -xvf pthsem_2.0.8.tar.gz
tar -xvf bcusdk_0.0.5.tar.gz
cd pthsem*
./configure
make
make install
cd ../bcusdk*
export LD_LIBRARY_PATH=/usr/local/lib
./configure --without-pth-test --with-mctx-mth=sjlj --with-mctx-dsp=ssjlj --with-mctx-stk=sas --enable-onlyeibd --enable-eibnetip --enable-eibnetiptunnel --enable-eibnetipserver --enable-groupcache --enable-usb
make
make install
exit
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf.d/bcusdk.conf
sudo ldconfig
sudo touch /var/log/eibd.log
sudo chown $USER /var/log/eibd.log
/usr/local/bin/eibd -D -S -T -i --eibaddr=0.0.1 --daemon=/var/log/eibd.log --no-tunnel-client-queuing ipt:192.168.178.5
nano /etc/apt/sources.list
deb http://www.auto.tuwien.ac.at/~mkoegler/debian eib main
deb-src http://www.auto.tuwien.ac.at/~mkoegler/debian eib main
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3CB5CB58
sudo apt-get update
sudo apt-get install bcusdk

50.2.2 Mit eibd auf den KNX zugreifen

groupswrite ip:127.0.0.1 0/0/54 1
groupswrite ip:127.0.0.1 0/0/54 0
groupreadresponse ip:127.0.0.1 0/2/54

50.2.3 Mit eibd automatisieren

# Außenbeleuchtung: AN um 22:00, AUS um 7:00
0 22 * * * /usr/bin/groupswrite ip:127.0.0.1 0/1/2 1
0 7 * * * /usr/bin/groupswrite ip:127.0.0.1 0/1/2 0

50.2.4 Weitere eibd-Kommandos

/usr/local/bin/groupsocketlisten ip:127.0.0.1
grouplisten ip:127.0.0.1 0/2/54

50.3.1 Die Einrichtung von Linknx auf dem RasPi

wget http://sunet.dl.sourceforge.net/project/linknx/linknx/linknx-0.0.1.30 linknx-0.0.1.30.tar.gz
tar -xzf linknx-0.0.1.30.tar.gz
cd linknx-0.0.1.30
./configure
make
sudo make install
/usr/local/bin/linknx -V
sudo touch /var/log/linknx.log
sudo chmod 666 /var/log/linknx.log

50.3.3 Starten von Linknx

/usr/local/bin/linknx --config=./linknx.conf --daemon=/var/log/linknx.log

50.3.4 Erste Schritte über eine Telnet-Verbindung

telnet localhost 1028

50.3.5 Holen Sie sich einen Gehilfen an Bord

cd wget http://downloads.sourceforge.net/project/log4cpp/log4cpp-1.1.x%20%28new%29/log4cpp-1.1/log4cpp-1.1.1.tar.gz
tar -xzf log4cpp-1.1.1.tar.gz
cd log4cpp/ 
./configure --with-log4cpp 
make
make check
sudo make install
cd wget http://downloads.sourceforge.net/project/cdefranoux.u/lwknxclient 
chmod 777 ./lwknxclient
./lwknxclient -r temp-aussen

50.4.1 Die Installation von OWFS

sudo apt-get install owfs ow-shell
Server: FAKE = DS18S20,DS2405
sudo service owserver restart neu.

50.4.3 OWFS-Praxisbeispiele

owdir /28.973B45050000
owread /28.973B45050000/temperature
owread /28.973B45050000/type
owread /statistics/read/bytes

50.5.2 So installieren Sie FHEM

sudo touch /var/log/eibd.log
sudo chown $USER /var/log/eibd.log
eibd -D -S -T -i --eibaddr=0.0.1 --daemon=/var/log/eibd.log --no-tunnel-clientqueuing ipt:192.168.178.5
sudo apt-get install perl libdevice-serialport-perl
sudo apt-get install libio-socket-ssl-perl
sudo apt-get install libwww-perl
sudo apt-get install libxml-simple-perl
sudo wget http://fhem.de/fhem-5.5.deb
sudo dpkg -i fhem-5.5.deb
cd /opt
sudo chmod -R a+w fhem
sudo usermod -a -G tty
sudo usermod -a -G tty fhem

50.5.3 Erste Schritte mit FHEM

define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix smallscreen
attr WEBphone basicAuth MTExMToyMjIy
define tul TUL eibd:localhost 1.1.251
define lamp1 EIB 0/0/54

50.7.2 SmartHome.py installieren

sudo apt-get update
sudo apt-get install python3 python3-dev python3-setuptools
sudo apt-get install python-configobj python-dateutil python-pip python-dev git rrdtool
sudo easy_install3 pip
sudo pip install ephem
sudo adduser smarthome
sudo mkdir -p /usr/local/smarthome/
sudo chown smarthome /usr/local/smarthome/
cd /usr/local
sudo git clone -b develop git://github.com/mknx/smarthome.git
sudo git clone git://github.com/mknx/smarthome.git
cd /usr/local/smarthome
sudo git pull

50.7.3 Eine erste SmartHome.py-Konfiguration

lat = 51.1633
lon = 10.4476
elev = 500 tz = 'Europe/Berlin'
[knx]
   class_name = KNX
   class_path = plugins.knx
   host = 192.168.178.64
   port = 6720
[visu]
   class_name = WebSocket
   class_path = plugins.visu
   smartvisu_dir = /var/www/smartVISU
[melder]
   [[melder1]]
      name = pwm_1
      type = bool
      value = False
      knx_dpt = 1
      knx_listen = 6/0/51
      knx_init = 6/0/51
      knx_reply = 6/0/51
   [[melder2]]
      name = pwm_2
      type = bool
      value = False
      knx_dpt = 1
      knx_listen = 6/2/133 
      knx_init = 6/2/133
      knx_reply = 6/2/133
[meldungen]
   [[eindringling]]
      type = bool
      knx_dpt = 1
      knx_send = 0/0/56
      knx_reply = 0/0/56
      comment = wird 1, wenn Alarm ausgelöst wird
      visu_acl = rw
[KleineAlarmierung]
   filename = AlarmLogic.py
   cycle = 10
#!/usr/bin/env python
# Logging
logger.info("Logik AlarmLogic.py aufgerufen")
# WENN melder1 oder melder2 Anwesenheit erkennt,
# wird eindringling auf true gesetzt, sonst false
if sh.melder.melder1() == True or sh.melder.melder2() == True:
   sh.meldungen.eindringling(True)
else:
   sh.meldungen.eindringling(False)

50.7.4 Der Start von SmartHome.py

/usr/local/smarthome/bin/smarthome.py

50.8.2 Die Installation von smartVISU

cd /var/www
sudo rm index.html
sudo wget http://smartvisu.de/download/smartVISU_2.7.zip
sudo unzip smartVISU_2.7.zip
sudo rm smartVISU_2.7.zip
sudo sudo chown -R www-data:www-data smartVISU
sudo chmod -R 775 smartVISU

50.8.3 Erstellen einer Mini-Visualisierung

cd /var/www/smartVISU/pages/
sudo mkdir MeinHaus
sudo cp _template/* MeinHaus/
cd MeinHaus
sudo nano room_sleeping.html

50.9.1 Den knockd-Service installieren

sudo apt-get install knockd
sudo apt-get install libpcap-dev
cd /usr/src
sudo wget http://www.zeroflux.org/proj/knock/files/knock-0.7.tar.gz
./configure
make
sudo make install

50.9.2 Ihre Rechner mit knockd herunterfahren

[shutdown]
   sequence = 7001,8001
   seq_timeout = 10
   command = /sbin/shutdown -h +1
   tcpflags = syn
sudo apt-get install knockd
knock 192.168.178.64 7001:tcp 8001:tcp
cat /var/log/syslog |grep knockd

50.10.4 Die Installation von RRDtool

sudo apt-get install rrdtool
rrdtool create tempsensoren.rrd --step 900 \
   DS:tempsensor0:GAUGE:1200:-40:70 \
   DS:tempsensor1:GAUGE:1200:-40:70 \
   DS:tempsensor2:GAUGE:1200:-40:70 \
   RRA:AVERAGE:0.5:1:960 \
   RRA:MIN:0.5:96:3600 \
   RRA:MAX:0.5:96:3600 \
   RRA:AVERAGE:0.5:96:3600
rrdtool update tempsensoren.rrd -t tempsensor0:tempsensor1 N:30:40
rrdtool lastupdate tempsensoren.rrd
#!/bin/bash
# Zufallszahlen generieren
zufall1=$(($RANDOM % 40))
zufall2=$(($RANDOM % 40))
# Wert-String für Update-Kommando
daten="N:"$zufall1:$zufall2
# Namen der Sensoren für Update-Kommando
sensoren="tempsensor0:tempsensor1"
# in RRA schreiben
rrdtool update tempsensoren.rrd -t $sensoren $daten
echo '*/5 * * * * $HOME/templesen.s >> $HOME/templesen.log 2>$1' | crontab -
rrdtool graph tempProTag.png -s 'now - 1 day' -e 'now' DEF:temp0=tempsensoren.rrd:tempsensor0:AVERAGE \
LINE2:temp0#00FF00:Innen VDEF:temp0last=temp0,LAST "GPRINT:temp0last:%.1lf °C" DEF:temp1=tempsensoren.rrd:tempsensor1:AVERAGE \
LINE2:temp1#0000FF:Außen VDEF:temp1last=temp1,LAST "GPRINT:temp1last:%.1lf °C"
sudo apt-get install
imagemagick display tempProTag.png
rrdtool fetch tempsensoren.rrd AVERAGE
# auf Quelle:
rrdtool dump tempsensoren.rrd > tempsenoren.xml
# auf Ziel: rrdtool restore tempsenoren.xml tempsensoren.rrd –f

50.11.1 Installieren von lighttpd unter Ubuntu

sudo apt-get install lighttpd
ps aux | grep lighttpd

50.11.4 PHP-Support für lighttpd einrichten

sudo apt-get install php5-common php5-cgi
fastcgi.server = ( ".php" => ((
   "bin-path" => "/usr/bin/php-cgi",
   "socket" => "/tmp/php.sock"
)))
sudo service lighttpd restart

50.11.5 Einen Alias einrichten

alias.url = ( "/mpd/" => "/media/sdb1/music/" )

50.12.1 Die alternative Firmware bauen

sudo apt-get update
sudo apt-get -d upgrade
sudo apt-get -y upgrade
svn checkout http://svn.freetz.org/branches/freetz-stable-2.0
cd freetz-stable-2.0
make menuconfig

50.13.2 Die Installation von Cacti

sudo apt-get install apache2 php5 php5-mysql php5-snmp
sudo apt-get install mysql-client mysql-server
sudo apt-get install snmpd rrdtool
sudo apt-get install cacti

50.14 v-control – perfekte Heizungsansteuerung

 echo "Warmwassersolltemperatur" |netcat 192.168.178.64 3002

56.4.1 Statten Sie den Multiroom-Server aus

pcm.buero {
   type plug
   slave {
      pcm "dmixer"
      channels 8
   }
   ttable.0.2 1
   ttable.1.3 1
}
pcm.schlafzimmer {
   type plug
   slave {
      pcm "dmixer"
      channels 8
   } 
   ttable.0.4 1
   ttable.1.5 1
} 
pcm.bad {
   type plug
   slave {
      pcm "dmixer"
      channels 8
   }
   ttable.0.6 1
   ttable.1.7 1
}
pcm.alle {
   type plug
   slave {
      pcm "dmixer"
     channels 8
   }
   ttable.0.0 1
   ttable.1.1 1
   ttable.0.2 1
   ttable.1.3 1
   ttable.0.4 1
   ttable.1.5 1
   ttable.0.6 1
   ttable.1.7 1
}
log_file "/media/sdb1/mpd/mpd2.log"
pid_file "/media/sdb1/mpd/mpd2.pid"
state_file "/media/sdb1/mpd/mpd2.state"
MPDCONF=/media/sdb1/mpd/mpd.conf
START_MPD=true
# Provides: mpd2
# Short-Description: Music Player Daemon 2
# Description: Start the Music Player Daemon 2 (MPD) service
NAME=mpd2
DESC="Music Player Daemon 2" 
MPDCONF=/media/sdb1/mpd/mpd2.conf

57.1.1 Zentrale Kodi-Datenbank mit MySQL

CREATE USER 'KodiUser' IDENTIFIED BY 'KodiPasswort';
GRANT ALL ON `MyVideos%`.* TO 'KodiUser';
GRANT ALL ON `MyMusic%`.* TO 'KodiUser';
FLUSH PRIVILEGES;
exit
mysql 192.168.178.16 3306 KodiUser KodiPasswort
mysql 192.168.178.16 3306 KodiUser KodiPasswort true true

57.6.2 Ferngesteuertes An- und Ausschalten

 {"jsonrpc": "2.0", "method": "GUI.ShowNotification", "params": {"title": "Car Port", "message": "Auto ist eingefahren.", "displaytime": 20000}, "id": 1}

60.2.1 Linux Toolchain für Linux Mint

sudo apt-get update
apt-cache search gnueabihf |grep gcc
sudo apt-get install build-essential git
mkdir rpi-cross ; cd rpi-cross
git clone git://github.com/raspberrypi/tools.git
cd tools/arm-bcm2708
export PATH=$PATH:$HOME/rpi-cross/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
arm-linux-gnueabihf-gcc --version
cd ~/rpi-cross
mkdir demo ; cd demo
nano hello.c
int main()
{
   puts("\nHello World!\n");
}
arm-linux-gnueabihf-gcc hello.c -o hello
cd ~/rpi-cross
tar -xvf eclipse-cpp-luna-SR2-linux-gtk-x86_64.tar.gz
cd eclipse
./eclipse &
int main(void) {
   int t;
   puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
   for (t=0; t&lt;5; t++)
   {
      printf("\n%d", t);
   }
   return EXIT_SUCCESS;
}

61.3.1 Richten Sie InfluxDB auf dem Cubietruck ein

cd
wget http://demos.pihomeserver.fr/influxdb_0.8.6_armhf.deb
sudo dpkg -i influxdb_0.8.6_armhf.deb
rm influxdb_0.8.6_armhf.deb
[logging]
# logging level: "fine", "debug", "info", "warn" or "error"
level = "warn"
# stdout to log to standard out, or syslog facility
file = "/opt/influxdb/shared/log.txt"
sudo service influxdb restart
sudo apt-get install curl INFLUXDB_DATABASE=test curl -s "http://localhost:8086/db?u=root&p=root" -d "{\"name\": \"$INFLUXDB_ DATABASE\"}"
curl -d '[{"name":"foo","columns":["val"],"points":[[12]]}]' 'http://localhost:8086/db/test/series?u=root&p=root'
curl -d '[{"name":"foo","columns":["val"],"points":[[56]]}]' 'http://localhost:8086/db/test/series?u=root&p=root'
curl -d '[{"name":"foo","columns":["val"],"points":[[34]]}]' 'http://localhost:8086/db/test/series?u=root&p=root'
curl -G 'http://localhost:8086/db/test/series?u=root&p=root&pretty=true' --data-urlencode "q=select * from foo"

61.3.2 Grafana auf dem Cubietruck einrichten

cd /var/www
sudo wget http://grafanarel.s3.amazonaws.com/grafana-1.9.0.tar.gz
sudo tar xzvf grafana-1.9.0.tar.gz
sudo rm grafana-1.9.0.tar.gz
sudo mv grafana-1.9.0/ grafana
sudo chown -R www-data:www-data grafana
cd grafana
sudo cp config.sample.js config.js
sudo chown -R www-data:www-data config.js
sudo nano config.js
/** @scratch /configuration/config.js/1
* == Configuration
* config.js is where you will find the core Grafana configuration.
* This file contains parameter that
* must be set before Grafana is run for the first time.
*/
define(['settings'],
function (Settings) {
   "use strict";
   return new Settings({
      datasources: {
         collectd: {
            default: true,
            type: 'influxdb',
            url: "http://192.168.178.16:8086/db/collectd",
            username: 'root',
            password: 'root'
         },
         'grafana': {
             type: 'influxdb',
             url: 'http://192.168.178.16:8086/db/grafana',
             username: 'root',
             password: 'root',
             grafanaDB: true
          },
          'test': {
             type: 'influxdb',
             url: 'http://192.168.178.16:8086/db/test',
             username: 'root',
             password: 'root'
          },
       },
       default_route: '/dashboard/file/default.json',
       timezoneOffset: null,
       /**
       * Elasticsearch index for storing dashboards
       */
       grafana_index: "grafana-dash",
       /**
       * set to false to disable unsaved changes warning
       */
       unsaved_changes_warning: true,
       panel_names: [
          'text',
          'graphite'
       ]
    });
});

61.3.5 Die collectd-Server-Installation

sudo apt-get install collectd
sudo service collectd stop
LoadPlugin interface
Interface "eth0"
IgnoreSelected false
LogLevel "info"
File "/var/log/collectd.log"
Timestamp true
PrintSeverity true

61.3.6 Den InfluxDB-Collectd-Proxy installieren

cd /usr/local
wget http://dave.cheney.net/paste/go1.4.linux-arm~multiarch-armv7-1.tar.gz
tar -xzf go1.4.linux-arm~multiarch-armv7-1.tar.gz
rm go1.4.linux-arm~multiarch-armv7-1.tar.gz
sudo nano /etc/profile
export PATH=$PATH:/usr/local/go/bin
go version
cd
git clone https://github.com/hoonmin/influxdb-collectd-proxy.git
cd influxdb-collectd-proxy
make
cd src/github.com/influxdb/influxdb
git checkout v0.8.8
cd
cd influxdb-collectd-proxy
make
cd
mv influxdb-collectd-proxy/ /usr/local
/usr/local/influxdb-collectd-proxy/bin/influxdb-collectd-proxy --typesdb="/usr/share/collectd/types.db" --database="collectd" --username="root" --password="root" --logfile="/var/log/collectd-proxy.log"
LoadPlugin network
# config für influxdb-collectd-proxy
Server "127.0.0.1" "8096"
# hört auf alle collectd Pakete des RPi 192.168.178.16
Listen "192.168.178.16"
# auch remote Pakete (von RPi) an Proxy weiterleiten
Forward true

61.5.1 Legen Sie einen Benutzer an

sudo adduser datensammler
sudo chmod a+rw /dev/ttyUSB0
sudo chmod a+rw /dev/ttyUSB1
sudo adduser datensammler dialout

61.5.2 Entwerfen Sie das Exec-Skript

mkdir scripts
cd scripts
nano execscript.sh
#!/bin/sh
HOSTNAME="pikeller"
export PATH=$PATH:/usr/local/bin
# Funktion für Abschneiden führender Leerzeichen
trim() {
   local var="$*"
   var="${var#"${var%%[![:space:]]*}"}" #remove leading space
   var="${var%"${var##*[![:space:]]}"}" #remove trailing space
   echo -n "$var"
} #
Werte über linknx von KNX-Bus lesen
TEMPVAL=$(/home/datensammler/scripts/lwknxclient -r temp-elternbad)
echo "PUTVAL $HOSTNAME/knx/temperature-elternbad interval=300 N:$TEMPVAL"
TEMPVAL=$(/home/datensammler/scripts/lwknxclient -r co2-kueche)
echo "PUTVAL $HOSTNAME/knx/ppm-kueche interval=300 N:$TEMPVAL"
TEMPVAL=$(/home/datensammler/scripts/lwknxclient -r feucht-bad)
echo "PUTVAL $HOSTNAME/knx/percent-bad interval=300 N:$TEMPVAL"
TEMPVAL=$(/home/datensammler/scripts/lwknxclient -r temp-aussen)
echo "PUTVAL $HOSTNAME/knx/temperature-aussen interval=300 N:$TEMPVAL"
# Lesen von 1-Wire-Werten über OWFS
TEMPVAL=$(/usr/bin/owread /28.973B45050000/temperature)
TEMPVAL=$(trim $TEMPVAL)
echo "PUTVAL $HOSTNAME/owfs/temperature-technikraum interval=300 N:$TEMPVAL"
# Lesen Stromzähler Wärmepumpe über sml_server
TEMP=$(/home/datensammler/scripts/sml_server /dev/ttyUSB0)
IFS="#"
set$TEMP
WP_GES=$3
WP_AKT=$7
echo "PUTVAL $HOSTNAME/sml/gauge-wp_ges interval=60 N:$WP_GES"
echo "PUTVAL $HOSTNAME/sml/gauge-wp_akt interval=60 N:$WP_AKT"
# Schreiben der Zählerstände (W-Pumpe) über linknx auf KNX-Bus
/home/datensammler/scripts/lwknxclient -w $3 strom-wp-ges >/dev/null
/home/datensammler/scripts/lwknxclient -w $7 strom-wp-akt >/dev/null
# Lesen Stromzähler Haushalt über sml_server
TEMP=$(/home/datensammler/scripts/sml_server /dev/ttyUSB1)
IFS="#"
set$TEMP
HH_GES=$3
HH_AKT=$7
echo "PUTVAL $HOSTNAME/sml/gauge-hh_ges interval=60 N:$HH_GES"
echo "PUTVAL $HOSTNAME/sml/gauge-hh_akt interval=60 N:$HH_AKT"
# Schreiben der Zähler (Haushalt) über linknx auf KNX-Bus
/home/datensammler/scripts/lwknxclient -w $3 strom-hh-ges >/dev/null
/home/datensammler/scripts/lwknxclient -w $7 strom-hh-akt >/dev/null

63.3 Reparieren Sie den GRUB-Bootloader

sudo mount /dev/sda1 /mnt
sudo mount -o bind /dev /mnt/dev
sudo mount -o bind /sys /mnt/sys
sudo mount -t proc /proc /mnt/proc
sudo cp /proc/mounts /mnt/etc/mtab
sudo chroot /mnt /bin/bash
grub-install /dev/sda
grub-install --recheck /dev/sda
update-grub

Fragen zum Einfügeservice?

Ich hoffe der Einfügeservice ist für Sie ein nützliches Werkzeug. Falls Sie Fragen oder Kommentare dazu haben – ich freue mich über jegliches Feedback. Meine Kontaktdaten finden Sie hier: Stefan Heinle

Gefällt Ihnen dieser Beitrag? Falls ja, würde ich mich freuen wenn Sie ihn teilen. Vielen Dank!