Freitag, 30. Dezember 2016

Raspberry Pi - Raspbian "Jessie" installieren

Ein kurzes Update zum Beitrag vom 23.05.2015 http://sebastianhemel.blogspot.de/2015/05/raspberry-pi-raspbian-wheezy.html, die aktuelle Raspbian Version ist "Jessie".
Die Installation bliebt, wie in dem oben genannten Beitrag, gleich. Benötigt man keine "Benutzeroberfläche (GUI)", genügt die "LITE" Version.

Download unter: https://www.raspberrypi.org/downloads/raspbian/

Donnerstag, 22. Dezember 2016

Raspberry Pi - Enviro pHAT

Verschiedene Umweltdaten messen und das mit nur einer Platine? Dies geht mit dem Enviro pHAT. Zum Beispiel sind Temperatur, Luftdruck, Lichtstärke und Bewegeungen mit nur dieser einer einzigen Platine messbar.

Eine Verbindung zum Pi ist über die GPIO-Pins möglich. Um die Sensordaten abfragen zu können ist die Python-Bibliothek enviro-phat notwendig.

Funktionen des Sensors:
  • BMP280 temperature/pressure sensor
  • TCS3472 light and RGB colour sensor
  • Two LEDs for illumination
  • LSM303D accelerometer/magnetometer sensor
  • ADS1015 4-channel 3.3v, analog to digital sensor (ADC)
  • Compatible with Raspberry Pi 3, 2, B+, A+, and Zero

Freitag, 2. Dezember 2016

Raspberry Pi - Konsolen Projekt: NESPi

Vor kurzem habe ich ein sehr cooles Retro-Konsolen Projekt im Netz gefunden. Der NESPi ist ein nachgebautes NES im Maßstab 1:2,5 also ca. 40 Prozent der original Größe des Nintendo Entertainment System.

Hier einige Fakten zum Projekt:
  • Nachbau mit Hilfe eines 3D-Druckes im Maßstab 1:2,5.
  • Spiele werden mit Hilfe von Kassetten geladen (enthalten ein NFC-Tag), worüber der Raspberry Pi automatisch das entsprechende Spiel lädt.
  • Die Buttons am Gehäuse sind durch einen Arduino mit dem Pi verbunden, so dass man den Nachbau ein- und ausschalten kann wie das original NES.
  • Als Betriebssystem wird RetroPi verwendet.
  • Link zum Projekt: http://www.daftmike.com/2016/07/NESPi.html


Dienstag, 29. November 2016

Raspberry Pi 3 vs Raspberry Pi Zero

In diesem Artikel möchte ich euch kurz die Unterschiede zwischen den beiden neuen PI´s erklären und auf eine jeweils passende Amazon Einkaufsliste verweisen.

Raspberry Pi 3

Hierbei handelt es sich um das aktuellste Modell. Mitlerweile bietet der PI einen Quad-Core ARM-Prozessor mit 1,2 GHz, 1 GByte Arbeitsspeicher.
Neu hinzugekommen sind WLAN (802.11 b/g/n) und Bluetooth 4.1 (classic & LE), somit kann man endlich ohne zusätzliche Adapter Drahtloseverbindungen aufbauen
Weiterhin gibt es, wie von den Vorgängern gewohnt, einen Ethernet- und HDMI-Port. Tastatur, Maus und weitere Gerät können über die USB-Ports angeschlossen werden.

Einkaufliste:

  • Raspberry Pi 3 Model B - http://amzn.to/2gFXbSP 
  • Aukru 5V 3A Netzteil Ladegeräte für Raspberry Pi 3 Model B -3000mA- 150cm - http://amzn.to/2fz4pdZ
  • Raspberry Pi 3 Modell B gehäuse,iBetter® Raspberry Pi 3 gehäuse Premium Case 2er Set Kühlkörper für Raspberry Pi 3 Modell B Quad Core und Raspberry Pi 2 Modell B + (B PLUS)-Transparent - http://amzn.to/2gG2Hoo
  • SanDisk Ultra Android microSDHC 16GB bis zu 80 MB/Sek, Class 10 Speicherkarte + SD-Adapter FFP - http://amzn.to/2g2BYBl
Rasperry pi 3 model b v1.3 bot

Raspberry Pi Zero

