hallo zusammen,
habe hier ein schnipsel aus meiner 99_rolloutils.
Mein Problem ist das in der ganzen Anweisung am ende nur raus kommt das "Die Rollos geschlossen sind" ob wohl das nicht der Fall ist.
Es wird also nichts beschattet. Es sieht für mich so aus das die "" if (Value($device) eq "Auf") ""nicht das rausgibt was sie soll.
Könnte da bitte mal jemand reinschauen und mir auf die Sprünge helfen.
Danke euch.
Ach ja der Schnipsel ist hier aus dem Forum, habe ihn an meine bedürfnisse angepasst.
sub
rollo_doBeschattung($$$$) {
my ($device, $cloudDevice , $aktivBeschattung , $endtime) = @_;
my $deviceposition = "state";
my $weatherDevice = "Aussen_Temperatur";
my $readingMaxTemp = "temperature";
my $triggerTemp = 20;
my $mandatoryTemp = 24;
my $cloudCoverage = "state";
Log 3, "doBeschattung: Prüfe Beschattungsbedarf für $device...";
Log 3, "doBeschattung: TempHi ist ".ReadingsVal($weatherDevice,$readingMaxTemp, 0)." (Schwellwerte: $triggerTemp wenn sonnig, sonst $mandatoryTemp )" ;
Log 3, "doBeschattung: Clouds ist ".ReadingsVal($cloudDevice,$cloudCoverage, 0);
if ( Value($aktivBeschattung) eq "deaktiv" ) {
Log 3,"doBeschattung:Automatik ist deaktiv!";
}
elsif ( (ReadingsVal($weatherDevice,$readingMaxTemp, 0) > $triggerTemp)
&& (ReadingsVal($cloudDevice,$cloudCoverage , 0) <= m/off 2.5/ )
|| (ReadingsVal($weatherDevice,$readingMaxTemp, 0) > $mandatoryTemp) ) {
my $startBeschattung = "at_".$device."_Beschattung_start"; #name for notify
my $endBeschattung = "at_".$device."_Beschattung_end"; #name for notify
if (Value($device) eq "Auf") {
Log 3, "doBeschattung: Beschattung aktiviert für $device.";
fhem "set $device on"; #Rollo immer erst hochfahren
fhem "set $startBeschattung at +00:02 set $device off-for-timer 8"; #Rollo für 16s herunterfahren
fhem "define $endBeschattung at $endtime set $device on" if(!defined($defs{$endBeschattung}));
} else {
Log 3, "Rollo ist zu, keine Beschattung nötig !";
}
} else {
Log 3, "doBeschattung: Nicht nötig.";
}
}
Hallo,
Zitatif (Value($device) eq "Auf")
Value fragt STATE ab - was steht bei deiner Rollo im STATE drin?
Grüße
hallo,
genau das, "Auf".
STATE Auf
state on
habe das auch schon auf "on" probiert.
Hallo,
und $device (also @_) beinhaltet auch den Namen deiner Rollo?
Grüße
sollte es eigentlich.
kann ich das irgentwie prüfen.
So sieht der Aufruf aus.
define at_Wohnzimmer_BeschattungStart notify Wohnzimmer_Beschattungssensor:* {rollo_doBeschattung('Wohnzimmer_Rollo' , 'Wohnzimmer_Beschattungssensor' , Wohnzimmer_Beschattung' , '19:00')}
Hallo,
klar im Logfile - du hast ja schon den Eintrag
ZitatLog 3, "doBeschattung: Prüfe Beschattungsbedarf für $device...";
drinnen.
Was steht den da?
Grüße
ah ja, da kann man da sehen.
2013.06.13 15:57:29 3: doBeschattung: Prüfe Beschattungsbedarf für Arbeitszimmer_Rollo_links,Arbeitszimmer_Rollo_rechts...
2013.06.13 15:57:29 3: doBeschattung: TempHi ist 27.2 (Schwellwerte: 20 wenn sonnig, sonst 24 )
2013.06.13 15:57:29 3: doBeschattung: Clouds ist on 2.5
2013.06.13 15:57:29 3: Rollo ist zu, keine Beschattung nötig !
sprich, er wärtet die If Value nicht richtig aus
nur warum verstehe ich nicht.
Hallo,
$device beinhaltet
ZitatArbeitszimmer_Rollo_links,Arbeitszimmer_Rollo_rechts
Ich bin mir ziemlich sicher das die If-Abfrage funktioniert wie sie soll ;-)
Das Problem sehe ich eher darin das
a) $device 2 Geräte enthält (sobald eines nicht Auf ist ist die Abfrage false und es wird mit else weiter gemacht)
b) ich mir nicht sicher bin ob die Abfrage so überhaupt funktionieren kann da eben 2 Geräte übergeben werden.
Kannst du mal versuchen das nur 1 Gerät übergeben wird?
Obwohl ich mir fast sicher bin das die Abfrage dann wie von dir erwartet arbeitet.
Wenn mehr als 1 Gerät in $device übergeben wird musst du das wohl oder übel auf $device1 und $device2 aufsplitten oder eine Schleife programmieren die alle übergebenen Geräte der Reihe nach prüft.
Grüße
das war für mein arbeitszimmer.
Im Wohnzimmer ist nur ein device geht aber genau so wenig. Sieht vom Log identisch aus.
Das übergeben von zwei device's geht, mache das mit sunset,sunrise genau so.
Da haut das alles auch so hin.
Aber wie gesagt im WZ ist nur ein Device und es geht trotzdem nicht
Hallo,
ok. Dann muss jemand anders drüber schauen.
Ich bin noch nicht davon überzeugt das
if (Value($device) eq "Auf") {
aufgeschlüsselt
if (Value(Arbeitszimmer_Rollo_links,Arbeitszimmer_Rollo_rechts) eq "Auf") {
funktioniert.
Aber dafür bin ich dann leider auch nicht der richtige - sorry.
Grüße
lass mal das arbeitszimmer wech.
Wie gesagt im WZ ist nur ein device.
das ist der Aufruf
define at_Wohnzimmer_BeschattungStart notify Wohnzimmer_Beschattungssensor:* {rollo_doBeschattung('Wohnzimmer_Rollo' , 'Wohnzimmer_Beschattungssensor' , 'Wohnzimmer_Beschattung' , '19:00')}
und das der log
2013.06.13 08:43:16 3: doBeschattung: Prüfe Beschattungsbedarf für Wohnzimmer_Rollo...
2013.06.13 08:43:16 3: doBeschattung: TempHi ist 21.9 (Schwellwerte: 20 wenn sonnig, sonst 24 )
2013.06.13 08:43:16 3: doBeschattung: Clouds ist on 5
2013.06.13 08:43:16 3: Rollo ist zu, keine Beschattung nötig !
@puschel74
hattest recht. Das mit beiden Devices so geht nicht.
Habe das angepasst.
Im WZ hat ich noch nen define nicht richtig.
Jetzt haut der Spaß hin.
danke
spacy