[gelöst] Temperaturfühler nach Sonneneinstrahlung switchen

Begonnen von accessburn, 09 April 2018, 14:05:16

Vorheriges Thema - Nächstes Thema

accessburn

#15
Okay, ich bastel das mal. Meld mich da...
Danke schon mal  :)


Kann ich $EVTPART0 direkt in der IF-Abfrage nutzen oder muss ich das erst extra auslesen?

if ($EVTPART0 eq "temperature" ...



Würde dann aus meiner Sicht so aussehen:
LaCrosse_(28|1A):(temperature|humidity).* {
if ( ReadingsVal("Twilight", "azimuth", 361) > 78 && ReadingsVal("Twilight", "azimuth", 361) < 180 && Value("Sommerzeit") ne "off") {\
if ($EVTPART0 eq "temperature:") {\
fhem("setreading aussentemp_dummy temperature $EVTPART1") if ($NAME eq "LaCrosse_28") ;;
}\
if ($EVTPART0 eq "humidity:") {\
fhem("setreading aussentemp_dummy humidity $EVTPART1") if ($NAME eq "LaCrosse_28") ;;
}\
}else{
if ($EVTPART0 eq "temperature:") {\
fhem("setreading aussentemp_dummy temperature $EVTPART1") if ($NAME eq "LaCrosse_1A") ;;
}\
if ($EVTPART0 eq "humidity:") {\
fhem("setreading aussentemp_dummy humidity $EVTPART1") if ($NAME eq "LaCrosse_1A") ;;
}\
}\
}




Okay, geht alles... Läuft wieder wie am Schnürchen  ;D
Danke Beta-User und auch den anderen die sich beteiligt haben  ;)
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

nils_

schön das es läuft!


die frage ist nur, hat sich daran etwas geändert? also an dem Teil des setzens....?
viele Wege in FHEM es gibt!

accessburn

Das ist eine interne Änderung mir in den Weg gefallen. Das Regex nimmt den Doppelpunkt beim weiterreichen des Readings nicht an. Daher die Stückelung mit $EVTPART0 und 1. Dann kann ich temperature und humidity von Hand angeben und lasse den Punkt einfach weg.

Umständlich, aber geht :-)
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

nils_

#18
ja genau..... umständlich :)

Änderung gab es:
https://svn.fhem.de/trac/browser/trunk/fhem/fhem.pl?rev=16087

https://forum.fhem.de/index.php/topic,83840


//edit:
evtl wäre es beim posten der list's eher aufgefallen.


sehen tut man es eigentlich auch hier:
Zitat von: accessburn am 09 April 2018, 14:05:16
Dummy

Zitatdefmod aussentemp_dummy dummy

setstate aussentemp_dummy 2018-02-08 19:51:04 humidity: 73
setstate aussentemp_dummy 2018-02-08 19:51:04 temperature: -0.1


aber die zusätzliche überprüfung auf einen _korrekten_ readingnamen, sollte eine Warnung im Log produzieren!
hast du da mal reingeschaut??
viele Wege in FHEM es gibt!

Beta-User

Das mit dem Log ist sicher richtig, aber da es erwiesenermaßen mal funktioniert hat, ist der Blick da rein nicht für jeden selbsterklärend ;) . Aber neben der Frage nach dem list und dem Hinweis auf die commandref sollte man zukünftig vielleicht auch standardmäßig einen Blick ins Log empfehlen ::) .

Und das mit dem Doppelpunkt ist so eine Sache, die muß man nicht mitbekommen haben, oder?

Na ja, schön jedenfalls, wenn es gelöst ist.
Und ein (ungetestetes)
my $myreading = $EVTPART0 eq "temperature:" ? "temperature" : "humidity";
vorneweg in Zeile 2 und der Verwendung der Variablen im Text hätte den Code auch etwas übersichtlicher halten können ;) .

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

nils_

#20
ich nochmal :D

kannst du es mal hiermit versuchen??
sollte im grunde so aussehen wie dein ursprüngliches notify, nur das der "störende" Doppelpunkt entfernt wird.