Der kleine Pi Zero bietet zwar deutlich weniger Anschlüsse wie sein großer Bruder, doch man kann auch mit Ihm erstaunlich viel anfangen. Zum Anschließen von einem Monitor gibt es nur eine Mini-HDMI-Buchse, daher braucht man in der Regel einen Adapter auf den regulären HDMI-Port. Gleiches betrifft auch den USB-Anschluss, dies ist ein Micro-USB und somit benötigt man auch hier in der Regel ein Adapterkabel für den Betrieb von Tastatur und Maus.

Einkaufliste

RPi Zero

Sonntag, 13. November 2016

Windows 10 - Cortana vollständig deinstallieren

Möchte man die Sprachsteuerung "Cortana" vollständig deinstallieren, weil diese zum Beispiel gar nicht genutzt wird, geht dies mittlerweile sehr einfach mit dem folgenden Tool:
Folgende Schritte sind dann zu tun:
  1. Cortana-Uninstaller herunterladen.
  2. ZIP-Datei entpacken.
  3. Datei "Uninstall Cortana.cmd" mit der Option "Als Administrator ausführen".
  4. Die Deinstallation startet jetzt. Warten bis die "Cortana should be uninstalled" erscheint.

Sonntag, 30. Oktober 2016

Amazon Fire-Tablet - Spezialangebote (Werbung) entfernen

Immer Somme diesen Jahres habe ich mir ein günstiges Tablet von Amazon Fire-Tablet (7 Zoll) mit Spezialangeboten gekauft. Ich nutze es aktuell vorwiegend um Filme in Bus oder Bahn zu schauen.

Auf dem Fire-Tablet´s von Amazon läuft eine angepasst Android 5 Version. Somit ergeben sich hier viele Möglichkeiten Änderungen an dem Gerät vorzunehmen.

Spezialangebote (Werbung) entfernen

  • Entwickleroptionen aktivieren
    • "Einstellungen" => "Geräteoptionen" => 7 X auf die Seriennummer tippen.
  • USB-Debugging aktivieren
    • "Entwickleroptionen" => "ADB aktivieren"
  • Für die folgenden Schritte wird ADB (Android Debug Bridge) benötigt
    • Dies bekommt man mit der Installation des Android Studio (C:\Users\BENUTZERNAME\AppData\Local\Android\sdk\platform-tools) oder als Download von XDA-Developers: ADB-Installer
    • Starten der ADB-Shell:
      • adb shell
    • Cache der App löschen
      • pm clear com.amazon.kindle.kso
    • App deaktivieren
      • pm hide com.amazon.kindle.kso
      • pm disable-user --user 0 com.amazon.kindle.kso
    • Shell verlassen
      • exit
    • Gerät neustarten
      • adb reboot
Nach dem Neustart sollte jetzt keine Werbung mehr zu sehen sein.

Hinweis: Sollte das Tablet neue Updates von Amazon installieren, muss man die Schritte evtl. wiederholen.

Samstag, 15. Oktober 2016

WLAN-Profile unter Windows per Konsole löschen

Möchte man bei WLAN-Problemen sein Profil oder evtl. ältere nicht mehr genutzte Profile löschen, geht dies schnell und einfach per cmd-Befehl (Konsole). Aufruf per [Windows] + [R] => Ausführen => cmd .

Mit dem Befehl netsh wlan show profiles kann man sich alle auf dem Rechner befindlichen Profile anzeigen lassen.

 Mit dem Befehl "netsh wlan delete profile name="xxx" kann einzelne WLAN-Profile löschen.
 


Mittwoch, 12. Oktober 2016

Werbung und Usertracking per DNS unterbinden

Möchte man Werbung oder Usertracking direkt unterbinden, ohne auf jedem Gerät einen "AdBlocker" installieren zu müssen, kann dies schnell über einen anderen DNS-Server realisiert werden. Hierfür bietet sich zum Beispiel "Alternate DNS" an https://alternate-dns.com/:
"Alternate DNS offers a free, global Domain Name System (DNS) resolution service, that you can use to block unwanted ads."
Die "normalen" DNS-Server ermitteln IP-Adressen, aber der Service von "Alternate DNS" blockiert zusätzlich Trackdienste und Werbung. Den DNS kann man entweder in jedem Gerät einzelen hinterlegen oder man trägt diesen direkt in seinem Router ein.

Hier ein Beispiel, wie die Konfiguration per AVM FRITZ!Box möglich ist:

Montag, 26. September 2016

Code Recherche? searchcode.com

Jeder der selber entwickelt kennt mit Sicherheit Stack Overflow, hier erhält man zu schwierigen Programmierproblemen sehr schnell Antworten.

Als Pendant für die Code Recherche bietet sicht zusätzlich auch noch searchcode.com an. Mit der Suchmaschine kann mittlwerweile mehr als 20 Billionen Zeilen Code durchsuchen. Verwendet man zum Beispiel eine bestimmte Library findet man hier sicher einen passenden Code-Aufruf. Searchcode.com durchsucht dabei die Plattformen Bitbucket, GitHub, Google Code und noch viele weitere.


Sonntag, 4. September 2016

Windows 10 - Anniversary Update sofort installieren

Gehört man noch nicht zu den glücklichen Windows 10 Usern, die das "Anniversary Update" per Windows Update Funktion erhalten haben, kann man dies mit Hilfe des "Media Creation Tool" auch sofort installieren.

Hier für das Media Creation Tool (für Windows 10) verwendet werden. Hiermit kann man wahlweise den PC, auf dem es gestartet wird, auf Windows 10 Version 1607 aktualisieren, oder ein Installationsmedium dafür erstellen.

Download: http://go.microsoft.com/fwlink/?LinkId=691209

Anschließend den folgenden Schritt ausführen:
  • "Jetzt Upgrade für diesen PC ausführen"

Mittwoch, 10. August 2016

Kommandozeile (cmd) aus Explorer-Verzeichnis aufrufen

Möchte man schnell per Kommandozeile Aktionen durchführen und nicht erst nach dem Ausführen des cmd-Befehls in das richtige Verzeichnis navigieren, kann man dies auch direkt aus dem Explorere heraus tun.

Dafür einfach im Explorer in das gewünschte Verzechnis navigieren und den cmd-Befehl in der Adressleiste ausführen:



Anschließend öffnet sich die Kommandozeile mit dem vorher ausgewählten Ordner:



Sonntag, 24. Juli 2016

iOS Xcode - Location Services unter iOS 8

Nach dem neusten Xcode Update dürfen iOS Apps nur noch mit iOS 8 kompiliert werden. Nach dieser Umstellung funktionierte anschließend der intern verwendete LocationManager nicht mehr.

Mit iOS 8 haben sich die Berechtigungen verändert. Diese müssen jetzt zwingend in der Info.plist als Schlüssel definiert werden:

  • NSLocationAlwaysUsageDescription
  • NSLocationWhenInUseUsageDescription
Beispiel:


<key>NSLocationAlwaysUsageDescription</key>
<string>This application requires location services to work</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This application requires location services to work</string>

Zusätzlich muss auch folgende Funktion hinzugefügt werden:

  • requestAlwaysAuthorization (for background location) oder
  • requestWhenInUseAuthorization (location only when foreground) 
Beispiel:


- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // instance of the CLLocationManager class
    [super viewDidLoad];
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    _locationManager.delegate = self;
    
    [_locationManager startUpdatingLocation];

    [_locationManager requestWhenInUseAuthorization]; // Notwendig ab iOS8
...

iOS Xcode - UIWebView readyState richtig abfangen

Ruft man innerhalb einer App (in diesem Beispiel Apple iOS) eine Webseite auf und möchte anschließend JavaScript Operationen ausführen muss man wissen, wann die Webseite in dem WebView fertig geladen wurde (readyState).

In dem nachfolgenden Beispiel wird der readyState abgefragt, bis dieser auf "complete" steht. Anschließend wird mittels JavaScript (JSBridge) eine Funktion innerhalb der fertig geladenen Webseite im WebView aufgerufen.

Ich verwenden dies in der App simplyEat.de (www.simplyeat.de) um per JSBridge über den LocationManager die aktuelle Position des Nutzers zu setzen. Danach werden Angebote aus seiner Umgebung in der WebView angezeigt.

Hier ein Beispiel wie dies unter iOS (Xcode) richtig funktioniert:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    offerUrl.delegate = self;
    self.title = offer.name;
    
    NSString *urlAddress = offer.url;
    //Create a URL object.
    NSURL *url = [NSURL URLWithString:urlAddress];
    //URL Requst Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    //Load the request in the UIWebView.
    [self.offerUrl loadRequest:requestObj];  

}

- (void)webViewActuallyFinished {
    _webViewLoads--;
    if (_webViewLoads > 0) {
        return;
    }
    //Actually done loading
    
    if ([[self.offerUrl stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {
        
        // UIWebView object has fully loaded.

        NSString *param1 = [NSString stringWithFormat:@"{coords:{'latitude':%@", latitudeString];
        NSString *param2 = [NSString stringWithFormat:@",'longitude':%@", longitudeString];
        NSString *param3 = @"}}";
        
        NSString *param123 = [NSString stringWithFormat:@"%1$@ %2$@ %3$@", param1, param2, param3];
        NSString *param = [param123 stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceCharacterSet]];
        
        NSString * jsCallBack = [NSString stringWithFormat:@"geoCallBackSuccess(%@);",param];
        [self.offerUrl stringByEvaluatingJavaScriptFromString:jsCallBack];
        
        //NSLog(@"viewDidLoad - javascriptString: %@", jsCallBack);
        [self.offerUrl stringByEvaluatingJavaScriptFromString:jsCallBack];
    }
}

- (void)webViewDidFinishLoad:(UIWebView *)offerUrl {
    //NSLog(@"webViewDidFinishLoad");
    // Identify the “last” webViewDidFinishLoad message
    [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(webViewActuallyFinished) userInfo:nil repeats:NO];
}

- (void)webViewDidStartLoad:(UIWebView *)offerUrl {
    //NSLog(@"webViewDidStartLoad");
    _webViewLoads++;
}

-(void)webView:(UIWebView *)offerUrl didFailLoadWithError:(NSError *)error {
    NSLog(@"No internet connection");
    _webViewLoads--;
    
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"error.html" ofType:nil]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.offerUrl loadRequest:request];
    
}

Sonntag, 17. Juli 2016

Schlüssel zur Produktivität? Konzentrieren Sie sich auf eine Aufgabe!

In der heutigen Zeit sollen uns technische Kommunikationsmittel wie zum Beispiel E-Mail oder auch Instant Messanger den Arbeitsalltag vereinfachen. Leider ist dies oft nicht der Fall, denn diese zusätzlichen Kanäle müssen von uns ständig beobachtet und kontrolliert werden. Kommen dann noch weitere Kanäle wie zum Beispiel das Social Intranet oder ein Firmen internes Wiki hinzu sind wir überfordert und lassen uns schnell von der eigentlichen Arbeit ablenken.

Konzentrieren Sie sich auf eine Aufgabe! 

Auch wenn die Kommunikationskultur in Ihrem Unternehmen eine andere ist (Jeder muss immer für den Anderen da sein!), versuchen Sie sich auf immer nur auf eine Aufgabe zu konzentrieren.

  •  Möchten Sie ungestört arbeiten, schließen Sie Ihre Bürotür. So können Sie Ihren Kollegen deutlichen machen, dass Sie aktuell nicht gestört werden möchten.
  • In Großraumbüros sollten Sie in der Konzentrationsphase Gespräche mit anderen Kollegen vermeiden. Bei störenden Geräuschen, nehmen Sie z.B. Kopfhörer mit Geräuschunterdrückung (Bose QuietComfort 15).

Beispiel: E-Mail

Dies ist eigentlich ein asynchrones Medium. E-Mails sollten nur dann bearbeitet werden, wenn man Zeit hat. Dies wird in den Unternehmen aber häufig ignoriert. Man erwartet, dass E-Mails sofort gelesen und auch beantwortet werden müssen.
Folge, das E-Mail-Programm ist immer geöffnet und für jede eingehende E-Mail gibt es eine sofortige Benachrichtigung. Hieraus resultiert eine sofortige Ablenkung und man ist nicht mehr fokussiert bei der Arbeit. Anschließend benötigt es dann wieder mehrere Minuten, bis der ursprüngliche Zustand (Was wollte ich jetzt eigentlich tun, damit ich meine Aufgabe erledigen kann?) wiederhergestellt ist.

Tipps zum Thema E-Mail

  • Lösen Sie das Problem zusammen mit Ihren E-Mail Partnern.
    • Machen Sie deutlich, dass Sie nicht sofort auf E-Mails antworten.
  • Lassen Sie sich nicht von Kollegen ablenken (Hey, hast du schon die Mail von XYZ gelesen?).
  • Setzen Sie sich feste Zeitblöcke, in denen Sie E-Mails beantworten (morgens, mittags, nachmittags...).
  • Sprechen Sie mit Ihrem Vorgesetzten und entwickeln Sie zum Beispiel einen "E-Mail freien Tag" oder "Slow E-Mail".

Sonntag, 3. Juli 2016

WLAN langsam? Funkkanal optimieren!

