Lüftungsempfehlung per Pushbullet

Begonnen von Fhemschorsch, 25 Oktober 2015, 21:36:09

Vorheriges Thema - Nächstes Thema

Fhemschorsch

Guten Abend zusammen,

seit ca 6 Wochen bin ich stolzer FHEM-User und habe bereits die ersten Schritte vollzogen. Der Server werkelt zuverlässig in meinem Raspberry Pi, per HM-LAN-CFG sind bereits ein paar Homematic-Komponenten aktiv und vereinfachen unser Leben.

Jedoch habe ich so meine Verständnisschwierigkeiten, was die Programmierung angeht:

Wir haben einen Keller, den wir gerne etwas optimierter Belüften wollen. Dazu gibt es bereits einen HomeMatic Temperatur-/Luftfeuchtesensor (HM-WDS-IT), der auch schon eingebunden ist. (Bei mir: HM_30E392)

Zusätzlich habe ich mir im ersten Schritt über das Modul "weather" die aktuelle Wetterinformation geholt. (bei mir: MeinWetter)

Bei beiden habe ich den Taupunkt hinzugefügt:
define dewpointToAllDeviceReadings dewpoint dewpoint .* temperature humidity dewpoint

Ich habe also beide Taupunkte:
HM_30E392:dewpoint
MeinWetter:dewpoint   

Mein Plan ist jetzt:
-Bilden einer neuen Variable, die den Taupunkt des aussen vorherrschenden Wetters von dem innenliegenden Wert abzieht.
-Benachrichtigung auf das Smartphone (derzeit mit Pushbullet), wenn bestimmte Werte über- oder unterschritten werden.

Ist jetzt nicht vielleicht die wissenschaftlichste Methode, aber ich muss mich ja erst einmal in die Materie einfuchsen.

Das mit der Benachrichtigung bekomme ich hin, ich habe das ja bereits für meine Türklingel realisiert:
define Klingel.notify notify Hausklingel:closed set bulletmsg message Türklingel  | Türklingel

Allerdings komme ich beim Bilden der Variable nicht weiter. Muss ich dazu erst ein Attribut innerhalb des HM_30E392 bilden und dann per define einfach die Außen - Innen machen?
Das Einsteigerdokument gab mir keinen Aufschluss darüber und die Beispiele aus dem Netz sind mir (noch) alle zu komplex - daher wäre ich über eine kleine Hilfe sehr sehr dankbar.

Vielen Dank und Gruß!

franky08

Du könntest die beiden dewpoints in Variablen schreiben und dann subtrahieren.

my dewp1 = ReadingsVal("Sensor1","dewpoint1",0);
my dewp2 = ReadingsVal("Sensor2","dewpoint2",0);
my subtrdew = (dewp2 - dewp1);

Das Ganze als sub in die 99_myUtils oder in ein notify oder wie auch immer du das triggern möchtest.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Fhemschorsch

Ok, vielen Dank schon einmal. Ich habe nun nach etwas herumlesen eine 99_myUtils.pm angelegt und die Variablen angelegt:

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
  my $dewpointkeller2 = ReadingsVal("HM_30E392","dewpoint",0);
  my $dewpointwetter = ReadingsVal("MeinWetter","dewpoint",0);
  my $dewdiff = ($dewpointkeller2 - $dewpointwetter);
}


Aber wie zeige ich das jetzt ganz normal in irgend einem Raum an?

franky08

Was willst du anzeigen? Wenn es der Wert aus $dewdiff ist, schreib das in ein Reading. z.B.
sub
myUtils_Initialize($$)
{
  my $dewpointkeller2 = ReadingsVal("HM_30E392","dewpoint",0);
  my $dewpointwetter = ReadingsVal("MeinWetter","dewpoint",0);
  my $dewdiff = ($dewpointkeller2 - $dewpointwetter);
  fhem "set <device,dummy> $dewdiff";

}


Vorher ei dummy anlegen, dort steht dann nach Aufruf der sub dein Differenzwert im state.
Ich würde der sub einen eindeutigen Namen geben. So z.B.:

sub
dewdiff()
{
  my $dewpointkeller2 = ReadingsVal("HM_30E392","dewpoint",0);
  my $dewpointwetter = ReadingsVal("MeinWetter","dewpoint",0);
  my $dewdiff = ($dewpointkeller2 - $dewpointwetter);
  fhem "set dew_dummy $dewdiff";
}


hash brauchst du nicht, da du kein Array verwendest

Komplett sollte das so aussehen:
package main;

use strict;
use warnings;
use POSIX;

sub
myDEWUtils_Initialize($$)
{
  my ($hash) = @_;
}

sub
dewdiff()
{
  my $dewpointkeller2 = ReadingsVal("HM_30E392","dewpoint",0);
  my $dewpointwetter = ReadingsVal("MeinWetter","dewpoint",0);
  my $dewdiff = ($dewpointkeller2 - $dewpointwetter);
  fhem "set dew_dummy $dewdiff";
}

1;


Aufrufen kannst du das z.B. über ein at +*00:15 {dewdiff}

Ruft die Funktion alle 15 min auf.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Bennemannc

Hallo,

geht auch noch anders userreading ...{funktion(wert1,wert2)}. In der sub ($$) und die Übergabewerte den my* Variabelen zuweisen. Den errechneten Wert zurückgeben - dann hast Du an den Gerät ein neues Reading mit der Differenz).
So berechne ich die Windrichtung - statt Grad Ost, OstSüdOst ... und den Windchill.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

franky08

Möglichkeiten gibt es da einige, ich wollte es für einen "Neuling" mit 9 Beiträgen, so einfach wie möglich halten  ;) ;)

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

ZitatMöglichkeiten gibt es da einige, ich wollte es für einen "Neuling" mit 9 Beiträgen, so einfach wie möglich halten  ;) ;)
dann würde ich empfehlen, die commandref zu dewpoint zu lesen, denn das modul dewpoint bietet bereits den fan-modus, um dieses scenario bequem umzusetzen.  :)

ZitatDewpoint calculations. Offers three different ways to use dewpoint:

    dewpoint
    Compute additional event dewpoint from a sensor offering temperature and humidity.
    fan
    Generate a event to turn a fan on if the outside air has less water than the inside.
    alarm
    Generate a mold alarm if a reference temperature is lower that the current dewpoint.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Fhemschorsch


#Lüften Benachrichtigung
define lueften_keller2 dewpoint fan HM_30E392 MeinWetter 10 4
define lueften_keller2_on notify HM_30E392.*fan:.*on set fan_switch on
define lueften_keller2_off notify HM_30E392.*fan:.*off set fan_switch off


Vielen vielen Dank, das klappt schon einmal vorzüglich!

Aber eine Frage habe ich noch: Mit

define Lueften_Keller2.notify notify HM_30E392.fan:on set bulletmsg message Lueften

kommt irgendwie kein Ergebnis. Ich bin mir ziemlich sicher, dass das am Reading liegt.

"HM_30E392" ist der Temperatursensor. Dort gibt es das Reading "fan" und der hat den Zustand "on" oder halt "off"

Muss ich da mit ReadingsVal arbeiten?


franky08

Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Fhemschorsch

wenn ich das richtig verstanden habe, gibt mir ein:

{Value("HM_30E392")}

aber nur den State zurück, oder?

franky08

#10
Stimmt, nicht zu Ende gelesen. Dann mit ReadingsVal, da dort was nicht numerisches zurück kommt, bei weiteren "verarbeiten" auf den String achten. (eq statt =) usw.
P.S. Hab ich gerade erst gesehen, das notify mit dem Punkt drinn könnte Probleme machen
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Fhemschorsch

Also letztendlich so?:
define Lueftungsmeldung notify ReadingsVal ("HM_30E392","fan","") eq "on") { fhem "set bulletmsg message Lueften | Keller kann gelüftet werden" }

Leider funktioniert das nicht, obwohl das ReadingsVal funktioniert sowie die bulletmsg (jeweils mit geschweiften Klammern im Prompt ausprobiert...)