Klimalogg mit HTTPD bei Minusgraden

Begonnen von privat58, 26 März 2015, 07:52:49

Vorheriges Thema - Nächstes Thema

CoolTux

Warum machst Du daraus nicht ein eigenes Modl?
Der Code wäre dafür so gut wie fertig. Nur ein paar Anpassungen.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

privat58

Hat mir doch keine Ruhe gelassen. Nach dem fhem abgestürzt war habe ich erste einmal
apt-get install libdbi-perl
apt-get install libdbd-sqlite3-perl

nachinstalliert. Nun funktioniert es.
Batterie zeigt 0 wenn voll, 1 bei leerer Batterie.

Lion

Zitat von: CoolTux am 29 März 2016, 21:00:52
Warum machst Du daraus nicht ein eigenes Modl?
Wenn Bedarf besteht gerne ...

Zitat von: privat58 am 29 März 2016, 21:30:10
Hat mir doch keine Ruhe gelassen. Nach dem fhem abgestürzt war habe ich erste einmal
apt-get install libdbi-perl
apt-get install libdbd-sqlite3-perl

nachinstalliert. Nun funktioniert es.
Batterie zeigt 0 wenn voll, 1 bei leerer Batterie.
Dann nutzt du sicher sqlite dblog bisher noch nicht.

Wenn das mit den Batterien so klappt kann man sich ja vorher kümmern.
Evtl. hau ich in den State irgendwas rein.

privat58

Bedarf besteht sicher, da ich immer mal wieder Anfragen hatte.
Luc hat in der Datenbank auch den Empfang zum USB-Empfänger mit drinnen (rxCheckPercent), das könte man als state eventuell auswerten.
Leider hatte ich am Anfang und auch zwischendurch Empfangsprobleme, das zwar ein guter Empfang angezeigt wird, dieser aber nicht mehr da war. Ich habe eine ganze Weile gesucht, bis ich einen Platz im Keller gefunden hatte ( es sind knapp 3000l Pufferspeicher und viele Heizungsrohre dazwischen)
Wenn man dort mit einem Zeitlimit arbeiten könnte, ware das genial für die Kontrolle der Verbindung. Bisher muss ich immer auf das Display schauen, ob USB angezeigt wird. Leider weiß ich nicht, ob man dies so umsetzen kann, das wenn xxx Sekunden kein neuen Daten in die Datenbank geschrieben werden etwas ins state geschrieben wird.

Lion

Ja da werde ich etwas einbauen. Ich denke ich werde den Timestamp in fhem parken und dann die Abweichung einbauen. Im syslog steht auch das der empfang weg ist und man die usb taste drücken möge. Mal sehen ob ich da ran komme. Ich hatte heute morgen in allen Zimmern angeblich 0 Grad und die Thresholds haben alle Stellantriebe aktiviert, so soll das nicht sein.

Lion

Lion

V3 mit setzen von rxCheckPercent in Channel 0 und hochzählen von failures pro Channel, da bei mir gerne mal der Außensensor alleine spinnt. failures * pollinginterval = Dauer der Funktrennung.

Viel Spaß

Lion

##############################################
#
# $Id 99_KLW.pm 2016-03-30 lion $
#
##############################################

package main;

use strict;
use warnings;
use POSIX;
use DBI;

use vars qw{%attr %defs};

sub KLW_Initialize($$) {
my ($hash) = @_;

$hash->{DefFn} = "KLW_Define";
$hash->{UndefFn} = "KLW_Undef";
$hash->{GetFn} = "KLW_Get";
$hash->{AttrList} = "channel:0,1,2,3,4,5,6,7,8 pollingInterval ".$readingFnAttributes;
}

