Anfängerfrage: FHT 48 Stunden-Heizen

Begonnen von WolfHenk, 25 Dezember 2015, 12:35:20

Vorheriges Thema - Nächstes Thema

WolfHenk

Moin allerseits

bin seit mehreren Tagen am Versuchen, allerdings habe ich Verständnisprobleme.
Suche (über mehrere Stunden alles was interessant klang gelesen) war relativ erfolgreich, aber es funzt trotzdem nicht.

Dazu: Ich programmiere beruflich Industrieroboter. Das ist rein zeilenbasiert und sequentiell. Daher fällt mir das mit fhem (noch) recht schwer, insbesondere da in der Industrie doch wesentlich andere Verhältnisse herrschen und ich dadurch natürlich auch wesentlich hardwarenäheres Programmieren gewohnt bin. Dazu fehlen mir PHP/Perl-Kenntnisse

Aber nun zu meinem Szenario:

Ich habe nen fhem auf debian am laufen und auch meine FHT80 und die FHZ1300 am Laufen.
Ich kann die Daten und Zeiten stellen wie gewünscht.

Zum Bad unten (FTH80 heisst hz_badu) möchte ich einen Button "48hHoch" haben.
Dazu habe ich nen Dummy erzeugt
define 48hHoch FS20 1232 1232
attr 48hHoch IODev FHZ_0
attr 48hHoch room EG
define 48hbadu_on  notify 48hHoch:on  set hz_badu mode manual desired-temp 22.5
define 48hbadu_off notify 48hHoch:off set hz_badu mode auto desired-temp 14.5


Folgendes soll der nun tun:
Bei Einschalten des 48hHoch soll ein Timer starten und "set hz_badu mode manual desired-temp 22.5"
Nach Ablauf des Timers (48 Stunden) soll 48hHoch abgeschaltet werden und "set hz_badu mode auto desired-temp 14.5"

Ich benötige dazu ein funktionierendes Beispiel um daraus das Verständnis für die Programmierung in fhem entwickeln zu können und weitere Dinge selbst zu realisieren.
Ist mir klar, dass das entweder extrem kompliziert oder extrem einfach ist, je nach Standpunkt...

Natürlich verspreche ich nicht, weitere Fragen zu unterlassen.

Im Gegenzug kann ich beim Programmieren von FANUC oder KUKA Robotern qualifiziert helfen.

Grüße

WolfHenk

dev0

#1
Wenn Dein Wunschinterval nur 23:59:59 und nicht 48h lang wäre, dann wäre es extremst simple:
define 48hbadu_on  notify 48hHoch:on  set hz_badu mode manual desired-temp 22.5; defmod 48hbadu_ausschalten at +23:59:59 set hz_badu mode off
Dann würde nach 23h 59m 59s hz_badu auf off gesetzt (Falls off der richtige Befehl darür ist)

Wenn Du hier keine bessere Antwort bekommst, dann könntest Du im Bereich "Automatisierung" mal nach einem "at" fragen, dass länger als 24h läuft. Ich glaube, dass rudulfkoenig sein Modul dahingehend erweitert hat, in der command reference habe ich haber gerade keinen Hinweis darauf gefunden.

Edit: statt off wäre in dem Beispiel "mode auto desired-temp 14.5" wahrscheinlich passender.

WolfHenk

ah?

Ich hab mir vorgestellt, mit dem ablaufenden Timer die Variable 48hHoch auf 0 setzen und dadurch den gleichen Ablauf erzeugen, als würde der von Hand ausgeschaltet werden.

Also
define 48hHoch FS20 1232 1232
attr 48hHoch IODev FHZ_0
attr 48hHoch room EG

## erzeugt die Variable 48hHoch (bool on|off)


define 48hbadu_on notify 48hHoch:on  set hz_badu mode manual desired-temp 22.5; defmod 48hbadu_timer at +00:05:00 set 48hHoch off

