Beschattungs Automatik

Begonnen von spacy, 13 Juni 2013, 19:36:56

Vorheriges Thema - Nächstes Thema

spacy

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.";
                        }
    }

Puschel74

Hallo,

Zitatif (Value($device) eq "Auf")

Value fragt STATE ab - was steht bei deiner Rollo im STATE drin?

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.

spacy

hallo,

genau das, "Auf".

STATE Auf
state on

habe das auch schon auf "on" probiert.

Puschel74

Hallo,

und $device (also @_) beinhaltet auch den Namen deiner Rollo?

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.

spacy

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')}

Puschel74

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
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.

spacy


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 !

spacy

sprich, er wärtet die If Value nicht richtig aus
nur warum verstehe ich nicht.

Puschel74

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
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.

spacy

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

Puschel74

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
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.

spacy

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 !

spacy

@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