FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Master_Nick am 26 Februar 2017, 12:13:25

Titel: [Gelöst] Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 12:13:25
Ich bekomme es einfach nicht hin, dass dieses hier läuft:

Streifen {
if (Value("Streifen") = "on") { fhem("set Stripe.Strom on") }
if (Value("Streifen") = "off") { fhem("set Stripe.Strom off") }
if (Value("Streifen") = "0") {for (my $i=1;;$i!=32;;$i++) { fhem("set harmony_37861872 Dimm-") }}
if (Value("Streifen") = "5") { fhem("set harmony_37861872 Dimm-") }
}


Logmeldung:
Zitat2017.02.26 12:02:44 1: PERL WARNING: Found = in conditional, should be == at (eval 1156) line 5.
2017.02.26 12:02:44 3: eval: my $NAME='Streifen';my $EVENT='0';my $SELF='Stripe.Dimmer';my $TYPE='dummy';my $EVTPART0='0';{
if (Value("Streifen") = "on") { fhem("set Stripe.Strom on") }
if (Value("Streifen") = "off") { fhem("set Stripe.Strom off") }
if (Value("Streifen") = "0") {for (my $i=1;;$i!=32;;$i++) { fhem("set harmony_37861872 Dimm-") }}
if (Value("Streifen") = "5") { fhem("set harmony_37861872 Dimm-") }
}

Ich hatte es ursprünglich versucht mit:
if ([Streifen:state] = "on") { blah blah }

Ebenso soll der Status von Streifen immer in ein eigenes Reading für spätere Verarbeitung gespeichert werden - ging auch nicht:
fhem "setreading Streifen newstate Value("Streifen")"

oder

fhem "setreading Streifen newstate [Streifen:state]"

Irgendwas will einfach nicht in meinen Kopf...
Titel: Antw:Ich und die Syntax.....
Beitrag von: KölnSolar am 26 Februar 2017, 12:27:57
z.B., dass Du auch Perl-Syntax nehmen solltest  ::)
ZitatPERL WARNING: Found = in conditional, should be ==
???
siehe hier https://wiki.selfhtml.org/wiki/Perl/Operatoren#Vergleichsoperatoren
Kölle Alaaf  :-*
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 12:38:01
Oh da bin ich wohl in bash abgerutscht!  8)

Danke dir  ;)
Titel: Antw:Ich und die Syntax.....
Beitrag von: franky08 am 26 Februar 2017, 13:15:22
Oder noch besser, statt = den Vergleich mit eq machen!( wenn es KEIN numerischer Vergleich ist)  ;)

VG
Frank
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 18:46:18
Danke euch beiden - habe nun immer noch nicht den Durchblick:

Zitat2017.02.26 18:44:46 1: ERROR evaluating my $NAME='Streifen';my $SELF='Stripe.Dimmer';my $EVENT='40';my $TYPE='dummy';my $EVTPART0='40';{
fhem "setreading Streifen newstate [Streifen:state]"
if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on") }
if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off") }
if (Value("Streifen") == "0") {for (my $i=1;;$i!=32;;$i++) { fhem("set harmony_37861872 Dimm-") }}
if (Value("Streifen") == "5") { fhem("set harmony_37861872 Dimm-") }
}
: syntax error at (eval 3933) line 3, near ") {"
syntax error at (eval 3933) line 5, at EOF
syntax error at (eval 3933) line 7, near "}
}"



