Homemapping für Alexa: DOIF als Schalter

Begonnen von rabehd, 12 Januar 2022, 09:35:01

Vorheriges Thema - Nächstes Thema

rabehd

Meine Suche war leider nicht erfolgreich/hilfreich. Beim Mapping beim Mapping stoße ich an meine Grenzen. Altersbedingte Unverständnis? Weder Wiki, noch Forum, konnten mir grundsätzlich helfen.

Ich hab ein DOIF, in dem ein Reading definiert ist und über Setlist änderbar ist.
Ich möchte das Reading über Alexa ändern. Dafür habe ich genericDeviceType auf switch gesetzt und mit dem Mapping experimentiert. In der Alexa-App ist der"Schalter" sichtbar und man kann den Zustand ändern, aber ohne Reaktion in FHEM.

Kann mich da jemand an die Hand nehmen und mir das Vorgehen erklären und die notwendigen Einstellungen benennen?
Auch funktionierende Lösungen kann man hinterfragen.

MadMax-FHEM

Naja mindestens wäre ein list von dem DOIF hilfreich ;)
Oder jsonlist2...

Ansonsten weiß ich nicht genau wie setter bei DOIF funktionieren...

Aber im alexa-fhem Connector Wiki steht doch wie alexa-fhem erkennt "worum" es sich handelt:

sind bestimmte Readings da?

sind "setter" (dafür) vorhanden?

genericDeviceType "unterstützt" in die richtige/gewollte Richtung...

homebridgeMapping "korrigiert", falls eben "Standardreadings" nicht "passen" oder "setter" anders sind.

Beispiel:

hat ein device on/off und entsprechende setter, also set Device on/off -> sollte es automatisch erkannt werden. genericDeviceType switch.

Sind die Readings anders, also an/aus oder noch was anderes, dann wird es eben nicht automatisch erkannt -> homebridgeMapping

Sind die "setter" anders also z.B. (ja extrem aber soll ja zeigen was gemeint ist): set Device holla/holli ;) -> homebridgeMapping

Wie geschrieben: wie das was du hast bei DOIF so tut -> keine Ahnung. Aber es muss halt Readings geben und setter... Wenn es das nicht gibt: homebridgeMapping oder es geht gar nicht...

Im Wiki sollte ja zumindest ein dummy sein (hier halt schnell noch mal ;)  ), der zeigt was für einen Schalter "Minimum" ist ;)


define dmSchalter dummy
attr dmSchalter alexaName Schalter
attr dmSchalter genericDeviceType switch
attr dmSchalter setList on off


Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

rabehd

Hallo Joachim,
Danke für die allgemeinen Erläuterungen, die grundsätzlich sagen, es müßte gehen.
Mit einem Extrra-Dummy bekomme ich es hin. Aber ich will keinen Dummy, wenn DOIF das schon selbst kann.
Das Problem ist auch nicht das DOIF, sondern die Antwort auf die Frage: Wie konfiguiert man ein DOIF als switch und kann so ein (zu definierendes) Reading im DOIF verändern.

Da es nicht um das Schalten durch den DOIF geht,nur die Attribute aus den List ohne Attruibut Homemapping.
Ich mächte, dass Alexa das Reading Radio auf on oder off schaltet.
Attributes:
   alexaName  Radio vorn
   devStateIcon on:general_an:off off:general_aus:on
   genericDeviceType switch
      readingList Radio
   room       Haus->Wohnzimmer,Maschinenraum->Alexa,Test
   setList    Radio:on,off
Auch funktionierende Lösungen kann man hinterfragen.

KlaGho

Hallo, bei mir funktioniert es mit eventmap:

Internals:
   DEF        ## set event map for gassistant to work, |8 > nur Arbeitstage
(([[$SELF:mybegin,"00:00"]|8]) or ([{sunset("HORIZON=-1",-1800,"15:00","18:00")}|Mo Di Mi Do Fr Sa So])) 
(set IT[347] on, set SD_GT_502CC_C on)
DOELSEIF ([[$SELF:myend,"00:00"]|8] or (([23:45:00]) or ([{sunrise("HORIZON=-1",+1800,"06:00","10:00")}|Mo Di Mi Do Fr Sa So])))
(set IT[347] off,set SD_GT_502CC_C off)
   FUUID      5c9a2eae-f33f-2206-c482-130e53cb07e15ff9
   MODEL      FHEM
   NAME       di_ITx_timer
   NOTIFYDEV  global,di_ITx_timer
   NR         313
   NTFY_ORDER 50-di_ITx_timer
   STATE      on
   TYPE       DOIF
   VERSION    25386 2021-12-28 22:19:25
   READINGS:
     2022-01-12 11:08:10   cmd             1
     2022-01-12 11:08:10   cmd_event       set_cmd_1
     2022-01-12 11:08:10   cmd_nr          1
     2022-01-12 11:07:59   mode            enabled
     2021-11-29 15:06:43   mybegin         16:30
     2021-11-29 15:06:59   myend           23:40
     2022-01-12 11:08:10   state           on
     2022-01-12 02:27:58   timer_01_c01    12.01.2022 16:30:00|8
     2022-01-12 02:27:58   timer_02_c01    12.01.2022 16:20:40|MoDiMiDoFrSaSo
     2022-01-12 02:27:58   timer_03_c02    12.01.2022 23:40:00|8
     2022-01-12 02:27:58   timer_04_c02    12.01.2022 23:45:00
     2022-01-12 08:51:33   timer_05_c02    13.01.2022 08:50:56|MoDiMiDoFrSaSo
   Regex:
     accu:
     collect:
     itimer:
       di_ITx_timer:
         itimer:
           mybegin    ^di_ITx_timer$:^mybegin:
           myend      ^di_ITx_timer$:^myend:
   attr:
     cmdState:
       0:
         on
       1:
         off
   condition:
     0          (::DOIF_time_once($hash,0,$wday,"8")) or (::DOIF_time_once($hash,1,$wday,"MoDiMiDoFrSaSo"))
     1          ::DOIF_time_once($hash,2,$wday,"8") or ((::DOIF_time_once($hash,3,$wday)) or (::DOIF_time_once($hash,4,$wday,"MoDiMiDoFrSaSo")))
   days:
     0          8
     1          MoDiMiDoFrSaSo
     2          8
     4          MoDiMiDoFrSaSo
   do:
     0:
       0          set IT[347] on, set SD_GT_502CC_C on
     1:
       0          set IT[347] off,set SD_GT_502CC_C off
     2:
   helper:
     DEVFILTER  ^global$|^di_ITx_timer$
     NOTIFYDEV  global|di_ITx_timer
     globalinit 1
     last_timer 5
     sleeptimer -1
   interval:
   intervalfunc:
   localtime:
     0          1642001400
     1          1642000840
     2          1642027200
     3          1642027500
     4          1642060256
   perlblock:
   realtime:
     0          16:30:00
     1          16:20:40
     2          23:40:00
     3          23:45:00
     4          08:50:56
   time:
     0          [di_ITx_timer:mybegin,"00:00"]
     1          {sunset("HORIZON=-1",-1800,"15:00","18:00")}
     2          [di_ITx_timer:myend,"00:00"]
     3          23:45:00
     4          {sunrise("HORIZON=-1",+1800,"06:00","10:00")}
   timeCond:
     0          0
     1          0
     2          1
     3          1
     4          1
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   timers:
     0           0  1  0  1
     1           2  3  4  2  3  4
   triggertime:
     1642000840:
       localtime  1642000840
       hash:
     1642001400:
       localtime  1642001400
       hash:
     1642027200:
       localtime  1642027200
       hash:
     1642027500:
       localtime  1642027500
       hash:
     1642060256:
       localtime  1642060256
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   alexaName  Weihnachten
   alias      Weihnachten
   assistantName Weihnachten
   cmdState   on|off
   devStateIcon cmd_1:general_an@red:cmd_2 cmd_2:general_aus@yellow:cmd_1 on:general_an@red:cmd_2 off|initialized:general_aus@yellow:cmd_1
   disable    0
   do         always
   eventMap   cmd_1:on cmd_2:off
   gassistantName Weihnachten
   genericDeviceType switch
   readingList mode mybegin myend
   room       GoogleAssistant,IT,Weihnachten
   selftrigger all
   setList    state
mode:disabled,enabled
mybegin:time
myend:time
on
off
   siriName   Weihnachten
   stateFormat state
   webCmd     mode:mybegin:myend

rabehd

#4
Danke, aber ich will nicht wie Du zusätzlich einen Zweig des DOIF auslösen, sonder ein Reading des DOIF ändern.

Mit Deiner Lösung und einer Änderung des DOIF könnte ich vielleicht auf das Reading verzichten.
Werde ich mal probieren.
Auch funktionierende Lösungen kann man hinterfragen.

TomLee

Viel hab ich bei homebridgemapping bisher auch nicht mitgenommen, kann mir aber vorstellen das es so klappen könnte:

On=radio,valueOn=on,valueOff=off

Vermutlich würd auch nur On=radio ausreichen, frag ich mich jetzt beim schreiben ?

juergen012

#6
Vielleicht so:
defmod di_Schalter DOIF ([$SELF:"mybutton: ein"]) (set <Switch on)\
DOELSEIF ([$SELF:"mybutton: aus"]) (set <Switch> off)
attr di_Schalter cmdState on|off
attr di_Schalter eventMap mybutton ein:mybutton_ein mybutton aus:mybutton_aus
attr di_Schalter readingList mybutton
attr di_Schalter setList on off
attr di_Schalter webCmd :


Gruß
Jürgen K.
Fhem unter Proxmox

rabehd

#7
Danke für die Unterstützung. Ich habe mein aktuelles Problem gelöst, ob die eigentliche Frage "Setzen eines Readings per Alexa" möglich ist, konnte bisher keiner beantworten.

@juergen012
Deine Lösung unterscheidet sich nicht wirklich von der von KlaGho. Bei Dir fehlt der alexaname und genericDeviceType. Deshalb wird es vermutlich nicht klappen.

@TomLee
Lief bei mir nicht.

@KlaGho
Auf Basis Deiner Lösung klappt es.



## Name des Echos für das Forum verändert
defmod di_Radio_Fenster DOIF ([$SELF:"mybutton: ein"]) (set ECHO_G095736N7 volume 23)(set ECHO_G095736N7 sounds jubelnde_menschenmenge)(set ECHO_G095736N7 tunein s24896)\
DOELSEIF ([$SELF:"mybutton: aus"]) (set ECHO_G095736N7 textcommand stop)(set ECHO_G095736N7 sounds quitschende_Tuer)\
DOELSEIF ([ECHO_G095736N7:"^currentTuneInID:.-$"] and [?$SELF:state] eq "on") (set $SELF off)
attr di_Radio_Fenster alexaName Radio Fenster
attr di_Radio_Fenster cmdState on|off
attr di_Radio_Fenster devStateIcon on:general_an:off off:general_aus:on
attr di_Radio_Fenster genericDeviceType switch
attr di_Radio_Fenster setList on off
attr di_Radio_Fenster wait 0,2,2:0,2
attr di_Radio_Fenster webCmd :
Auch funktionierende Lösungen kann man hinterfragen.

KlaGho

mit
attr devStateIcon on:general_an:off off:general_aus:on

könntest Du webCmd sparen und direkt durch Klick auf das Ikon ein/aus schalten ;)

rabehd

@KlaGho
Stimmt zwar, aber für die Steuerung per Alexa nicht relevant  ;)
Auch funktionierende Lösungen kann man hinterfragen.