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<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