Streifen {
fhem "setreading Streifen newstate [Streifen:state]"
if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on") }
if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off") }
if (Value("Streifen") == "0") {for (my $i=1;;$i!=32;;$i++) { fhem("set harmony_37861872 Dimm-") }}
if (Value("Streifen") == "5") { fhem("set harmony_37861872 Dimm-") }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: KölnSolar am 26 Februar 2017, 19:21:17
beim ersten fhem-Aufruf fehlen ()

und das
Zitat...Eine Anweisung besteht in Perl aus einem Befehl, der normalerweise mit einem Semikolon ; abgeschlossen wird. ...
scheint Dich so gar nicht zu interessieren. :o

Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 19:22:39
Ach verdammt......  ;D

Ne ich tingel zu sehr zwischen den Sprachen umher.....

Völlig verpennt, dass erste ist ja erstmal soweit ein abgeschlossenes Ding.
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 19:24:37
Zitat von: KölnSolar am 26 Februar 2017, 19:21:17
beim ersten fhem-Aufruf fehlen ()

und das scheint Dich so gar nicht zu interessieren. :o

Bei Punkt 2 gehe ich mit Dir. Punkt eins geht auch ohne  () . Mache ich schon ewig so. Wäre aber nicht meine Empfehlung, da es nicht ganz sauber wäre. Aber es geht.
Titel: Antw:Ich und die Syntax.....
Beitrag von: franky08 am 26 Februar 2017, 19:32:27
== "5" besser == 5, oder?
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 19:39:33
Geht denn auch:

if ([Streifen:state]) == 5)?
Titel: Antw:Ich und die Syntax.....
Beitrag von: franky08 am 26 Februar 2017, 19:46:46
Das sieht nach einem DOIF Konstrukt aus... (da müsste es, glaub ich, IF sein, nicht if) Sorry da bin ich raus
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 19:51:12
Nee normales if eigentlich... oder geht "[Streifen:state]" das nur ik DOIF?
Titel: Antw:Ich und die Syntax.....
Beitrag von: KölnSolar am 26 Februar 2017, 19:57:28
Ja, ist kein Perl  ???
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 19:59:10
Dann bringt es endlich Licht in mein Chaos ;-) Ich danke euch!
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 20:03:16
Zitat von: Master_Nick am 26 Februar 2017, 19:51:12
Nee normales if eigentlich... oder geht "[Streifen:state]" das nur ik DOIF?

Nein das geht so auch da es seit ein paar Monaten zur FHEM Syntax gehört. Also bitte nur innerhalb einer FHEM Anweisung aufrufen. So wie du es ja auch gemacht hast.
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 20:08:55
Zitat
Ab featurelevel 5.7 ersetzt das set und setreading Befehl
[device:reading] mit dem Wert des Readings für device, falls sowohl device, als auch Reading existiert, und nicht leer ist.
[device:reading:d] wie ohne :d, aber alles nicht-numerische wird entfernt, siehe ReadingsNum
{(perlExpression)} mit dem Ergebnis der perlExpression. $DEV wird dabei mit dem Namen des vom set betroffenen Gerätes ersetzt.

Laut Commandref
Titel: Antw:Ich und die Syntax.....
Beitrag von: KölnSolar am 26 Februar 2017, 20:30:19
das war aber der Ausgangspunkt
Zitat von: Master_Nick am 26 Februar 2017, 19:39:33
Geht denn auch:

if ([Streifen:state]) == 5)?
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 20:32:29
Jo und da geht es ja nicht ;-D nur war mir unklar warum.....  ich mische dort Perl mit FHEM  ohne vom Perl mich abzugrenzen...... if (fhem"[Streifen:state] == 5")  könnte ja z. B. gehen ^^

Aber wieviel Sinn das macht.... :-D

Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 20:36:15
Zitat von: Master_Nick am 26 Februar 2017, 20:32:29
Jo und da geht es ja nicht ;-D nur war mir unklar warum.....  ich mische dort Perl mit FHEM  ohne vom Perl mich abzugrenzen...... if (fhem"[Streifen:state] == 5")  könnte ja z. B. gehen ^^

Aber wieviel Sinn das macht.... :-D

Aha das mit dem if hatte ich übersehen.
Nein das geht auch nicht. Du kannst Bedingungsabfragen nicht mit FHEM Syntax mische n. Das was ich Dir gezeigt habe hatte nur Auswirkungen bei set oder setreading Anweisungen so wie es in der Commandref steht.
Bedingungen gehen nur mit Perl if, oder als FHEM Modul IF.
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 20:50:14
 :o

Damit ich es endlich verstehe.... backe ich nun Zeile für Zeile:


Streifen {
fhem("setreading Streifen [Streifen:state]");
}


Will aber immer noch nicht  ;D
Titel: Antw:Ich und die Syntax.....
Beitrag von: Icinger am 26 Februar 2017, 20:53:27
Streifen {
fhem("setreading Streifen <READINGSNAME> [Streifen:state]");
}


