Hallo,
Ich sitze schon etwas länger an einer Value Abfrage.
Ich möchte das wenn der TFK "Fenster" geöffnet wird sendet er ein "on", dann soll ein dummy COUNTER um 1 erhöht werden. Bei "off" um 1 erniedrigt werden.
Events:
2014-12-15 17:17:29 MYSENSORS_DEVICE Fenster tripped4: on
2014-12-15 17:17:30 MYSENSORS_DEVICE Fenster tripped4: off
Mein Gedanke.... Ein Notify:
Fenster { if(Value("Fenster.Tripped4") eq "on"){ fhem("set TestLampe1 on")}}
In diesem Fall ist es Testweise die "TestLampe1" die geschaltet werden sollte. Er tut es aber nicht.Auch im Protokoll kann ich keine Fehler erkennen.
Hast Jemand eine?
Vielen lieben Dank
Poste doch mal dein (ganzes) notify, resp. den ganzen Code den du hierzu hast.
Hallo rapster,
das notify beschränkt sich laut fhem.cfg auf
define f notify Fenster { if(Value("Fenster.Tripped4") eq "on"){ fhem("set TestLampe1 on")}}
Falls es hilfreich sein sollte das Fenster aus der fhem:
define Fenster MYSENSORS_DEVICE 100
attr Fenster IODev gateway
attr Fenster mapReading_tripped3 3 tripped
attr Fenster mapReading_tripped4 4 tripped
attr Fenster mode node
attr Fenster version 1.4.1
und der Auszug aus dem log:
2014.12.15 19:28:21 5: MYSENSORS/RAW: /100;4;1;0;16;1
2014.12.15 19:28:21 5: MYSENSORS Read: Rx: fr=100 ci=004 c=001(C_SET ) st=016(V_TRIPPED ) ack=0 '1'
2014.12.15 19:28:21 5: Triggering Fenster (1 changes)
2014.12.15 19:28:21 5: Notify loop for Fenster tripped4: on
2014.12.15 19:28:21 4: eventTypes: MYSENSORS_DEVICE Fenster tripped4: on -> tripped4: on
2014.12.15 19:28:21 5: Triggering f
2014.12.15 19:28:21 4: f exec { if(Value("Fenster.Tripped4") eq "on"){ fhem("set TestLampe1 on")}}
2014.12.15 19:28:21 5: Cmd: >{ if(Value("Fenster.Tripped4") eq "on"){ fhem("set TestLampe1 on")}}<
2014.12.15 19:28:27 4: HTTP FHEMWEB:10.1.1.206:57918 GET /fhem?room=all
2014.12.15 19:28:28 4: /fhem?room=all / RL:4821 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
Danke
Probier mal:
define f notify Fenster:tripped4.* { if($EVTPART1 eq 'on') { fhem("set TestLampe1 on") } }
oder
define f notify Fenster { if($EVENT =~ /^tripped4.+on$/) { fhem("set TestLampe1 on") } }
...ungetestet...
EDIT: Sorry groß/kleinschreibung war falsch :-)
Hey, Prima...
beide Möglichkeiten funktionieren.
Welches von den beiden Optionen ist die elegantere?
Wie bekomme ich es nun hin, das meine Abfrage die Variable COUNTER für den IF-Case addiert und im else-Case subtrahiert wird.
Beim testen hatte ich da auch schon einige Schwierigkeiten.
Vielen Dank!
define COUNTER dummy
define f notify Fenster:tripped4:.* { if($EVTPART1 eq 'on') { fhem( "set COUNTER ". (Value('COUNTER')+1) ) } elsif($EVTPART1 eq 'off') { fhem( "set COUNTER ". (Value('COUNTER')-1) ) } }
...aber wieder ungetestet :-)
Die 2 Möglichkeiten sollten dir nur 2 Wege aufzeigen (über welche du dich z.B. in der Commandref schlau machen kannst), welche davon die elegantere ist kommt immer auf den jeweiligen Einsatzzweck an.
Hey, entschuldige die verspätete Antwort...
Ich habe es nun entsprechend angepasst.
Code funktioniert:
Fenster:tripped4:.* {
if($EVTPART1 eq 'on') {
fhem("
set COUNTER ". (Value('COUNTER')+1) .";
trigger ANLAGE_ALARM_CHECK;
")
}elsif($EVTPART1 eq 'off') {
if( (Value('COUNTER')) ge 1){
fhem("set COUNTER ". (Value('COUNTER')-1) )
}else{
fhem("set COUNTER 0")
}
}
}
Mein Gedanke war es nun entweder mit trigger einen Aufruf zu starten.
Wenn "ANLAGE_SCHARF" eq "scharf" trigger ANLAGE_ALARM_CHECK.
ANLAGE_ALARM_CHECK(notify) soll dann über ttsSay einen Text ausgeben. Dies funktioniert aber nicht.
define ANLAGE_ALARM_CHECK notify ANLAGE_SCHARF:on{ if (Value("ANLAGE_SCHARF") eq "on") { fhem("set AlarmTablet ttsSay jooo") }}
Ich bekomme keine Sprachausgabe am Tablet, was aber prinzipiell funktioniert.
Events:
2014-12-17 18:00:45 dummy COUNTER 1
2014-12-17 18:00:45 notify ANLAGE_ALARM_CHECK
2014-12-17 18:00:45 MYSENSORS_DEVICE Fenster tripped4: on
Logfile:
2014.12.17 18:00:45 5: Triggering Fenster (1 changes)
2014.12.17 18:00:45 5: Notify loop for Fenster tripped4: on
2014.12.17 18:00:45 4: eventTypes: MYSENSORS_DEVICE Fenster tripped4: on -> tripped4: on
2014.12.17 18:00:45 5: Triggering f
2014.12.17 18:00:45 4: f exec {
if($EVTPART1 eq 'on') {
fhem("
set COUNTER ". (Value('COUNTER')+1) .";;
trigger ANLAGE_ALARM_CHECK;;
")
}elsif($EVTPART1 eq 'off') {
if( (Value('COUNTER')) ge 1){
fhem("set COUNTER ". (Value('COUNTER')-1) )
}else{
fhem("set COUNTER 0")
}
}
}
2014.12.17 18:00:45 5: Cmd: >{
if($EVTPART1 eq 'on') {
fhem("
set COUNTER ". (Value('COUNTER')+1) .";
trigger ANLAGE_ALARM_CHECK;
")
}elsif($EVTPART1 eq 'off') {
if( (Value('COUNTER')) ge 1){
fhem("set COUNTER ". (Value('COUNTER')-1) )
}else{
fhem("set COUNTER 0")
}
}
}<
2014.12.17 18:00:45 5: Cmd: >set COUNTER 1<
2014.12.17 18:00:45 4: dummy set COUNTER 1
2014.12.17 18:00:45 5: Triggering COUNTER (1 changes)
2014.12.17 18:00:45 5: Notify loop for COUNTER 1
2014.12.17 18:00:45 4: eventTypes: dummy COUNTER 1 -> .*
2014.12.17 18:00:45 4: eventTypes: dummy COUNTER state: 1 -> state: .*
2014.12.17 18:00:45 5: Cmd: >trigger ANLAGE_ALARM_CHECK<
2014.12.17 18:00:45 5: Triggering ANLAGE_ALARM_CHECK (1 changes)
2014.12.17 18:00:45 5: Notify loop for ANLAGE_ALARM_CHECK
2014.12.17 18:00:45 5: Cmd: ><
2014.12.17 18:01:05 4: HTTP FHEMWEB:10.1.1.206:59836 GET /fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2014-12.log
Hat jemand eine Idee, woran es liegt das die Sprachausgabe am Tablet in diesem Fall nicht erfolgt?
Im Späteren Verlauf soll mittels dieses Notifys ein Arduino angesteuert werden, der dann ein Signalton über einen Pieper ausgibt.
Vielen Dank!