sub KLW_Define($$) {
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
return "syntax: define <name> KLW <id>|KLIMALOGGPRO" if (int(@a) != 3);
$hash->{NAME} = $a[0];
$hash->{TYPE} = 'KLW';

$hash->{STATE} = "Initialized";
$hash->{fhem}{interfaces} = "temperature";
$hash->{fhem}{interfaces} = "humidity";
$hash->{fhem}{interfaces} = "dewpoint";
$hash->{fhem}{interfaces} = "batteryStatus";
KLW_DeviceUpdateLoop($hash);
return;
}

sub KLW_Get($) {
my ($hash) = @_;
my $driver   = "SQLite";
my $database = "/opt/fhem/weewx/weewx.sdb";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr;

my $channel = $attr{$hash->{NAME}}{channel} || 0;

my $stmt = qq(select temp$channel,humidity$channel,dewpoint$channel,batteryStatus$channel,rxCheckPercent
      from archive where
      datetime=(select value from archive_day__metadata where name='lastUpdate') and
      temp$channel is not null;);

my $sth = $dbh->prepare( $stmt );

my $rv = $sth->execute() or die $DBI::errstr;

my $go = 0;

while(my @row = $sth->fetchrow_array())
{
$go = 1;
readingsBeginUpdate($hash);
readingsBulkUpdate($hash,"state","T: ".sprintf('%.1f', $row[0]));
readingsBulkUpdate($hash,"temperature",sprintf('%.2f', $row[0]));
readingsBulkUpdate($hash,"humidity",sprintf('%i', $row[1]));
readingsBulkUpdate($hash,"dewpoint",sprintf('%.2f', $row[2]));
readingsBulkUpdate($hash,"batteryStatus",sprintf('%i', $row[3]));
                if ($channel eq "0") {readingsBulkUpdate($hash,"rxCheckPercent",sprintf('%.1f', $row[4]));}
readingsBulkUpdate($hash,"failures",0);
readingsEndUpdate($hash,1);
}
if ($go==0) { readingsSingleUpdate($hash,'failures',ReadingsVal($hash->{NAME},"failures",0)+1,1); }

$dbh->disconnect();
return;
}

sub KLW_DeviceUpdateLoop($) {
my ($hash) = @_;
my $pollingInterval = $attr{$hash->{NAME}}{pollingInterval} || 300;
KLW_Get($hash);
InternalTimer(gettimeofday()+$pollingInterval, "KLW_DeviceUpdateLoop", $hash, 0);
return;
}

sub KLW_Undef($) {
my ($hash) = @_;
RemoveInternalTimer($hash);
return;
}

1;



privat58

Habe es gerade eingespielt, danke für den "Empfang" einfügen. Ich melde mich zurück, falls etwas nicht klappt. Dauert aber, bis ich alle Sensoren umstelle. Fehlt im Moment etwas an Zeit.

privat58

Konnte es nicht lassen. Während der Pelletsbrenner Probe lief habe ich mal einen "Stationsausfall" simuliert. Brauche meinen USB-Empfänger nur 50cm zur Seite hängen. "failures" wurden bis 12 hochgezählt, danach habe ich wieder alles zurück gehangen und die nächsten Readings kamen wieder sauber rein.
Muss schon sagen, tolle Arbeit. Danke für Deine Mühe.
Was mir noch aufgefallen ist, es fehlen die min/max Temperaturen. Diese hatte ich bei mir mit genutzt und auf dem Flurplan angezeigt. Luc hatte diese für weewx genutzt und ich konnte diese aus der fhem.txt auslesen. Aber dies kann man wahrscheinlich am besten mit dem statistics modul machen. Was anderes mir erst einmal nicht aufgefallen.

Lion

Die Werte in die Readings zu packen sollte machbar sein. Was mich gerade ein bisschen stört ist das ich die Luftfeuchtigkeit nicht einfach so sehe. Ich hatte bisher ein tolles Programm welches grün , gelb oder rot wurde. So sah man von weitem wo gelüftet werden muss. Ich arbeite mich gerade in die Tablet-UI ein, mal sehen wie einfach ich da die Readings reinbekomme, falls das in clonedummy, notifyalarm oder so ausartet, würde ich mir überlegen wie das Modul die dann nötigen Teile per autocreate anlegen kann.