Dir fehlt das reading, welches gesetzt werden soll.

Streifen ist das Device
[Streifen:state] Ist der Wert, der WOHIN?? gesetzt werden soll?
lg, Stefan
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 20:53:57
Ach hau mirn Schlappen an Däds  ;D :D

Danke!

Läuft!

Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
}

Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 20:56:25
Zitat von: Master_Nick am 26 Februar 2017, 20:50:14
:o

Damit ich es endlich verstehe.... backe ich nun Zeile für Zeile:


Streifen {
fhem("setreading Streifen [Streifen:state]");
}


Will aber immer noch nicht  ;D

Richtig. Und du bekommst ganz sicher eine Aussagekräftige Fehlermeldung dazu.
setreading erwartet wie viele Parameter zur Übergabe? DREI. DEVICE READINGSNAME WERT

setreading dummyTermostateTemp dummyTemp [thermostate:temperature]
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 20:57:06
Zu spät
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 20:58:44
Ich muss zugeben die ist für mich nicht so Aussagekräftig, dass ich es gecheckt hätte.

Zitat2017.02.26 20:52:43 5: Cmd: >setreading Streifen [Streifen:state]<
2017.02.26 20:52:43 3: setreading Streifen [Streifen:state] : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.02.26 20:52:43 3: Stripe.Dimmer return value: Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

OK OK... ich schäme mich
ZitatUsage: setreading <name> <reading> <value>


Seltsam... hatte nie Probleme mit perl fhem und co... scheint nicht mein Tag zu sein.
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 21:51:29
Also jetzt habe ich wirklich gesucht....

Ich kann es nicht mal einchecken in FHEM.

Zitatsyntax error at (eval 6726) line 5, at EOF
Mit der eval 6726 kann ich null anfangen ist weder die Zeichennummer noch sonstiges. Zeile 5 ist genau das hier folgende und EOF = End of Feed?



if (Value("Streifen") == 0) { for (my $i=1;;$i!=15;;$i++) { fhem("set harmony_37861872 Dimm-") } }

Das Gesamte ist:

Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on") }
if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off") }
if (Value("Streifen") == 0) { for (my $i=1;;$i!=15;;$i++) { fhem("set harmony_37861872 Dimm-") } }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 21:58:06

if (Value("Streifen") == 0) {
          for (my $i=1;$i<15;$i++) {
               fhem("set harmony_37861872 Dimm-")
          }
}


Probiere mal so.
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 21:59:33
 :o er mag die Zeile mit Variable nicht.
Zitatsyntax error at (eval 6759) line 6, at EOF

Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on") }
if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off") }
if (Value("Streifen") == 0) {
          for (my $i=1;$i<15;$i++) {
               fhem("set harmony_37861872 Dimm-")
          }
}
}


Ich vermute fast, man kann keine "for" Funktion in ein "if" schleifen einbauen. Auch, wenn das für mich keinen Sinn macht.
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 22:25:20
Sorry, mein Fehler


Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
if (Value("Streifen") eq "on") {
       fhem("set Stripe.Strom on");
}

if (Value("Streifen") eq "off") {
      fhem("set Stripe.Strom off");
}

if (Value("Streifen") == 0) {
          for (my $i=1;$i<15;$i++) {
               fhem("set harmony_37861872 Dimm-");
          }
}
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 22:29:57
Er meckert weiter über die zeile mit $i:

Zitatsyntax error at (eval 6881) line 12, at EOF

Ich verstehe es nicht, hatte es auch schon so ähnlich und mit ; aber die jucken nicht bisher.

Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
if (Value("Streifen") eq "on") {
       fhem("set Stripe.Strom on");
}

if (Value("Streifen") eq "off") {
      fhem("set Stripe.Strom off");
}

if (Value("Streifen") == 0) {
          for (my $i=1;$i<15;$i++) {
               fhem("set harmony_37861872 Dimm-");
          }
}
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 22:47:13
Das hier alleine geht.... aber es sollte schon mit allem zusammen sein...

Streifen {
if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}


