IF "Ich raff die Syntax nicht" IF: no right bracket

Begonnen von stefanm, 11 April 2014, 23:06:48

Vorheriges Thema - Nächstes Thema

Damian

#15
Zitat von: Wichtel am 14 April 2014, 01:08:07
Nochmal zum Anfangsproblem, immerhin war es der (aus Anwendersicht) kürzeste Code und hat sogar noch funktioniert:Probiere mal, vor jedem von dir eingefügten Zeilenumbruch einen Backslash zu schreiben.
So wie es in deinen zuletzt zitierten Codes ebenfalls passiert, also:

IF ([Bewaesserung_Active] eq "Auto")
   (define a10 at §Startzeit_Bewaesserung set Kreis_Trafo on-for-timer 3600, \
    define a11 at §Startzeit_Bewaesserung set Kreis_Rechts on-for-timer 1800, \
    define a13 at (§Startzeit_Bewaesserung + 00:30:00) set Kreis_Links on-for-timer 1800)

In der ersten Zeile fehlt auch noch ein Backslash: IF ([Bewaesserung_Active] eq "Auto") \

Es hätte auch ohne Backslashes funktioniert, wenn man die Commandref zu IF richtig gelesen hätte. Dort steht:

"Geschachtelte Angabe von zwei IF-Befehlen (kann in mehreren Zeilen mit Einrückungen zwecks übersichtlicher Darstellung in der DEF-Eingabe eingegeben werden)"

Die cfg-Datei sollte man nur editieren, wenn man die Bedeutung der Sonderzeichen kennt, ansonsten ist es sinnvoller, nicht nur als Anfänger, alles über die FHEM-Weboberfläche zu machen.

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stefanm

Dank eurer Hilfe fange ich ganz langsam an Perl zu Verstehen ;)
und damit es Übersichtlicher wird habe ich eine 99_Bewaesserung_Utils.pm angelegt und überarbeitet.
Dazu hab ich dann Testweise die Code Schnipsel in ein klein Perl Script gepackt und laufen lassen



package main;

use strict;
use warnings;
use POSIX;

sub
Bewaesserung_Utils_Initialize($$)
{
  my ($hash) = @_;

}

sub
Bewaesserung($$)
{
my $Startzeit_Bewaesserung_rechts="23:00";
my $Startzeit_Bewaesserung_links="23:30";
my ($Bewaesserung_Active, $Garten_Licht, ) = @_;
      if ($Bewaesserung_Active eq "Auto" & $Garten_Licht eq "Off") {
             {fhem ("define a10 at ".$Startzeit_Bewaesserung_rechts." set Kreis_Trafo on-for-timer 3600")}
             {fhem ("define a11 at ".$Startzeit_Bewaesserung_rechts." set Kreis_Rechts on-for-timer 1800")}
             {fhem ("define a13 at ".$Startzeit_Bewaesserung_links." set Kreis_Links on-for-timer 1800")}
   }
      if ($Bewaesserung_Active eq "On") {
             Log 3, "Bewaesserung_Active->". Value("Bewaesserung_Active");
             {fhem ("set Kreis_Trafo on-for-timer 3600")}
             {fhem ("set Kreis_Rechts on-for-timer 1800")}
my ($Sekunden, $Minuten, $Stunden) = localtime(time);
             $Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
             $Minuten+=30;
             if ($Minuten > 59) { $Stunden+=1 ; $Minuten-=30 };
             {fhem ("define a10 at *".$Stunden.":".$Minuten." set Kreis_Links on-for-timer 1800")}
   }
       if ($Bewaesserung_Active eq "Off") {;
             Log 3, "Bewaesserung_Active->". Value("Bewaesserung_Active");
             {fhem ("set Kreis.* off")}
   }
       if ($Bewaesserung_Active eq "Urlaub" & $Garten_Licht eq "Off") {;
              Log 3, "Bewaesserung_Active->". Value("Bewaesserung_Active");
              {fhem ("define a10 at *23:00:00 set Kreis_Trafo on-for-timer 5400")};
              {fhem ("define a11 at *23:00:00 set Kreis_Rechts on-for-timer 1800")};
              {fhem ("define a13 at *23:30:00 set Kreis_Links on-for-timer 1800")};
              {fhem ("define a13 at *23:59:00 set Kreis_Urlaub on-for-timer 1800")};
   }
}
1;





Der notify Aufruf dazu sieht wie folgt aus:


define Bewaesserungs_Steuerung notify Bewaesserung_Active {Bewaesserung(Value("Bewaesserung_Active"), Value("Garten.Wand"))}


