Meine Jalousie-Steuerung

Begonnen von Icinger, 08 März 2015, 09:40:32

Vorheriges Thema - Nächstes Thema

Damu

Hab meine Steuerung wieder gelöscht.
Meine Frau kam damit gar nicht zurecht.
Hat bei mir auch nicht immer funktioniert.
Probleme gibt es, wenn Mann das Fenster öffnet und gleich wieder schliesst.
Dann geht die Store hoch und bleibt oben.
Bei einem Neustart von fhem geht sie dann plötzlich runter.
Ich hab es auch nicht geschaft die Öffnungsautomatik sicher auszuschalten.
Zudem hatte ich im Log immer 5 x den selben Befehl.


jsloot

Hallo Icinger,

kannst du folgenden WeekdayTimer erklären? Mir ist
Zitatfhem("set EG_SZ_Jalousie %")
nicht ganz klar.

Zitat von: Icinger am 08 März 2015, 09:40:32
Normalerweise öffnet und schließt die Jalousie automatisch mit einem Weekday-Timer:
define AutoJalousie WeekdayTimer SZ_JalousieTaster {sunset_abs(0,"17:00","22:00")}|Zu Mo,Di,Mi,Do,Fr|{sunrise_abs(0,"04:00","06:00")}|Offen Sa,So|07:30|65 { fhem("set EG_SZ_Jalousie %")}

In den Logfiles sehe ich folgendes bei mir:

Zitat2016.01.05 17:15:00 4: [AutoJalousie] Update   - timer seems to be active today: 0123456|{sunset_abs(0,"17:00","17:15")}|Zu
2016.01.05 17:15:00 4: [AutoJalousie] device type CUL_HM:HM-LC-Bl1PBU-FM recognized, setModifier:
2016.01.05 17:15:00 4: [AutoJalousie] aktParam: newParam:Zu - is  not disabled
2016.01.05 17:15:00 4: [AutoJalousie] command: { fhem("set grWohnzimmer_lFenster_Rollo_dummy %")} executed
2016.01.05 17:15:00 4: dummy set grWohnzimmer_lFenster_Rollo_dummy %
2016.01.05 17:15:00 4: ntf_grWohnzimmer_lFenster_Rollo_dummy exec {my $r ;; my $dd = ReadingsVal("grWohnzimmer_lFenster_Rollo_dummy","state","Offen");;
                   if ($dd eq "Offen") {$r=100}
                   elsif ($dd eq "25") {$r=80}
                   elsif ($dd eq "50") {$r=64}
                   elsif ($dd eq "75") {$r=42}
                   elsif ($dd eq "90") {$r=17}
                   elsif ($dd eq "Zu") {$r=0}
                   else {$r=$dd};;
                   Fensteroeffner "grWohnzimmer_lFenster","grWohnzimmer_lFenster_Rollo",$r;;}
2016.01.05 17:15:00 4: Fensteröffner - Params: grWohnzimmer_lFenster, grWohnzimmer_lFenster_Rollo, %,
2016.01.05 17:15:00 3: ntf_grWohnzimmer_lFenster_Rollo_dummy return value: Unknown argument %, choose one of assignHmKey clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename down fwUpdate getConfig getDevInfo getRegRaw getSerial getVersion inhibit:on,off off on pair pct:slider,0,1,100 peerBulk peerIODev press raw regBulk regSet reset sign:on,off statusRequest stop toggle toggleDir unpair up

Mach ich was falsch? Mein Dummy heisst bei mir grWohnzimmer_lFenster_Rollo_dummy, der Rolloaktor grWohnzimmer_lFenster_Rollo und der Fensterkontakt grWohnzimmer_lFenster.

Gruß Jörn
Ein FHEM-Raspi mit HM-CFG-USB-2. 9 HM Heizthermostate, 9 HM Temperatursensoren, 22 HM Fensterkontakte, 7 Rolloaktoren, 17 HM Unterputz-Aktoren

Icinger

Hi,

ist klar, seit dem Versionssprung auf .7 gibt es "%" nicht mehr, somit musst du den WeekdayTimer wie folgt ändern:

define AutoJalousie WeekdayTimer SZ_JalousieTaster  {sunset_abs(0,"17:00","22:00")}|90 Mo,Di,Mi,Do,Fr|{sunrise_abs(0,"05:30","06:00")}|Offen Sa,So|07:30|65 Sa,So|10:00|Offen { fhem("set grWohnzimmer_lFenster_Rollo $EVENT")}

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Homalix99

Hallo,

