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
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
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/ (http://www.emsystech.de/raspi-sht21/)
Verstehe ich richtig, dass du FHEM gar nicht auf dem Raspi installiert hast?
Wenn nein, dann installier das und nutze FHEM2FHEM...
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
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.
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.
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 (https://metacpan.org/pod/Device::SMBus) oder http://search.cpan.org/~shantanu/Device-SMBus-1.06/lib/Device/SMBus.pm (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.
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
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
... 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
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?
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
Hier ist die erste Version eines Moduls für den SHT21 Klick (http://http://forum.fhem.de/index.php/topic,19797.msg152556.html#msg152556)
Zitat von: klausw am 25 März 2014, 11:21:30
Hier ist die erste Version eines Moduls für den SHT21 Klick (http://forum.fhem.de/index.php/topic,19797.msg152556.html#msg152556)
--- link repariert ---
oder hier (https://github.com/ntruchsess/fhem-mirror/raw/I2C/fhem/FHEM/52_I2C_SHT21.pm) 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
Zitat von: Mitch am 01 März 2014, 00:34:56
nachdem ich das ganze mit dem Modul von Klaus nicht hinbekomme ...
Auch mein Versuch ist gescheitert. Ich bin strikt nach der commandref (http://fhem.de/commandref_DE.html#I2C_SHT21) vorgegangen. RPII2C und I2C_SHT21 sind geladen und definiert. Die Abfrage des Sensors mit
get I2C read 40
liefert jedes Mal
received : 0 | transmission: Ok
BMP180 und TSL2561 funktionieren ohne Beanstandung.
Hat jemand den SHT21 Feuchtesensor erfolgreich eingebunden?
Zitat von: locutus am 07 Dezember 2014, 20:44:49
Auch mein Versuch ist gescheitert. Ich bin strikt nach der commandref (http://fhem.de/commandref_DE.html#I2C_SHT21) vorgegangen. RPII2C und I2C_SHT21 sind geladen und definiert. Die Abfrage des Sensors mit
get I2C read 40
liefert jedes Mal
received : 0 | transmission: Ok
BMP180 und TSL2561 funktionieren ohne Beanstandung.
Hat jemand den SHT21 Feuchtesensor erfolgreich eingebunden?
mach mal nur:
define SHT21 I2C_SHT21
ohne die Adresse (dann wird automatisch die 0x40 genommen)
Die commandref sollte ich noch anpassen, 0x40 oder 64 müsste auch als I2C Adresse im define gehen.
define SHT21 I2C_SHT21
Danke, das war es gewesen. Aber warum eigentlich 64? Wenn ich i2cdetect -y 1 ausführe, erhalte ich 40.
Zitat von: locutus am 08 Dezember 2014, 00:30:16
define SHT21 I2C_SHT21
Danke, das war es gewesen. Aber warum eigentlich 64? Wenn ich i2cdetect -y 1 ausführe, erhalte ich 40.
Du erhältst 0x40 und das ist im Dezimalsystem 64.
Perl nimmt bei einer Zahl ohne Präambel immer an, das es eine Dezimalzahl ist. Soll es eine Hexadezimale Zahl sein muss ein 0x davor. Oder man wertet es im Modul anders aus.
Wie gesagt, ist in der commandref nicht gut beschrieben.
Guten Abend,
auch wenn dieses Thema bereits ein paar Tage älter ist, möchte ich an dieser Stelle klausw für seine Antwort aus dem vorstehenden Beitrag danken. Dieser hat auch mir geholfen, erste Startschwierigkeiten zu überwinden.
Kann man die commandref nicht evtl. bearbeiten, um dies etwas genauer zu beschreiben? Wo könnte man dieses Anliegen adressieren?
Viele Grüße
Tronde
Zitat von: Tronde am 08 November 2018, 21:07:10
Kann man die commandref nicht evtl. bearbeiten, um dies etwas genauer zu beschreiben? Wo könnte man dieses Anliegen adressieren?
man beudeuted im Zweifelsfall ich ::)
Ist geändert...