Hauptmenü

Problem IF Abfrage

Begonnen von samsungruth, 05 April 2013, 14:23:09

Vorheriges Thema - Nächstes Thema

samsungruth

Hallo,
ich stehe im Moment komplett auf dem Schlauch, will mir eine simple if Abfage basteln und komme nicht weiter.
Habe aus dem Einsteiger pdf die Abfrage nachgebaut und bekomme im log folgende Fehlermeldungen:

2013.04.05 14:09:13 3: FS20 set TVBacklight off
2013.04.05 14:09:18 3: FS20 set Stehlampe_test on
2013.04.05 14:09:18 3: Schalter1Notify return value: Unrecognized character \xE2; marked by <-- HERE after { if ( <-- HERE near column 8 at (eval 3740) line 1.

Habe wie beschrieben folgende zeile eingefügt:
define Schalter1Notify notify Stehlampe_test { if ( "%" eq "on") {fhem("set TVBacklight on")}
nach schalten von Stehlampe_test auf on passiert nix, im log steht obige Fehlermeldung.
Kann mir jemand einen schubs geben und erklähren was ich falsch mache.
gebe ich folgendes in die fhem Kommandzeile ein:
    
{ if ( "%" eq "on") {fhem("set TVBacklight on")} }
bekomme ich eine ähnliche Fehlermeldung:
Unrecognized character \xE2; marked by <-- HERE after { if ( <-- HERE near column 8 at (eval 3807) line 1.

Mein System läuft auf Raspberry
Fhem info:
  Release  : 5.3
  Branch   : DEVELOPMENT
  OS       : linux
  Arch     : arm-linux-gnueabihf-thread-multi-64int
  Perl     : v5.14.2
  uniqueID : 971e816a6fef9b244ef4deafc10b2a74

Defined models per module:
  CUL_HM         : HM-LC-SW2-FM
  FS20           : fs20st
  IT             : itswitch
Release  : 5.5
RASPI
CUL_HM/EM  FS20 IT AVR MAX WEBIO

Zrrronggg!

Sieht eigentlich alles richtig aus.

Das hier

 Unrecognized character \xE2; marked by <-- HERE after { if ( <-- HERE near column 8 at (eval 3740) line 1.

interpretiere ich so, dass du

{ if ( "%" eq "on") {fhem("set TVBacklight on")} }

da drin nach dem if ein verstecktes Zeichen hast, Zeilenumbruch oder irgendsowas, denkbar sind auch verlängerte Leerzeichen (gibts in manchen Zeichensätzen)

Zitatgebe ich folgendes in die fhem Kommandzeile ein:

{ if ( "%" eq "on") {fhem("set TVBacklight on")} }
bekomme ich eine ähnliche Fehlermeldung:


Gibts du das wirklich ein, oder hast du das mit Copy/Paste übernommen (und damit den Fehler gleich mit kopiert)?

Ich würde
1. den ganzen Kram noch mal per Hand eintippen, und zwar OHNE Leerzeichen nach dem IF
2. einfacher gehts ausserdem so:
define Schalter1Notify notify Stehlampe_test:on set TVBacklight on  
3. würde ich ein define nicht Schalter1Notify nennen, Wenn du da aus versehen eine Leerzeichen an der falschen Stelle machst hast du Debuggingspass. In Variablen und Definenamen würde ich immer vermeiden Namensbestandteile zu verwenden die eine Funktion haben.

Also z.B.:
- keine Dummys die "TestDummy" heissen
- keine defines die "TestDefine" oder "TestNotify" heissen
- keine Aktoren die "Licht_on" heissen
etc.

Das alles wäre nicht verboten, ich erlaube mir nur den Rat, das nicht zu machen.


FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

samsungruth

Hatte es mit copy eingefühgt, dein Tip mit den Leerzeichen war genau richtig, habe alle von Hand und ohne Leerzeichen eingetipt und siehe da es geht.
Zu 2. und 3. ich habe meine Abfrage auf einen Wert minimalisiert (zur Fehler suche), im Original will ich mehrere Werte mit & verknüpfen.
Danke für den Tip der hat mich ein Stück voran gebracht.
Release  : 5.5
RASPI
CUL_HM/EM  FS20 IT AVR MAX WEBIO

SGi

Hallo IF-Freunde,

ich habe hier ein ähnliches Problem, daß in folgendem Fall der HausStatus nicht wechselt, wenn beide Personen den Status "abwesend" erhalten. Ich habe ebenfalls auch mal alle Leerzeichen etc. entfernt, jedoch ohne Erfolg. Mache ich einen Systaxfehler ?  Ist es denn überhaupt egal, ob man einfache pder doppelte Anführungszeichen benutzt (je nach Beispiel im Forum/Wiki lese ich das jedesmal anders, hat hier aber auch nicht geholfen)

----------------------

# Anwesenheitserkennung

define ATH_P1 dummy
attr ATH_P1 devStateIcon anwesend:HOME_Status.1 abwesend:HOME_Status.3
attr ATH_P1 eventMap /on:anwesend/off:abwesend/
attr ATH_P1 room AtHome

define ATH_P2 dummy
attr ATH_P2 devStateIcon anwesend:HOME_Status.1 abwesend:HOME_Status.3
attr ATH_P2 eventMap /on:anwesend/off:abwesend/
attr ATH_P2 room AtHome

define Haus dummy
attr Haus devStateIcon bewohnt:HOME_Status.1 unbewohnt:HOME_Status.3
attr Haus eventMap /on:bewohnt/off:unbewohnt/
attr Haus room AtHome

define HausStatus notify ATH.*:.* {\
if((ATH_P2 eq "abwesend") && (ATH_P1 eq "abwesend")) {\
  fhem("set Haus unbewohnt")\
} else {\
  fhem("set Haus bewohnt")\
}\
}
FHEM auf RasPi und FritzBox 7390 mit MAX! und HomeMatic

Puschel74

Hallo,

auch wenn ich ganz daneben liege aber

1:
ZitatHOME_Status.1
können Punkte zwischendurch eher kontraproduktiv in Verbindung mit FHEM sein.
Lieber auf _ oder - setzen.

2:
Zitatif((ATH_P2 eq "abwesend") && (ATH_P1 eq "abwesend")) {\

müsste das wohl eher so aussehen:

if((Value("ATH_P2") eq "abwesend") && (Value("ATH_P1") eq "abwesend")) {\

Aber wie gesagt - ich kann auch komplett daneben liegen.

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.

SGi

> if((Value("ATH_P2") eq "abwesend") && (Value("ATH_P1") eq "abwesend")) {\

Jep, danke Puschel, das war es !!  Es mußte tatsächlich Value() heißen.  Ich hab noch nicht so wirklich den Überblick, wann man sich in PERL und wann in FHEM bewegt.
Das Blöde ist ja, daß man dann keine Fehlermeldung bekommt, die darauf hinweist...

Mit den Punkten bei den devStateIcons liegst Du allerdings (vermutlich) falsch, denn die Bezeichnung trägt fhem selber so in die fhem.cfg ein, wenn man das Icon über das Webfrontend zuweist.

Sven
FHEM auf RasPi und FritzBox 7390 mit MAX! und HomeMatic