Sozusagen so - geht aber noch nicht:
Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on") }
if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off") }
if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 23:16:04
Was heisst geht nicht? Selbe Fehlermeldung?

Mach doch mal bitte am Ende immer ein ;


Streifen {
   fhem("setreading Streifen newstate [Streifen:state]");
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
   if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 23:20:01
 :)

Genau wie du es gespostet hast eingefügt - Fehlermeldung identisch mit meiner Version ohne die ";" aber ja hast damit ja Recht:

Zitatsyntax error at (eval 8662) line 5, at EOF

Streifen {
   fhem("setreading Streifen newstate [Streifen:state]");
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
   if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 26 Februar 2017, 23:26:23
Das interessiert mich. Ich werde mir das morgen mal in meiner Testmaschine anschauen.
Aber lösche mal die letzte Zeile komplett und schaue ob es dann läuft. Wenn ja füge sie wieder ein und änder nur mal den set Befehl
set harmony_37861872 Dimm-

Mach da irgendwas anderes. set blabla test oder so. Eventuell stört er sich am - am Ende. Ist aber nur schlecht geraten
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 26 Februar 2017, 23:34:44
Ich verstehe es auch nicht.....  ???
Danke schon mal, dass du mir helfen magst.

Mit weglassen der letzten Zeile 0 Probleme:


Streifen {
   fhem("setreading Streifen newstate [Streifen:state]");
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
}


Mit anderem set kommando geht es ebenfalls nicht:
Streifen {
   fhem("setreading Streifen newstate [Streifen:state]");
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
   if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("setreading Streifen newstate Test"); } }
}


Kann es gar nicht erst speichern:
Zitatsyntax error at (eval 8710) line 5, at EOF

Aber komplett allein gestellt geht es:


Streifen {
   if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("setreading Streifen newstate Test"); } }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 27 Februar 2017, 19:34:12
Also ich bekomme das hier nicht lauffähig, sobald man die "#" entfernt geht nix mehr:



Streifen {
   fhem("setreading Streifen newstate [Streifen:state]");
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
#   if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 19:39:47
Bin leider noch nicht dazu gekommen. Denke mal wenn ich den Kurzen gleich ins Bett gebracht habe das es dann was wird.
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 27 Februar 2017, 19:40:23
Hehe Kein Stress - ich sah nur, dass es schon auf Seite 3 gerutscht war :-D

War nicht mein Plan dich zu hetzten - das steigert ja die Hilfsbereitschaft nicht :-D
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 19:41:49
Hast nicht gehetzt, alles gut. Wollte nur was schreiben das ich es nachher schneller wieder finde.
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 21:18:48
Manchmal ist man ganz schön blind.
Das ist doch eine Funktion aus einer myUtils oder?
Da fehlt sub vor dem Funktionsnamen


sub Streifen() {
   fhem("setreading Streifen newstate [Streifen:state]");
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
   if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("setreading Streifen newstate Test"); } }
}


Aber das muss noch nicht das Problem beheben. Wundert mich nur wie das durch die Syntaxprüfung kam
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 21:22:33
So geht es bei mir


