Dashbutton (dash_dhcp) befehle toggeln ... merken wenn gedrückt wurde

Begonnen von florian2833, 27 Dezember 2018, 11:40:47

Vorheriges Thema - Nächstes Thema

florian2833

Hallo Zusammen,

leider brauche ich heute mal wieder eure Hilfe, da ich hier noch verzweifel. Was ich machen möchte, ist gefühlt recht einfach, aber ich bekomme es nicht hin.

Simplifizierte Anforderung: Ein amazon Dashbutton wird gedrückt und schaltet einen Ausgang "ein", bei nochmaligem drücken wird der Ausgang ausgeschalten.

Um das zu testen hab ich drei Dummys angelegt (wobei der Dashbutton quasi immer nur ein On sendet, das off ist nur für mich zum testen)

defmod dashbutton_dummy dummy
attr dashbutton_dummy room harmony
attr dashbutton_dummy webCmd on:off


Es gibt also nun drei Dummys:

Dashbutton Dummy simuliert den Dashbutton.
Ladestation_dummy soll sich merken ob der Schaltausgang an oder aus war ( und ist vermutlich unnötig, fällt mir gerade auf.. )
und Ladestation_schalten ist der Schaltausgang, welcher dann fs20 befehle absetzt - das heist ich muss auch hier den State irgendwie in ein notify einbauen und weis noch nicht genau wie, aber das sollte ich hinbekommen.

Das ist mein Ansatz den ich mir nach recherche im Forum gebastelt  ::) habe. (Aus der Raw definiton kopiert)

n_ladestation_test notify dashbutton_dummy {if(ReadingsNum("ladestation_dummy","state",0) == 1) {fhem "set ladestation_schalten off"} else {fhem "set ladestation_schalten on"}}
attr n_ladestation_test room harmony


Was funktioniert:

- Dashbutton_dummy on -> Schaltausgang on (und bleibt an - das heist die "Ausgang halten" funktion passt (juhu ich hab ein Relais gebaut..  :o 8) )

Was nicht geht, weil ich nicht weis wie..

Mein Ansatz ist den Ladestation_dummy auf 1 zu schalten um die "off" Bedingung zu erfüllen {if(ReadingsNum("ladestation_dummy","state",0) == 1) {fhem "set ladestation_schalten off"}

Gerade beim verfassen dieses Beitrages fällt mir jedoch auf das ich auch einfacher den zustand von Ladestation_schalten auswerten könnte.

Nun die Fragen mit denen ich nicht weiterkomme:

-Wie kann ich obiges "if" besser lösen und den Zustand von Ladestation_schalten auslesen (das ist hier ein on:off kein 1:0 also bringt mich ReadingsNUM nicht weiter und ich brauche wohl ReadingsVAR - hab ich versucht klappt aber nicht.. )

-Mache ich es vielleicht total doof und es gibt einen viel eleganteren weg?

Danke für eure Hilfe und mühe.

Byte09

sorry, ich kann dir hier nicht folgen ( und denke das wird auch anderen ähnlich gehen ), zumal deine definierten Devicenamen nicht wirklich zu deinen Ausführungen passen.

und was bedeutet:
Zitatschaltet einen Ausgang "ein", bei nochmaligem drücken wird der Ausgang ausgeschalten
... meinst du mit Ausgang ein Device das 'an' und 'aus' geschaltet werden soll ?

letztendlich verstehe ich es so , das du ein device toggeln willst , das kein 'toggel' und 'setextensions' unterstützt , wenn der Dashbutton das event 'on' liefert ???  ... soweit richtig ?

wenn dem so ist kannst du das mit einem notify ( oder welchem Hilfsmodul auch immer ) machen , da brauch es keine weiteren notifys und auch keine weiteren dummys.

poste doch bitte mal ein list des dashbuttons und des zu toggelnden Devices.

gruss Byte09

edit: ausserdem bist du hier in einem völlig falschen Forumsbereich , du solltest das nach 'Anfängerfragen' verschieben. Hier geht es eher um Hardwarebasteleien.


florian2833

#2
Hi,

genau der Ausgang ist ein Device das geschalten werden soll (eine FS 20 Steckdose allerdings über den Weg Fhem->Harmony->JBmedia->fs20)

Das Device das ich toggeln will kann das nicht, genau, ich kann nur verschiedene Szenen aufrufen über den oben beschriebenen weg.
Der Dashbutton kennt auch kein An oder aus, sondern nur ein "ich bin gedrückt worden" .

Ich bekomme es zwar intern in JBmedia mittlerweile hin (siehe unten), würde es aber gerne in Fhem lösen, oder zumindest verstehen warum ich es nicht in Fhem lösen konnte. (Man möchte ja lernen)

Hier die Listings:

Der Button:

Internals:
   CFGFN     
   CONNECTS   1
   FD         25
   LAST_CONNECT 2018-12-26 13:50:36
   NAME       dashbutton_cat
   NR         9937
   NTFY_ORDER 50-dashbutton_cat
   PORT       6767
   STATE      listening
   TYPE       dash_dhcp
   READINGS:
     2018-12-27 13:04:18   78-e1-03-ba-ff-7d short
     2018-12-26 13:50:36   state           listening
   helper:
     devAliases:
Attributes:
   allowed    78:E1:03:BA:FF:7D
   port       6767
   room       Dashbutton


Jbmedia

Internals:
   CHANGED   
   ConnectionState Initialized
   DEF        DEVICE 15187242
   NAME       harmony_15187242
   NOTIFYDEV  global
   NR         24
   NTFY_ORDER 50-harmony_15187242
   STATE      manual
   TYPE       harmony
   hub        SZ.Harmony
   id         15187242
   remoteId   
   READINGS:
     2018-12-27 21:26:46   power           manual
   helper:
Attributes:
   alias      JB Media-Beleuchtung
   event-on-change-reading .*
   room       harmony
   stateFormat power


Genauer versuche ich dies:

Dashbutton wird gedrückt, ein notify (oder ein "etwas mit dem das geht" wird auf  "on" gesetzt und der Befehl set harmony_15187242 command L228 gesendet, beim nächsten drücken des dashbuttons wird gesehen das das notify (o.ä.) on ist und es wird stattdessen  set harmony_15187242 command L229 gesendet, gleichzeitig geht das notify auf "off".


*Jbmedia interne lösung: Der Dashbutton setzt via fhem zwei harmony befehle gleichzeitig ab, einmal aktion a (einschalten) und gleichzeitig aktion b (ausschalten) zusätzlich wird in Jbmedia ein Marker gesetzt der die gegensätzliche aktion blockiert, ausgeschalten werden kann also nur wenn vorher an war und umgekehrt.. )

Schaut so aus:

dashbutton_cat:.* set harmony_15187242 command L228; set harmony_15187242 command L229

Ich hab mal noch nen Screenshot der Szenen drangehangen. L228 kann nur auslösen wenn der Marker "aus ist" und L229 nur wenn der Marker "an" ist.
   
Zitat von: Byte09 am 27 Dezember 2018, 15:28:40


edit: ausserdem bist du hier in einem völlig falschen Forumsbereich , du solltest das nach 'Anfängerfragen' verschieben. Hier geht es eher um Hardwarebasteleien.

Verdammt.  :o Wie ist denn das passiert... Ich hab mal nen Mod angeschrieben mit Bitte um verschieben.  ::)

Byte09

ok ,

ich komme bis hierhin noch mit und es ist auch kein problem das umzusetzen. Ich würde es mit meinem Modul machen , aber auch mit doif notify etc. wohl kein problem.
ZitatDashbutton wird gedrückt, ein notify (oder ein "etwas mit dem das geht" wird auf  "on" gesetzt und der Befehl set harmony_15187242 command L228 gesendet, beim nächsten drücken des dashbuttons wird gesehen das das notify (o.ä.) on ist und es wird stattdessen  set harmony_15187242 command L229 gesendet,.

.... hiermit kommen ich allerdings schon an meine Grenzen
Zitatgleichzeitig geht das notify auf "off"

ein notify nimmt doch letztendlich keinen state wie on oder off an , sondern führt eine aktion aus.

für mich das ko ist leider die jbmedia-geschichte , damit habe ich gar nichts zu tun und bin daher völlig raus hier, sorry.

gruss Byte09

Byte09

PS: veschieben kannst du eigentlich selber , ganz unten links auf der seite.

gruss Byte09

florian2833

Danke, Thema wurde verschoben :-)

Naja die Jbmedia sache kann man vernachlässigen, das ist am ende einfach nur ein Befehl der von Fhem weitergereicht wird. Soweit ich gelesen habe kann ich aber mit einem Notify nen Dummy schalten und von diesen dann den State auslesen.. (so ist es verständlicher glaube ich) D.h. mein Notify schaltet den Behfehl richtung JB Media und einen Dummy. Das zweite Notify (oder vermutlich besser eine DoIf schleife, womit es jedoch gar nicht klappen will) liest den State des Dummys und erkennt das dieser On ist, somit wäre die Bedingung für ausschalten erfüllt.

Quasi

Bedingung Dummy off + dashbutton "ich bin da"-> befehl eins + Dummy on
Bedingung Dummy on + dashbutton "ich bin da"-> befehl zwei + Dummy off


Mit Doif bekomme ich das allerdings gar nicht hin.

CBSnake

Hi,

hier mal quick`n`dirty doif ungetestet, deine Dashbutton MAC musst halt eintragen



([DashButton:"^xx-7c-xx-c3-xx-02:.short$"] and [dein_device] eq "off")
(set dein_device on, set deine_2_aktion)
DOELSEIF
([DashButton:"^xx-7c-xx-c3-xx-02:.short$"] and [dein_device] eq "on")
(set dein_device off, set deine_2_aktion)
DOELSE



Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

florian2833