Projekt Abwesenheit Erkennung (Ping) + Heizung Steuerung

Begonnen von ChrisW, 08 Januar 2013, 08:59:42

Vorheriges Thema - Nächstes Thema

ChrisW

Hallo,

ich suche eine Lösung mit Hilfe meiner Abwesenheitserkennung meine Heizung zu steuern. Ist vielleicht danach auch etwas für das Wiki ;)


Was passieren soll:
Chris oder Tanja oder beide zuhause = Heizung AUTO  ( Einer von beiden zuhause = Heizung AUTO )
Tanja und Chris NICHT Zuhause = Heizung ECO  ( Nur wenn beide OFF = Heizung ECO )

Problem ist das ich nicht jedes mal die Heizung erneut auf AUTO / ECO setzen will.
Also nur dann wieder auf AUTO schalten wenn der vorherige Status OFF gewesen ist.

Oder nur dann auf ECO schalten wenn der vorherige Status ON war.
Somit verhindere ich ein dauerhaftes AUTO / ECO Schalten.

Das schwere ist dabei das Chris und Tanja beachtet werden müssen.

Code zum schalten der Heizung:

define Heizung structure Heizung MAX_Bad MAX_Dach MAX_Kueche
attr Heizung room MAX
attr Heizung webCmd desiredTemperature

Code für die Abwesenheits erkennung:
# Anwesenheit von Christian, Handy

define Anwesenheit_Chris dummy
attr Anwesenheit_Chris loglevel 6
attr Anwesenheit_Chris room Anwesenheit
attr Anwesenheit_Chris setList on off

define Anwesenheit_Chris_FileLog FileLog ./log/Anwesenheit_Chris.log Anwesenheit_Chris
attr Anwesenheit_Chris_FileLog logtype text
attr Anwesenheit_Chris_FileLog room Logfiles

define Job_AnwesendChris at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.50";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Chris ;; set Anwesenheit_Chris on");; \
} \
else { \
fhem("define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off");; \
} \
}

# Anwesenheit von Tanja, Handy

define Anwesenheit_Tanja dummy
attr Anwesenheit_Tanja loglevel 6
attr Anwesenheit_Tanja room Anwesenheit
attr Anwesenheit_Tanja setList on off

define Anwesenheit_Tanja_FileLog FileLog ./log/Anwesenheit_Tanja.log Anwesenheit_Tanja
attr Anwesenheit_Tanja_FileLog logtype text
attr Anwesenheit_Tanja_FileLog room Logfiles

define Job_AnwesendTanja at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.23";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Tanja ;; set Anwesenheit_Tanja on");; \
} \
else { \
fhem("define abwesend_Tanja at +00:05:00 set Anwesenheit_Tanja off");; \
} \
}


So schaut das Log aus :
2013-01-08_07:55:37 Anwesenheit_Chris on
2013-01-08_07:56:38 Anwesenheit_Chris on
2013-01-08_07:57:38 Anwesenheit_Chris on
2013-01-08_08:03:48 Anwesenheit_Chris off
2013-01-08_08:09:47 Anwesenheit_Chris off
2013-01-08_08:15:47 Anwesenheit_Chris off
2013-01-08_08:21:49 Anwesenheit_Chris off
2013-01-08_08:28:01 Anwesenheit_Chris off
2013-01-08_08:33:49 Anwesenheit_Chris off

Raspberry PI3 mit allem möglichen.

Puschel74

Hallo,

ich zwäng mich mal auch da rein ;-)

Mit

fhem("delete abwesend_Chris ;; set Anwesenheit_Chris on") if (Value("Anwesenheit_Chris") eq "off");; \

wird nur noch dann auf on geschaltet wenn du vorher off warst.

Bei Job_AnwesendTanja noch das selbe (nur mit Tanja) und auch dort sollte nur noch on geschaltet werden wenn vorher
off war.

Mit
define Heizung_AutoEco notify Anwesenheit.*:.* {
if (Value("Anwesenheit_Chris") eq "on") || (Value("Anwesenheit_Tanja") eq "on") {
fhem ("set Heizung auto") if (Value("Heizung") eq "off");
}
else {
fhem ("set Heizung eco") if (Value("Heizung") eq "on");
}
}


Ungetestet und ohne Anspruch auf Richtigkeit (Klammern und ich ärger mich grad an einem meiner Codeschnipsel mit dem ||).
Evtl. klappt es bei dir ja besser ;-)
Damit die Prüfung auch zutrifft musst du nur noch dafür sorgen das Heizung auch mal on oder off annehmen kann da das ja auch
abgefragt wird.

Mich wundert nur im Logfile-Auszug das fhem nicht meckert über das delete.
Ich hätte mir im Logfile sowas wie
unable to delete abwesend_Chris, define abwesend_Chris first
erwartet.

Anyway. So solltes du mal aufbauen können.

Grüße

P.S.: Für Fehler bin ich nicht haftbar aber bitte bei Rückfragen evtl. auftretende Fehlermeldungen aus dem Logfile posten ;-)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisW

Hallo,
im Fhem Log hab ich natürlich auch die Fehler ;(

Hab erstmal versuche die Logs zu verkleinern aber leider kommt da trotzdem bei OFF doppelte Einträge:


2013-01-08_09:39:51 Anwesenheit_Chris off
2013-01-08_09:45:52 Anwesenheit_Chris off
2013-01-08_09:51:51 Anwesenheit_Chris off
2013-01-08_09:57:51 Anwesenheit_Chris off
2013-01-08_10:03:52 Anwesenheit_Chris off
2013-01-08_10:09:52 Anwesenheit_Chris off
2013-01-08_10:16:54 Anwesenheit_Chris off
2013-01-08_10:22:55 Anwesenheit_Chris off


efine Job_AnwesendChris at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.50";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Chris ;; set Anwesenheit_Chris on") if (Value("Anwesenheit_Chris") eq "off");; \
} \
else { \
fhem("define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off");; \
} \
}


Muss die Zeile : fhem("define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off");; \ nicht auch mit eq angepasst werde ??
Raspberry PI3 mit allem möglichen.

Puschel74

Kann, muss aber nicht - würde aber auch Sinn machen ;-)

fhem("define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off") if (Value("Anwesenheit_Chris") eq "on");; \

Da laut Logfile alle 6 Minuten der Status auf off geschaltet wird.
1 Minute prüfen ob Handy on + 5 Minuten at

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisW

Danke ist ja doch gar nicht so Kompliziert mit dem EQ :) Jetzt scheint Log sauber zu sein. Somit gehts weiter.

define Heizung_AutoEco notify Anwesenheit.*:.* {
if (Value("Anwesenheit_Chris") eq "on") || (Value("Anwesenheit_Tanja") eq "on") {
fhem ("set Heizung auto") if (Value("Heizung") eq "off");
}
else {
fhem ("set Heizung eco") if (Value("Heizung") eq "on");
}
}

Muss ich da nicht auch eine Zeit per at einfügen ? Weil wann soll dies den ausgeführt werden ?
Diese Prüfung kann von mir aus auch alle 5 Minuten laufen .. das so zimlich egal muss ja nicht sofort Zeitgleich die Heizung runtersetzen ;)
Raspberry PI3 mit allem möglichen.

Puschel74

Der Teil wird ausgeführt sobald
Anwesenheit(irgendwer)(irgendwas)sendet.
Nun wird geprüft ob EINER on ist oder BEIDE nicht on sind und
dementsprechend Auto bzw. Eco gesetzt werden.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisW

ah okay ich verstehe :D

Kann man das auch in nem Log Speichern damit ich es zum Testen paar Tage Kontrollieren kann ?
Könnte das so funktionieren ?

define Heizung_AutoEco notify Anwesenheit.*:.* {
if (Value("Anwesenheit_Chris") eq "on") || (Value("Anwesenheit_Tanja") eq "on") {
fhem ("set Heizung auto") if (Value("Heizung") eq "off");
}
else {
fhem ("set Heizung eco") if (Value("Heizung") eq "on");
}
}
attr Heizung_AutoEco loglevel 6
define Heizung_AutoEco_FileLog FileLog ./log/Heizung_AutoEco.log Heizung_AutoEco
attr Heizung_AutoEco_FileLog logtype text
attr Heizung_AutoEco_FileLog room Logfiles

Raspberry PI3 mit allem möglichen.

ChrisW

Hab das Log noch nicht eingebaut aber gerade folgendes im Log gefunden :
2013.01.08 11:35:45 3: Heizung_AutoEco return value: Unknown command {, try help
2013.01.08 11:36:11 3: Heizung_AutoEco return value: Unknown command {, try help
2013.01.08 11:36:11 3: delete abwesend_Tanja ; set Anwesenheit_Tanja on : Please define abwesend_Tanja first
2013.01.08 11:36:11 3: Please define abwesend_Tanja first
2013.01.08 11:36:11 3: Heizung_AutoEco return value: Unknown command {, try help
Raspberry PI3 mit allem möglichen.

ChrisW

Wieso gibs hier kein edit .. hab \ vergessen überall dahinter zu machen ..
Raspberry PI3 mit allem möglichen.

Puschel74

Logeinträge kannst du mit
Log (3,"Eintrag im Logfile");
erstellen.
Einfach dorthin kopieren wann du den logeintrag sehen willst.
Und Tanja nicht vergessen die prüfung ein zu bauen - sonst wird das Log
zugemüllt.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisW

also irgendwie ist da noch der Wurm drin :


# Anwesenheit von Christian, Handy

define Anwesenheit_Chris dummy
attr Anwesenheit_Chris loglevel 6
attr Anwesenheit_Chris room Anwesenheit
attr Anwesenheit_Chris setList on off

define Anwesenheit_Chris_FileLog FileLog ./log/Anwesenheit_Chris.log Anwesenheit_Chris
attr Anwesenheit_Chris_FileLog logtype text
attr Anwesenheit_Chris_FileLog room Logfiles

define Job_AnwesendChris at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.50";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Chris ;; set Anwesenheit_Chris on") if (Value("Anwesenheit_Chris") eq "off");; \
} \
else { \
fhem("define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off") if (Value("Anwesenheit_Chris") eq "on");; \
} \
}