sub streifen() {

    fhem("setreading Streifen newstate [Streifen:state]");
   
    if (Value("Streifen") eq "on") {
        fhem("set Stripe.Strom on");
    }

    if (Value("Streifen") eq "off") {
        fhem("set Stripe.Strom off");
    }

    if (Value("Streifen") == 0) {
        for (my $i=0 ; $i < 1 ; $i++) {
            fhem("set harmony_37861872 Dimm-");
        }
    }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 27 Februar 2017, 21:32:36
Das ist doch eine Funktion aus einer myUtils oder? <- Was genau meinst du?

Nicht wissentlich ist da irgendwo etwas daraus. Streifen ist der Name meines Dummy.
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 21:36:08
Zitat von: Master_Nick am 27 Februar 2017, 19:34:12
Also ich bekomme das hier nicht lauffähig, sobald man die "#" entfernt geht nix mehr:



Streifen {
   fhem("setreading Streifen newstate [Streifen:state]");
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
#   if (Value("Streifen") == 0) { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}


Wo genau steht dieser Text bei Dir in FHEM? Ist das Teil eines Notify?
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 27 Februar 2017, 21:37:46
Exakt ein Notify.
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 21:38:49
Ach so. Dann muß ich das mal neu machen. Mom
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 21:49:37
Ich denke ich habe es gefunden. Ich hoffe



Streifen {
   fhem("setreading Streifen newstate [Streifen:state]");
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
   if (Value("Streifen") eq '0') { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 27 Februar 2017, 22:17:51
Nope immer noch.

Zitatsyntax error at (eval 368) line 5, at EOF

Verbose auf 5 sagt:

Zitat2017.02.27 22:21:10 1: ERROR evaluating my $EVTPART2='3';my $EVTPART19='0';my $EVTPART16='7';my $EVTPART25='6';my $EVTPART21='2';my $EVTPART0='1';my $EVTPART5='6';my $EVTPART22='3';my $EVTPART4='5';my $EVTPART18='9';my $SELF='Stripe.Dimmer';my $TYPE='Stripe.Dimmer';my $EVTPART10='1';my $EVTPART24='5';my $EVTPART12='3';my $EVTPART29='0';my $EVTPART3='4';my $EVTPART8='9';my $EVTPART6='7';my $EVTPART26='7';my $EVTPART13='4';my $EVTPART27='8';my $EVTPART23='4';my $EVTPART11='2';my $EVTPART15='6';my $EVTPART20='1';my $EVTPART9='0';my $NAME='Stripe.Dimmer';my $EVTPART7='8';my $EVTPART17='8';my $EVTPART1='2';my $EVTPART14='5';my $EVTPART28='9';my $EVENT='1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0';{return undef;; {
   fhem("setreading Streifen newstate [Streifen:state]");;
   if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on");; }
   if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off");; }
   if (Value("Streifen") eq "0") { for (my $i=0 ;; $i < 1 ;; $i++) { fhem("set harmony_37861872 Dimm-");; } }
}}: syntax error at (eval 381) line 5, at EOF
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 22:27:55
Hast Du irgendwas besonderes aktiv codemirror oder so? Bist Du auf 5.8 ?
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 27 Februar 2017, 22:28:51
Was ist Codemirror  :o ;D

Version 5.8 ja
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 23:08:16
Ich bringe morgen früh mal meine Testumgebung auf aktuellen stand und teste dann noch mal
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 27 Februar 2017, 23:35:50
Kann ich in einem Notify mit regex arbeiten

Streifen:state:[0-9]+ {  blah blah }


Dann hätte ich eine Lösung. Und könnte den Dimmer in ein eigenes Notify, dass auf Zahlenwerte im State reagiert packen.

Denn alleine funktioniert das hier:

Streifen { if (Value("Streifen") eq "0") { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } } }

Und auch das hier allein:

Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
if (Value("Streifen") eq "0") { fhem("set harmony_37861872 Dimm-");  }
}

Nur zusammen geht es nicht. Ich kann es aber sogar untereinander in ein Notify packen. Sofern es nicht mit Klammern zu einem wird.
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 27 Februar 2017, 23:54:22
Zitat von: Master_Nick am 27 Februar 2017, 23:35:50
Kann ich in einem Notify mit regex arbeiten

Streifen:state:[0-9]+ {  blah blah }


Dann hätte ich eine Lösung. Und könnte den Dimmer in ein eigenes Notify, dass auf Zahlenwerte im State reagiert packen.

Denn alleine funktioniert das hier:

Streifen { if (Value("Streifen") eq "0") { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } } }

Und auch das hier allein:

Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
if (Value("Streifen") eq "0") { fhem("set harmony_37861872 Dimm-");  }
}

Nur zusammen geht es nicht. Ich kann es aber sogar untereinander in ein Notify packen. Sofern es nicht mit Klammern zu einem wird.

Klar kannst Du. Das Notify arbeitet ja mit RegEx um zu triggern. Du kannst also aus Deinem einen zwei machen.
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 27 Februar 2017, 23:56:25
Nur reagiert FHEM nicht so wie ich es will...

state wird auf 50 gesetzt oder 3 völlig egal..


