[gelöst] NETIO Lampe blinken

Begonnen von Maxl, 17 Januar 2015, 13:19:54

Vorheriges Thema - Nächstes Thema

Maxl

Hallo,

versuche nun eine Lampe im Abstand von 10s blinken zu lassen, die Lampe schaltet ein aber nie wieder aus, nur wenn ich sie per Hand ausschalte wird sie in 10s wieder eingeschaltet. Wahrscheinlich verstehe ich irgendetwas falsch. Ich dachte ich könnte den Zustand der Lampe mit dem Value abfragen, aber anscheinend ist dieser immer "on"; wann wird dieser dann eigentlich "off"?

benutze folgenden Code:

sub Untoggle($) {
  my ($obj) = @_;

  if( Value($obj) eq "on" ){
      fhem( "set $obj off" );
    } else {
      fhem( "set $obj on" );
    }
}


Aufruf mit:
define lampe_untoggle at +*00:00:10  { Untoggle( "Relais9" ) }

das define in der cfg:
define NETIO2 ECMD telnet 192.168.1.99:2701
attr NETIO2 classdefs ONEWIRE=/opt/fhem/onewire.classdef:RELAIS=/opt/fhem/relais.classdef:RFM12=/opt/fhem/intertechno.classdef:ADC=/opt/fhem/netioadc.classdef
attr NETIO2 room Interfaces

define Relais9 ECMDDevice RELAIS 01
attr Relais9 IODev NETIO2


und die classdef für das NETIO:
# Uebergabeparameter HEX Adresse Port
params RelaisPort
# erst alle Ports PC.. auf Ausgang setzen und dann per Hexcode schalten
set on cmd {"io set ddr 2 ff\n\000io set port 2 %RelaisPort %RelaisPort\n"}
set on expect "OK\n"
set on postproc {s/([OK\n|;]*)/success/; "$_" eq "success" ? "ok" : "error";}
set off cmd {"io set ddr 2 ff\n\000io set port 2 00 %RelaisPort\n"}
set off expect "OK\n"
set off postproc {s/([OK\n|;]*)/success/; "$_" eq "success" ? "ok" : "error";}


hier das Log-File
2015.01.17 13:13:30 5: exec at command lampe_untoggle
2015.01.17 13:13:30 5: Cmd: >{ Untoggle( "Relais9" ) }<
2015.01.17 13:13:30 5: Cmd: >set Relais9 on<
2015.01.17 13:13:30 5: ECMDDevice: Analyze command >{"io set ddr 2 ff\n\000io set port 2 01 01\n"}<
2015.01.17 13:13:30 5: NETIO2: command split into 2 parts.
2015.01.17 13:13:30 5: NETIO2: sending command "io set ddr 2 ff\n"
2015.01.17 13:13:30 5: SW: 696f207365742064647220322066660a
2015.01.17 13:13:30 5: NETIO2: received answer "OK\n"
2015.01.17 13:13:30 5: NETIO2: sending command "io set port 2 01 01\n"
2015.01.17 13:13:30 5: SW: 696f2073657420706f727420322030312030310a
2015.01.17 13:13:30 5: NETIO2: received answer "OK\n"
2015.01.17 13:13:30 5: Postprocessing "OK\nOK\n" with perl command {s/([OK\n|;]*)/success/; "$_" eq "success" ? "ok" : "error";}.
2015.01.17 13:13:30 5: Postprocessed value is "ok".
2015.01.17 13:13:30 5: Triggering Relais9 (2 changes)
2015.01.17 13:13:30 5: Notify loop for Relais9 on: ok
2015.01.17 13:13:30 4: eventTypes: ECMDDevice Relais9 on: ok -> on: ok
2015.01.17 13:13:30 4: eventTypes: ECMDDevice Relais9 on ok -> on ok
2015.01.17 13:13:30 4: eventTypes: ECMDDevice Relais9 state: on ok -> state: on ok
2015.01.17 13:13:30 5: redefine at command lampe_untoggle as +*00:00:10  { Untoggle( "Relais9" ) }


Grüße
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

Hallo,

Ich weiß nicht so recht, aber ich glaube es gibt da einen anderen Ansatz.
Ich probiere mal was aus um es dir besser erklären zu können.
Stichwort Dummy definieren und notify.

Melde mich später
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Ich habe zwei dummy definiert Test und Test2 sowie ein notify
define Test dummy
attr Test webCmd on:off

define Test2 dummy
attr Test2 webCmd toggle

define nty_Test Test2 IF ([Test:&STATE] eq "on") (set Test off) ELSE (set Test on)

Wenn man Test2 zwei toggle gibt schaltet Test hin und her. Wenn Du jetzt für Test:on und Test:off je einen notify definierst wo Du deinen Befehl für Lampe ein und Lampe aus reintust, oder einen notify für Test wo du STATE einfach durchreichst, kannst Du mit dem at die Lampe blinken lassen.

Also Test entspricht dann deiner Lampe. Test 2 entspricht deinem Befehl in der define at ... Zeile.

Hilft Dir das? Geht vielleicht noch einfacher, so gut kenne ich mich mit fhem auch noch nicht aus.
Aber komplizierter als Dein Code wirkt es auf mich auch nicht. :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Maxl

Hallo,

ich hätte es so denke ich implementiert, bekomme aber beim Abspeichern den Fehler Unknown module Test2 und im Log File diese Fehler

