Auswertung der AirPi Gas-Sensoren

Zur Ermittlung der Umrechnungsformeln vom Sensor-Widerstand Rs zu ppm (Parts per Million) müssen einige Datenpunkte aus den jeweiligen Diagramm des Sensors aus dem technischen Datenplatt extrahiert und zum Beispiel in Excel übertragen werden. Nachdem es sich (meist) um logarithmische Skalierungen auf x und y-Achse handelt, müssen diese Werte mit =log(Rs/R0) bzw. =log(ppm) umgerechnet werden.

Das Ergebnis dieser neuen log-Spalten wird dann in einem x/y-Diagramm dargestellt und eine lineare Trendlinie über die das Eigenschaften-Menü der Datenreihe eingefügt. Um die Formel der Trendlinie zu erhalten, muss diese unter den Eigenschaften der Trendlinie eingeblendet werden. Die Formel der Trendlinie dient dann zur Umrechnung von Rs/R0 in einen ppm-Wert.

Auswertung der AirPi Gas-Sensoren weiterlesen

AirPi Wetterwerte Salzburg Stadt (kombiniert)

 
 

Die obigen Diagramme zeigen die mit AirPi v1.4 und Raspberry Pi ermittelten Wetterwerte und Umweltdaten wie Temperatur (°C), Relative Luftfeuchtigkeit (%), Luftdruck (hPa), Kohlenstoffmonoxid (CO), Stickstoffdioxid (NO2) und Helligkeit (Lux). Die Grafiken werden aus den Sensor-Daten dynamisch über die API von Xively.com und der JavaScript-Library Highcharts generiert.
Die dargestellten Werte wurden tlw. noch nicht mittels der Temperatur korrigiert und entsprechend in eine verbreitete Einheit umgerechnet! Zeiträume in denen keine Daten zur Verfügung stehen, werden als durchgehende Linien dargestellt.

Diagramm-Beispiele:

AirPi v1.4 mit Raspberry Pi (Model B) Wetterstation
Standort: Salzburg Stadt, Österreich
Latitude: 47.7672099412293
Longitude: 13.0753720089843
Höhe: 420 m ü. d. Meer, 7 m ü. d. Boden.

Aktuelle Unwetterwarnungen für Österreich

Praktische WordPress Plugins

Die folgende Aufstellung listet praktische WordPress-Plugins, um die Webseite und das Standard-Theme „Fourteen“ oder auch das Administrations-Interface zu erweitern.

WordPress Plugins für die Webseite

Contact Form With Captcha Einfaches Kontaktformular mit Captcha
SyntaxHighlighter Evolved Syntax-Code-Highlighting für Code Beispiele
Simple Lightbox Bilder in Lightbox vergrößert darstellen
QR Code Widget Widget um aktuelle URL als QR-Code anzuzeigen (ohne externes Tracking)
2 Click Social Media Buttons  2 click Buttons for Social Networks to disable external Tracking
Image Widget
Print Friendly and PDF PDF Generator (uses external Service!)
SoundCloud Shortcode SoundCloud Player für WordPress
Jetpack Jetpack ist eine Sammlung von über 30 nützlichen erweiterungen, die normalerweise nur bei WordPress.com verfügbar war wie zB. Statistiken, erweiterte Möglichkeiten der Konfiguration, Caching, Mobile Unterstützung, …

Praktische WordPress Plugins weiterlesen

Hitzeindex und Summer Simmer Index

Online-Hitzeindex, Humidex &
Summer-Simmer-Index-Rechner

Eingabeparameter
Luft-Temperatur: °C
Relative Luftfeuchtigkeit: %
Ergebnisse
Hitzeindex: °C ( °F)
Humidex (Näherung): °C ( °F)
Summer-Simmer-Index: °C ( °F)

Gefühlte Temperatur

Die gefühlte Temperatur ist ein bioklimatisches Maß für das thermische Wohlbefinden bzw. die wahrgenommene Umgebungstemperatur, die neben der Luft-Temperatur weitere Faktoren wie Wind und Luftfeuchtigkeit berücksichtigt. Neben dem Hitzeindex gibt es für die gefühlte Temperatur noch den Humidex, den Summer-Simmer Index und für Temperaturen unter 10°C den Windchill, bei dem die Windgeschwindigkeit einbezogen wird. Hitzeindex und Summer Simmer Index weiterlesen

Windchill Faktor – Gefühlte Temperatur berechnen

Online-Windchill-Faktor-Rechner

Eingabeparameter
Luft-Temperatur: °C
Windgeschwindigkeit: km/h
Ergebnisse
Windchill Faktor
(US, UK seit 2001):
°C ( °F)
Windchill nach Siple und Passel
(alte Formel):
°C ( °F)

Windchill (gefühlte Temperatur) Berechnung (US/Kanada, UK)

Die gefühlte Temperatur oder Windchill bezieht neben der Lufttemperatur auch die Windgeschwindigkeit mit ein. Der Windchill ist für Temperaturen unterhalb von ca. 10 °C und Windgeschwindigkeiten zwischen 4.8 und 177 km/h definiert. Bei Temperaturen über 27°C wird der Hitzeindex, Humidex oder Summer-Simmer-Index verwendet. Windchill Faktor – Gefühlte Temperatur berechnen weiterlesen

Javascript im Header von WordPress Seiten oder Beiträgen

Eine Möglichkeit, um in WordPress auf einzelnen Seiten (pages) der Beiträgen (posts) eigene JavaScripte oder CSS-Styles verwenden zu können ist, diese als Custom-Fields im Beitrag oder der Seite einzugeben und und diesen mit Hilfe einer „add_action“-Anweisung in der „functions.php“ über den Hook „wp_header“ im HTML-Header von Seiten und Beiträgen ausgeben zu lassen.

Zur praktischen Eingabe von JavaScript und CSS-Code eignet sich das Plugin „Advanced Custom Fields“ und das Zusatzplugin „Advanced Custom Fields: Code Area Field“!

1. Installation von „Advanced Custom Fields

2. Installation von „Advanced Custom Fields: Code Area Field

3. Unter dem neuen Menüpunkt „Eigene Felder“ muss nun eine neue Feld-Gruppe mit zB. dem Namen „Advanced Custom Fields“ angelegt werden.

4. Danach wird dieser Gruppe ein neues Feld „Code-Area“ mit dem namen „header“ hinzugefügt. Folgende Regel muss dabei definiert weren, damit sichergestellt ist, dass die Felder nur bei Seiten und Beiträgen angezeigt werden.

Zeige diese Felder wenn
„Artikel-Typ“ „ist gleich“ „post“
oder
„Artikel-Typ“ „ist gleich“ „page“

Das neue Feld muss über „veröffentlichen“ bzw. „aktualisieren“ gespeichert werden.

Die Konfiguration des neuen Feldes der Code-Area sieht folgendermaßen aus:

screenshot-myscope net 2014-06-27 00-31-06

5. Erweiterung der „functions.php“ über Design > Editor um folgende Funktion:


function acf_header() {
  global $post;
  $content = "";
  if ($post->post_type == 'post' or $post->post_type == 'page') {
    $content = get_post_meta($post->ID, "header", true).$content;
  }
  echo $content; // echo, kein return!
}

add_action('wp_head','acf_header');

6. Nun kann beim Editieren von Seiten und Beiträgen unterhalb des Inhaltes zusätzlich in einem Code-Editor HTML-Code eingegeben werden.

screenshot-myscope net 2014-06-27 00-35-09

Wichtig ist dabei, dass der Inhalt der Code-Area 1:1 im Header ausgegeben wird. Es ist demnach wichtig, <script>-Tags für JavaScript- und <style>-Tags für CSS-Code zu verwenden!

 

Taupunkt Berechnung

Online-Taupunkt-Rechner

Eingabeparameter
Luft-Temperatur: °C
Relative-Luftfeuchtigkeit: %
Ergebnisse
Taupunkt bzw. Taupunkttemperatur:   °C
Wasserdampfdichte bzw. absolute Feuchte:   g/m³
Dampfdruck:   hPa (mbar)

Berechnung des Taupunktes

Der Taupunkt bzw. die Taupunkttemperatur, ist die Luft-Temperatur die (bei unverändertem Druck) unterschritten werden muss, damit sich Wasserdampf als Tau oder Nebel abscheidet und die relative Luftfeuchtigkeit demnach 100% beträgt.

Ist die relative Luftfeuchtigkeit und die Temperatur bekannt, so kann daraus (unabhängig vom aktuellen Luftdruck!) der Taupunkt berechnet werden. Taupunkt Berechnung weiterlesen

AirPi Wetterdaten Salzburg (PNG)

Die folgenden Diagramme zeigen die mit AirPi v1.4 und Raspberry Pi ermittelten Umweltdaten wie Temperatur (°C), Relative Luftfeuchtigkeit (%), Luftdruck (hPa), Kohlenstoffmonoxid (CO), Stickstoffdioxid (NO2), Beleuchtungsstärke (Lux) und Lärm. Die folgenden PNG-Grafiken werden aus den Sensor-Daten dynamisch über die API von Xively.com generiert.

AirPi Wetterdaten Salzburg (PNG) weiterlesen

AirPi-Daemon Startscript

Der AirPi-Daemon „airpi.py“ von Tom Hartley (siehe https://github.com/tomhartley/AirPi) lässt sich mit folgendem Shell-Script leichter starten und stoppen. Das Script startet airpi.py im Hintergrund und leitet alle stderr und stdout Ausgaben in ein Logfile um.

Start und Stop des AirPi-Daemons:

airpid.sh start
airpid.sh stop

airpid.sh

#!/bin/bash

### BEGIN INIT INFO
# Provides:          airpid.sh
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: AirPi Weather Station Daemon
# Description:       This service is used to read sensor data from AirPi and upload to Xively.com
### END INIT INFO

case "$1" in
  start)
    echo "Starting AirPi Daemon"
    ## cd into airpi directory to make sure all files are found
    cd /home/pi/workspace/AirPi;
    ## start airpi.py using script for unbuffered output and redirect output to logfile
    script -c "sudo python airpi.py" >> airpi.log 2>&1 &
  ;;
  stop)
    echo "Stopping AirPi Daemon"
    ## serach for airpi.py process and stop it using kill
    sudo kill `pgrep -f airpi.py`
  ;;
  *)
    echo "Usage: /etc/init.d/airpi.sh start|stop"
    exit 1
  ;;
esac

exit 0

Wichtig ist, dass airpi.py mit sudo unter Root laufen muss!

Ein Blick in das laufende Logfile von airpi.py lässt zB: tail -f sensor.log zu:

tail -f sensor.log 

Success: Loaded sensor plugin BMP085-temp
Success: Loaded sensor plugin BMP085-pres
Success: Loaded sensor plugin BMP085-alt
Success: Loaded sensor plugin MCP3008
Success: Loaded sensor plugin DHT22
Success: Loaded sensor plugin DHT22-temp
Success: Loaded sensor plugin LDR
Success: Loaded sensor plugin LDR_LUX
Success: Loaded sensor plugin TGS2600
Success: Loaded sensor plugin MiCS-2710
Success: Loaded sensor plugin MiCS-5525
Success: Loaded sensor plugin Mic
Success: Loaded output plugin Print
Success: Loaded output plugin Xively
...

Autostart vom AirPi-Daemon

sudo nano /etc/rc.local

Durch Hinzufügen folgender Zeile, wird der AirPi-Daemon nach jedem Reboot automatisch gestartet:

/home/pi/workspace/AirPi/airpid.sh

Liniendiagramm aus Xively-Daten mit Highcharts

Liniendiagramm 1

<script src="http//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://code.highcharts.com/stock/highstock.js"></script>

<div id="chart1" style="height: 300px;"></div>

<script>
jQuery(function() {
    feedid = '******';
    key = '******';
    channel = 'Air_Temperature';
    interval = 900;
    days = 7;

    start_date = new Date();
    start_date.setHours(start_date.getHours() - 24*days); 

    // load data from xively feed
	jQuery.getJSON('http://api.xively.com/v2/feeds/'+feedid+'/datastreams/'+channel+'.json?start='+start_date+'&interval='+interval+'?key='+key, function(data) {
        var xively_datapoints = data.datapoints;
        var chartdata = [];
        // convert data format from xively to highcharts
        for (i = 0; i < xively_datapoints.length; i++) {
            chartdata.push([
                Date.parse(xively_datapoints[i].at),
                parseFloat(xively_datapoints[i].value)
            ]);
        }

		// create the chart using highcharts line diagram
		jQuery('#chart1').highcharts('StockChart', {
			rangeSelector : { selected : 1 },
			 exporting: {
                    chartOptions:{
	                   yAxis: { labels: { style: { color: '#000', fontSize: '14px'} } }
		            }
             },
			series : [{
				name : channel,
				data : chartdata,
				tooltip: { valueDecimals: 2 }
			}]
		});
	});
});
</script>

Liniendiagramm 2

 

<script src="http//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://code.highcharts.com/stock/highstock.js"></script>

<div id="chart2" style="height: 300px;"></div>

<script>
jQuery(function() {
    feedid = '******';
    key = '*****';
    channel = 'Air_Temperature';
    interval = 900;
    days = 7;

    start_date = new Date();
    start_date.setHours(start_date.getHours() - 24*days); 

    // load data from xively feed
    jQuery.getJSON('http://api.xively.com/v2/feeds/'+feedid+'/datastreams/'+channel+'.json?start='+start_date+'&interval='+interval+'?key='+key, function(data) {
		var xively_datapoints = data.datapoints;
		var chartdata = [];
		// convert data format from xively to highcharts
		for (i = 0; i < xively_datapoints.length; i++) {
			chartdata.push([
				Date.parse(xively_datapoints[i].at),
				parseFloat(xively_datapoints[i].value)
			]);
		}
			// create the chart using highcharts line diagram
		jQuery('#chart2').highcharts({
			title: {
				text: 'Aktuelle Temperatur',
				x: -20
			},
			subtitle: {
				text: 'Quelle: Xively.com',
				x: -20
			},
                        xAxis: {
                          type: 'datetime',
                        },
			yAxis: {
				title: {
						text: 'Temperatur (C)',
				},
				plotLines: [{
						value: 0,
						width: 1,
						color: '#808080',
				}]
			},
			tooltip: {
				valueSuffix: 'C',
			},
			series: [{
				name: channel,
				data: chartdata,
				tooltip: { valueDecimals: 2 },
			}],
		});

	});
});