Beiträge von ThomasH

    Für den Zugriff auf GPIO gibt man in Netio ein read Kommando ein:


    Code
    gpio check gpio25


    GPIO muss auf Systemseite aber entsprechend vorbereitet sein.


    Einmalig auf dem System die [font="Calibri"]Rechte ändern, damit man sudo nicht mehr benutzen muss.[/font]

    Code
    sudo chmod 222 /sys/class/gpio/export /sys/class/gpio/unexport


    Nach Systemstart, muss der PIN vorbereitet werden:

    Code
    echo "25" > /sys/class/gpio/export
    echo "in" > /sys/class/gpio/gpio25/direction

    Der Lesebefehl sieht auf der Shell wie folgt aus

    Code
    cat /sys/class/gpio/gpio25/value


    Ein Doku für GPIO mit Beispielen gibt es auch hier: klick


    Bei der Übung habe ich noch einen Fehler im netio_server entdeckt. Die funktion srvcmd_gpio wurde gar nicht aufgerufen. Ich habe auch noch ein exception handling eingefügt.

    Die Version 2.0 liegt jetzt auf github
    [font="Calibri"]Clone complete project to local raspberry[/font]
    [font="Calibri"]cd; mkdir -p git; cd git[/font]
    [font="Calibri"]git clone git://http://github.com/ThomasH-W/netio_server[/font]
    [font="Calibri"] [/font]
    [font="Calibri"]Update Project files by pulling new files[/font]
    [font="Calibri"]cd ~/git/netio_server[/font]
    [font="Calibri"]git pull[/font]

    Bei Sender- und Empfänger-adressen ist folgendes zu beachten:

    Die Mail-Adressen müssen ein gültiges Format ausweisen: name@domain.de

    Weder Sender- noch Empfänger-Adresse müssen existieren

    ABER …. Wenn ein Adresse verwendet, die auf dem verwendeten Mail-Server liegt, MUSS die existieren

    Es geht: Mail-Server = smtp.web.de & Empfänger/Sender diegibtesnicht@gmx.de | denauchnicht@gmx.de
    Geht nicht Mail-Server = smtp.gmx.de & Empfänger/Sender diegibtesnicht@gmx.de | denauchnicht@gmx.de

    @Sandkastenrambo

    Bitte hole Dir einmal die Dateien direkt von github (ohne sie auf dem PC zu speichern):

    Code
    cd; mkdir -p git; cd git
    git clone git://github.com/ThomasH-W/netio_server


    Danach dann den einfachen Server starten:

    Code
    cd ~/git/netio_server
    python ./netio_simple_server.py


    Der lokale Clone des Repositories vom github wird übrigens wie folgt aktualisiert;

    Code
    cd ~/git/netio_server
    git pull

    Irgendwie habe ich das Gefühl, das was mit python bei Dir nicht stimmt.

    Gebe mal einfach das Kommadno "python" ein.
    Danach muss ein python prompt erscheinen:

    Code
    pi@raspberrypi ~ $ python
    Python 2.7.3 (default, Jan 13 2013, 11:20:46)
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

    Dann mit copy und paste die ersten 21 Zeilen einfügen (bis "self.request.sendall('100')").

    Kommt dann bereits der Fehler ?

    Man kann die Daten aus einer MySQL-Datenbank direkt in Excel einlesen, ohne eine ODBC-Verbindung in der Systemsteuerung definieren zu müssen.

    MySQL-Treiber installieren
    Man braucht einen ODBC connector, als “Datenbank-Treiber”.
    Bei mir läuft Windows 8 64 bit. Daher hatte ich zuerst den 64-Bit Treiber installiert.
    Später habe ich herausgefunden, dass die benötigte Variante abhängig von der Excel-Version ist.
    Da mein Excel eine 32-bit Version ist, musste ich den 32-bit connector installieren:
    http://dev.mysql.com/downloads/connector/odbc/

    Excel-Datei
    avrio-excel.jpg

    Es gibt noch ein kleines Problem:
    Obowhl ich ClearContents verwende, wird auch die Formatierung gelöscht.
    Daher habe ich in Zeile 9 die Formatierung gesichert, um diese auf die Daten zu übertragen.
    Für Hinweise, wie man dies korregiert, bin ich dankbar.


    VBA-Code

    In der c't Hardware Hacks 01/13 wurde beschrieben, wie man Tropfen fotografiert. Der Aufbau basierte auf einem Arduino.

    Dieser Artikel beschreibt die Umsetzung mit einem Raspberry Pi.

    (Eine Zeitmessung mit zwei Lichtschranken findet man hier: http://www.hoeser-medien.de/?p=1212)
    Für Einstellungen der Kamera gibt es hier Ratschläge: http://www.tropfenfotografie.de/


    flash-1-Tropfen.jpg

    Weitere Bilder gibt es hier: http://www.hoeser-medien.de/?p=1267

    Aufbau

    Beim ersten Versuch habe ich eine Spritze genommen. Später soll an dem Galgen eine Flasche hängen.
    Die Schraube dient dazu, die Kamera zu fokussieren.
    Hinter der mattierten Scheibe befindet sich ein zweiter Blitz.



    Was wird benötigt ?

    • Digitalkamera
    • Funkauslöser (optional)
    • Studioblitz (optional)
    • Raspberrry PI
    • Elektronik-Interface (s.u.)
    • Software:
    • flash.c (s.u.)
    • wiringPI


    Systemberechnung

    flash-system-1.jpg

    flash-system-2.jpg

    Hardware Lichtschranke
    Die Lichtschranke besteht aus einer IR-LED CQY37N und einem Fototransistor BPW17N.
    Gekauft bei ebay "NPN PHOTOTRANSISTOR + INFRAROT EMITTING DIODE 10 PAAR" für knapp 3 EUR.

    flash-ecad-0.jpg

    flash-ecad-1a.jpg

    Die Schaltung basiert auf der Anleitung bei http://www.strippenstrolch.de/1-2-12-der-ref…pler-cny70.html Der Fototransistor steuert ein Schmitt-Trigger, um ein sauberes Ausgangssignal zu erhalten.

    Funkauslöser
    Ein Funkauslöser ist nicht notwendig, erlaubt jedoch eine flexiblen Aufbau. Den Funkauslöser von Yongnuo setze ich für Portraitfotos bereits ein. Hier kann man dies sehen: klick
    Die Schaltung ist relativ und basiert auf einem 2N7000.

    flash-ecad-2.jpg

    Man kann die Treiberstufe mit einem Transistor oder Mos-FET realisieren. Ich hatte den 2N7000 verfügbar und habe daher diesen verwendet.

    Software
    Die Auslösung der Lichtschranke wird über einen Interrupt erkannt. WiringPi bietet eine einfache Lösung hierfür. In der Interrupt-Service-Routine (ISR) wird eine bestimmte Zeit gewartet, und dann der Ausgang geschaltet. Nach jedem Interrupt, wird die Wartezeit etwas erhöht, um den Tropfen in verschiedenen Phasen zu fotografieren.

    Installation wiringPi

    Code
    cd 
    git clone git://git.drogon.net/wiringPi 
    cd wiringPi 
    ./build

    Installation argtable2

    Code
    sudo apt-get install libargtable2-dev

    Makefile

    Flash.c

    Programm compilieren + starten

    Code
    make
    sudo ./flash


    Anpassung für den Testaufbau:

    Code
    sudo ./flash -s 100 -i 10 -d 20

    Anbei ein Version in C basierend auf wiringPI.

    Code
    cd 
    git clone git://git.drogon.net/wiringPi
    cd wiringPi
    ./build


    lichtschranke.c

    Programm compilieren + starten

    Code
    gcc -I. -o lichtschranke lichtschranke.c  -lwiringPi
    sudo ./lichtschranke

    BlackBeast

    Bitte zeige mal Deine syslog

    Code
    tail --lines=20 /var/log/syslog

    Bei mir sieht dies so aus:

    Code
    Jan 18 07:00:01 raspberrypi /USR/SBIN/CRON[28184]: (pi) CMD (/home/pi/avrio/avrio.py > crontab.log)
    Jan 18 07:00:01 raspberrypi /USR/SBIN/CRON[28185]: (pi) CMD (python /home/pi/bin/openweather_client.py Wiehl > crontab_ow_client.log 2>&1)
    Jan 18 07:00:01 raspberrypi /USR/SBIN/CRON[28186]: (pi) CMD (/home/pi/avrio/avrio.py -b > crontab_remote.log)

    Die erste und letzte Zeile gehören zur Temperaturmessung und können hier ignoriert werden.

    Evtl. ist auch in den "messages" ein Fehler sichtbar.


    Code
    tail --lines=20 /var/log/messages


    crontab habe ich mit folgendem Befehl gepflegt:

    Code
    crontab -e

    Folgender Eintrag wurde eingefügt:

    Code
    */5 * * * * python /home/pi/bin/openweather_client.py Wiehl > crontab_ow_client.log 2>&1

    inesa394

    netio_client.py dient dazu, den netio_server zu testen.
    Da das iPad meistens irgendwo im Haus bei einem anderem Familienmitglied ist, kann ich mit dem Client Befehle an den server senden; Geanu so, wie es die NetIO-App machen würde.

    Denkbar ist auch der Aufruf über shell-script auf dem raspberry, um bei bestimmten Ereignissen den Server zu steuern oder Daten zu lesen.

    Gruß,
    Thomas

    Wenn die Datei nicht aktualisiert wird, läuft der cronjob wahrscheinlich nicht oder nicht korrekt.
    Zeige mal den Eintrag in der crontab.

    Prüfe bitte auch die System-Meldungen
    [font="Verdana, Arial, Helvetica, sans-serif"][font="Verdana, Arial, Helvetica, sans-serif"]tail --lines=20 /var/log/syslog[/font]
    [/font]

    Neue Version der highcharts auf github und ein Bild dazu:

    Unter der Grafik gibt es die Möglichkeit, den Zeitraum für Diagramm zu bestimmen.
    Wenn man auf den Sensornamen in der Legende klickt, kann man auch Sensoren an- und abwählen.

    Man kann dies auch beim Aufruf der Seite übergeben:

    Code
    http://192.168.178.61/js/avr-highchart.php?scope=hour&scopeval=3


    avr-highchart-1.jpg

    Die highcharts wurden nun komplett überarbeitet.
    Basis bildet hier ein Script von http://fluuux.de/ - Vielen Dank für die Genehmigung dies hier zu veröffentlichen.

    Die Dateien wurde bei github hinterlegt:
    https://github.com/ThomasH-W/avrio/tree/master/www/js

    /var/www/js/scripts/highcharts.js
    /var/www/js/scripts/jquery.min.js
    /var/www/js/modules/exporting.js
    /var/www/js/includes/common.inc.php
    /var/www/js/includes/functions.inc.php


    Man kann nun relativ flexibel die Sensor-Namen /DB-Felder in der Datei common.inc.php anpassen.

    Für Highcharts gibt es folgende Datei:

    https://github.com/ThomasH-W/avri…-highcharts.php

    Diese Version gefällt mir noch nicht, aber vielleicht kann jemand nun damit etwas spielen und eine schöne Grafik bereitstellen.


    Folgende Dateien habe ich bei mir installiert:
    /var/www/js/highcharts.js
    /var/www/js/jquery.min.js
    /var/www/js/modules/exporting.js
    /var/www/js/avr-highcharts.php

    Dann über den Browser aufrufen:
    http://192.168.178.61/js/avr-highcharts.php

    Der Vorteil gegenüber google Grafik liegt darin, dass alles lokal liegt.
    Somit ist keine Internet-Vebindung notwendig.

    Das php-Script für die Grafik mittels google wurde erweitert.

    Im sql Statement wurde in Abhängigkeit vom Zeitraum die Aggregat-Funktion eingebaut.
    Ohne diese Funktion, sendet der Raspberry alle einzelnen Datenzeilen nach google, um eine Grafik daraus zu basteln.
    Wenn man nun 100 Datensätze pro Tag hat und eine Grafik für Jahr erzeugt, werden demanch 365*100 Datenzeilen an google übergeben.
    Die Grafik wird aber nicht die Auflösung bieten. Abhife schafft man über avg() und group by.
    Dann rechnet die Datenbank und gibt wesentlich weniger Datensätze weiter.
    Bei langsamer Internet-Anbindung wird die Aufbereitung der Grafik damit erheblich beschleunigt.

    Ohne Aggregat-Funktion:

    SQL
    SELECT Aussen, Wintergarten, Zimmer, Terrasse, Pool, WW_Speicher, Vorlauf, Ruecklauf , UNIX_TIMESTAMP(dattim) AS date 
    FROM avrdat 
    WHERE dattim >= Date_Sub(CURRENT_TIMESTAMP(), Interval 24 HOUR ) 
    ORDER BY dattim


    Mit Aggregat-Funktion:


    SQL
    SELECT AVG(Aussen) as Aussen , AVG(Wintergarten) as Wintergarten , AVG(Zimmer) as Zimmer , AVG(Terrasse) as Terrasse , AVG(Pool) as Pool , AVG(WW_Speicher) as WW_Speicher , AVG(Vorlauf) as Vorlauf , AVG(Ruecklauf) as Ruecklauf  , UNIX_TIMESTAMP(dattim) AS date 
    FROM avrdat 
    WHERE dattim >= Date_Sub(CURRENT_TIMESTAMP(), Interval 7 DAY) 
    GROUP BY YEAR(dattim),MONTH(dattim),DAY(dattim),HOUR(dattim);


    Die neue Version habe ich bei github eingestellt:
    https://github.com/ThomasH-W/avri…/avr-google.php