alexa-fhem: Rollläden über dummy steuern - Problem mit der Richtung

Begonnen von billiloumez, 10 Juni 2021, 11:41:13

Vorheriges Thema - Nächstes Thema

billiloumez

Hallo zusammen,

ich habe seit kurzem mein großes Giebelfenster im Wohnzimmer mit 6 Rollos + Rademacher Aktoren beglückt. Die Steuerung über fhem funktioniert einwandfrei und die Steuerung jedes einzelnen Aktors über alexa-fhem funktioniert auch.
Nun hab ich die 6 Aktoren zuerst in eine Alexa Gruppe "Rollos im Wohnzimmer" zusammengefasst. Damit klappt zwar "öffnen" und "schließen" aber ich kann keine Position direkt anfahren, weil das von Alexa Gruppen wohl nicht unterstützt wird. Wenn ich direkt nur ein Device anspreche, klappt das mit der Position.

Jetzt dachte ich mir, ich definiere einfach ein dummy device und bau dafür ne Steuerung mit öffnen, schließen, Position, etc. und dann steuere ich darüber die 6 Rollos per notify. Ich habe nun also alles in fhem definiert und per alexa-fhem eingebunden und Position festlegen über Alexa funktioniert damit tatsächlich. Generell funktionieren alle Steuerungen händisch über fhem, also hoch, runter, Position per dummy.
Was jetzt aber nicht mehr funktioniert ist "öffnen" und "schließen" per Alexa, das ist nämlich jetzt komischerweise vertauscht.

Die Config sieht bei mir so aus:
Dummy

defmod RolloWohnzimmer dummy
attr RolloWohnzimmer alexaName Rollo im Wohnzimmer
attr RolloWohnzimmer eventMap down:close up:open
attr RolloWohnzimmer genericDeviceType blind
attr RolloWohnzimmer room Alexa,Wohnzimmer
attr RolloWohnzimmer setList position:slider,0,1,100 up down stop
attr RolloWohnzimmer webCmd position:open:close:stop


Notify 1

defmod n_RolloWohnzimmer notify RolloWohnzimmer:.* { \
if ($EVTPART0 eq 'up' or $EVTPART0 eq 'open') {\
  fhem('set DUOFERN_421D7D,DUOFERN_421D8A,DUOFERN_421D84,DUOFERN_421D89,DUOFERN_4207F8,DUOFERN_4207E5 up');;\
}else {\
  if ($EVTPART0 eq 'down' or $EVTPART0 eq 'close' ) {\
   fhem('set DUOFERN_421D7D,DUOFERN_421D8A,DUOFERN_421D84,DUOFERN_421D89,DUOFERN_4207F8,DUOFERN_4207E5 down');;\
  } else {\
   if ($EVTPART0 eq 'stop' ) {\
    fhem('set DUOFERN_421D7D,DUOFERN_421D8A,DUOFERN_421D84,DUOFERN_421D89,DUOFERN_4207F8,DUOFERN_4207E5 stop');;\
   }\
  }\
}\
}


Notify 2

defmod n_RolloWohnzimmerPosition notify RolloWohnzimmer:position.* set DUOFERN_421D7D,DUOFERN_421D8A,DUOFERN_421D84,DUOFERN_421D89,DUOFERN_4207F8,DUOFERN_4207E5 position $EVTPART1


Im alexa-fhem Log sieht man folgendes. Ich habe beide Male gesagt "Alexa öffne..." der erste Logeintrag ist für den dummy (wo die Richtung falsch ist), der zweite Logeintrag ist für ein konkretes Device (wo die Richtung stimmt).

