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...
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 :-*
Oh da bin ich wohl in bash abgerutscht! 8)
Danke dir ;)
Oder noch besser, statt = den Vergleich mit eq machen!( wenn es KEIN numerischer Vergleich ist) ;)
VG
Frank
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-") }
}
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
Ach verdammt...... ;D
Ne ich tingel zu sehr zwischen den Sprachen umher.....
Völlig verpennt, dass erste ist ja erstmal soweit ein abgeschlossenes Ding.
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.
== "5"
besser == 5, oder?
Geht denn auch:
if ([Streifen:state]) == 5)
?
Das sieht nach einem DOIF Konstrukt aus... (da müsste es, glaub ich, IF sein, nicht if) Sorry da bin ich raus
Nee normales if eigentlich... oder geht "[Streifen:state]" das nur ik DOIF?
Ja, ist kein Perl ???
Dann bringt es endlich Licht in mein Chaos ;-) Ich danke euch!
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.
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
das war aber der Ausgangspunkt
Zitat von: Master_Nick am 26 Februar 2017, 19:39:33
Geht denn auch:
if ([Streifen:state]) == 5)
?
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
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.
: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
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
Ach hau mirn Schlappen an Däds ;D :D
Danke!
Läuft!
Streifen {
fhem("setreading Streifen newstate [Streifen:state]");
}
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]
Zu spät
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.
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-") } }
}
if (Value("Streifen") == 0) {
for (my $i=1;$i<15;$i++) {
fhem("set harmony_37861872 Dimm-")
}
}
Probiere mal so.
: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.
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-");
}
}
}
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-");
}
}
}
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-"); } }
}
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-"); } }
}
:)
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-"); } }
}
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
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"); } }
}
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-"); } }
}
Bin leider noch nicht dazu gekommen. Denke mal wenn ich den Kurzen gleich ins Bett gebracht habe das es dann was wird.
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
Hast nicht gehetzt, alles gut. Wollte nur was schreiben das ich es nachher schneller wieder finde.
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
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-");
}
}
}
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.
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?
Exakt ein Notify.
Ach so. Dann muß ich das mal neu machen. Mom
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-"); } }
}
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
Hast Du irgendwas besonderes aktiv codemirror oder so? Bist Du auf 5.8 ?
Was ist Codemirror :o ;D
Version 5.8 ja
Ich bringe morgen früh mal meine Testumgebung auf aktuellen stand und teste dann noch mal
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.
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.
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.
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
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]+ { }
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.
Für das Leerzeichen zwischen Streifen und der Zahl...
Gruß, Joachim
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.
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 >:(
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...
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...
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
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 :-)
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