perl - Befehlsblock funktioniert einfach nicht.

Begonnen von WhiteLion, 26 Mai 2015, 17:11:55

Vorheriges Thema - Nächstes Thema

WhiteLion

Moin Leute,
ich hab folgendes:

define Udo PRESENCE lan-ping 192.168.0.100 60 120
define Britta PRESENCE lan-ping 192.168.0.140 180 360
define Anwesenheit dummy
define Anwesendcheck at +*00:01:00 {\
if(Value("Udo") eq "absent" && Value("Britta") eq "absent") \
{ if(Value("Anwesenheit") eq "0"){ fhem('set Anwesenheit 0') } }\
else \
{ if(Value("Anwesenheit") eq "0") { fhem('set Anwesenheit 1') } }\
}\
\


ich verstehe nicht warum ich immer folgenden Fehler angezeigt bekomme:

2015.05.26 15:52:45 3: Anwesendcheck: Unknown command {
if(Value("Udo"), try help.


Kann mir jemand helfen ?

marvin78

Code für den DEF Bereich des at-Devices:

+*00:01:00 {
  if (Value("Udo") eq "absent" && Value("Britta") eq "absent") {
    fhem('set Anwesenheit:FILTER=STATE!=0 0');
  }
  else {
    fhem('set Anwesenheit:FILTER=STATE!=1 1');
  }
}


So wäre es für mich logisch.

slor

Schau dir mal residents an. Da geht das alles automatisch und noch viel mehr :)

marvin78

Du willst damit sagen, RESIDENTS erkennt automatisch den Homestatus ohne PRESENCE und ein notify (warum er hier ein at verwendet habe ich nicht hinterfragt, weil es mir egal ist) oder ein power command ist nicht nötig? Das ist mir neu...

slor

Nein, wollte ich nicht sagen. Man braucht aber nicht so viel Logik um das umzusetzen. Habe das auch gerade gemacht. Hab ein doif pro Handy und das war's.
Poste ich nachher mal.

Zrrronggg!

Also ICH glaube ja du bekommst die Fehlermeldung, weil du typographische Anführungstriche verwendest:

if(Value("Udo") eq ...

ist nämlich nicht das Selbe wie

if(Value("Udo") eq ...
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

slor

So, hier was ich gemacht habe:
Presence eingerichtet, dass es funktioniert. (lan-Bluetooth mit Presenced und collectord auf 2 Raspi)
Mit dem Residents Modul "Home" angelegt
Dann entsprechend Bewohner (Roommates) angelegt. (Geht übers Webinterface via Home)

Dann mit folgendem Doif (Definition davon) sichergestellt, dass der zum Handy gehörende Roommate entsprechend geschaltet wird.
Das Residents Modul schaltet selber dann den Home Status etc.

([Handy_Seb:state] eq "present") (set rr_Sebastian home) DOELSEIF ([Handy_Seb:state] eq "absent") (set rr_Sebastian absent)

Vorher hatte ich das über eigene Dummy's gelöst. Das war aber mehr gefrickel als dass es funktioniert hat.
Nun läuft es schon seit Wochen zuverlässig rund mit 3 Handys.

WhiteLion

Danke für Eure Antworten und die Hilfestellung!
@slor
Dein Beispiel funktioniert wohl nur, wenn man ein BT - Modul benutzt und eine entsprechend kleine Wohnung hat?
Bei einem etwas größerem Haus wird das schon etwas problematischer mit der 10m BT Reichweite oder irre ich mich?
Ein BT Modul hab ich leider auch nicht. - Wann gibt es denn mit der dummy - Lösung Probleme ? - Wie vermeide ich selbige ?
Die Lösung von marvin78 funktioniert soweit ... zumindest hab ich in den 10 Minuten in den ich es getestet habe keine
Fehler feststellen können.

Icinger

Du musst ja nicht unbedingt BT verwenden.
Presence geht auch mit WLAN:
zB:
define MyHandy PRESENCE lan-ping 192.168.1.25

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