bin vor kurzem auf die Jalousiesteuerung  gestoßen und finde das wirklich klasse, möchte dies aber etwas anders gestalten. Wenn nämlich ein skip ausgeführt werden soll, will ich nicht erst im Web auswählen, sondern ich steh vor der Tür bzw. dem Fenster mit dem Rollo und möchte fhem mittels kurzen Druck auf den HM Rollo-Aktor signalisieren, dass die Automatik einmalif ausgesetzt wird, soweit meine Idee. Nun habe ich zwei Fragen:
1. Was ist die time_till_Reading sub, die im nftJalousieOverride notify steht, wo finde ich die und berechnet diese die Differenzzeit zwischen now und next update?
2. Was macht
"fhem("delete Ja_On") if (defined($defs{'Ja_On'}));"  ?
, kenne ich so nicht.
Vielen Dank im voraus.

Gruß

Alex
- RPI 4 fhem in Docker, 2 x Arduino Uno, HM-GW, HM-Dev. (Fensterkontakte, HK-Thermostate, div. Aktoren), JeeLink,
- GPIOs, HM-LAN, ESPs (MQTT2)
-Überwachung Fenster/Türen/Licht, HK-Thermostatregelung, Rollosteuerung, Überw. Betriebstemperaturen Heizung, Erfassung Gas/Wasser, PV-Anl., Wetter (WS1600)

Icinger

Hi Homalix99,

1) Die time_till_reading macht genau das, was der Name schon sagt: Berechnet die bis zum nächsten Zeitpunkt, der in einem Reading steht.
     Du findest die in der 99_TimeUtils.pm (siehe http://forum.fhem.de/index.php/topic,14449.msg101224.html#msg101224

2) fhem("delete Ja_On") if (defined($defs{'Ja_On'})) löscht das bestehende at "Ja_On", aber eben nur, wenn es schon angelegt ist, ansonsten gäbs nen unschönen Fehler.

Das "mit kurzen Druck auf den HM Rollo-Aktor signalisieren, dass die Automatik einmalif ausgesetzt wird" könntest du durch ein zusätzliches notify auf den Aktor erreichen, in welchem du den letzten Stand und den aktuellen der Jalousie überprüfst. Wenn sich die Jalousie weniger als zB 5% oder so bewegt hat (also wirklich nur kurz gedrückt wurde), dann einfach ein "set JalousieOverride skip" ausführen.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Homalix99

Hallo Stefan,

also ich hab mir die 99_TimeUtils.pm in mein fhem mit reingeladen.
Dort ist eine sub namens 'TU_Get_Difference($time1,$time2)' drinnen, die mit Deiner time_till_Reading() nicht übereinstimmt (anderer Name, zwei Rückgabewerte [$succes,$result ] und keine Datumsübergreifende Zeitdifferenzberechnung).
1. Wo kann ich dann die Routine, die Du verwendest finden (sie ist auch nicht in der 99_Utils.pm drinnen). Fhem findet Deine Sub nicht
Zitat2016.01.07 18:50:26.250 3: ntf_Rollo_Taster_AZ return value: Undefined subroutine &main::time_till_Reading called at (eval 3672) line 30.

2. Wenn Du die zwei Zeiten übergibst müsste es statt:
my $diff=time_till_Reading(ReadingsVal("AutoJalousie","nextUpdate",localtime(time())));
doch so heißen:
my $diff=time_till_Reading(ReadingsVal("AutoJalousie","nextUpdate",""), localtime(time()));
oder liege ich da falsch?

3. Wen ich Deinen Sub-Aufruf gegen

my $res = true;
my $diff = "";
($res, $diff) =TU_Get_Difference(ReadingsVal("AutoJalousie_AZ","nextUpdate",""),localtime(time()));
if($res == false ) {
    Log 1, "Fehler Rückgabewert Timediff";
}

ersetze, kommen im weiteren Verlauf Fehler im Log, dass hours, minutes, etc. nicht gefunden werden. Habe ich da vergessen, irgend welche weiteren xx_Utils zu laden, oder was kann das sein?

lg

Alex

define nftJalousieOverride JalousieOverride { $a=Value("JalousieOverride");
                   fhem("attr AutoJalousie disable 0");
                   fhem("delete Ja_On") if (defined($defs{'Ja_On'}));
                   if ($a ne "Auto") {
                       if($a eq "Skip") {
                           my $diff=time_till_Reading(ReadingsVal("AutoJalousie","nextUpdate",localtime(time())));
                           my $time2=sprintf("%%02d:%%02d:%%02d",$diff->hours,$diff->minutes,$diff->seconds);
                           my $t2=$diff->add(minutes     => -2);
                           $time2=sprintf("%%02d:%%02d:%%02d",$t2->hours,$t2->minutes,$t2->seconds);
                           fhem "attr AutoJalousie disable 1";
                       fhem "define Ja_On at +$time2 attr AutoJalousie disable 0;;set JalousieOverride Auto"
                       } else
                       {
                       $a =~ s/\./:/;
                       fhem "attr AutoJalousie disable 1";
                           fhem "define Ja_On at $a set EG_SZ_Jalousie Offen;;attr AutoJalousie disable 0;;set JalousieOverride Auto"
                       }
                   
                   }
                 }
- RPI 4 fhem in Docker, 2 x Arduino Uno, HM-GW, HM-Dev. (Fensterkontakte, HK-Thermostate, div. Aktoren), JeeLink,
- GPIOs, HM-LAN, ESPs (MQTT2)
-Überwachung Fenster/Türen/Licht, HK-Thermostatregelung, Rollosteuerung, Überw. Betriebstemperaturen Heizung, Erfassung Gas/Wasser, PV-Anl., Wetter (WS1600)

Icinger

Hi,

hmmm, dass ich das selbst hinzugefügt habe? Kann mich zwar nimmer erinnern, wird aber wohl so sein 8)

Hier also mal die Sub:
sub time_till_Reading($) {
my ($mydatetime) = @_;
# Log 3,$mydatetime;
my ($mydate,$mytime) = split(" ",$mydatetime);
my ($myyear,$mymonth,$myday) = split(/\-/,$mydate);
my ($myhour,$myminute,$mysecond) = split(/:/,$mytime);
# Log 3,"$myyear - $mymonth - $myday - $myminute - $mysecond";
my $dt2 = DateTime->new(
                       year   => $myyear,
                       month  => $mymonth,
                       day    => $myday,
                       hour   => $myhour,
                       minute => $myminute,
                       second => $mysecond,
                     );
my $dt1 = DateTime->now();#time_zone => 'Europe/Vienna' );
$dt1 = $dt1->subtract_datetime($dt2);
#return $duration->hours().' Stunden '.$duration->minutes().' Minuten';
return $dt1;
}


Was auch noch geändert gehört, sind die Maskierungen in dem Notify, seit FHEM5.7 sind die hinfällig:
sprintf("%%02d:%%02d:%%02d",
gehört auf
sprintf("%02d:%02d:%02d",
geändert.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Homalix99

Hi,

ok, nachdem ich das Module DateTime nachinstallert habe und Deine Routine in die 99_MyUtils.pm kopiert hatte, sowie
use DateTime; angegeben habe,
kommt aber immer noch folgende Fehlermsg.


2016.01.07 21:35:12.981 3: ntf_Rollo_Taster_AZ return value: The 'hour' parameter ("Jan") to DateTime::new did not pass the 'an integer between 0 and 23' callback
at /usr/lib/perl5/DateTime.pm line 199
        DateTime::new(undef, 'year', 'Thu', 'month', undef, 'day', undef, 'hour', 'Jan', ...) called at ./FHEM/99_myUtils.pm line 531
        main::time_till_Reading('Thu Jan  7 21:35:12 2016') called at (eval 10348) line 30
        eval '{
fhem("attr AutoJalousie_AZ disable 0");
- RPI 4 fhem in Docker, 2 x Arduino Uno, HM-GW, HM-Dev. (Fensterkontakte, HK-Thermostate, div. Aktoren), JeeLink,
- GPIOs, HM-LAN, ESPs (MQTT2)
-Überwachung Fenster/Türen/Licht, HK-Thermostatregelung, Rollosteuerung, Überw. Betriebstemperaturen Heizung, Erfassung Gas/Wasser, PV-Anl., Wetter (WS1600)

Homalix99

Hallo Stefan,

also die Steuerung der Rollos funktioniert jetzt, hatte meine übergebenen Variablen versehentlich vertauscht und das attr. nextUpdate kommt halt mal nicht aus dem Aktor:-))
Nochmal vielen Dank für Deine Hilfe.
lg

Alex

PS: Das skip wird bei mir durch kurze Betätigung des Aktors in die "falsche Richtung" ausgelöst. Also z. B. Rollo oben, Druck auf up und im Dummy Rollo_Automatik signalisiert.
Ich habe die Steuerung eh komplett anders gelöst, habe also nur die Skip-Routine benötigt.
- RPI 4 fhem in Docker, 2 x Arduino Uno, HM-GW, HM-Dev. (Fensterkontakte, HK-Thermostate, div. Aktoren), JeeLink,
- GPIOs, HM-LAN, ESPs (MQTT2)
-Überwachung Fenster/Türen/Licht, HK-Thermostatregelung, Rollosteuerung, Überw. Betriebstemperaturen Heizung, Erfassung Gas/Wasser, PV-Anl., Wetter (WS1600)

Icinger

Na, das hört man gerne, freut mich, dass ich helfen konnte.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho