Aufteilung der Kanäle des subType switch in unabhängige Devices (readingsProxy)

Begonnen von klaus.schauer, 09 März 2014, 08:42:46

Vorheriges Thema - Nächstes Thema

justme1968

wegen dem on/off a0/a1 problem ist es besser wie oben vorgeschlagen die eventMap weg zu lassen und in setList direkt in und off zu verwenden.

das mit dem schalten am echten device schaue ich mir mal an. ich habe aber keine enocean devices. kann also nicht wirklich testen.

könnt ihr mir mal ein eventog zeigen bei dem am schalter geschaltet wird?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

krikan

Eventlog des Schalters sieht so aus

2014-05-03 10:32:50 EnOcean EnO_switch buttons: pressed
2014-05-03 10:32:50 EnOcean EnO_switch channelB: BI
2014-05-03 10:32:50 EnOcean EnO_switch BI
2014-05-03 10:32:50 EnOcean EnO_switch buttons: released
2014-05-03 10:32:50 EnOcean EnO_switch buttons: released
2014-05-03 10:32:50 EnOcean EnO_switch buttons: pressed
2014-05-03 10:32:50 EnOcean EnO_switch channelB: B0
2014-05-03 10:32:50 EnOcean EnO_switch B0
2014-05-03 10:32:51 EnOcean EnO_switch buttons: released
2014-05-03 10:32:51 EnOcean EnO_switch buttons: released
2014-05-03 10:32:51 EnOcean EnO_switch buttons: pressed
2014-05-03 10:32:51 EnOcean EnO_switch channelA: A0
2014-05-03 10:32:51 EnOcean EnO_switch A0
2014-05-03 10:32:51 EnOcean EnO_switch buttons: released
2014-05-03 10:32:51 EnOcean EnO_switch buttons: released
2014-05-03 10:32:52 EnOcean EnO_switch buttons: pressed
2014-05-03 10:32:52 EnOcean EnO_switch channelA: AI
2014-05-03 10:32:52 EnOcean EnO_switch AI
2014-05-03 10:32:52 EnOcean EnO_switch buttons: released
2014-05-03 10:32:52 EnOcean EnO_switch buttons: released


Ich bastel aber noch, habe Dein readingsProxy noch nicht genau verstanden. Darum liegt der Fehler wohl eher hier vor der Tastatur.

Gruß, Christian

krikan

Meine vorläufigen, schmalen Erkenntnisse und Zusammenfassung zu readingsProxy und mehrkanaligen EnOcean-Switch:

Bei einem physikalichen Schalter, der in FHEM zur Visualiserung genutzt wird (kann keine Aktoren durch FHEM steuern!) gibt es die Readings ChannelA, ChannelB,.. aus den das Proxydevice abgeleitet werden kann. Eventlog hierzu siehe vorheriges Posting.

Die mMn interessanteren FHEM-TCM-Switches zur Steuerung von Aktoren haben bei mir immer nur das Reading state. ReadingsProxy muss vom Reading "state" des Devices abgeleitet werden. Musterkonfiguration für diesen Fall bei der ich bisher keine Fehlfunktionen festgestellt habe:

#FHEM-TCM-Switch zur Aktorsteuerung
define Schalter EnOcean FFAFFF81
attr Schalter subType switch


#Kanal B zur Steuerung mit on und off
define Schalter_channelB readingsProxy Schalter:state
attr Schalter_channelB setFn {readingsSingleUpdate($defs{$name}, "state", $CMD, 1);;($CMD eq "on")?"BI":"B0";;}
attr Schalter_channelB setList on off
attr Schalter_channelB valueFn {undef}
attr Schalter_channelB webCmd on:off


#Kanal C zur Steuerung mit on und off
define Schalter_channelC readingsProxy Schalter:state
attr Schalter_channelC setFn {readingsSingleUpdate($defs{$name}, "state", $CMD, 1);;($CMD eq "on")?"CI":"C0";;}
attr Schalter_channelC setList on off
attr Schalter_channelC valueFn {undef}
attr Schalter_channelC webCmd on:off


Bessere Vorschläge/Gegenmeinungen sind ausdrücklich erwünscht!  ;)