//EDIT: falschen code entfernt.... korrektur in den weiteren beiträgen!!
viele Wege in FHEM es gibt!

Beta-User

Coole Idee,

aber:
ZitatNote that chop returns the last character.  To return all but the last character, use substr($string, 0, -1) .
also
$EVTPART0 = substr($EVTPART0, 0, -1);
und mit $EVTPART0 weiterarbeiten oder eben in eine weitere Variable packen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

nils_

jetzt haben wir quasi gleichzeitig gepostet :D

Zitat von: Beta-User am 10 April 2018, 13:12:42
Das mit dem Log ist sicher richtig, aber da es erwiesenermaßen mal funktioniert hat, ist der Blick da rein nicht für jeden selbsterklärend ;) .
das kann schon sein, aber evtl. für uns als helfende ;)

Zitat von: Beta-User am 10 April 2018, 13:12:42
Aber neben der Frage nach dem list und dem Hinweis auf die commandref sollte man zukünftig vielleicht auch standardmäßig einen Blick ins Log empfehlen ::) .
ich hab ehrlich gesagt auch nicht daran gedacht, nur ist es mir aufgefallen das es eine warnung gibt, weil ich mir die änderungen in fhem.pl angeschaut habe.

Zitat von: Beta-User am 10 April 2018, 13:12:42
Und das mit dem Doppelpunkt ist so eine Sache, die muß man nicht mitbekommen haben, oder?
meinst du das prüfen darauf, oder das er da auftaucht wo er nix zu suchen hat??
mir ist er vorher nicht aufgefallen, aber ich bin mir da auch immer unsicher wo er hingehört und wo nicht bzw. ob er da richtig gewesen wäre.

Zitat von: Beta-User am 10 April 2018, 13:12:42
Na ja, schön jedenfalls, wenn es gelöst ist.
jepp, das sehe ich auch so.

Zitat von: Beta-User am 10 April 2018, 13:12:42
Und ein (ungetestetes)
my $myreading = $EVTPART0 eq "temperature:" ? "temperature" : "humidity";
vorneweg in Zeile 2 und der Verwendung der Variablen im Text hätte den Code auch etwas übersichtlicher halten können ;) .
über code lässt sich ja quasi endlos streiten :D
viele Wege in FHEM es gibt!

Beta-User

Zitat von: nils_ am 10 April 2018, 13:18:48
jetzt haben wir quasi gleichzeitig gepostet :D
...und schon wieder...

Daher nochmal der Hinweis:
substr() statt chop() wie vorhin gepostet :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

nils_

Zitat von: Beta-User am 10 April 2018, 13:18:30
Coole Idee,

aber:also
$EVTPART0 = substr($EVTPART0, 0, -1);
und mit $EVTPART0 weiterarbeiten oder eben in eine weitere Variable packen...

argh... erwischt.... das hab ich auf die schnelle überlesen.  :-\ :-\ :-\

dann so?
LaCrosse_(28|1A):(temperature|humidity).* {
    my $r = substr($EVTPART0, 0, -1); #letztes Zeichen entfernen
   
    if ( ReadingsVal("Twilight", "azimuth", 361) > 78 && ReadingsVal("Twilight", "azimuth", 361) < 180 && Value("Sommerzeit") ne "off")
    {
        fhem("setreading aussentemp_dummy $r $EVTPART1") if ($NAME eq "LaCrosse_28");;
    }
    else
    {
        fhem("setreading aussentemp_dummy $r $EVTPART1") if ($NAME eq "LaCrosse_1A");;       
    }
}
viele Wege in FHEM es gibt!

Beta-User

Zitat von: nils_ am 10 April 2018, 13:21:12
dann so?
So sollte es passen.

[OT]
Ob man direkt mit fertigem Code aushelfen sollte, ist eine Frage, die sich immer mal wieder stellt.
Mir hat es sehr gefallen, dass accessburn hier die diversen Anregungen (und code-Schnipselchen) aufgegriffen hat und dann auch selbständig weiterentwickelt.