@all: Kennt jemand ein Ampelmodul was sich da nutzen ließe? So ähnlich wie THRESHOLD. Nur eben 4 Stufen.  0-40% schwarz, 40-60% grün, 60-65% gelb, >65% rot. Es gibt noch weitere Faktoren die die Schwellwerte beeinflussen, das würde jetzt aber zu weit führen.

Wenn du die fhem.txt irgendwann nicht mehr brauchst, solltest du dir überlegen die reportservices in der engine-section der weewx.conf mit # auszukommentieren.
An die rest-services habe ich mich noch nicht rangetraut, aber da ist sicher auch einiges hinfällig.

Lion

privat58

Ich habe mal statistics eingerichtet. Sollte eigentlich reichen. Kann ja dann jeder machen wie er möchte.
Im Floorplan arbeite ich mit readingsGroup und valueStyle oder valueIcon. Hat für meine Zwecke bisher immer gereicht. Gibt bestimmt auch etwas Eleganteres, der Floorplan reicht aber schon für mich aus, was den Schwierigkeitsgrad angeht.
Wenn ich komplett umgestellt habe, werde ich nur den fhem-Teil rausnehmen und den Rest von weewx nicht anfassen.

privat58

Habe gerade umgestellt auf das Modul. Min-Max-Temperaturen habe ich so eingestellt.
define Klimalogg0 KLW KLIMALOGGPRO
attr Klimalogg0 channel 0
define Klimalogg0_Statistik statistics Klimalogg0
attr Klimalogg0_Statistik singularReadings Klimalogg0:temperature:(Min|Max):(Day|Month|Year)

Um den Batteriestand und den Empfang im Floorplan zu "signalieren" nutze ich readingsGroup.
define Aussentemp1 readingsGroup Klimalogg1:temperature
attr Aussentemp1 fp_Energie 10,910
attr Aussentemp1 fp_Heizung 10,910
attr Aussentemp1 fp_Wetter 10,910
attr Aussentemp1 group z_Anzeige
attr Aussentemp1 mapping { 'temperature' => '' }
attr Aussentemp1 noheading 1
attr Aussentemp1 nolinks 1
attr Aussentemp1 notime 1
attr Aussentemp1 style style="font-size:80px"
attr Aussentemp1 valueFormat %.1f&degC
attr Aussentemp1 valueStyle { temperature => '{ReadingsVal($DEVICE,"batteryStatus","0")?"style=\"color:red\"":($DEVICE,"failures","0")?"style=\"color:green\"":"style=\"color:black\""}' }

Lion

Die readingsgroup's mit den Formatieren helfen echt gut. Hab fast den alten Stand der Informationen mit fhem nun nachgebaut.

Lion.

bull1t

Hallo zusammen,
erlösend das es für meinen KlimaLoggPro doch eine Möglichkeit gibt das Gerät in FHEM einzubinden.
Danke hiermit für eure Beiträge dazu.
Habe soweit ich denke alles ordnungsgemäß installiert bekomme die Basisstation aber nicht verbunden.
Fhem und Weewx laufen auf einem Raspi mit Wheezy Installation.
Habe weewx gestoppt, USB Dongle am Pi eingesteckt,USB Taste am Klimalogg gedrückt und weewx gestartet.
Aber es passiert nichts.
Bekomme mittels tail -n50 /var/log/syslog folgende Antwort was den USB Stick angeht.

Apr  4 11:46:18 raspberrypi weewx[3069]: fousb: Cannot find USB device with Vend                          or=0x1941 ProdID=0x8021 Device=None
Apr  4 11:46:18 raspberrypi weewx[3069]: engine: Unable to load driver: Unable t                          o find USB device

