Hallo,
ich experimentiere mit meiner Temperaturüberwachung außen. Ich habe alle drei Wohnungsseiten im Sommer direkte Sonneneinstrahlung.
Jetzt würde ich gerne mit Hilfe von Twilight und dem Stand der Sonne den Außenfühler switchen. Morgen den einen, abends den auf der anderen Wohnungsseite.
Habt ihr Ideen wie das gehen kann?
DOIF mit azimuth > 180 und < 100° hab ich schon ausgetüftelt.
Einen Dummy immer mit den aktuell richtigen Werten füttern und dem das FileLog verpassen?
Okay, guter Tipp.
Ich habe ein Dummy und ein Notify angelegt:
define aussentemp_notify notify LaCrosse_1A:(temperature|humidity).* { fhem("setreading aussentemp_dummy $EVENT") }
Jetzt setz ich ein Log auf den dummy, muss da noch was rein wie oft das gemacht wird oder um ein volllaufen des Logs zu verhindern o.ä.?
EDIT:
Hab das notify angepasst. Was mir fehlt ist, wie komme ich an die werte des anderen Sensors heran?
LaCrosse_1A:(temperature|humidity).* {\
if ( ReadingsVal("aussentemp_dummy", "temperature:", 361) < 100 && ReadingsVal("aussentemp_dummy", "temperature:", 361) > "180") {\
fhem("setreading aussentemp_dummy $EVENT");;\
}else{\
fhem("setreading aussentemp_dummy $EVENT");;\
}\
}
Hi,
man kann das sicher alles in eines packen, aber mach doch erstmal zwei notify, für jeden Sensor eines.
In dem einen fragst du so rum ab und setzt das reading im dummy und im andere fragst du andersrum ab und setzt das reading im dummy. Einen else Zweig hast Du dann nicht. Du musst bloß den Azimut Test zweimal schreiben. Aber den könntest Du sogar als userReadings machen und daraus ein "morgens" "abends" ablesen. Dann fragst Du im if bloß nach morgens oder abends.
Achtung dieser Code stimmt so garantiert nicht! Bloß als Ansatz!
SonnenStand {( ReadingsVal("aussentemp_dummy", "temperature:", 361) < 100 && ReadingsVal("aussentemp_dummy", "temperature:", 361) > "180") ? 'morgens' : 'abends' }
Wobei ich mich frage ob Deine Abfrage jetzt stimmt? -> ReadingsVal("aussentemp_dummy", "temperature:", 361) ???
Gruß Otto
Ganz ohne dummy:
Warum nicht direkt mit defmod jeweils einfach die regex des filelogs ändern?
Bringt natürlich nur was, wenn Du einen FileLog haben willst, wie im Titel behauptet, und nicht das reading vorhalten willst (was wohl eher Deine Idee gewesen sein dürfte.
Alterntative: ReadingsProxy definieren und dort die Definition jeweils Anzumutabhängig ändern, darauf dann den log.
Zitat( ReadingsVal("aussentemp_dummy", "temperature:", 361) < 100 && ReadingsVal("aussentemp_dummy", "temperature:", 361) > "180")
Das sieht für mich auch komisch aus. Ich frage mich in welcher Maßeinheit Du die Temperatur hast?
Kleiner 100 UND größer 180, dass trifft doch nie ein!
Ein Reading mit : in der Bezeichnung? :o
Mal Zahl, mal String?
Oder übersehe ich hier was?
Irgendwie habe ich das Gefühl Deine Lösung hat wenig mit deiner Aufgabe zu tun. ???
Ah okay, da hat sich noch ein Fehler eingeschlichen :-p
Das sollte nicht die Temperatur sein, sondern das Azimuth:
LaCrosse_1A:(temperature|humidity|battery).* {\
if ( ReadingsVal("Twilight", "azimuth", 361) < 100 && ReadingsVal("Twilight", "azimuth", 361) > 180) {\
fhem("setreading aussentemp_dummy $EVENT");;\
}else{\
fhem("setreading aussentemp_dummy $EVENT");;\
}\
}
Was mir fehlt ist einmal im ersten IF-Zustand, da müssen die Readings aus LaCrosse_28 und nicht wie oben LaCrosse_1A rein.
Jedoch weiß ich nicht wie ich das nun umsetzen soll.
So könnte es gehen (die Zuordnungen sind willkürlich, und das mit dem ODER statt UND wäre zu prüfen...)
LaCrosse_..:(temperature|humidity|battery).* {\
if ( ReadingsVal("Twilight", "azimuth", 361) < 100 || ReadingsVal("Twilight", "azimuth", 361) > 180) {\ #geändert in ODER, bitte prüfen
fhem("setreading aussentemp_dummy $EVENT") if ($NAME=LaCrosse_28) ;;\
}else{\
fhem("setreading aussentemp_dummy $EVENT") if ($NAME=LaCrosse_1A) ;;\
}\
}
ich glaube eher das die >< vertauscht sind, ansonsten wäre das ein ziemlich großer bereich.
falls doch kann es eigentlich kein "und" sein -> die bedingung wäre nie wahr!
ansonsten ist bei beta-user nur ein '=' verloren gegangen bzw. 2 (in den if-abfragen) :)
if ($NAME==LaCrosse_28)
<, > soll sein: Wenn die Sonne zwischen 100 und 180 Grad steht soll der LaCrosse_28 genommen werden, andernfalls der 1A.
Also nochmal komplett:
LaCrosse_..:(temperature|humidity|battery).* {\
if ( ReadingsVal("Twilight", "azimuth", 361) > 100 || ReadingsVal("Twilight", "azimuth", 361) < 180) {\
fhem("setreading aussentemp_dummy $EVENT") if ($NAME==LaCrosse_28) ;;\
}else{\
fhem("setreading aussentemp_dummy $EVENT") if ($NAME==LaCrosse_1A) ;;\
}\
}
Was issen jetz des? :o
ZitatBareword "LaCrosse_28" not allowed while "strict subs" in use at (eval 263976) line 1.
Bareword "LaCrosse_1A" not allowed while "strict subs" in use at (eval 263976) line 1.
OK, sorry, es fehlen ""...
LaCrosse_..:(temperature|humidity|battery).* {\
if ( ReadingsVal("Twilight", "azimuth", 361) > 100 || ReadingsVal("Twilight", "azimuth", 361) < 180) {\
fhem("setreading aussentemp_dummy $EVENT") if ($NAME=="LaCrosse_28") ;;\
}else{\
fhem("setreading aussentemp_dummy $EVENT") if ($NAME=="LaCrosse_1A") ;;\
}\
}
Ahja, gesehen, angepasst und geht. Jedoch tut es nicht was es soll :P
Die Werte selbst sind irgendwie ungewöhnlich, 10 Grad sprünge und mitten drin immer wieder der Wert des falschen LaCrosse, daran zu erkennen das er mit rund 4 Grad gerade im Kühlschrank steht :D
Zitat2017-07-19_14:58:28 aussentemp_dummy battery:: ok
2017-07-19_14:58:28 aussentemp_dummy temperature:: 34.8
2017-07-19_14:58:28 aussentemp_dummy humidity:: 31
2017-07-19_14:58:33 aussentemp_dummy battery:: ok
2017-07-19_14:58:33 aussentemp_dummy temperature:: 34.9
2017-07-19_14:58:33 aussentemp_dummy humidity:: 31
2017-07-19_14:58:34 aussentemp_dummy battery:: ok
2017-07-19_14:58:34 aussentemp_dummy temperature:: 26.8
2017-07-19_14:58:34 aussentemp_dummy humidity:: 57
2017-07-19_14:58:35 aussentemp_dummy battery:: ok
2017-07-19_14:58:35 aussentemp_dummy temperature:: 25.3
2017-07-19_14:58:35 aussentemp_dummy humidity:: 62
2017-07-19_14:58:38 aussentemp_dummy battery:: ok
2017-07-19_14:58:38 aussentemp_dummy temperature:: 34.8
2017-07-19_14:58:38 aussentemp_dummy humidity:: 31
2017-07-19_14:58:41 aussentemp_dummy battery:: ok
2017-07-19_14:58:41 aussentemp_dummy temperature:: 24.7
2017-07-19_14:58:41 aussentemp_dummy humidity:: 65
2017-07-19_14:58:45 aussentemp_dummy battery:: ok
2017-07-19_14:58:45 aussentemp_dummy temperature:: 24.7
2017-07-19_14:58:45 aussentemp_dummy humidity:: 65
2017-07-19_14:58:47 aussentemp_dummy battery:: ok
2017-07-19_14:58:47 aussentemp_dummy temperature:: 25.2
2017-07-19_14:58:48 aussentemp_dummy battery:: ok
2017-07-19_14:58:48 aussentemp_dummy temperature:: 25.7
2017-07-19_14:58:48 aussentemp_dummy humidity:: 57
2017-07-19_14:58:48 aussentemp_dummy battery:: ok
2017-07-19_14:58:48 aussentemp_dummy temperature:: 3.4
2017-07-19_14:58:48 aussentemp_dummy humidity:: 43
2017-07-19_14:58:50 aussentemp_dummy battery:: ok
2017-07-19_14:58:50 aussentemp_dummy temperature:: 24.7
2017-07-19_14:58:50 aussentemp_dummy humidity:: 65
2017-07-19_14:58:55 aussentemp_dummy battery:: ok
2017-07-19_14:58:55 aussentemp_dummy temperature:: 25.2
2017-07-19_14:58:56 aussentemp_dummy battery:: ok
2017-07-19_14:58:56 aussentemp_dummy temperature:: 25.7
2017-07-19_14:58:56 aussentemp_dummy humidity:: 57
2017-07-19_14:58:57 aussentemp_dummy battery:: ok
2017-07-19_14:58:57 aussentemp_dummy temperature:: 3.4
2017-07-19_14:58:57 aussentemp_dummy humidity:: 43
2017-07-19_14:58:58 aussentemp_dummy battery:: ok
2017-07-19_14:58:58 aussentemp_dummy temperature:: 24.7
2017-07-19_14:58:58 aussentemp_dummy humidity:: 65
ZitatWenn die Sonne zwischen 100 und 180 Grad steht soll der LaCrosse_28 genommen werden,
da passt
Zitat( ReadingsVal("Twilight", "azimuth", 361) > 100 || ReadingsVal("Twilight", "azimuth", 361) < 180)
nicht, sondern
( ReadingsVal("Twilight", "azimuth", 361) > 100 && ReadingsVal("Twilight", "azimuth", 361) < 180)
&& hatte ich anfangs, war aber dann unsicher ob das stimmt.
Habe ich geändert, erklärt meinem Spatzenhirn leider nicht das da:
Zitat2017-07-19_15:48:35 aussentemp_dummy temperature:: 25.4
2017-07-19_15:48:38 aussentemp_dummy temperature:: 35.1
10 Grad in 3 Sekuden :o
EDIT2:
Es stehen auch leider weiterhin beide Fühler im Log, un nicht nur einer :'(
EDIT:
Ahhhh.... Jetzt doch,
LaCrosse_.., ich habe vielleicht 10 Sensoren, alle heißen LaCrosse_xx, da muss was eindeutigeres her.
Geht
LaCrosse_(28|1A)
?
Zitathatte ich anfangs, war aber dann unsicher ob das stimmt
Da sollte man nicht unsicher sein. 8)
Es ist sinnvoll, die Eingangsbedingung entsprechend einzuengen.
ABER: Da stimmt aber noch was anderes nicht!
Der Code sollte eigentlich alle überflüssigen Devices ausfiltern, macht das aber scheinbar nicht.
LaCrosse_(28|1A):(temperature|humidity).* {
if ( ReadingsVal("Twilight", "azimuth", 361) > 100 && ReadingsVal("Twilight", "azimuth", 361) < 180) {\
fhem("setreading aussentemp_dummy $EVENT") if ($NAME=="LaCrosse_28") ;;
}else{
fhem("setreading aussentemp_dummy $EVENT") if ($NAME=="LaCrosse_1A") ;;
}\
}
So ist der Stand aktuell!
Sieht m.E. OK aus, aber Papst das log nun?
Nein, 1A und 28 sind beide drin.
Log mal Fall und $NAME mit
Oh jeee....
Das Log hab ich ja total vergessen.
Zitat2017.07.19 16:55:28 1: LaCrosse_1A: humidity: 33
2017.07.19 16:55:33 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281176) line 4.
2017.07.19 16:55:33 1: LaCrosse_1A: temperature: 34.7
2017.07.19 16:55:33 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281177) line 4.
2017.07.19 16:55:33 1: LaCrosse_1A: humidity: 32
2017.07.19 16:55:53 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281203) line 4.
2017.07.19 16:55:53 1: PERL WARNING: Argument "LaCrosse_28" isn't numeric in numeric eq (==) at (eval 281203) line 4.
2017.07.19 16:55:53 1: LaCrosse_28: temperature: 3.3
2017.07.19 16:55:53 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281204) line 4.
2017.07.19 16:55:53 1: PERL WARNING: Argument "LaCrosse_28" isn't numeric in numeric eq (==) at (eval 281204) line 4.
2017.07.19 16:55:53 1: LaCrosse_28: humidity: 49
2017.07.19 16:56:02 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281215) line 4.
2017.07.19 16:56:02 1: PERL WARNING: Argument "LaCrosse_28" isn't numeric in numeric eq (==) at (eval 281215) line 4.
2017.07.19 16:56:02 1: LaCrosse_28: temperature: 3.3
2017.07.19 16:56:02 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281216) line 4.
2017.07.19 16:56:02 1: PERL WARNING: Argument "LaCrosse_28" isn't numeric in numeric eq (==) at (eval 281216) line 4.
2017.07.19 16:56:02 1: LaCrosse_28: humidity: 49
2017.07.19 16:56:11 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281223) line 4.
2017.07.19 16:56:11 1: PERL WARNING: Argument "LaCrosse_28" isn't numeric in numeric eq (==) at (eval 281223) line 4.
2017.07.19 16:56:11 1: LaCrosse_28: temperature: 3.3
2017.07.19 16:56:11 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281224) line 4.
2017.07.19 16:56:11 1: PERL WARNING: Argument "LaCrosse_28" isn't numeric in numeric eq (==) at (eval 281224) line 4.
2017.07.19 16:56:11 1: LaCrosse_28: humidity: 49
2017.07.19 16:56:18 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281235) line 4.
2017.07.19 16:56:18 1: LaCrosse_1A: temperature: 34.8
2017.07.19 16:56:18 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281236) line 4.
2017.07.19 16:56:18 1: LaCrosse_1A: humidity: 32
2017.07.19 16:56:23 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281242) line 4.
2017.07.19 16:56:23 1: LaCrosse_1A: temperature: 34.7
2017.07.19 16:56:23 1: PERL WARNING: Argument "LaCrosse_1A" isn't numeric in numeric eq (==) at (eval 281243) line 4.
2017.07.19 16:56:23 1: LaCrosse_1A: humidity: 32
eq statt == sorry
Ich würde sagen du hast es geknackt :-)
Schade das ich es nicht selbst geschafft habe, aber der Einstieg war schon mal okay ;-)
Ich behalte das mal im Auge was morgen passiert.
Vielen Dank für die Unterstützung...
EDIT:
Geht... Somit erledigt :-)