## Auswerter "on" bemerkt wenn 48hHoch "on" wird, schaltet das Logo auf der Webseite auf "Ein" und setzt Heizung hz_badu auf Manuell 22,5 Grad.
Startet außerdem einen 48h (Test 5 Minuten) Timer, der bei Ablauf einfach 48hHoch wieder auf "off" setzt.
define 48hbadu_off notify 48hHoch:off set hz_badu mode auto desired-temp 14.5
## Auswerter "off" bemerkt wenn 48hHoch "off" wird. Setzt die Heizung auf auto und 14,5 Grad

Habs eben getestet, geht...

Bedanke mich erstmal...

Aber nur 24h? Nuja...
Ich teste einfach mal mit 48h, werden sehn, obs geht...

Sunny

#3
Moin WolfHenk,

vielleicht ist es mit DOIF möglich 48 Std. (172.800 sec) zuschalten.

z.B.: 1 Zeile für Eingabe

define 48hHoch_di DOIF ([48hHoch:state] eq "on"] ## prüft ob der Wert state von 48hHoch on ist\
(set hz_badu mode manual desired-temp 22.5) ## setzt in 0 sec den cmd1_1 und wartet 172800sec\
(set hz_badu mode auto desired-temp 14.5) ## bevor cmd1_2 ausgeführt wird\
DOELSEIF ([48hHoch:state] eq "off"]) ## prüft auf off\
(set hz_badu mode auto desired-temp 14.5) ## wartet  1sec bevor cmd ausgeführt wird\

"##" => Kommentar
"\" => Zeilenumbruch
und noch das Attribut fürs warten

attr 48hHoch_di wait 0,172800:1

und zu Deinem Dummy noch (Ups sehe gerade ist kein Dummy,mit FS20 kenne Ich nicht aus. sorry)

attr 48hHoch setList on off

definieren, damit wird der mögliche state definiert.
Code ist nicht getestet.

Vieleicht hilft Dir dieser Ansatz ja weiter...

Frohes Fhem & viele Grüße
Sunny

FHEM 6.0 (RPi's 1b-4,CeleronM,Odroid C1+)
1-Wire (DS18B20,DS2406) |miniCUL|miniCUL868WLAN|HM|IT(-1500,LR-3500) |FB6591,FB7490,FB7580|DECT200|Powerline546E|520E|openwrt
Anfänger: Linux,FHEM+Perl

WolfHenk

habs erstmal auf 24h stehen lassen. wird ausgetestet...

Andere Frage:

define lowtemp_chk notify .*:measured-temp:.* { if(ReadingsVal($EVENT, 'measured-temp', 99) < 10.0) { \
  { DebianMail('wolfhenk@wolfhenk.de', 'FHEM Frostwarnung', 'Frostwarnung von: '.$NAME.'. Gemessene Temperatur: '.$EVTPART1.' Grad Celsius.')};; \
   Log 3, "$NAME: Frostwarnung $EVENT";; \
  } \
}


Die Routine DebianMail funktioniert korrekt, das ist geprüft.
Aber nachdem ich nun mal nen Raumregler unter 3 Grad hatte (2015-12-25 23:19:28 FHT hz_essz measured-temp: 2.3) bin ich etwas verwirrt, warum es nicht auslöst.

Ich bin sicher, es liegt in ReadingsVal($EVENT, 'measured-temp', 99
Was muss da anders?


Hans Franz

#5
Hallo,
ReadingsVal($NAME, 'measured-temp', 99

Und schau dir mal wegen der 48 Stunden den Parameter <datespec> beim at-Device an. Sollte passen mit deinem Vorhaben.

Gruß
Hans

Sorry:
ReadingsVal($name, 'measured-temp', '99')
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

WolfHenk

ich habs...

define lowtemp_chk notify .*:measured-temp:.* { if(ReadingsVal($NAME, 'measured-temp', 99) < 10.0) { \
  { DebianMail('BEISPIEL@anonym.TLD', 'FHEM Frostwarnung', 'Frostwarnung von: '.$NAME.'. Gemessene Temperatur: '.$EVTPART1.' Grad Celsius.')};; \
   Log 3, "$NAME: Frostwarnung $EVENT";; \
  } \
}


das ReadingsVal muss so aussehen:(ReadingsVal($NAME, 'measured-temp', 99)
wichtig scheint dass um die 99 rum keine  '  stehen.

So sendet er immer, wenn irgendwer eine measured-temp von unter 10 Grad meldet eine Mail...
Gut, das gibt dann schon mal ein paar mehr, aber je nerviger es ist, desto eher reagiert man.

Das "DebianMail" ist eine Abwandlung des Raspberry-Debian-Dingens für meinen Mailserver.
######## DebianMail  Mail auf dem RPi versenden ############
sub
DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $attach = shift;
my $ret = "";
my $sender = "FHEM\@absendeadresse.de";
my $konto = "BEISPIEL\@anonym.TLD";
my $passwrd = "geheimes-M\@ilpasswort"; ##Sonderzeichen mit \vorangestellt ein "\" muss \\
my $provider = "mail.meinmailserver.TLD:25"; ##Port 25 veraltet!. nimm 587 oder (mit SSL) 465
Log 1, "sendEmail RCP: $rcpt";
Log 1, "sendEmail Subject: $subject";
Log 1, "sendEmail Text: $text";
Log 1, "sendEmail Anhang: $attach";;

$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -a '$attach' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=no -o message-charset=utf-8);
$ret =~ s,[\r\n]*,,g;    # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}


Ergebnis: Return-Path: <FHEM@absendeadresse.de>
X-Original-To: BEISPIEL@anonym.TLD
Delivered-To: BEISPIEL@anonym.TLD
Received: from gigant.pfl (pxx.dslam.provider.de [87.111.222.33])
by meinmailserver.de (Postfix) with ESMTPA id 600000000
for <BEISPIEL@anonym.TLD>; Sat, 26 Dec 2015 11:20:27 +0100 (CET)
Message-ID: <190175.475xxxxxx-sendEmail@fhemserver>
From: "FHEM@absendeadresse.de" <FHEM@absendeadresse.de>
To: "BEISPIEL@anonym.TLD" <BEISPIEL@anonym.TLD>
Subject: FHEM Frostwarnung
Date: Sat, 26 Dec 2015 10:20:27 +0000
X-Mailer: sendEmail-1.56
MIME-Version: 1.0
Content-Type: multipart/related; boundary="----MIME delimiter for sendEmail-190175.475xxxxxx"
X-Virus-Scanned: clamav-milter 0.98.7 at meinmailserverhostname
X-Virus-Status: Clean
X-Spam-Flag: NO
X-Spam-Score: -1.0
X-Spam-Status: No score=-1.0 tagged_above=3.0 required=5.0 tests=[]

This is a multi-part message in MIME format. To properly display this message you need a MIME-Version 1.0 compliant Email program.

------MIME delimiter for sendEmail-190175.475xxxxxx
Content-Type: text/plain;
        charset="utf-8"
Content-Transfer-Encoding: 7bit

Frostwarnung von: hz_essz. Gemessene Temperatur: 0.0 Grad Celsius.

------MIME delimiter for sendEmail-190175.475xxxxxx--


getestet mittels Gefrierfach... *G*

dev0

Zitat von: Hans Franz am 25 Dezember 2015, 23:48:02
Und schau dir mal wegen der 48 Stunden den Parameter <datespec> beim at-Device an.
Den Parameter hatte ich gemeint, aber wohl überlesen. Das Einfachste für die 48h dürfte dann die Angabe von 172800 Sekunden sein.

Zitat von: WolfHenk am 26 Dezember 2015, 11:41:48
ich habs...
Schade, dass nicht alle Einsteiger das so schnell auf die Reihe kriegen ;)

WolfHenk

danke für die Blumen...

...nu mach ich mir noch Gedanken, ob ich mit fhem2fhem meinen Kram übers Internet für mich öffne. Bietet sich ja an, wo ich über nen Internetserver mit festen IP-Adressen verfüge...

CoolTux

Du willst eine FHEM Instanz auf nem Internetserver laufen lassen? Wozu wenn ich fragen darf?
Und wenn Du das wirklich machen willst dann nur über VPN zwischen den beiden Instanzen. FHEM2FHEM arbeitet mit telnet. Also unverschlüsselter Verkehr sowohl bei Daten als auch bei der Authentifizierung.

Ich würde es mir überlegen.


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