[10.6.2021, 10:54:04] >>>> [ssh] {"directive":{"header":{"namespace":"Alexa.RangeController","name":"SetRangeValue","payloadVersion":"3","instance":"Blind.Position","messageId":"975937e6-341a-4f25-9df8-0a92676d8665","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"8A994840-71FA41EB707FD2DB"},"endpointId":"60c1b519-f33f-3c6b-a360-7740da9df9a49914","cookie":{"fuuid":"60c1b519-f33f-3c6b-a360-7740da9df9a49914","device":"RolloWohnzimmer"}},"payload":{"rangeValue":100}}}
[10.6.2021, 10:54:04] [FHEM] RolloWohnzimmer: executing set cmd for TargetPosition with value 100
[10.6.2021, 10:54:04] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20RolloWohnzimmer%20position%20100&fwcsrf=csrf_273929587016700&XHR=1
[10.6.2021, 10:54:04] <<<< [ssh] {"context":{"properties":[{"namespace":"Alexa.RangeController","instance":"Blind.Position","name":"rangeValue","value":100,"timeOfSample":"2021-06-10T08:54:04.237Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"Response","payloadVersion":"3","messageId":"c9f5a2b5-480a-4521-8ae5-9f4c15e58670","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"8A994840-71FA41EB707FD2DB"},"endpointId":"60c1b519-f33f-3c6b-a360-7740da9df9a49914"},"payload":{}}}
  2021-06-10 10:54:04 caching: DUOFERN_421D7D-moving: close
[10.6.2021, 10:54:04] [FHEM]     caching: PositionState: STOPPED (as string; from 'close')
  2021-06-10 10:54:04 caching: DUOFERN_421D8A-moving: close
[10.6.2021, 10:54:04] [FHEM]     caching: PositionState: STOPPED (as string; from 'close')
  2021-06-10 10:54:04 caching: DUOFERN_421D84-moving: close
[10.6.2021, 10:54:04] [FHEM]     caching: PositionState: STOPPED (as string; from 'close')
  2021-06-10 10:54:04 caching: DUOFERN_421D89-moving: close
[10.6.2021, 10:54:04] [FHEM]     caching: PositionState: STOPPED (as string; from 'close')
  2021-06-10 10:54:04 caching: DUOFERN_4207F8-moving: close
[10.6.2021, 10:54:04] [FHEM]     caching: PositionState: STOPPED (as string; from 'close')
  2021-06-10 10:54:04 caching: DUOFERN_4207E5-moving: close
[10.6.2021, 10:54:04] [FHEM]     caching: PositionState: STOPPED (as string; from 'close')
  2021-06-10 10:54:15 caching: DUOFERN_421D8A-position: 26
[10.6.2021, 10:54:15] [FHEM]     caching: CurrentPosition: 26 (as string; from '26')
[10.6.2021, 10:54:15] [FHEM]     caching: TargetPosition: 26 (as string; from '26')
  2021-06-10 10:54:15 caching: DUOFERN_421D8A-moving: stop
[10.6.2021, 10:54:15] [FHEM]     caching: PositionState: STOPPED (as string; from 'stop')
  2021-06-10 10:54:16 caching: DUOFERN_4207E5-moving: stop
[10.6.2021, 10:54:16] [FHEM]     caching: PositionState: STOPPED (as string; from 'stop')
  2021-06-10 10:54:16 caching: DUOFERN_4207E5-position: 22
[10.6.2021, 10:54:16] [FHEM]     caching: CurrentPosition: 22 (as string; from '22')
[10.6.2021, 10:54:16] [FHEM]     caching: TargetPosition: 22 (as string; from '22')
  2021-06-10 10:54:17 caching: DUOFERN_421D84-moving: stop
[10.6.2021, 10:54:17] [FHEM]     caching: PositionState: STOPPED (as string; from 'stop')
  2021-06-10 10:54:17 caching: DUOFERN_421D84-position: 18
[10.6.2021, 10:54:17] [FHEM]     caching: CurrentPosition: 18 (as string; from '18')
[10.6.2021, 10:54:17] [FHEM]     caching: TargetPosition: 18 (as string; from '18')
  2021-06-10 10:54:18 caching: DUOFERN_421D7D-moving: stop
[10.6.2021, 10:54:18] [FHEM]     caching: PositionState: STOPPED (as string; from 'stop')
  2021-06-10 10:54:18 caching: DUOFERN_421D7D-position: 26
[10.6.2021, 10:54:18] [FHEM]     caching: CurrentPosition: 26 (as string; from '26')
[10.6.2021, 10:54:18] [FHEM]     caching: TargetPosition: 26 (as string; from '26')
  2021-06-10 10:54:19 caching: DUOFERN_421D89-moving: stop
[10.6.2021, 10:54:19] [FHEM]     caching: PositionState: STOPPED (as string; from 'stop')
  2021-06-10 10:54:19 caching: DUOFERN_421D89-position: 18
[10.6.2021, 10:54:19] [FHEM]     caching: CurrentPosition: 18 (as string; from '18')
[10.6.2021, 10:54:19] [FHEM]     caching: TargetPosition: 18 (as string; from '18')
  2021-06-10 10:54:21 caching: DUOFERN_4207F8-position: 22
[10.6.2021, 10:54:21] [FHEM]     caching: CurrentPosition: 22 (as string; from '22')
[10.6.2021, 10:54:21] [FHEM]     caching: TargetPosition: 22 (as string; from '22')
  2021-06-10 10:54:21 caching: DUOFERN_4207F8-moving: stop
[10.6.2021, 10:54:21] [FHEM]     caching: PositionState: STOPPED (as string; from 'stop')
[10.6.2021, 10:57:09] >>>> [ssh] {"directive":{"header":{"namespace":"Alexa.RangeController","name":"SetRangeValue","payloadVersion":"3","instance":"Blind.Position","messageId":"db0018f9-1886-4198-81b3-3a68c2c24696","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"8A994840-71FA41EB707FD2DB"},"endpointId":"DUOFERN_421D7D","cookie":{"fuuid":"60ba33dd-f33f-3c6b-22b1-18866d7e67aa3c1d","device":"DUOFERN_421D7D"}},"payload":{"rangeValue":0}}}
[10.6.2021, 10:57:09] [FHEM] DUOFERN_421D7D: executing set cmd for TargetPosition with value 100
[10.6.2021, 10:57:09] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20DUOFERN_421D7D%20position%200&fwcsrf=csrf_273929587016700&XHR=1
[10.6.2021, 10:57:09] <<<< [ssh] {"context":{"properties":[{"namespace":"Alexa.RangeController","instance":"Blind.Position","name":"rangeValue","value":100,"timeOfSample":"2021-06-10T08:57:09.217Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"Response","payloadVersion":"3","messageId":"cf1a5dbe-e247-4ca0-b643-ac9eaaa9ade1","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"8A994840-71FA41EB707FD2DB"},"endpointId":"DUOFERN_421D7D"},"payload":{}}}
  2021-06-10 10:57:09 caching: DUOFERN_421D7D-moving: open
[10.6.2021, 10:57:09] [FHEM]     caching: PositionState: STOPPED (as string; from 'open')
  2021-06-10 10:57:20 caching: DUOFERN_421D7D-position: 0
[10.6.2021, 10:57:20] [FHEM]     caching: CurrentPosition: 0 (as string; from '0')
[10.6.2021, 10:57:20] [FHEM]     caching: TargetPosition: 0 (as string; from '0')
  2021-06-10 10:57:20 caching: DUOFERN_421D7D-moving: stop
[10.6.2021, 10:57:20] [FHEM]     caching: PositionState: STOPPED (as string; from 'stop')



Fällt dazu irgendwem was ein?
Was mir auch aufgefallen ist: Im Wiki steht, man kann bei alexaName zwei Namen angeben, per Semikolon getrennt. Ich habe also versucht "Rollo im Wohnzimmer;Rollos im Wohnzimmer" anzugeben, aber der Name wurde genau so für Alexa übernommen, nicht als zwei getrennte Namen.

Beta-User

Zitat von: billiloumez am 10 Juni 2021, 11:41:13
Fällt dazu irgendwem was ein?
Na ja, vielleicht, dass ich das ganze "Gesamtdevice" eher als "structure" definieren würde. Hat den Vorteil, dass sich der Zustand z.B. (jedenfalls, wenn FHEM bei externer Schaltung Info erhält) auch wieder konsolidiert, wenn man z.B. Aktoren lokal bedient.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

Wenn in allen Rollos das genericdevicetype-Attribut blind vergeben ist, in der Alexa-App also auch das Rollo-Icon gezeigt wird, dann sollte das steuern auf Position auch möglich sein.

Was falsch ist, ist der Gruppenname "Rollos im Wohnzimmer".

Steck die Rollos in die Gruppe 'Wohnzimmer', diese sollten dann alle über einen generischen Namen gesteuert werden können.

Sprich dann sollte ein 'Rollos im Wohnzimmer auf x Prozent' klappen.

billiloumez

Zitat von: Beta-User am 10 Juni 2021, 11:53:07
Na ja, vielleicht, dass ich das ganze "Gesamtdevice" eher als "structure" definieren würde

Ich schau es mir mal an, structure kannte ich bisher noch gar nicht

Zitat von: TomLee am 10 Juni 2021, 12:04:44
Wenn in allen Rollos das genericdevicetype-Attribut blind vergeben ist, in der Alexa-App also auch das Rollo-Icon gezeigt wird, dann sollte das steuern auf Position auch möglich sein.

Bei den einzelnen Aktoren, sowie beim dummy ist der genericdevicetype auf blind gesetzt, in der App wird es auch richtig angezeigt. Es funktioniert auch alles wie gewünscht, wenn ich einen einzelnen Aktor per Alexa anspreche, aber beim dummy ist die Richtung auf einmal vertauscht, wenn ich ihn über Alexa steuere. Wenn ich den dummy manuell in fhem steuere, passt alles.

TomLee

Du wolltest doch alle Rollläden in einer Gruppe mit einem Sprachbefehl steuern, hoch, runter und Prozent.

Das sollte so wie ich vorgeschlagen eigentlich klappen (zumindest ist es genauso vorgesehen), wie gesagt, einen der generischen Namen im Gruppennamen zu verwenden ist aber nicht richtig und darum klappts vermutlich mit dem Gruppenname 'Rollos im Wohnzimmer' nicht.

billiloumez

Ich hab das mal eben ausprobiert, die Alexa Gruppen "Rollo/Rollos im Wohnzimmer" gelöscht und die Devices der Gruppe Wohnzimmer zugeordnet. Mit "Alexa, öffne/schließe.." kann sie jetzt gar nichts mehr anfangen (das ging vorher noch in den alten Gruppen), wenn ich "Alexa, stell die Rollos im Wohnzimmer auf 10%" sage, bewegt sich nur eins der 6 Rollos auf 10%.

TomLee

Lösch mal alle Rollläden in der App und stoss eine neue Suche an und dann wieder alle der Gruppe zuordnen.

Geht hoch/runter statt öffne/schliesse ?

Da muss man halt etwas testen/spielen mit, hab ich gar keine Lust dazu mich mit zu beschäftigen, bei mir fahren die Rollos mit ASC automatisch, da brauch ich nix per Sprache steuern, es sollte auf jedenfal so klappen wie ich es geschildert habe.

Ich bin jetzt am arbeiten. Viel Erfolg.

billiloumez

Ich hab gestern noch mit den generischen Namen rumgespielt aber bin da auf keinen grünen Zweig gekommen, jetzt hab ich gerade structure probiert und eigentlich macht es genau das, was ich mit meinem dummy vorhatte.
Aber: Auch hier hab ich genau das gleiche Problem. Ich fasse nun alle 6 Rollladen Aktoren in eine structure zusammen und kann dann über Alexa die Position setzen, aber "öffnen" und "schließen" ist vertauscht. Wenn ich aber per Alexa nur auf einen der Rollläden gehe, ist die Richtung korrekt.

Also:
"Alexa, öffne alle Rollos im Wohnzimmer" geht auf die structure, reagiert falsch und schließt die Rollos
"Alexa, öffne das Rollo im Wohnzimmer unten links" geht auf ein device, reagiert richtig und öffnet das Rollo unten links

Keine Ahnung wo da der Wurm drin ist..

TomLee

Ich hab in Erinnerung das bei den Rademachern 0 auf und 100 zu ist.

Ohne homebridgemapping oder gesetztem levelinverse wäre das Verhalten bei der structure korrekt.

Warum aber der direkt angesprochene Rollo dann richtig fährt, hab ich auch keine Idee.

Beta-User

Zitat von: billiloumez am 11 Juni 2021, 08:47:48
jetzt hab ich gerade structure probiert und eigentlich macht es genau das, was ich mit meinem dummy vorhatte.
Das ist doch schon mal was 8) .

ZitatKeine Ahnung wo da der Wurm drin ist..
Es dürfte auch schwierig für potentielle Helfer sein, der Sache auf den Grund zu gehen, wenn du nicht mehr Infos lieferst. structure hat ein paar Attribute, die das Verhalten beeinflussen, und ohne jeweils den "Zustand vor Schaltung" gesehen zu haben, kann vermultich nur jemand was sagen, der entweder genau dasselbe setup oder eine sehr gute Glaskugel hat...

Liefere doch einfach mal je ein "list" von der structure, wenn alles unten ist und du willst nach oben (weiß nicht, ob man die Anweisung aus alexa-fhem loggen kann, wenn ja: auch das), wie das dann stehen bleibt bzw. nach Ausführung aussieht, und dasselbe ggf. dann für die andere Richtung?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

billiloumez

Ich hab mir jetzt mit Alexa Routinen beholfen für Öffnen und Schließen. Die kommen in der Prio ja an erster Stelle. Ist zwar "dirty" aber damit funktioniert jetzt alles so, wie ich will. Direkte Position anfahren läuft sauber über die Structure und die komplette Steuerung direkt in FHEM läuft auch sauber, damit bin ich zufrieden.

Danke euch für die Unterstützung.

dennis_n

Ist zwar schon etwas älter, aber ich hatte am Anfang auch Probleme mit meinen Rolläden.
Allerdings funktionieren sie jetzt absolut zuverlässig.

Ich habe die RollerShutter von Fibaro verbaut.
genericDeviceType ist blind
alexa Name ist: Rolladen Wohnzimmer

Hier mal mein homeBridgeMapping:
clear CurrentPosition=state,minValue=0,maxValue=99 TargetPosition=state,minValue=0,maxValue=99,minStep=10,cmd=dim

Damit kann ich sagen: "Alexa, öffne den Rolladen im Wohnzimmer" oder "Alexa, schließe den Rolladen im Wohnzimmer"

Vielleicht hilft es ja.

Gruss
Dennis