Mit dem Post hast du ihm die Möglichkeit genommen, den "erfolgreichen und eleganten" Code selbst fertig zu entwickeln und dann zu posten. Finde ich schade...

M.E. sollte man fertigen Code wirklich nur dann posten, wenn man ihn "sowieso" vorrätig hat oder das ganze zu kompliziert wird, um es  nachzuvollziehen oder zu erklären.

(Wenn es in 2 Tagen dann immer noch keinen update gegeben hätte, wäre es ok gewesen, damit eventuelle Nachahmer das auf die "elegante" Weise lösen können, und ja, mir ist klar, dass das Aufwand ist, das so nachzuhalten... Aber hier war es klar, dass das Problem zwar gelöst war, aber der code noch verbesserungsfähig).
[/OT]

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

accessburn

Die Idee mit substr ist ist mir tatsächlich nicht gekommen. Dabei nutze ich sie beruflich in PHP mindestens einmal die Woche. Macht Sinn, spart Zeilen und ist besser einzusetzen. Aber der Lernerfolg bleibt da ich das so lasse wie ich es gemacht habe bis ich es in ein paar Tagen weiter machen kann. Durch den Umzug kommt erst alles nacheinander. Aber trotzdem gut zu wissen.

:-* :-*
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

nils_

Zitat von: Beta-User am 10 April 2018, 13:38:32
So sollte es passen.

[OT]
Ob man direkt mit fertigem Code aushelfen sollte, ist eine Frage, die sich immer mal wieder stellt.
Mir hat es sehr gefallen, dass accessburn hier die diversen Anregungen (und code-Schnipselchen) aufgegriffen hat und dann auch selbständig weiterentwickelt.

Mit dem Post hast du ihm die Möglichkeit genommen, den "erfolgreichen und eleganten" Code selbst fertig zu entwickeln und dann zu posten. Finde ich schade...

M.E. sollte man fertigen Code wirklich nur dann posten, wenn man ihn "sowieso" vorrätig hat oder das ganze zu kompliziert wird, um es  nachzuvollziehen oder zu erklären.

(Wenn es in 2 Tagen dann immer noch keinen update gegeben hätte, wäre es ok gewesen, damit eventuelle Nachahmer das auf die "elegante" Weise lösen können, und ja, mir ist klar, dass das Aufwand ist, das so nachzuhalten... Aber hier war es klar, dass das Problem zwar gelöst war, aber der code noch verbesserungsfähig).
[/OT]

Gruß, Beta-User

so ich nochmal, auch OT, aber dann reichts hier auch für heute, oder? :D

also:
ich fand es auch gut, das er versucht hat den fehler zu verstehen und auch das er für sich die/eine lösung selbst erarbeitet hat.
grundsätzlich bin ich auch eher zurückhaltend mit dem posten von fertigen code-teilen. da aber die von mir vorgeschlagene lösung "quasi" dem notify aus seinem ersten post entspricht (mit der ergänzung den doppelpunkt zu entfernen), habe ich sie gepostet. (für mich sehen diese wilden if-verschachtelungen wirklich nicht schön aus, aber das ist meine persönliche meinung und keinerlei kritik!)
ob der code jetzt elegant ist? bestimmt nicht. da gibt es immer was zu verbessern.

trotzdem werde ich mir deine anmerkungen (ich will es nicht kritik nennen, denn so lese es nicht!) zu herzen nehmen, und zukünftig - im sinne des lernerfolges für die anderen - noch etwas länger mit dem posten von code warten ;)
viele Wege in FHEM es gibt!

Beta-User

Zitat von: nils_ am 10 April 2018, 14:14:02
so ich nochmal, auch OT, aber dann reichts hier auch für heute, oder? :D
Einen habe ich noch:
Man kann sich die weiteren ausdrücklichen if's ggf. noch sparen, wenn für den ersten Zweig die Bedingung (&& $NAME eq...)  in das oberste if wandert und der zweite Teil dann statt else mit elsif loslegt, gleich mit der Abfrage der Bedingung...

Aber jetzt ist wirklich gut :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files