@Justme1968: Wenn ich im Attribut valueFn den Platzhalter $CMD nutze, erhalte ich immer den Fehler valueFn: Global symbol "$CMD" requires explicit package name at (eval 265) line 1. Hast Du einen Hinweis, was ich falsch mache?

Gruß, Christian



justme1968

in der valueFn gibt es kein $CMD. die doku war falsch.

valueFn wird zu einem zeitpunkt aufgerufen an dem es nicht unbedingt einen zusammenhang mit der setFn und einem kommando gibt. wenn es das letzte kommando nicht im original device gibt würde ich vorschlagen es in ein reading im proxy device zu stecken.

edit: ich baue das direkt ins modul ein. es gibt dann ein lastCmd reading und du hast in der valueFn zugriff auf $LASTCMD.

edit2: eventuell gibt es für die devices die nur toggeln noch ein problem beim fhem neu start. ich weiss nicht genau ob dann alles konsistent ist. das müsste sich mit lastCmd auch in den griff bekommen lassen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

ps: die valueFn ist dazu da aus dem reading des original device den aktuellen status des proxy device abzuleiten.

wenn du den status nicht aus dem original device nehmen kannst sollte mit der änderung oben möglich sein z.b. {$LASTCMD}als valueFn zu verwenden. du würdest dann direkt das letzte on oder off als status verwenden. d.h. das setReading state könnte entfallen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

krikan

Zitatedit: ich baue das direkt ins modul ein.
Danke!!

Zitatedit2: eventuell gibt es für die devices die nur toggeln noch ein problem beim fhem neu start.
Direkt nach dem Neustart zeigten bei mir sowohl Proxydevices mit toggle als auch mit on/off jeweils nur "initialized" als devstate an. Erst nach dem ersten Schalten war der Zustand korrekt zu sehen. Habe diesem Problem aber bisher keine Beachtung geschenkt. Hatte in der Testumgebung aber auch Fehlermeldungen für fhem.save. Schaue ich mir nach Deinem Umbau noch mal an.

Gruß, Christian

pst

Hallo Andre, hi Christian,

habe mir den Kommentar zu Herzen genommen:
Die readingsProxy gehen nun auf den Fhem Schalter. Mit notify auf den physischen Schalter wird der state der readingsProxy gesetzt.
So sieht es aus:
Def. physischer und Fhem Schalter


define EnOSwitch_Stephan EnOcean xxxxxxx
attr EnOSwitch_Stephan IODev TCM310_0
attr EnOSwitch_Stephan room EnOcean
attr EnOSwitch_Stephan subType switch
# ------------------------------------------------------------
define FhemSwitch_Stephan EnOcean xxxxxx
attr FhemSwitch_Stephan IODev TCM310_0
attr FhemSwitch_Stephan room EnOcean
attr FhemSwitch_Stephan subType switch


Def.s readingsProxy

define rPA_StephanDecke readingsProxy FhemSwitch_Stephan:state
attr rPA_StephanDecke setFn {readingsSingleUpdate($defs{$name}, "state", $CMD, 1);;($CMD eq "on")?"AI":"A0";;}
attr rPA_StephanDecke setList on off
attr rPA_StephanDecke valueFn {$LASTCMD}
attr rPA_StephanDecke webCmd on:off

define rPB_StephanWand readingsProxy FhemSwitch_Stephan:state
attr rPB_StephanWand setFn {readingsSingleUpdate($defs{$name}, "state", $CMD, 1);;($CMD eq "on")?"BI":"B0";;}
attr rPB_StephanWand setList on off
attr rPB_StephanWand valueFn {$LASTCMD}
attr rPB_StephanWand webCmd on:off


Notify auf den physischen Switch

define act_on_EnOSwitch_Stephan notify EnOSwitch_Stephan {\
if ($EVENT eq "B0") {\
    {Log 3, ('****** EnOSwitch_Stephan B0='.$EVENT)}\
    if (Value("rPA_StephanDecke") ne "on") {\
      fhem("setstate rPA_StephanDecke on")\
    }\
    else {\
      fhem("setstate rPA_StephanDecke off")\
    }\
}\
elsif ($EVENT eq "BI") {\
    {Log 3, ('****** EnOSwitch_Stephan BI='.$EVENT)}\
    if (Value("rPB_StephanWand") ne "on") {\
      fhem("setstate rPB_StephanWand on")\
    }\
    else {\
      fhem("setstate rPB_StephanWand off")\
    }\
}\
}


Anlernen muss man hierbei A0 und AI vom Fhem Schalter auf einen Kanal (!).
(Im EnOcean Starter Guide wird bei dem FSA12 Beispiel nur B0 angelernt, das scheint mir falsch zu sein!)

Wenn es dann mal funktioniert, fragt man sich, wo war da jetzt eigentlich das Problem.
Was bleibt, ist das refresh Problem, wenn man den phyisischen Schalter drückt (nach refresh Browser stimmt die Anzeige) und die Möglichkeit, dass die Anzeige
nicht stimmt. Das mit der Anzeige ist klar, da .... (keine Rückmeldung vom Aktor/Fhem nicht online - Schalter gedrückt/Signal verpasst/ usw.).

Im EnOcean Starter Guide gibt es keinen Hinweis auf readingsProxy. War readingsProxy jetzt eigentlich nötig?
Die readingsProxy senden ja jetzt A0/AI und B0/BI jeweils auf einen Kanal. Hat man davon einen Vorteil.
Man könnte es doch auch so machen, dass ein readingsProxy A0, ein anderes Ai usw. benutzt.
Was hättet Ihr anders/schöner gemacht?

Habt Ihr dazu noch Kommentare?

Was bleibt noch,...
meinen Dank an euch Beiden(!);
super Projekt,.. dieses Fhem(!),...;
super Support (!);

Euch ein schönes Wo-Ende.
Gruss Stephan









krikan

Hallo Stephan,

freut mich das es läuft.

ZitatWas bleibt, ist das refresh Problem, wenn man den phyisischen Schalter drückt
Nutze mal im notify statt setstate das FHEM-Kommando setreading für "state". Oder füge alternativ nach setstate noch ein trigger hinzu. Sollte das Beheben.

ZitatIm EnOcean Starter Guide gibt es keinen Hinweis auf readingsProxy. War readingsProxy jetzt eigentlich nötig?
readingsProxy ist noch relativ jung und das Wiki braucht Pflege. Ob readingsProxy notwendig war? Du kommst sicherlich auch ohne zum Ziel. Bei mir geht es alles ohne, aber nur weil es readingsProxy bei meinem Einstieg in FHEM noch nicht gab und ich noch keine Zeit zum Anpassen/Überdenken hatte.

ZitatsetFn {readingsSingleUpdate($defs{$name}, "state", $CMD, 1);;($CMD eq "on")?"AI":"A0";;}
Wenn ich {LASTCMD} richtig verstanden habe, könntest Du das Gestrichene löschen. Sollte durch {LASTCMD} erledigt werden.

Gruß, Christian


edit: Trigger-Variante wird vermutlich nicht funktionieren.

justme1968

brauchen tut man es natürlich nicht. man kann alles auch zu fuss mit notifys, dummys und 99_myUtils machen. aber spätestens wenn es ausser on und off noch toggle oder on-for-timer, on-till oder änliches sein soll ist ein 'fertiges' device einfacher.

das ist wie mit allen anderen hilfs devices auch. brauchen tut man weder structure noch LightScene oder watchdog oder THRESHOLD oder average oder devpoint ...

Zitat von: krikan am 10 Mai 2014, 20:52:29
Wenn ich {LASTCMD} richtig verstanden habe, könntest Du das Gestrichene löschen. Sollte durch {LASTCMD} erledigt werden.

fast. das gestrichene kann weg und {$LASTCMD} als valueFn verwenden. dann sollte auch nach dem start von fhem das proxy device den rictigen status haben.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

krikan

Zitatfast. das gestrichene kann weg und {$LASTCMD} als valueFn verwenden. dann sollte auch nach dem start von fhem das proxy device den rictigen status haben.
Genau das meinte ich; valueFn hat Stephan ja bereits korrekt angelegt. ;)

Nach Fhem-Neustart ist (dev-?)state nun nach Verwendung von {$LASTCMD} korrekt.

Zur Threadvervollständigung: Meine Enocean-Musterkonfiguration für readingsProxy nach Einführung von {$LASTCMD} sieht nun so aus:

#FHEM-TCM-Switch zur Aktorsteuerung
define Schalter EnOcean FFAFFF81
attr Schalter subType switch


#Kanal B zur Steuerung mit on und off
define Schalter_channelB readingsProxy Schalter:state
attr Schalter_channelB setFn {($CMD eq "on")?"BI":"B0";;}
attr Schalter_channelB setList on off
attr Schalter_channelB valueFn {$LASTCMD}
attr Schalter_channelB webCmd on:off


#Kanal C zur Steuerung mit on und off
define Schalter_channelC readingsProxy Schalter:state
attr Schalter_channelC setFn {($CMD eq "on")?"CI":"C0";;}
attr Schalter_channelC setList on off
attr Schalter_channelC valueFn {$LASTCMD}
attr Schalter_channelC webCmd on:off

pst

Hallo Christian,

wegen refresh: ... setreading für "state" ... hat funktioniert. Sehr schön!

Könntest Du mal in den thread:
Fhem Schalter als Taster für ZentralAus 
reinschauen.

Wegen dem EnOcean Starter Guide:
Ich würde wohl meine scenarien dokumentieren, fühle mich aber 'noch' nicht in der Lage, die ganzen
parameter/attribute/Funktionen -, und wie sie zusammenspielen, zu beschreiben.

Werde nun alle meine Schalter definieren und mich dem Web-Frontend zuwenden.

Das ist jetzt nicht mein thread. Ist dieser thread gelöst und wer setzt ihn um?

Gruss Stephan

50watt

RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

krikan


doba

Hallo allerseits,

ich habe mittlerweile meinen FMS61NP auch angelernt bekommen, habe jetzt aber noch ein problem was das Ansteuern der beiden Kanäle betrifft.
Anbei die Definitionen.
Das Problem:
Wenn ich den Befehl A0 sende schaltet das Relais, kurz darauf wird aber der Status B0 gemeldet.
Analog: Wenn ich B0 sende schaltet das Relais, kurz darauf wird aber der Status A0 gemeldet.
Das gleiche beim Aussschalten.
Das hat zur Folge, dass das Lampensymbol immer am anderen Kanal AN oder AUS ist als ich eigentlich schalte.
Hat jemand eine Idee womit das zusammen hängen kann?

define Eltako_Kueche EnOcean 018Cxxxx
attr Eltako_Kueche IODev TCM310_ESP3
attr Eltako_Kueche group FMS61-NP
attr Eltako_Kueche subDef FF9Fxxxx
attr Eltako_Kueche subType switch

define Eltako_Kueche_A readingsProxy Eltako_Kueche:channelA
attr Eltako_Kueche_A group FMS61-NP
attr Eltako_Kueche_A setFn {($CMD eq "on")?"A0":"AI";;;;}
attr Eltako_Kueche_A setList on off
attr Eltako_Kueche_A valueFn {($VALUE eq "A0")?"on":"off"}
attr Eltako_Kueche_A webCmd on:off

define Eltako_Kueche_B readingsProxy Eltako_Kueche:channelB
attr Eltako_Kueche_B group FMS61-NP
attr Eltako_Kueche_B setFn {($CMD eq "on")?"B0":"BI";;;;}
attr Eltako_Kueche_B setList on off
attr Eltako_Kueche_B valueFn {($VALUE eq "B0")?"on":"off"}
attr Eltako_Kueche_B webCmd on:off

Danke schonmal
Gruß
DoBa

krikan

Du hast vermutlich nicht entsprechend http://www.fhemwiki.de/wiki/EnOcean-FMS61NP-2-Kanal-Multifunktions-Stromsto%C3%9Fschalter#Definition.2FAnlernvorgang angelernt, sondern Kanal 1 mit set Eltako_Kueche A0 und Kanal 2 mit set Eltako_Kueche B0. Da Kanal 1 immer mit channelB Statustelegramme verschickt und Kanal 2 mit channelA, ist es jetzt bei Dir verdreht.

edit: tausche mal die setFn der readingsProxy-Devices oder die saubere Lösung von Norbert