Immer häufiger kommt es gerade in Ballungszentren vor, dass viele Router auf dem gleichen Kanal (Channel) senden. Wenn das eigene WLAN sehr langsam ist, kann man durch den richtig eingestellten Kanal deutlich mehr Datendurchsatz erzielen.

Dies geht z.B. mit dem folgenden Tool:
http://www.chip.de/downloads/Acrylic-WiFi-Free_84415105.html
Hinweis: Vorher oben rechts in den Einstellungen den "Advanced Mode" aktivieren, anschließend stehen die "Channel" Reiter zur Verfügung.

Mit der Analyse sollten man an einem Ort beginen, wo das WLAN am schwächsten ist.
Es werden dann grafisch die Kanäle anhand von hohen Kurven angezeigt, welche am häufigsten in der Umgebung von anderen Routern verwendet werden.

Zum Einstellen des am wenigsten verwendten Kanals, muss dann der eigene Router aufgerufen werden. Z.B. für FritzBox: http://fritz.box (oder IP-Adresse) => WLAN => Funkkanal.



Hintergrund zu den WLAN-Kanälen:

2,4 GHz: 
Die meisten Router senden im 2,4 GHz Band. Die Kanäle reichen von 1 bis 13. In jeweils 3 Kanälen überlappen sich die Frequenzen. Wenn sich in Ihrer Nähe ein weiterer Router befindet, wählen Sie einen um 3 Kanälen höheren oder niedrigeren WLAN-Kanal. In Europa gibt es drei Kanäle, die überlappungsfrei sind (Kanal 1, 6 und 11). Verzichten Sie lieber auf die Kanäle 9 und 10, da Mikrowellenherde mit derselben Frequenz betrieben werden.

5 GHz: 

Nicht alle Geräte unterstützen das 5 GHz Band. Während es im 2,4 GHz Band nur 3 überlappungsfreie Kanäle gibt, so sind es im 5 GHz Band 28. Das 5 GHz Band ist weniger anfällig auf Störungen
Quelle: http://praxistipps.chip.de/wlan-einrichten-welchen-kanal-waehlen_34273

Mittwoch, 29. Juni 2016

Wortwolken schnell und einfach generieren

Wortwolken (Schlagwortmatrix oder Stichwortwolke) lassen sich mittlerweile sehr schnell und einfach direkt per Browser generieren. Vorteil von Wortwolken ist, dass Wörter unterschiedlich gewichtet oder auf andere Weise hervorgehoben dargestellt werden können. Es lassen sich somit zwei Dimensionen gleichzeitig betrachten.

Der Vorteil von www.wortwolken.com ist, dass keine weiteren Plugins notwendig sind und der Einstieg sehr einfach ist.


Sonntag, 5. Juni 2016

Schutz vor Kickstarter Abzocke

Crowdfunding wird immer beliebter und so investieren auch immer mehr Privatpersonen in solche Projekte. Viele vergessen dabei, dass man bei solch einer Investition immer auch ein Risiko eingeht.

Eine bekannte Plattform ist z.B. Kickstarter.com hier heißt es
"Kickstarter leistet keine Rückerstattungen. Die Verantwortung für den erfolgreichen Abschluss eines Projekts liegt vollständig bei dem jeweiligen Projektgründer. Kickstarter agiert nicht als Treuhänder im Namen von Projektgründern, gewährt keine Garantien auf die Arbeit der Projektgründer und leistet keine Rückerstattungen für gezahlte Projektbeiträge." siehe auch Nutzungsbedingungen
Deshalb sollte man sich vorab gut informieren, ob es sich auch wirklich um ein glaubwürdiges Projekt handelt, bevor man dieses mit seinem privaten Geld ünterstützt.

Ein guter Anlaufpunkt ist die Seite KICKSCAMMED.COM, hier werden fragwürdige Projekte gesammelt bzw. man kan auch selber welche melden.

Beispiel "Coolest Cooler" - Rekordprojekt Coolest Cooler ist pleite, Kickstarter-Backer sind sauer

Samstag, 14. Mai 2016

Raspberry Pi - CPU Temperatur ermitteln

Wenn man wissen möchte, wie die aktuelle CPU Temperatur des (passiv gekühlten) PI ist, kann man dies über die Konsole mit dem folgenden Befehl anzeigen lassen:
vcgencmd measure_temp
 

Donnerstag, 18. Februar 2016

Soap UI - SSL Konfiguration und anderes JRE (Java Runtime) verwenden

In einem früheren Beitrag habe ich beschrieben, wie man einen Webservice abfragen kann. Siehe auch http://sebastianhemel.blogspot.de/2015/11/webservice-abfrage-per-konsole-mit-wget.html .

Hier beschreibe ich, wie man bei Soap UI einen eigenen SSL Zertifikatsspeicher verwenden kann und auch die interne Java Runtime von Soap UI durch eine eigene installierte Java Runtime (JRE) zu ersetzen.
  1. Eigenen Zertifikatsspeicher erstellen
    1. "C:\Program Files\Java\jre7\bin\keytool" -genkey -alias testcert -keyalg RSA -keystore beispiel.jks
    2. Beliebige Werte für das selbstgenerierte Zertifikat eingeben und das Passwort "changeit" verwenden.
     
  2. Das gewünschte Zertifikat in den soeben angelegten Speicher importieren
    1. common-name-test.de.crt
    2. "C:\Program Files\Java\jre7\bin\keytool" -import -alias common-name -keystore "D:\Schnittstellen\keystore\beispiel.jks" -file D:\Schnittstellen\ssl-zert\common-name-test.de.crt
     
  3. SOAP-UI Konfig anpassen
    1. C:\Program Files\SmartBear\SoapUI-5.1.3\bin\soapui.bat
    2. Keystore setzen und lokales jre verwenden
      1. set CLIENT_CERT=D:\Schnittstellen\keystore\beispiel.jks
      2. rem set JAVA=%SOAPUI_HOME%..\jre\bin\java
      3. set JAVA=C:\Program Files\Java\jre7\bin\java
      4. set JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Djavax.net.ssl.keyStore=%CLIENT_CERT% -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net.ssl.trustStore=%CLIENT_CERT% -Djavax.net.ssl.trustStorePassword=changeit
    3. SSL-Debug aktivieren
      1.  set JAVA_OPTS=%JAVA_OPTS% -Djsse.enableSNIExtension=false
      2.  set JAVA_OPTS=%JAVA_OPTS% -Djavax.net.debug=ssl,trustmanager
       
  4. SOAP-UI mit "soapui.bat" starten
 

Dienstag, 19. Januar 2016

Spion im Wohnzimmer - Offene Webcams finden

Viele Webcams sind über das Internt frei zugänglich und haben oft gar keinen oder nur einen sehr einfachen Schutz vor fremden Zugriffen.

Es gibt Möglichkeiten diese mit einigen Suchbegriffen über Google zu finden oder man verwendet  spezielle Suchmaschinen für diesen Fall. Eine davon ist zum Beispiel SHODAN.
https://www.shodan.io/search?query=webcam
Hier findet man schnell tausende Webcams ohne Passwortschutz und viele lassen sich mit einem einfachen Angriff hacken. Zum Beispiel:

  • User: admin PW: admin
  • User: admin PW: 1234 

Mittwoch, 13. Januar 2016

Raspberry Pi - Monitoring mit MRTG und Temperatursensor DS18B20

Mit Hilfe des Programms MRTG (Multi Router Traffic Grapher) und RRD (Round-Robin-Database) lassen sich unter Linux sehr schnell grafische Auswertungen und Darstellungen von Messwerten erstellen. Es können HTML Seiten mit Grafiken erstellt werden.

Falls man direkten Zugriff über den Browser auf die Dateien haben möchte, sollte vorher auf dem Pi noch ein Webserver installiert werden. Dafür kann man den Apache2 oder auch den Lighttpd verwenden.

Siehe hierzu auch http://sebastianhemel.blogspot.de/2015/09/raspberry-pi-webserver-installieren.html

 

Installation & Konfiguration von MRTG/RRD/SNMP:


Installation der benötigten Pakete für MRTG und RRD.
sudo apt-get install mrtg mrtg-rrd rrdtool snmp snmpd
Anschließend kommt die Frage, ob root der Eigentümer der Datei /etc/mrtg.cfg sein soll. Hier sollte NEIN ausgewählt werden.