UND ES GEHT.


ich Danke euch. Wieder was gelernt, jedenfalls hier ohne Hardware, werd ich zuhause gleich mal testen.

Gruss Stefan
HM-Lan       HM-CC-TC Raumthermostat HM-CC-RT-DN & HM-CC-VD Heizkörperventil Dimmer HM-LC-DIM1T-FM 3 Stück
und divrse FS20 Komponenten  FHZ1000  mit div Schalter und Wandtaster  Max Heizung, Fenster Alarmanlage

stefanm

#17
Geht leider doch nicht  :(

define Bewaesserungs_Steuerung notify Bewaesserung_Active {Bewaesserung(Value("Bewaesserung_Active"), Value("Garten.Wand"))}

Übergigt zwar den Status von "Bewaesserung_Active" aber nicht den Status von "Garten.Wand"


Habt Ihr nochmal einen Tip was ich falsch mache ?

Im Log steht :
Bewaesserung_Utils_Initialize logfile Bewaesserung : Off
Bewaesserung_Utils_Initialize logfile Licht :



Egal ob ich readingGroup anstatt Value verwende, ich erhalte im 99_Bewaesserung_Utils.pm nicht den Status von Garzen.Wand.

Guss Stefan

Zitat von: stefanm am 15 April 2014, 17:04:06
Dank eurer Hilfe fange ich ganz langsam an Perl zu Verstehen ;)
und damit es Übersichtlicher wird habe ich eine 99_Bewaesserung_Utils.pm angelegt und überarbeitet.
Dazu hab ich dann Testweise die Code Schnipsel in ein klein Perl Script gepackt und laufen lassen



package main;

use strict;
use warnings;
use POSIX;

sub
Bewaesserung_Utils_Initialize($$)
{
  my ($hash) = @_;

}

sub
Bewaesserung($$)
{
my $Startzeit_Bewaesserung_rechts="23:00";
my $Startzeit_Bewaesserung_links="23:30";
my ($Bewaesserung_Active, $Garten_Licht, ) = @_;
      if ($Bewaesserung_Active eq "Auto" & $Garten_Licht eq "Off") {
             {fhem ("define a10 at ".$Startzeit_Bewaesserung_rechts." set Kreis_Trafo on-for-timer 3600")}
             {fhem ("define a11 at ".$Startzeit_Bewaesserung_rechts." set Kreis_Rechts on-for-timer 1800")}
             {fhem ("define a13 at ".$Startzeit_Bewaesserung_links." set Kreis_Links on-for-timer 1800")}
   }
      if ($Bewaesserung_Active eq "On") {
             Log 3, "Bewaesserung_Active->". Value("Bewaesserung_Active");
             {fhem ("set Kreis_Trafo on-for-timer 3600")}
             {fhem ("set Kreis_Rechts on-for-timer 1800")}
my ($Sekunden, $Minuten, $Stunden) = localtime(time);
             $Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
             $Minuten+=30;
             if ($Minuten > 59) { $Stunden+=1 ; $Minuten-=30 };
             {fhem ("define a10 at *".$Stunden.":".$Minuten." set Kreis_Links on-for-timer 1800")}
   }
       if ($Bewaesserung_Active eq "Off") {;
             Log 3, "Bewaesserung_Active->". Value("Bewaesserung_Active");
             {fhem ("set Kreis.* off")}
   }
       if ($Bewaesserung_Active eq "Urlaub" & $Garten_Licht eq "Off") {;
              Log 3, "Bewaesserung_Active->". Value("Bewaesserung_Active");
              {fhem ("define a10 at *23:00:00 set Kreis_Trafo on-for-timer 5400")};
              {fhem ("define a11 at *23:00:00 set Kreis_Rechts on-for-timer 1800")};
              {fhem ("define a13 at *23:30:00 set Kreis_Links on-for-timer 1800")};
              {fhem ("define a13 at *23:59:00 set Kreis_Urlaub on-for-timer 1800")};
   }
}
1;





Der notify Aufruf dazu sieht wie folgt aus:


define Bewaesserungs_Steuerung notify Bewaesserung_Active {Bewaesserung(Value("Bewaesserung_Active"), Value("Garten.Wand"))}


UND ES GEHT.


ich Danke euch. Wieder was gelernt, jedenfalls hier ohne Hardware, werd ich zuhause gleich mal testen.

Gruss Stefan
HM-Lan       HM-CC-TC Raumthermostat HM-CC-RT-DN & HM-CC-VD Heizkörperventil Dimmer HM-LC-DIM1T-FM 3 Stück
und divrse FS20 Komponenten  FHZ1000  mit div Schalter und Wandtaster  Max Heizung, Fenster Alarmanlage

stefanm

Habs alleine gefunden  :) :) :)

In dem Notify wird das Device nicht mehr übergeben sondern nur noch das Dummy


define Bewaesserungs_Steuerung notify Bewaesserung_Active {Bewaesserung (Value("Bewaesserung_Active")) }


Und das Device wird in 99_Bewaesserung_Utils.pm abgfragt


sub
Bewaesserung($)
{
my ($Bewaesserung_Active) = @_;
my $Startzeit_Bewaesserung_rechts="23:00:00";
my $Startzeit_Bewaesserung_links="23:30:00";
Log 3, "Bewaesserung_Utils_Initialize logfile Bewaesserung : ". Value("Bewaesserung_Active");
Log 3, "Bewaesserung_Utils_Initialize logfile Licht : ". Value("Garten.Wand");
      if ($Bewaesserung_Active eq "Auto") {
               if (Value("Garten.Wand") eq "off") {
              Log 3, "Bewaesserung_Active If Auto->". Value("Bewaesserung_Active");
             fhem ("delete a10");
             fhem ("delete a11");
             fhem ("delete a12");
             fhem ("delete a13");
             fhem ("delete a14");
             Log 3, "Bewaesserung_Active-> Eintraege gelöscht";
             fhem ("define a10 at *23:00:00 set Kreis_Trafo on-for-timer 3600");
             fhem ("define a11 at *23:00:00 set Kreis_Rechts on-for-timer 1800");
             fhem ("define a13 at *23:30:00 set Kreis_Links on-for-timer 1800");
             fhem ("define a14 at *00:20 set Kreis.* off");
             Log 3, "Bewaesserung_Active-> Eintraege geschrieben". Value("Startzeit_Bewaesserung_links");
   }
}
      if ($Bewaesserung_Active eq "On") {
              Log 3, "Bewaesserung_Active->". Value("Bewaesserung_Active");
             {fhem ("delete a10")};
             {fhem ("delete a11")};
             {fhem ("delete a12")};
             {fhem ("delete a13")};
             {fhem ("delete a14")};
             {fhem ("set Kreis_Trafo on-for-timer 3600")};
             {fhem ("set Kreis_Rechts on-for-timer 1800")};
             my ($Sekunden, $Minuten, $Stunden) = localtime(time);
             $Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
             $Minuten+=30;
             if ($Minuten > 59) { $Stunden+=1 ; $Minuten-=30 };
             my $SB=("$Stunden:$Minuten");
             {fhem ("define a10 at *".$SB." set Kreis_Links on-for-timer 1800")};
             $Stunden+=1;
             my $SB=("$Stunden:$Minuten");
             {fhem ("define a14 at *".$SB." set Kreis.* off")};         
             {fhem ("set  Bewaesserung_Active off")};       
   }
       if ($Bewaesserung_Active eq "Off") {
              Log 3, "Bewaesserung_Active->". Value("Bewaesserung_Active");
             {fhem ("delete a10")};
             {fhem ("delete a11")};
             {fhem ("delete a12")};
             {fhem ("delete a13")};
             {fhem ("delete a14")};
             {fhem ("set Kreis.* off")};
   }
       if ($Bewaesserung_Active eq "Urlaub") {
              Log 3, "Bewaesserung_Active-urlaub->". Value("Bewaesserung_Active");
             {fhem ("delete a10")};
             {fhem ("delete a11")};
             {fhem ("delete a12")};
             {fhem ("delete a13")};
             {fhem ("delete a14")};
              {fhem ("define a10 at *23:00:00 set Kreis_Trafo on-for-timer 5400")};
              {fhem ("define a11 at *23:00:00 set Kreis_Rechts on-for-timer 1800")};
              {fhem ("define a13 at *23:30:00 set Kreis_Links on-for-timer 1800")};
              {fhem ("define a12 at *23:59:00 set Kreis_Urlaub on-for-timer 1800")};
              {fhem ("define a14 at *00:10:00 set Kreis.* off")};
   }
}
1;


HM-Lan       HM-CC-TC Raumthermostat HM-CC-RT-DN & HM-CC-VD Heizkörperventil Dimmer HM-LC-DIM1T-FM 3 Stück
und divrse FS20 Komponenten  FHZ1000  mit div Schalter und Wandtaster  Max Heizung, Fenster Alarmanlage