aber notify mit  Streifen:state:[0-9]+ { } springt nicht an also gar nicht kein Trigger.
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 28 Februar 2017, 00:01:16
Mein Notfify:
Internals:
   CFGFN
   DEF        Streifen:state:[0-9]+ {
if (Value("Streifen") eq "0") { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}



   NAME       Streifen.Dimmer
   NOTIFYDEV  Streifen
   NR         446
   NTFY_ORDER 50-Streifen.Dimmer
   REGEXP     Streifen:state:[0-9]+
   STATE      active
   TYPE       notify
   Readings:
     2017-02-27 23:57:34   state           active
Attributes:
   room       Technikraum


Mein Dummy zum schalten:
Internals:
   NAME       Streifen
   NR         206
   STATE      0
   TYPE       dummy
   Readings:
     2017-02-27 22:31:34   newstate        0
     2017-02-23 23:53:27   oldstate        40
     2017-02-27 23:57:43   state           0
Attributes:
   alexaName  Streifen
   alexaRoom  Wohnzimmer
   genericDeviceType light
   group      Licht
   homebridgeMapping Brightness=state,cmd=
   icon       light_led_stripe_rgb
   room       Echo,Wohnzimmer
   setList    state:slider,0,1,100 on off
   webCmd     state



Logmeldung:
Zitat2017.02.27 23:59:58 5: Cmd: >set Streifen 61<
2017.02.27 23:59:58 4: dummy set Streifen 61
2017.02.27 23:59:58 5: Starting notify loop for Streifen, 1 event(s), first is 61
2017.02.27 23:59:58 5: createNotifyHash
2017.02.27 23:59:58 5: data is {"deviceName": "Streifen","changes":"state:61","type":"notify","source":"gcmsend_fhem","vibrate":"false"}
2017.02.27 23:59:59 5: End notify loop for Streifen


2017.02.28 00:00:02 5: Cmd: >set Streifen 0<
2017.02.28 00:00:02 4: dummy set Streifen 0
2017.02.28 00:00:02 5: Starting notify loop for Streifen, 1 event(s), first is 0
2017.02.28 00:00:02 5: data is {"deviceName": "Streifen","changes":"state:0","type":"notify","source":"gcmsend_fhem","vibrate":"false"}
2017.02.28 00:00:03 5: End notify loop for Streifen
Titel: Antw:Ich und die Syntax.....
Beitrag von: CoolTux am 28 Februar 2017, 00:02:53
Zitat von: Master_Nick am 27 Februar 2017, 23:56:25
Nur reagiert FHEM nicht so wie ich es will...

state wird auf 50 gesetzt oder 3 völlig egal..


aber notify mit  Streifen:state:[0-9]+ { } springt nicht an also gar nicht kein Trigger.

Du musst dich schon daran halten wie das Event aus schaut


Streifen.[0-9]+ { }
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 28 Februar 2017, 00:04:58
Eventmonitor sagt:

Zitat2017-02-28 00:04:32 dummy Streifen 35

Wofür dann der "." ?


SOooo!  ;D

Es läuft.... warum nun die for Schleife zum Teufel nicht mit dem andern zusammen laufen will... KEINE Ahnung! Selbst 4 Augen vor einem Bildschirm konnten dies nicht klären.
Aber die Vorfilterung mittels Notify auf Zahlen oder Buchstaben vereinfachte es generell nochmal:

Internals:
   DEF        Streifen.[0-9]+ {
if (Value("Streifen") eq "0") { for (my $i=0 ; $i < 1 ; $i++) { fhem("set harmony_37861872 Dimm-"); } }
}

   NAME       Streifen.Dimmer
   NOTIFYDEV  Streifen
   NR         209
   NTFY_ORDER 50-Streifen.Dimmer
   REGEXP     Streifen.[0-9]+
   STATE      2017-02-28 00:15:32
   TYPE       notify
   Readings:
     2017-02-28 00:11:35   state           active
Attributes:
   room       Technikraum



Und das zweite:

Internals:
   DEF        Streifen.[a-z]+ {
if (Value("Streifen") eq "on") { fhem("set Stripe.Strom on"); }
if (Value("Streifen") eq "off") { fhem("set Stripe.Strom off"); }
}
   NAME       Streifen.Schalter
   NOTIFYDEV  Streifen
   NR         210
   NTFY_ORDER 50-Streifen.Schalter
   REGEXP     Streifen
   STATE      2017-02-28 00:15:32
   TYPE       notify
   Readings:
     2017-02-28 00:13:17   state           active
Attributes:
   room       Technikraum



Ggfs. werde ich beim zweiten den Filter auf Buchstaben weg lassen. Aber mal sehen ob nötig.
Titel: Antw:Ich und die Syntax.....
Beitrag von: MadMax-FHEM am 28 Februar 2017, 00:16:00
Für das Leerzeichen zwischen Streifen und der Zahl...

Gruß, Joachim
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 28 Februar 2017, 00:20:34
Jo hab es nun endlich laufen........

Aber wie gesagt es bleibt ein Rätsel warum nicht alles in einem Abwasch gehen will.
Fehler konnte bisher keiner Finden. Wird wohl eher irgendwas zur Laufzeit sein mit den Variablen bei der For Schleife.. aber selbst eine vorherige Definierung bevor sie referenziert werden.. keine chance.
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 28 Februar 2017, 00:28:33
Es gab auch eine Variable für den vorherigen Wert in einem Notify oder? Hatte da mal was gelesen...
Finde es natürlich nicht wieder  ;D >:(
Titel: Antw:Ich und die Syntax.....
Beitrag von: MadMax-FHEM am 28 Februar 2017, 00:36:48
Du hast es doch im dummy gespeichert oder interpretiere ich oldValue/newValue falsch?
Einfach per ReadungsVal oder ReadingsNum abfragen...

Wenn du es noch nicht speicherst, dann kannst du das ja mit userreadings tun...

Bzw. ist doch der aktuelle Wert vor der Änderung der letzte weil danach ist es ja erst der neue!? ;)

Gruß, Joachim

P.S.: wenn du im notify noch mehr tun willst und weitere Dinge vergleichen/prüfen willst solltest du vielleicht mal über das Auslagern in eine sub nachdenken. Also notiy ruft sub und dort wird dann alles notwendige getan...
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 28 Februar 2017, 00:41:22
Ich habe das reading zumindest angelegt, genutzt wird es noch nicht.


Denn mir fehlt gerade der logische Ansatz... FHEM müsste BEVOR es den neuen Status setzt den alten speichern... ich glaube das geht nur über ein Konstrukt aus mehreren Dummys. Also bevor ein Steuerbefehl kommt muss der alte Wert gespeichert sein.

Ich glaub ich muss schlafen...
Titel: Antw:Ich und die Syntax.....
Beitrag von: MadMax-FHEM am 28 Februar 2017, 00:46:07
Du musst ihn doch nur (z.B. setreading) bevor du den Wert änderst im dummy speichern...
...bzw. eigentlich wozu?

Weil den aktuellen kannst du genauso mit ReadingsVal/ReadingsNum auslesen und dann den neuen berechnen oder was auch immer du damit tun willst musst und dann den Wert setzen...

Merken musst du ihn doch nur, wenn du nach dem setzen den alten Wert erneut brauchst nachdem du den notify/sub verlassen hast. Solange du im notify/sub bist kannst du ihn ja lokal in einer Variablen halten...

Gute Nacht, Joachim
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 28 Februar 2017, 01:12:16
Absolut richtig - ich brauche nur oldstate und berechne dann aufgrund dessen Wert (sofern Zahlen) den Abstand zum Zielwert und Dimme in die Richtung des Wertes... das bau ich mir dann morgen.

Danke vielmals! Ihr beiden :-)
Titel: Antw:Ich und die Syntax.....
Beitrag von: Master_Nick am 02 März 2017, 23:09:12
So die Lösung wurde gefunden...

Heute ein update nochmal gemacht von FHEM und dann noch perlSyntaxCheck in global auf 1 gesetzt. Schon geht es ohne Probleme und ohne weitere Änderungen am Statement.

Infos: https://forum.fhem.de/index.php/topic,68277.0.html

Ich danke euch! CoolTux & MadMax-FHEM