# Anwesenheit von Tanja, Handy

define Anwesenheit_Tanja dummy
attr Anwesenheit_Tanja loglevel 6
attr Anwesenheit_Tanja room Anwesenheit
attr Anwesenheit_Tanja setList on off

define Anwesenheit_Tanja_FileLog FileLog ./log/Anwesenheit_Tanja.log Anwesenheit_Tanja
attr Anwesenheit_Tanja_FileLog logtype text
attr Anwesenheit_Tanja_FileLog room Logfiles

define Job_AnwesendTanja at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.23";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Tanja ;; set Anwesenheit_Tanja on") if (Value("Anwesenheit_Tanja") eq "off");; \
} \
else { \
fhem("define abwesend_Tanja at +00:05:00 set Anwesenheit_Tanja off") if (Value("Anwesenheit_Tanja") eq "on");; \
} \
}








define Heizung_AutoEco notify Anwesenheit.*:.* { \
if (Value("Anwesenheit_Chris") eq "on") || (Value("Anwesenheit_Tanja") eq "on") { \
fhem ("set Heizung auto") if (Value("Heizung") eq "off"); \
} \
else { \
fhem ("set Heizung eco") if (Value("Heizung") eq "on"); \
}\
}


Fhem Neustart im Log:
2013.01.08 11:48:30 1: configfile: Unknown command }, try help
Unknown command }\
}, try help

Und wenn ich Manuell beide auf OFF mache steht dort:
2013.01.08 11:48:37 3: Heizung_AutoEco return value: Unknown command {, try help
Raspberry PI3 mit allem möglichen.

ChrisW

okay hatte doppel ;; vergessen Anfänger fehler :P

Aber folgendes schaut nach beide Anwesenheit OFF schon Schlimmer aus:

2013.01.08 11:53:53 3: Heizung_AutoEco return value: syntax error at (eval 28) line 1, near ") ||"
syntax error at (eval 28) line 1, near "}  else"
Raspberry PI3 mit allem möglichen.

Puschel74

Versuchs mal damit:

if (Value("Anwesenheit_Chris") eq "on") { \

In dem Fehler mit dem || (sollte doch ODER sein??) hänge ich auch grad mit meinem Schnipsel.
Wenn es mit einem Handy mal klappt ist das zweite schnell eingetragen ;-)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisW

Jo das kennt er wohl nicht ??

Also mit

define Heizung_AutoEco notify Anwesenheit.*:.* { \
if (Value("Anwesenheit_Chris") eq "on") { \
fhem ("set Heizung auto") if (Value("Heizung") eq "off");; \
} \
else { \
fhem ("set Heizung eco") if (Value("Heizung") eq "on");; \
}\
}
Hab ich derzeit keiner fehler.
Kann ich das ganze für Tanja nicht doppelt einfügen ??


define Heizung_AutoEco_tanja notify Anwesenheit.*:.* { \
if (Value("Anwesenheit_Tanja") eq "on") { \
fhem ("set Heizung auto") if (Value("Heizung") eq "off");; \
} \
else { \
fhem ("set Heizung eco") if (Value("Heizung") eq "on");; \
}\
}

Aber ich glaube das gibt verwirrung da ja nicht immer BEIDE Anwesend sind ... Na gut mach ich erstmal nur Tanja. Bei mir ist es nicht GANZ so wichtig bis das mit dem || klappt
Raspberry PI3 mit allem möglichen.

ChrisW

Hm funktioniert aber nicht.

Hab Heizung_bad Manuell auf 28c eingestellt.
Probiert mit Button Heizung auf ECO = Heizung_bad 17c

So wieder Heizung_bad auf 28c

Dann status anwesenheit_Chris mal ON / OFF gesetzt

Heizung_bad = 28c ... der scheint die Heizung nicht zu schalten

Logs steht nix
Raspberry PI3 mit allem möglichen.