SHT21 am RasPi in Betrieb, wie auslesen

Begonnen von Mitch, 27 Februar 2014, 22:18:13

Vorheriges Thema - Nächstes Thema

Mitch

Hallo Zusammen,

hat jemand zufällig einen SHT21 am Raspi in Betrieb?

Habe mir einen fertigen Sensor gekauft und angeschlossen.
I2C aktiviert und kann die Werte mit einem Script des Herstellers auf dem Raspi darstellen.

Die Frage ist nun, wie bekomme ich die Werte in FHEM?


Sent from my iPhone using Tapatalk 2

Gruss
Markus
FHEM im Proxmox Container

daduke

Hallo Markus,

nicht am Rapsi, aber ich habe einen SHT21 in Betrieb. Ich habe dazu einen Graph definiert:

define SHT21 dummy
attr SHT21 room hidden

define Filelog_SHT21 FileLog ./log/sht21_%Y.log SHT21
attr Filelog_SHT21 logtype foo:Pressure/Humidity/Temperature,text

define sht_temperature SVG Filelog_SHT21:sht21_temperature:CURRENT
attr sht_temperature label "Temperature: $data{currval2}C - Humidity: $data{currval1}%"
attr sht_temperature room Wohnzimmer

define sht_pressure SVG Filelog_SHT21:sht21_pressure:CURRENT
attr sht_pressure label "Barometric pressure: Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr sht_pressure room Wohnzimmer

define d_SHT21 at +*00:10:00 "(./daduke/sht21_log)"


und in der letzten Zeile ein at, das alle 10 min die Werte einliest, mittels des Scripts

#!/bin/bash

R=$RANDOM
/bin/echo -n "`date '+%Y-%m-%d_%H:%M:%S SHT21 '` " > ./log/temp$R
/var/www/sht21.pl | awk -F',' '{print "P: " $3 "  H: " $2 "  T: " $1}' >> ./log/temp$R
cat ./log/temp$R >> ./log/sht21_`date +%Y`.log
rm ./log/temp$R


das sht21.pl gibt lediglich die Werte aus (ich mache das über 2 Scripts, da ich sht21.pl auch anderweitig benutze):

#!/usr/bin/perl -w

use strict;
use Math::Round qw(nearest);

open T, "</sys/devices/pci0000:00/0000:00:14.0/i2c-1/1-0040/temp1_input";
open H, "</sys/devices/pci0000:00/0000:00:14.0/i2c-1/1-0040/humidity1_input";
open P, "</sys/devices/pci0000\:00/0000\:00\:0f.0/cs5535-smb/i2c-0/0-0077/pressure0_input";

my $temp = <T>;
my $humidity = <H>;
#my $pressure = <P>;
my $pressure = 0;

close T;
close H;
close P;

chomp $temp;
chomp $humidity;
chomp $pressure;

$temp =~ s/(\d+)(\d{3})/$1.$2/;
$humidity =~ s/(\d+)(\d{3})/$1.$2/;
$pressure =~ s/(\d+)(\d{2})/$1.$2/;

$temp = nearest(.1, $temp);
$humidity = nearest(.1, $humidity);
$pressure = nearest(1, $pressure);

open S, "</var/www/state.bits";
my $state = <S>;
close S;
my $bit = ($state & (1<<3));

print "$temp,$humidity,$pressure,$bit";


HTH,
-Christian
fhem auf pcengines apu, Philips Hue, MAX!, div. HomeMatic, Spark Core, panstamp, div. eigene Hardware

Mitch

Danke Christian, muss ich mich mal reinarbeiten.

Der Script für mein SHT21 ist allerdings kein Perl, sondern Shellscript und erzeugt eine CSV Datei:
#!/bin/sh

LogInterval=600

while true
do
TimeString=$(date +"%d.%m.%Y %H:%M:%S")
Timestamp=$(date +%s)
TimeOffset=$(date -d '1970-01-01 0 sec' +%s)

Timestamp=$(($Timestamp - TimeOffset))

if [ $(($Timestamp % 5)) -eq 0 ]
then
Sht21Data=$(./sht21 S)
echo "$TimeString\t$Timestamp\t$Sht21Data"

if [ $(($Timestamp % $LogInterval)) -eq 0 ]
then
echo "$TimeString\t$Timestamp\t$Sht21Data" >> sht21-data.csv

#./sht21 C > sht21-cosm.txt
#./function-cosm-push.sh
#./function-ftp-upload.sh
fi
fi
sleep 1
done


Ich bin noch etwas unbedarft, deswegen bin ich mir nicht sicher, wie ich die Daten aus dem CSV nach FHEM bekomme.

Hier auch mal der Link zum Hersteller des Sensor: http://www.emsystech.de/raspi-sht21/
FHEM im Proxmox Container

nabbl

Verstehe ich richtig, dass du FHEM gar nicht auf dem Raspi installiert hast?

Wenn nein, dann installier das und nutze FHEM2FHEM...

Mitch

#4
Natürlich habe ich FHEM auf dem RasPi (siehe Signatur)  ;D

Die Frage ist nur, wie bekomme ich die Daten vom RasPi in FHEM, da habe ich (noch) keine Ahnung.

Das kleine Programm und der Script lesegen eine Datei an, die so aussieht:
14.09.2012 12:46:30     1347626790      16.2    53
14.09.2012 12:46:40     1347626800      16.3    54
14.09.2012 12:46:50     1347626810      16.3    54


Jetz müsste ich quasi diese Datei in FHEM einlesen und darstellen.
Der Aufbau ist Datum-Uhrzeit-Timestamp-Temperatur-Luftfeuchte
FHEM im Proxmox Container

klausw

Du kannst den Sensor doch auch direkt mit FHEM nutzen:

http://forum.fhem.de/index.php/topic,20452.0.html

Die Feuchtewerte müssen sicher berechnet werden...dazu könnte man auch ein Modul schreiben.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Mitch

Danke, hatte ich auch vorhin gefunden und war mir nicht sicher, ob das bei mir gehen würde.

Allerdings scheitert es im Monet an der Installation der  Device::SMBus Bibliothek. Dauaert ewig und lässt dann den Raspi abstützen.
FHEM im Proxmox Container

klausw

#7
Zitat von: Mitch am 28 Februar 2014, 16:48:25
Allerdings scheitert es im Monet an der Installation der  Device::SMBus Bibliothek. Dauaert ewig und lässt dann den Raspi abstützen.

Das ist leider wahr. Es ist aber scheinbar nicht die Device::SMBus Bibliothek die so lange dauert, sondern das CPAN update was vorher läuft.
Ich hatte es bei mir über Nacht laufen lassen. Vermutlich ist es nicht abgestürzt sondern hat nur irgendwas ewig lang compiliert.

Du kannst Device::SMBus auch manuell installieren https://metacpan.org/pod/Device::SMBus oder http://search.cpan.org/~shantanu/Device-SMBus-1.06/lib/Device/SMBus.pm allerdings musst Du dann auch die Abhängigkeiten alle händisch installieren.

Device::SMBus hat meiner Meinung nach einige Vorteile, da es zum einen nicht Raspberry spezifisch ist und auch keine Änderungen über UDEV benötigt.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Mitch

Hi Christian,

nachdem ich das ganze mit dem Modul von Klaus nicht hinbekomme, habe ich mir noch mal deine Lösung genauer angeschaut.

Ich habe einen kleinen Script geschrieben, der mir einen Log mit folgendem Inhalt erstellt:
01.03.2014 00:25:00 23.0 29
01.03.2014 00:30:00 23.0 29


Jetzt habe ich deinen Code "geklaut", um den Log einzulesen:
define Filelog_SHT21 FileLog ./log/sht21_%Y.log SHT21
attr Filelog_SHT21 logtype foo:Temperature Humidity,text


Das passt alles soweit.

Aber irgendwie bekomme ich den Plot dazu nicht hin.

Ausserdem hätte ich gerne noch eine Ausgabe in FHEM ala:
T: 23.2 H: 26.7
FHEM im Proxmox Container

daduke

Hallo Markus,

mangelt es am gplot-File?


#
# Display the measured temp and the humidity.
# FileLog definition:
# define <filelogname> FileLog /var/log/fhem/hmsname-%Y.log <hmsname>:T:.*
#
# Logfile record example:
# 2008-07-24_02:20:57 UGHygro T: 17.2  H: 77.6  Bat: ok

# Attribute 'small' is useful for gnuplot/-scroll only,
# if plotsize is less than 800,400
#set terminal png transparent small size <SIZE> crop

set terminal png transparent truecolor rounded medium size <SIZE> enhanced

set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set ytics nomirror
set y2tics
#set ytics
set title '<L1>'
set grid xtics y2tics

set y2label "Temperature in C"
set ylabel "Humidity (%)"

#FileLog 6:H\x3a:0:
#FileLog 8:T\x3a:0:

plot \
  "< awk '!/SHT21  201/ {print $1, $6}' <IN>" using 1:2 ls l2fill axes x1y1 title 'Humidity' with lines,\
  "< awk '!/SHT21  201/ {print $1, $8}' <IN>" using 1:2 ls l0 axes x1y2 title 'Temperature' with lines


cheers,
-Christian
fhem auf pcengines apu, Philips Hue, MAX!, div. HomeMatic, Spark Core, panstamp, div. eigene Hardware

daduke

... das passt allerdings so nur auf mein Logfile-Format:


2014-01-01_07:17:38 SHT21  P: 0  H: 44.1  T: 16.1
2014-01-01_07:27:37 SHT21  P: 0  H: 44.2  T: 16.1
2014-01-01_07:37:37 SHT21  P: 0  H: 44.2  T: 16.1
2014-01-01_07:47:37 SHT21  P: 0  H: 44.3  T: 16.1
2014-01-01_07:57:37 SHT21  P: 0  H: 44.2  T: 16.1
2014-01-01_08:07:37 SHT21  P: 0  H: 44.2  T: 16.1
2014-01-01_08:17:37 SHT21  P: 0  H: 44.3  T: 16.1
2014-01-01_08:27:37 SHT21  P: 0  H: 44.3  T: 16.1
2014-01-01_08:37:37 SHT21  P: 0  H: 44.4  T: 16.1
2014-01-01_08:47:37 SHT21  P: 0  H: 44.5  T: 16.1
2014-01-01_08:57:37 SHT21  P: 0  H: 44.6  T: 16.1
2014-01-01_09:07:37 SHT21  P: 0  H: 44.4  T: 16.1


-Christian
fhem auf pcengines apu, Philips Hue, MAX!, div. HomeMatic, Spark Core, panstamp, div. eigene Hardware

Mitch

Hi Christian,

danke und nein, Plotfile hatte ich schon

# Created by FHEM/98_SVG.pm, 2014-03-01 19:18:04
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics nomirror
set y2tics
set grid y2tics
set ylabel "Humidity (%)"
set y2label "Temperature in C"

#FileLog 6:H\x3a:0:
#FileLog 4:T\x3a:0:

plot "<IN>" using 1:2 axes x1y1 title 'Humidity' ls l2fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Temperature' ls l0 lw 1 with lines


Hab jetzt auch nochmal den Logfile geändert

2014-03-01_19:00:00 SHT21 T: 23.4 H: 31
2014-03-01_19:15:00 SHT21 T: 23.5 H: 32
2014-03-01_19:20:00 SHT21 T: 23.5 H: 32


Problem ist, dass der Plot leer bleibt?
FHEM im Proxmox Container

daduke

Hallo Markus,

ist wirklich schon ne Weile her, dass ich meines gebastelt habe, aber was auffällt ist der Unterschied in der plot-Zeile:


plot "<IN>" using 1:2 axes x1y1 title 'Humidity' ls l2fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Temperature' ls l0 lw 1 with lines

vs.

plot \
  "< awk '!/SHT21  201/ {print $1, $6}' <IN>" using 1:2 ls l2fill axes x1y1 title 'Humidity' with lines,\
  "< awk '!/SHT21  201/ {print $1, $8}' <IN>" using 1:2 ls l0 axes x1y2 title 'Temperature' with lines


woher weiss er bei Deiner Variante, welche Spalten aus dem log er plotten soll?

cheers,
-Christian
fhem auf pcengines apu, Philips Hue, MAX!, div. HomeMatic, Spark Core, panstamp, div. eigene Hardware

klausw

Hier ist die erste Version eines Moduls für den SHT21 Klick
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

ntruchsess

#14
Zitat von: klausw am 25 März 2014, 11:21:30
Hier ist die erste Version eines Moduls für den SHT21 Klick

--- link repariert ---

oder hier direkt runterladen (der Link in o.g. Thread zeigt grade noch auf den falschen Branch)

edit: 52_I2C_SHT21.pm ist mittlerweile in den SVN trunk committed und per update installierbar
while (!asleep()) {sheep++};