FHEM Forum

FHEM => Automatisierung => Thema gestartet von: OnkelTom83 am 15 Dezember 2014, 17:20:11

Titel: TFK Notify If (Value (... Abfrage Problem
Beitrag von: OnkelTom83 am 15 Dezember 2014, 17:20:11
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
Titel: Antw:TFK Notify If (Value (... Abfrage Problem
Beitrag von: rapster am 15 Dezember 2014, 18:48:29
Poste doch mal dein (ganzes) notify, resp. den ganzen Code den du hierzu hast.
Titel: Antw:TFK Notify If (Value (... Abfrage Problem
Beitrag von: OnkelTom83 am 15 Dezember 2014, 19:28:46
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
Titel: Antw:TFK Notify If (Value (... Abfrage Problem
Beitrag von: rapster am 15 Dezember 2014, 20:12:28
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 :-)

Titel: Antw:TFK Notify If (Value (... Abfrage Problem
Beitrag von: OnkelTom83 am 15 Dezember 2014, 20:25:39
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!
Titel: Antw:TFK Notify If (Value (... Abfrage Problem
Beitrag von: rapster am 15 Dezember 2014, 20:55:21
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.
Titel: Antw:TFK Notify If (Value (... Abfrage Problem
Beitrag von: OnkelTom83 am 17 Dezember 2014, 18:03:17
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!