Net-FX2

Temperaturmessung RaspBerry Pi, 1wire & DS18B20

Hier möchte ich kurz beschreiben, wie ich an meiner Heizungsanlage (Buderus Brennwerttherme, 750 ltr. Wasserspeicher mit 160 lt. Brauchwassereinsatz + Wasserführender Kamin zur Heizungsunterstützung) mit dem Raspberry Pi ein Temperaturmonitoring auf Basis 1wire (ohne USB-Busmaster) umgesetzt habe.

Software:
RRDTool (oetiker.ch)
Raspbian wheezy (Debian)

Benötigtes Material:

– Raspberry Pi 2 Model B (38 €)
– diverse Temperatursensoren DS18B20 (vorkonfektioniert -> Edelstahlhülse + 3 mtr. Kabel; 5 Stck. => 15 €)
– ca. 10 mtr. Steuerleitung (4-adrig) ( 6 € )
– div. Busmasterconnectoren (Verbindung der Sensoren mit der Steuerleitung) ( 10 Stück => 6,99 € )

Links:
http://airpi.es/whatisthis.php
http://pdwhomeautomation.blogspot.com/2013/03/raspberry-pi-environment-monitor.html
http://openenergymonitor.blogspot.com/2013/04/introducing-rfm12pi-v2-raspberry-pi.html
http://rpi-experiences.blogspot.de/p/rpi-monitor.html

HMC5884L 3-Achsen-Magnetometer

Eine kleines python-Skript um ein 3-Achsen-Magnetometer am I2C-Bus des Raspberry Pi zu testen.

Ich nutze diesen Chip um meinen Gaszähler (Elster G4) auszulesen, den Gasverbrauch zu monitoren und um weitere Analysen zu betreiben.

#!/usr/bin/env python

# HMC5888L Magnetometer (Digital Compass) wrapper class
# Based on https://bitbucket.org/thinkbowl/i2clibraries/src/14683feb0f96,
# but uses smbus rather than quick2wire and sets some different init
# params.

import smbus
import math
import time
import sys

class hmc5883l:

    __scales = {
        0.88: [0, 0.73],
        1.30: [1, 0.92],
        1.90: [2, 1.22],
        2.50: [3, 1.52],
        4.00: [4, 2.27],
        4.70: [5, 2.56],
        5.60: [6, 3.03],
        8.10: [7, 4.35],
    }

    def __init__(self, port=1, address=0x1E, gauss=1.3, declination=(0,0)):
        self.bus = smbus.SMBus(port)
        self.address = address

        (degrees, minutes) = declination
        self.__declDegrees = degrees
        self.__declMinutes = minutes
        self.__declination = (degrees + minutes / 60) * math.pi / 180

        (reg, self.__scale) = self.__scales[gauss]
        self.bus.write_byte_data(self.address, 0x00, 0x70) # 8 Average, 15 Hz, normal measurement
        self.bus.write_byte_data(self.address, 0x01, reg << 5) # Scale
        self.bus.write_byte_data(self.address, 0x02, 0x00) # Continuous measurement

    def declination(self):
        return (self.__declDegrees, self.__declMinutes)

    def twos_complement(self, val, len):
        # Convert twos compliment to integer
        if (val & (1 << len - 1)):
            val = val - (1<<len)
        return val

    def __convert(self, data, offset):
        val = self.twos_complement(data[offset] << 8 | data[offset+1], 16)
        if val == -4096: return None
        return round(val * self.__scale, 4)

    def axes(self):
        data = self.bus.read_i2c_block_data(self.address, 0x00)
        #print map(hex, data)
        x = self.__convert(data, 3)
        y = self.__convert(data, 7)
        z = self.__convert(data, 5)
        return (x,y,z)

    def heading(self):
        (x, y, z) = self.axes()
        headingRad = math.atan2(y, x)
        headingRad += self.__declination

        # Correct for reversed heading
        if headingRad < 0:
            headingRad += 2 * math.pi

        # Check for wrap and compensate
        elif headingRad > 2 * math.pi:
            headingRad -= 2 * math.pi

        # Convert to degrees from radians
        headingDeg = headingRad * 180 / math.pi
        return headingDeg

    def degrees(self, headingDeg):
        degrees = math.floor(headingDeg)
        minutes = round((headingDeg - degrees) * 60)
        return (degrees, minutes)

    def __str__(self):
        (x, y, z) = self.axes()
        return "Axis X: " + str(x) + "\n" \
               "Axis Y: " + str(y) + "\n" \
               "Axis Z: " + str(z) + "\n" \
               "Declination: " + self.degrees(self.declination()) + "\n" \
               "Heading: " + self.degrees(self.heading()) + "\n"

if __name__ == "__main__":
    # http://magnetic-declination.com/Great%20Britain%20(UK)/Harrogate#
    compass = hmc5883l(gauss = 4.7, declination = (-2,5))
    while True:
        sys.stdout.write("\rHeading: " + str(compass.degrees(compass.heading())) + "     ")
        sys.stdout.flush()
        time.sleep(0.5)

FritzBox 7390 JDownloader Reconnect per UPnP [ Update: 20.10.2014 ]

[Update: ab Fritz!OS >= 6.05] Moin,

für alle die sich auch eine !FritzBox Fon WLAN 7390/7490 zugelegt haben und den JDownloader für ihre Downloads nutzen (Youtube Videos + Audio funzt da ja auch super damit!), hab ich ein ReconnectScript via UPnP bereitgestellt.

Für diejenigen, die nicht wissen, wozu man solch ein Skript braucht, verweise ich mal schnell an die beiden lustigen Mitarbeiter von Google (einer schreibt ja die Texte und der andere macht die Fotos ^^).

Achtung: UPnP muss auf der Fritz!box aktiviert sein, sonst funktioniert es nicht !!

[[[HSRC]]]
[[[STEP]]]
[[[REQUEST]]]
POST /upnp/control/WANIPConn1 HTTP/1.1
Host: fritz.box:49000
Content-Type: text/xml; charset="utf-8"
SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination

< ?xml version='1.0' encoding='utf-8'?>     
[[[/REQUEST]]]
[[[/STEP]]]
[[[/HSRC]]]

Dies einfach unter EINSTELLUNGEN -> MODULE -> RECONNECT -> LiveHeader/Curl einfügen und testen.

Innerhalb von wenigen Sekunden habt ihr dann eine neue WAN-IP.

Kleines UPDATE ( 20.10.2014 )

nachdem ich meinen FritzBox! auf des neueste FritzOS (06.20) geupdatet hatte, passierte per automatischem Reconnect gar nichts:

also fix das Script angepasst und weiter gehts:

hier der Code für FritzOS! ab Version 06.05

[[[HSRC]]]
[[[HSRC]]]
[[[STEP]]]
[[[REQUEST]]]
POST /igdupnp/control/WANIPConn1 HTTP/1.1
Host: fritz.box:49000
Content-Type: text/xml; charset="utf-8"
SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination

< ?xml version='1.0' encoding='utf-8'?>      
[[[/REQUEST]]]
[[[/STEP]]]
[[[/HSRC]]]

Wichtig: die Leerzeile im Code unbedingt so belassen, sonst funktioniert der Reconnect NICHT!

Das ganze funktioniert natürlich auch in der Linux-Console mit curl:

#!/bin/bash
curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d " http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>"

revil.O

Kommentare, ob das HowTo geholfen hat, oder ob Probleme bestehen, halten diese Seite sowie das Script aktuell.

ownCloud 6.0.3 bei all-inkl.com install und konfig (ssl-gesichert)

ownCloud ist ein Cloud Storage Projekt, das 2010  ins Leben gerufen wurde. Im Gegensatz zu Dropbox, SugarSyncWuala etc., wird ownCloud auf dem eigenen oder einem gehosteten Webserver betrieben. ownCloud bietet hier sogar eine Kontakt- und KalenderSynchronisation via WebDAV an.

Dies würde mich sogar dazu verleiten, dem Giganten Google (zumindest was meinen Kalender und Kontakte anbelangt) den Rücken zu kehren. Um kostenpflichtige Apps aus dem Store zu laden, ist man jedoch an ein gewisses Maß von GoogleTools auf seinem Smartphone gebunden.

Im Dezember 2013 wurde die ownCloud-Version 6 veröffentlicht und ich habe mich nach einigem Überlegen dazu entschlossen, meine eigene private Cloud aufzuziehen.

Meine Website lasse ich schon seit gefühlten Ewigkeiten bei all-inkl.com hosten, und die wiederum haben seit einiger Zeit ihre Webhosting Paket massiv gepusht.

Mit 100GB Webspace und unlimited Traffic ( für schlappe 7,95 € im Monat ), die ideale Kombination für eine private Cloud mit dem Vorteil einer vertraglich zugesicherten Datensicherung. Ebenso hat man bei all-inkl.com die Möglichkeit eine sog. Web-Festplatte per Samba-Share einzubinden !

Anmerkung: Wer sich die AGB von z.B.: Dropbox genau durchgelesen hat, wird festgestellt haben, daß Dropbox sich das Recht vorhält, sämtliche Deiner hochgeladenen Daten ohne Vorwarnung zu löschen !!! Für mich ein k.o.-kriterium !

Diese Anleitung bezieht sich auf die Besonderheiten bei all-inkl.com mit der Nutzung von https über den SSL-Proxy (Webhosting-Paket PrivatPlus).

 

Installation ownCloud-Package auf dem eigenen Webspace:

im KAS-System vorzunehmende Schritte:

1. Anlegen eines Verzeichnisses für die Subdomain   ( zb.: /owncloud)

2. Anlegen einer Subdomain mit Pointer auf das in Schritt 1 angelegte Verzeichnis  (z.B.:  ownCloud.mydomain.de)

3. anlegen einer neuen mysql-Datenbank für owncloud  (Name und Passwort sind zu merken 😉 )

Download der Datei setup-owncloud.php von ownCloud.org

 

Per FTP-Client oder Web-FTP im KAS-System

1. upload dieser Datei auf Euren Webspace in das Verzeichnis oberhalb des angelegten Verzeichnisses (ggf. im root-verzeichnis)

2. per chmod Ausführungsrechte an die setup-owncloud.php vergeben

im Web-Browser

1. Aufruf Eurer Domain für ownCloud   –> http://www.mydomain.de/setup-owncloud.php

2. angeben des Zielordners für die Installation  (hier:   /owncloud   )

3. Bestätigen und sich kurz zurücklehnen, das Script lädt das aktuelle Installationspackage vom owncloud-server und installiert es auf Eurem Webspace

4. nach Beendigung der Installation bekommt ihr einen LogIn-Screen angezeigt, bei dem man den Admin-Account nebst Passwort definiert. Hier ist darauf zu achten, daß man das darunter befindliche Drop-Down-menü erweitert um die Datenbank-Konfiguration durchzuführen. Gebt dort den Datenbank-Namen, User und Passwort ein.  Der Datenbank-User hat denselben Namen wie die Datenbank. Als Host gibt man entweder ‚localhost‘ oder ‚127.0.0.1‘ an.

Das ganze bestätigen und wenn ihr nicht mit einer Fehlermeldung belästigt werdet, habt ihr eine großen 1. Schritt in Richtung eurer eigenen Cloud getan.

Weiter gehts im nächsten Abschnitt …

 

Jetzt kommen wir zum etwas schwierigeren Teil der Anpassungsarbeiten:

Anpassen des Quellendes unserer ownCloud-Installation:

Diese Codebestandteile müssen in die Datei /owncloud/config/config.php eingefügt werden (falls nicht verhanden), wobei die  domain-Platzhalter natürlich durch Eure eigenen Domainnamen ersetzt werden müssen ! xx müssen durch die einzelnen Abschnitte der IP-Adresse der Website ersetzt werden !

Codeschnipsel für die Datei config/config.php

'overwritehost' => 'ssl-account.com',
  'overwriteprotocol' => 'https',
  'overwritewebroot' => '/cloud.domain.de',
  'forcessl' => 'true',
  'overwritecondaddr' => '^xx\\.xxx\\.xxx\\.xxx$',
  array (
    0 => 'http://cloud.domain.de',
  ),

Codeschnipsel für die Datei .htaccess

RewriteRule .* - [env=REMOTE_USER:%{HTTP:Authorization},last]
php_flag magic_quotes_gpc off
php_value magic_quotes_gpc off

Codeschnipsel für die Datei: 3rdparty/Sabre/HTTP/BasicAuth.php

Diesen Abschnitt suchen:

// Apache could prefix environment variables with REDIRECT_ when urls are passed through mod_rewrite
if (!$auth) {
$auth = $this->httpRequest->getRawServerValue('REDIRECT_HTTP_AUTHORIZATION');
}

und danach folgenden Code einfügen:

if (!$auth) {
$auth = $this->httpRequest->getRawServerValue('REDIRECT_REMOTE_USER');
}

Als letzten Schritt öffnen wir nun noch die /lib/base.php und suchen den Eintrag

//set http auth headers for apache+php-cgi work around if variable gets renamed by apache
if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) && preg_match('/Basics+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches))
{
list($name, $password) = explode(':', base64_decode($matches[1]));
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
}

Hinter diesem fügen wir das folgende ein:

if (isset($_SERVER['REDIRECT_REMOTE_USER']) && preg_match('/Basics+(.*)$/i', $_SERVER['REDIRECT_REMOTE_USER'], $matches))
{
list($name, $password) = explode(':', base64_decode($matches[1]));
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
}

 

Konfiguration der Clientseite (hier im speziellen Fall: Mac OS X, IOS 7 (ipad), Android-Smartphone (Xiaomi Mi3 mit MIUI V5 ROM)):

Wie ihr euch die einzelnen Tools konfiguriert, beschreibe ich in den nächsten Tagen …

 

 

Viel Erfolg bei der Einrichtung Eurer eigenen privaten Cloud

revil.O

 

 

Bedanken möchte ich an dieser Stelle bei:

cyman.de

der-bo.de

kleingedruckt.de

.. ohne deren Veröffentlichungen ich gewiss noch an so manchem Problem zu knabbern hätte.