Anschließend muss ein Verzeichnis angelegt werden, in dem die RRD Datenbank und die PNG-Grafiken abgelegt werden können. Dies muss im öffentlichen WWW-Ordner vom Webserver erfolgen.
/var/ $ sudo mkdir www
/var/www $ sudo mkdir mrtg
Anschließend hat man die folgende Ordner-Struktur:
/var/www/mrtg
Jetzt müssen wir noch das cgi-bin Verzeichnis erstellen, auch dieses liegt im WWW-Ordner. Nun kann ein Symlink (https://de.wikipedia.org/wiki/Symbolische_Verknüpfung) zur mrtg-rrd.cgi erstellt werden. Hierrüber kann dann später die generierte HTML-Seite aufgerufen.
sudo mkdir -p /var/www/cgi-bin
sudo ln -s /usr/lib/cgi-bin/mrtg-rrd.cgi /var/www/cgi-bin/mrtg-rrd.cgi
Im Nachgang müssen nun die Rechte für den Lighttpd-Benutzer und die Gruppe gesetzt werden:
sudo chown -R www-data:www-data /var/www/*
Da es bei SNMP noch einen Fehler gibt, siehe auch http://penguinbliss.com/?p=239, muss noch die folgende Datei angepasst werden:
sudo sed -i 's|import Socket6;|Socket6->import(qw(inet_pton getaddrinfo));|' /usr/share/perl5/SNMP_Session.pm
Bevor wir mit der Erstellung des Diagramms starten, sollte von der "alten" mrtg.cfg eine Sicherheitskopie angelegt werden.
sudo mv /etc/mrtg.cfg /etc/mrtg.cfg.bak

 

Temperaturwerte für RRD bereitstellen

Hierzu wird ein Skript benötigt. Diese kann man z.B. im Home-Verzeichnis ablegen.
mkdir ~/graph
temp-mrtg-update.sh (wget https://www.shemel.de/download/raspberry/temp-mrtg-update.sh)

#!/bin/sh
# Temperatur von Sensor auslesen
# (c) Sebastian Hemel

sensor="/sys/bus/w1/devices/28-00000511590a/w1_slave"
if [ -f $sensor ]
then
        sensorraw=`cat $sensor`
        crc=`echo $sensorraw | cut -f2 -d= | cut -c4-6`
        if [ "$crc" = "YES" ]
        then
                tempraw=`echo $sensorraw | cut -f3 -d=`
                temp=`echo "scale=3; $tempraw / 1000" | bc`
                #temp=`echo "scale=2; $tempraw / 1000" | bc`

                # Update database
                #echo $temp
                printf "%04.2f" $temp
                echo 0
                echo 0
                echo temperature
        fi
fi
 

Die Datei muss ausführbar sein:
chmod 750 /home/pi/graph/temp-mrtg-update.sh
Es ist zu beachten, dass die ID eures Sensors hinterlegt werden muss!

Das Script sollte die folgenden Werte liefern:
pi@pi-ingolstadt ~/graph $ ./temp-mrtg-update.sh
3.560
0
temperature

 

Erstellen des Diagramms vom Temperatursensor:


Zu Beginn muss eine neue mrtg.cfg erstellt werden, dies erfolgt mit dem Befehl:
sudo cfgmaker --global "Options[_]: growright" --global "IconDir: /mrtg" --global "WriteExpires: Yes" --global "Language: german" --global "RunAsDaemon: yes" --global "EnableIPv6: no" --global "LogFormat: rrdtool" --global "Interval: 1" '--if-filter=$if_admin && $default_iftype' --output /etc/mrtg.cfg public@localhost
Jetzt kann der folgende Teil in die sudo nano /etc/mrtg.cfg übernommen werden:

### Global Config Options

#  for UNIX
# WorkDir: /home/http/mrtg

#  for Debian
HtmlDir: /var/www/mrtg
WorkDir: /var/www/mrtg
Imagedir: /var/www/mrtg

#  or for NT
# WorkDir: c:\mrtgdata

### Global Defaults
#  to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits

EnableIPv6: no
Options[_]: growright
IconDir: /mrtg
WriteExpires: Yes
Language: german
RunAsDaemon: yes
EnableIPv6: no
LogFormat: rrdtool
Interval: 1


#####################################################################
# System: DS18S20 Temperatur Sensor
# Contact: root
# Location: attached to Raspberry Pi
#####################################################################
### DS18S20 Temperatur SensorIngolstadt
TimeStrPos[temp_ingolstadt]: RU
Target[temp_ingolstadt]: `/home/pi/graph/temp-mrtg-update.sh`
Options[temp_ingolstadt]: gauge,growright,nopercent,expscale,transparent
Title[temp_ingolstadt]: Temperatur Ingolstadt
PageTop[temp_ingolstadt]: <h1>Temperatur Ingolstadt</h1>
MaxBytes[temp_ingolstadt]: 60
#Unscaled[temp_ingolstadt]: ymwd
Step[temp_ingolstadt]: 60
Legend1[temp_ingolstadt]: Gemessene Temperatur in Ingolstadt
LegendI[temp_ingolstadt]: Aussentemperatur
LegendO[temp_ingolstadt]:
YLegend[temp_ingolstadt]: Grad Celsius
ShortLegend[temp_ingolstadt]: Grad °C

Die restlichen Einträge habe ich auskommentiert, da ich nur das Temperatur Diagramm haben möchte.

Bei Bedarf können noch die MRTG-Icons in den WWW Ordner vom Webserver kopiert werden:
sudo cp /usr/share/mrtg/* /var/www/mrtg/
Jetzt kann durch Starten von MRTG überprüft werden, ob die Konfiguration erfolgreich durchgeführt wurde.
sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
Möchte man MRTG erneut starten, muss vorher der bestehende Prozess (Prozess-ID siehe auch /etc/mrtg.pid) beendet werden:
ps -aux | grep mrtg
sudo kill -9 16391
sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfg

Probleme mit negativen Temperaturwerten beheben

Da MRTG keine negativen Werte erlaubt, kann man diese nachträglich (mit rrdtool) mit dem folgenden Befehlen im Verzeichnis /var/www/mrtg anpassen.
sudo rrdtool tune temp_ingolstadt.rrd --minimum ds0:-20
sudo rrdtool tune temp_ingolstadt.rrd --minimum ds1:-20
Jetzt werden Temperaturen bis - 20 Grad Celsius unterstützt.

Der Aufruf des Diagramms erfolgt über den Browser http://192.168.1.110/cgi-bin/mrtg-rrd.cgi

Hinweise: Kommt es beim Aufruf der Datei zu einem "500 - Internal Server Error", wurden die Rechte chmod +x nicht gesetzt. Führte dies nicht zum Erfolg, sollte man die syslog Datei auslesen. Dies geht mit dem Befehl /var/log $ tail -f syslog . Erscheint hier die Meldung "Can't locate CGI.pm in @INC (you may need to install the CGI module)", muss noch das folgenden Paket installiert werden: sudo apt-get install libcgi-pm-perl 

Achtung es gibt ein Fehler im mrtg-rrd Package: https://bugs.launchpad.net/ubuntu/+source/mrtg-rrd/+bug/1618800

Nov  1 13:49:34 raspberrypi lighttpd[538]: Can't use an undefined value as an ARRAY reference at /var/www/cgi-bin/mrtg-rrd.cgi line 499.

Ich musste folgende Zeilen der "mrtg-rrd.cgi" anpassen:
Hinweis: Vorher am Besten den MRTG Prozess wieder beenden (siehe oben).

Aug  7 21:49:01 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 499.
#       return @{$target->{args}} if defined @{$target->{args}};
        return @{$target->{args}} if ($target->{args} && @{$target->{args}});

Aug  7 21:52:28 raspberrypi-zero lighttpd[461]: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 525.

#        %{$target->{options}} = ()
#                unless defined %{$target->{options}};           
         %{$target->{options}} = ()
                unless ($target->{options} && %{$target->{options}});   
           
Aug  7 21:58:11 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 914.
       
#        if (defined @{$directories{$dir}{subdir}}) {
#                $subdirs_printed = 1
         if ($directories{$dir}{subdir} && @{$directories{$dir}{subdir}}) {
                $subdirs_printed = 1;
               
Aug  7 22:01:35 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 929.

#        if (defined @{$directories{$dir}{target}}) {
         if ($directories{$dir}{subdir} && @{$directories{$dir}{subdir}}) {




Bei Bedarf kann das Diagramm noch auf einen anderen Server hochgeladen werden:

crontab -e: Aufruf per localhost, damit die temp_ingolstadt-day.png Datei erstellt wird (alle 7min).
*/7 *    *   *   *     curl http://localhost/cgi-bin/mrtg-rrd.cgi/temp_ingolstadt.html >/dev/null 2>&1

temp.sh: anpassen, siehe auch http://sebastianhemel.blogspot.de/2015/01/temperatursensor-ds18b20-raspberry-pi.html
ncftpput -f /home/pi/ftp.cfg /temp /var/www/mrtg/temp_ingolstadt-day.png


Danke an das Tutorial von http://kopfkino.irosaurus.com/tutorial-monitoring-mit-mrtg-rrd-support-auf-raspberry-pi-debian-wheezy, welches als Basis für diesen Eintrag diente.