Für mich ist Linux bisher ein Böhmisches Dorf und ich hab Mühe alles zu verstehen.
Muss irgendwo ggf. noch etwas installiert oder der EMpfänger explizit eingetragen werden.
Wäre nett wenn mir jemand helfen könnte. Ich seh den Fehler nämlich nicht.
mfg und schönen Tag bull1t

privat58

Es reicht leider nicht nur weewx zu installieren. Auf github kannst Du den Treiber runterladen und dort ist auch erklärt, wie dieser installiert wird.
Lion hat dann den Weg zur Datenbank gemacht mit seinem Modul.
https://github.com/matthewwall/weewx-klimalogg
Die weewx.cfg liegt unter /etc/weewx. In der weewx.cfg kannst Du dann den Weg zur Datenbank anlegen. So sieht es bei mir aus:
[DatabaseTypes]
   
    # Defaults for SQLite databases
    [[SQLite]]
        driver = weedb.sqlite
        # Directory in which the database files are located
        SQLITE_ROOT = /opt/fhem/weewx
#/var/lib/weewx
   
    # Defaults for MySQL databases
    [[MySQL]]
        driver = weedb.mysql
        # The host where the database is located
        host = localhost
        # The user name for logging in to the host
        user = weewx
        # The password for the user name
        password = weewx

Du musst auch Deinen Standort in der weewx.cfg angeben.
    # Latitude and longitude in decimal degrees
    latitude = xxxxxx
    longitude = xxxxxx


Lion

#29
Punkt 3 der Anleitung https://github.com/matthewwall/weewx-klimalogg ist nicht ganz richtig

Wenn man die master.zip heruntergeladen hat. Hab ich sie mit wee_extension --install master.zip installiert.

Viel wichtiger ist aber vorher noch die richtige Installation von weewx. http://www.weewx.com/docs/debian.htm Nachfolgend alle Befehle welche ich final benutzt habe:


[cd Downloads/
mkdir weewx
cd weewx/
wget http://weewx.com/downloads/weewx_3.5.0-1_all.deb
sudo dpkg -i weewx_3.5.0-1_all.deb
sudo apt-get -fy install

wget https://github.com/matthewwall/weewx-klimalogg/archive/master.zip
sudo wee_extension --install master.zip

sudo /etc/init.d/weewx stop
#weewx.conf austauschen
sudo /etc/init.d/weewx start


Dann habe ich meine weewx.conf aus meiner VM (da hab ich das vorher ausprobiert) mit winscp rüberkopiert. bissel mit 'chmod 0666 weewx.conf' die Berechtigungen angepasst.

Die weewx.conf habe ich mir vorher zusammengestückelt (notepadd++ compare modul), da es mehrere Optionen gibt die für den Klimalogg geändert werden müssen. Das Datenmodel wird wegen den 9 Kanälen gravierend geändert.

Wenn du die Anleitungen exakt befolgst könntest du auch einfach meine weewx.conf benutzen, falls du die haben willst, Bescheid geben dann schicke ich sie dir per pm. Ich weiß leider nicht mehr wie und woher ich alle Infos im Detail habe, ich habe viel aus den Google Mail Archiven von Luc und Matthew und habe sogar mit Luc mich direkt per Email unterhalten können.

Wenn ich mich aufraffe den fhem founder zwecks Entwicklerzugriff anzusprechen, wird es die komplette Anleitung in der Modulhilfe geben, dabei dürft ihr mir dann gerne mithelfen. Leider müsst ihr dann eure defines minimal ändern, da es dann anstatt klw irgendwie anders heißen wird, Momentan tendiere ich zu WEEWX2FHEM oder nur KLWEEWX. Da ich plane wenn ich mal ganz viel Zeit habe die Anbindung direkt zu gestalten dann könnte es KLP heißen. Da ich aber mit meinen Recherchen noch nicht durch bin, da diese Wetterstation auch der Lacrosse ähneln soll welche schon existiert, hätte ich was als Basis. Ich denke Luc hat auch Lacrosse als Basis für seinen Weewxtreiber genommen.

Lion[/code]