TFK Notify If (Value (... Abfrage Problem

Begonnen von OnkelTom83, 15 Dezember 2014, 17:20:11

Vorheriges Thema - Nächstes Thema

OnkelTom83

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

rapster

Poste doch mal dein (ganzes) notify, resp. den ganzen Code den du hierzu hast.

OnkelTom83

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

rapster

#3
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 :-)


OnkelTom83

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!

rapster

#5
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.

OnkelTom83

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!