2015.01.17 17:17:57 3: Dummy_Aus return value: Unknown command :off.*, try help.
2015.01.17 17:17:57 3: Dummy_Ein return value: Unknown command :on.*, try help.
2015.01.17 17:18:02 3: Dummy_Aus return value: Unknown command :off.*, try help.
2015.01.17 17:18:02 3: Dummy_Ein return value: Unknown command :on.*, try help.

den Code welche ich nun verwende sieht so aus:

define Test dummy
attr Test eventMap /on:Activ/off:Inactiv/
attr Test webCmd on:off

define Test2 dummy
attr Test2 webCmd toggle

define nty_Test Test2 IF ([Test:&STATE] eq "on") (set Test off) ELSE (set Test on)

define Dummy_Ein notify Test :on.* { set Relais9 on }
define Dummy_Aus notify Test :off.* { set Relais9 off }

define Test2 at +*00:00:05 set Test2 toggle



Warum funktioniert eigentlich meine zuerst genannte Möglichkeit mit dem Funktionsaufruf nicht?
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

Zitat von: Maxl am 17 Januar 2015, 17:22:46
define Test dummy
attr Test eventMap /on:Activ/off:Inactiv/
attr Test webCmd on:off

define Test2 dummy
attr Test2 webCmd toggle

define nty_Test Test2 IF ([Test:&STATE] eq "on") (set Test off) ELSE (set Test on)

define Dummy_Ein notify Test :on.* { set Relais9 on }
define Dummy_Aus notify Test :off.* { set Relais9 off }

define Test2 at +*00:00:05 set Test2 toggle



Warum funktioniert eigentlich meine zuerst genannte Möglichkeit mit dem Funktionsaufruf nicht?


zwischen  Test :off.* darf kein Leerzeichen sein, er interpretiert das als Kommando - wie er schreibt :-)
Das .* brauchst Du nicht weil es gibt ja genau nur on oder off

Die Eventmap sieht komisch aus, ich weiß nicht was er mit den "/" macht, aber ist vielleicht egal.

Zu Deiner letzten Frage:
Ich weiß nicht was er mit dem $obj wirklich macht. Ich denke da wird kein Wert als Rückgabe gesetzt. Ich habe das so noch nie gesehen, aber das heißt nichts.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Maxl

Hallo

nun abgeändert, wie beschrieben, es läuft aber nicht, etwas stimmt nicht, aber was?
Es kommt immer noch die Fehlermeldung "unknow modul test2"

define nty_Test Test2 IF([Test:&STATE] eq "on") (set Test off) ELSE (set Test on)
define Dummy_Ein notify Test:on.* { set Relais9 on }
define Dummy_Aus notify Test:off.* { set Relais9 off }


Irgendeine Ahnung?
Gruß
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

Naja wenn der Rest noch wie oben ist, dann hast Du zweimal Test2 definiert, sorry habe ich vorhin nicht gesehen.
Die at Definition muss anders heißen.

Könntest Du bitte die Fhelermeldung als Kopie posten? Es ist durchaus wichtig die ganze Zeile zu lesen und nicht nur ein Fragment.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Maxl

Hi,

so, nun alles nochmal:

define Test dummy
attr Test eventMap /on:Activ/off:Inactiv/
attr Test webCmd on:off

define Test2 dummy
attr Test2 webCmd toggle

define nty_Test Test2 IF([Test:&STATE] eq "on") (set Test off) ELSE (set Test on)

define Dummy_Ein notify Test:on.* { set Relais9 on }
define Dummy_Aus notify Test:off.* { set Relais9 off }

define Test2 at +*00:00:05 set Test2 toggle


und die Fehlermeldung:
Unknown module Test2 Test2 already defined, delete it first HK1_Ein_OFF already defined, delete it first
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

Sag ich doch: zweimal Test2!
1. define Test2 dummy
2. define Test2 at +*00:00:05 set Test2 toggle

mach von mir aus :)
define Test3 at +*00:00:05 set Test2 toggle
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Maxl

Hallo,

tut mir leid aber ich werde einfach nicht schlau daraus, habe nu das eine weggelassen, die Fehlermeldung ist die gleiche: Unknown module Test2

define Test dummy
attr Test eventMap /on:Activ/off:Inactiv/
attr Test webCmd on:off

define nty_Test Test2 IF([Test:&STATE] eq "on") (set Test off) ELSE (set Test on)
attr Test2 webCmd toggle

define Dummy_Ein notify Test:on.* { set Relais9 on }
define Dummy_Aus notify Test:off.* { set Relais9 off }

define Test2 at +*00:00:05 set Test2 toggle


Funktioniert das bei dir? Ich habe nun schon mehrere Kombinationen probiert, doch das Relais will nicht toggeln.
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

define Test dummy
attr Test webCmd on:off

define Test2 dummy
attr Test2 webCmd toggle

define nty_Test notify Test2 IF ([Test:&STATE] eq "on") (set Test off) ELSE (set Test on)
define Test3 at +*00:00:05 set Test2 toggle

Sorry, in dem was ich geschrieben hatte fehlte "notify", passiert wenn man nur des DEF aus dem angelegten Objekt kopiert und das define manuell schreibt :)
Aber Du hattest Test2 mehrfach verwendet.
So sollte es gehen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Maxl

#11
Hallo,

danke für die Hilfe, es funktioniert (vorerst), dachte das wäre einfacher zu gestalten.
Hatte noch die notifys falsch:

define Dummy_Ein notify Test:on.* { fhem "set Relais9 on" }


Gruß
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Otto123

Kann sein :-) ich konnte es nicht einfacher.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz