Hallo, ich finde nicht die richtigen Stichwörter, wie ich alexa sage, Ventilator: Aus / An (Stufe 1) / Stufe 2 / Stufe 3.
Es geht um 2 Westinghouse Deckenventilatoren und 1 Standventilator, mit IR-Fernbedienung. Die sollen später mal mit 2 auvisio Infrarot Fernbedienungen (mit Tasmota_ir geflascht) bedient werden. Was ich mir bis jetzt zusammen gesucht habe, funktioniert in fhem, aber alexa bekomme ich nicht überredet, da mit zu spielen. Als genericDeviceType habe ich schon: blind, light, fan probiert. Und für jeden Zustand ein extra Dummy, fände ich nicht so prickelnd / unübersichtlich.
Mein Problem: In der Alexa-App kann ich "an / aus" schalten -> kommt in fhem an, aber nach ein paar Sekunden springt die Anzeige zurück auf den Wert, wie "pct" eingestellt ist. Ist pct = 0 kann ich einschalten, geht aber immer wieder aus, ist pct > 0 geht die Anzeige immer wieder an. Für die Stufen wollte ich "pct" auswerten und bei größer/kleiner 33 / 66 / 99 % entsprechend senden.
Das Device:
defmod WZ_Deckenventilator dummy
attr WZ_Deckenventilator DbLogExclude .*
attr WZ_Deckenventilator alexaName Deckenventilator
attr WZ_Deckenventilator alexaRoom Wohnzimmer
attr WZ_Deckenventilator comment https://forum.fhem.de/index.php/topic,53282.msg1044917.html#msg1044917\
https://forum.fhem.de/index.php/topic,103442.msg1083748.html#msg1083748
attr WZ_Deckenventilator devStateIcon off:vent_ventilation on:vent_ventilation_level_1 2:vent_ventilation_level_2 3:vent_ventilation_level_3
attr WZ_Deckenventilator event-on-change-reading .*
attr WZ_Deckenventilator genericDeviceType fan
attr WZ_Deckenventilator readingList pct
attr WZ_Deckenventilator room Test
attr WZ_Deckenventilator setList pct:slider,0,1,100 state:off,on,2,3
attr WZ_Deckenventilator webCmd state
setstate WZ_Deckenventilator off
setstate WZ_Deckenventilator 2022-06-19 19:57:43 pct 35
setstate WZ_Deckenventilator 2022-06-19 19:57:23 state off
Vielen Dank schon Mal,
Lutz
Ich habe das mit einem Dummy realisiert, der bei Alexa als Thermostat auftaucht.
Die Bedienung lauft über: "Alexa, stelle den Ventilator auf 0 (1,2,3)"; die Antwort kommt als: "Thermostat auf 0 (1,2,3) gestellt."
Ein DOIF reagiert auf den Dummy und steuert den IR-Blaster an...
Internals:
CFGFN ./FHEM/061_WZ.cfg
FUUID 60e56b45-f33f-b425-478b-fb051698186436ba
NAME WZ_Ventilator
NR 118
STATE Ein
TYPE dummy
READINGS:
2022-06-19 23:45:13 desired-temp 0
2022-06-18 16:05:42 state on
Attributes:
alexaName Ventilator
alexaProactiveEvents 1
eventMap on:Ein off:Aus
genericDeviceType thermostat
homebridgeMapping On:reading=state,cmdOn=on,cmdOff=off
readingList desired-temp measured-temp
room 001Wohnzimmer
setList on off desired-temp measured-temp 0 1 2 3
und
Internals:
DEF ([WZ_Ventilator:desired-temp] eq 1) (set IR_Blaster send IR_WZ_Ventilator_1)
DOELSEIF
([WZ_Ventilator:desired-temp] eq 2)(set IR_Blaster send IR_WZ_Ventilator_2)
DOELSEIF
([WZ_Ventilator:desired-temp] eq 3) (set IR_Blaster send IR_WZ_Ventilator_3)
DOELSEIF
([WZ_Ventilator:"^off$"] or [WZ_Ventilator:"^Aus$"] or [WZ_Ventilator:desired-temp] eq 0) (set IR_Blaster send IR_WZ_Ventilator_0)
FUUID 6151d4a2-f33f-b425-dcdc-4dbc4976d6a2a6ac
MODEL FHEM
NAME WZ_Ventilator_run
NOTIFYDEV WZ_Ventilator,global
NR 927
NTFY_ORDER 50-WZ_Ventilator_run
STATE cmd_4
TYPE DOIF
VERSION 26159 2022-06-19 16:10:29
READINGS:
2022-06-19 23:45:13 Device WZ_Ventilator
2022-06-19 23:45:13 cmd 4
2022-06-19 23:45:13 cmd_event WZ_Ventilator
2022-06-19 23:45:13 cmd_nr 4
2022-06-19 23:45:13 e_WZ_Ventilator_desired-temp 0
2022-06-19 23:45:13 e_WZ_Ventilator_events desired-temp: 0
2022-05-20 10:46:14 mode enabled
2022-06-19 23:45:13 state cmd_4
Regex:
accu:
collect:
cond:
WZ_Ventilator:
0:
desired-temp ^WZ_Ventilator$:^desired-temp:
1:
desired-temp ^WZ_Ventilator$:^desired-temp:
2:
desired-temp ^WZ_Ventilator$:^desired-temp:
3:
&STATE ^WZ_Ventilator$
desired-temp ^WZ_Ventilator$:^desired-temp:
condition:
0 ::ReadingValDoIf($hash,'WZ_Ventilator','desired-temp') eq 1
1 ::ReadingValDoIf($hash,'WZ_Ventilator','desired-temp') eq 2
2 ::ReadingValDoIf($hash,'WZ_Ventilator','desired-temp') eq 3
3 ::EventDoIf('WZ_Ventilator',$hash,'^off$',1) or ::EventDoIf('WZ_Ventilator',$hash,'^Aus$',1) or ::ReadingValDoIf($hash,'WZ_Ventilator','desired-temp') eq 0
do:
0:
0 set IR_Blaster send IR_WZ_Ventilator_1
1:
0 set IR_Blaster send IR_WZ_Ventilator_2
2:
0 set IR_Blaster send IR_WZ_Ventilator_3
3:
0 set IR_Blaster send IR_WZ_Ventilator_0
4:
helper:
NOTIFYDEV WZ_Ventilator,global
globalinit 1
last_timer 0
sleeptimer -1
perlblock:
readings:
all WZ_Ventilator:desired-temp
trigger:
all WZ_Ventilator
uiState:
uiTable:
Attributes:
devStateIcon cmd_1:vent_ventilation_level_1 cmd_2:vent_ventilation_level_2 cmd_3:vent_ventilation_level_3 cmd_4:vent_ventilation_level_0
do always
icon vent_ventilation
room 001Wohnzimmer
Wie im Wiki vermerkt muss man erst mal sehen was Amazon/Alexa alles unterstützt: https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html
Was dort nicht mit Unterstützung in der entsprechenden Sprache auftaucht, kann man nicht nutzen, weil es eben Alexa nicht versteht...
(Ausnahme: eine Routine in Alexa anlegen, dort kann man genau vorgeben was man sagen will. Allerdings unflexibel, weil für jedes Kommando/jede Kommandovariante eine Routine angelegt werden muss, evtl. aber bei den 2-3 Befehlen eine gute Alternative ;) Man kann auch z.B. verschiedene pct bei einem "Licht-dummy" am Ende der Routine angeben und so per notify/DOIF dann die tatsächlichen Schaltbefehle absetzen. Nachteil: die Anzeige ist nat. dann in der Alexa-App nicht möglich und Steuerung über die App auch nur schwierig, man muss ja den jeweiligen pct Wert "treffen" / weitere Alternative: Custom Skill)
Da z.B. genericDeviceType nicht nur von alexa-fhem sondern auch von gassistant und homekit (soweit ich weiß oder homebridge oder welches Apfelzeugs auch immer ;) ) und ebenso homebridgeMapping geht nicht alles/jeder einstellbare Wert mit allen Steuerungen...
Daher muss man erst mal was raussuchen, was dem was man will am nächsten kommt...
...und dann einfach mal mittels setzen von genericDeviceType probieren.
Wird es nicht autom. erkannt oder passen Werte/Befehle nicht -> homebridgeMapping
Gruß, Joachim
@locodriver
Vielen Dank für deinen Vorschlag! Hat aber leider (bei mir) ähnliche Symptome wie mein Versuch. Per Sprache funktioniert das (bei mir auch mit ein/aus), in der Alexa-App kann ich aber den Ventilator nicht richtig bedienen.
@Joachim
Zitat...und dann einfach mal mittels setzen von genericDeviceType probieren.
Das probiere ich schon eine Weile, ohne eine zufriedenstellende Lösung. Ich habe aber gerade was von dir und @friesenjung gefunden:
https://forum.fhem.de/index.php/topic,104130.msg1119070.html#msg1119070 (https://forum.fhem.de/index.php/topic,104130.msg1119070.html#msg1119070)
Per Sprache: an/aus/Stufe0-3 funktioniert schon mal, in der Alexa-App funktioniert: aus / Stufe1-3, nur "ein" schaltet noch nicht auf Stufe 1 und bringt den Ein/aus Schalter durcheinander.
Zitat von: friesenjung am 07 Januar 2021, 15:55:24
defmod Test_Alexa DOIF ([$SELF:Stufe]>0)
attr Test_Alexa DbLogExclude .*
attr Test_Alexa alexaName Lüftung
attr Test_Alexa alias Test_Alexa
attr Test_Alexa cmdState on|off
attr Test_Alexa comment https://forum.fhem.de/index.php/topic,104130.msg1119070.html#msg1119070
attr Test_Alexa event-on-change-reading .*
attr Test_Alexa genericDeviceType switch
attr Test_Alexa homebridgeMapping Brightness=Stufe,cmd=Stufe,minValue=0,maxValue=3 On:cmdOn=Stufe+1,cmdOff=Stufe+0
attr Test_Alexa readingList Stufe
attr Test_Alexa room Test
attr Test_Alexa setList on off Stufe:slider,0,1,3
setstate Test_Alexa off
setstate Test_Alexa 2022-06-22 02:13:42 Stufe 0
setstate Test_Alexa 2022-06-22 02:13:42 cmd 2
setstate Test_Alexa 2022-06-22 02:13:42 cmd_event Test_Alexa
setstate Test_Alexa 2022-06-22 02:13:42 cmd_nr 2
setstate Test_Alexa 2022-06-22 02:13:42 e_Test_Alexa_Stufe 0
setstate Test_Alexa 2022-06-22 01:38:13 mode enabled
setstate Test_Alexa 2022-06-22 02:13:42 state off
Das homebridgeMapping hab ich etwas geändert, von "On:cmdOn=on" auf "On:cmdOn=Stufe+1". Scheint aber noch nicht zu stimmen!?
Klingt erst Mal sehr vielversprechend - nur 1 Device, kein dummy+doif. Ich hoffe, morgen komme ich zum weiter spielen. :)
Zitat von: LutzG am 22 Juni 2022, 02:37:00
Zitat
...und dann einfach mal mittels setzen von genericDeviceType probieren.
@JoachimDas probiere ich schon eine Weile, ohne eine zufriedenstellende Lösung.
Das hast du aber (auch) beachtet:
Zitat
Wie im Wiki vermerkt muss man erst mal sehen was Amazon/Alexa alles unterstützt: https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html
Weil damit fängt alles an ;-)
Zitat
Per Sprache: an/aus/Stufe0-3 funktioniert schon mal, in der Alexa-App funktioniert: aus / Stufe1-3, nur "ein" schaltet noch nicht auf Stufe 1 und bringt den Ein/aus Schalter durcheinander.
Evtl. auch value=... im homebridgeMapping setzen...
EDIT: wenn etwas nicht geht, dann mal im alexa-fhem Log schauen. Da steht drin was von Amazon kommt und was alexa-fhem (anhand von Automatik oder per homebridgeMapping angepasst) draus macht...
Aber so tief stecke ich da nicht drin und: ich nutze Sprache nur für "simple Dinge"...
Alles andere ist mir zu kompliziert und (leider) auch "fehleranfällig" (also bzgl. was versteht Alexa und/bzw. was macht sie draus)...
Gruß, Joachim
Vorausgesetzt die mit Tasmota_ir geflashten FBs werden am Ende mit MQTT2 in FHEM eingebunden, hätte ich folgenden Vorschlag es direkt im MQTT2_DEVICE umzusetzen.
Mithilfe eines pct-setter kannst du mit deinem gewünschten Sprachbefehl
Alexa, <alexaName> auf Stufe <1-3>
die Stufen schalten, klappt bei mir einwandfrei.
pct:{'slider,1,1,'.scalar(split(/,/,ReadingsVal($name,'codes','none'))).',1'} {my @d = split(/,/,ReadingsVal($NAME,'codes','none'));my ($i,%pct2cmd);map {$i++;$pct2cmd{$i} = $_;} (@d);my $cmd = $pct2cmd{$EVTPART1};return if !$cmd;fhem("setreading $NAME pct $EVTPART1");return qq(cmnd/tasmotairwz/IRSend {"protocol": "NEC","bits": 32, "data": $cmd});}
Die drei IR-Codes der Stufen musst du dazu einfach mit setreading in ein Reading schreiben, kommagetrennt (oder sonstigen Trenner, dann halt den Code anpassen).
Ein Beispieldevice nur zum nachvollziehen (da sind nicht alle Readings vorhanden weil das eine Kopie meines Devices ist und bis jetzt kein restart stattfand):
defmod MQTT2_Demo MQTT2_DEVICE DVES_104A25
attr MQTT2_Demo IODev MQTT2_Server
attr MQTT2_Demo alexaName mairübe
attr MQTT2_Demo devicetopic tasmotairwz
attr MQTT2_Demo icon IR
attr MQTT2_Demo readingList tele/tasmotairwz/LWT:.* LWT\
tele/tasmotairwz/STATE:.* { json2nameValue($EVENT) }\
tele/tasmotairwz/SENSOR:.* { json2nameValue($EVENT) }\
tele/tasmotairwz/INFO.:.* { json2nameValue($EVENT) }\
stat/tasmotairwz/RESULT:.* {}\
attr MQTT2_Demo room MQTT2_DEVICE
attr MQTT2_Demo setList irsend:textField cmnd/tasmotairwz/IRSend {"protocol": "NEC", "bits": 32, "data": $EVTPART0}\
pct:{'slider,1,1,'.scalar(split(/,/,ReadingsVal($name,'codes','none'))).',1'} {my @d = split(/,/,ReadingsVal($NAME,'codes','none'));;my ($i,%pct2cmd);;map {$i++;;$pct2cmd{$i} = $_;;} (@d);;my $cmd = $pct2cmd{$EVTPART1};;return if !$cmd;;fhem("setreading $NAME pct $EVTPART1");;return qq(cmnd/tasmotairwz/IRSend {"protocol": "NEC","bits": 32, "data": $cmd});;}
setstate MQTT2_Demo pct
setstate MQTT2_Demo 2022-06-22 11:40:48 IODev MQTT2_Server
setstate MQTT2_Demo 2022-06-22 11:48:37 codes 551489775,0x00FF40BF,0x00FF00FF
setstate MQTT2_Demo 2022-06-22 13:18:32 pct 2
setstate MQTT2_Demo 2022-06-22 13:18:32 state pct
setstate MQTT2_Demo 2022-06-22 12:47:59 subscriptions cmnd/DVES_104A25_fb/# cmnd/sonoffs/# cmnd/tasmotairwz/#
edit:
Die IR-Codes der Stufen ohne setreading ergänzen, aktualisieren:
attr MQTT2_Demo setList codes:{'multiple,'.ReadingsVal($name,'codes','none');;} {sleep 0.5;;fhem("setreading $NAME $EVTPART0 $EVTPART1")}
Dabei fällt mir auf das es wohl besser ist ein sleep im pct-setter zu ergänzen:
Zitatattr MQTT2_Demo setList pct:{'slider,1,1,'.scalar(split(/,/,ReadingsVal($name,'codes','none'))).',1'} {my @d = split(/,/,ReadingsVal($NAME,'codes','none'));;my ($i,%pct2cmd);;map {$i++;;$pct2cmd{$i} = $_;;} (@d);;my $cmd = $pct2cmd{$EVTPART1};;return if !$cmd;;sleep 0.5;;fhem("setreading $NAME pct $EVTPART1");;return qq(cmnd/tasmotairwz/IRSend {"protocol": "NEC","bits": 32, "data": $cmd});;}
nochmal edit, weil Erinnerungen hochkamen und ich Lust und Zeit hatte mich mit zu beschäftigen:
Unabhängig davon ob der Code ausgelagert werden sollte, bevor sich wer "beschwert" dass das mit dem map schwerer zu lesen wäre, kann man das auch mit einer for-Schleife angehen und wer sich fragt warum wozu scalar, ich weiß es nicht mehr, man kanns auch weglassen.
attr MQTT2_Demo setList pct:{'slider,1,1,'.scalar(split(/,/,ReadingsVal($name,'codes','none'))).',1'} {my @d = split(/,/,ReadingsVal($NAME,'codes','none'));;my ($i,%pct2cmd);; for my $v (@d) {$i++;;$pct2cmd{$i} = $v;;}my $cmd = $pct2cmd{$EVTPART1};;return if !$cmd;;sleep 0.5;;fhem("setreading $NAME pct $EVTPART1");;return qq(cmnd/tasmotairwz/IRSend {"protocol": "NEC","bits": 32, "data": $cmd});;}
mehrere stufen lassen sich mit alexa z.b. hiermit: https://forum.fhem.de/index.php/topic,125604.msg1202199.html#msg1202199 umsetzen. je nach gewünschten kommandos eventuell in kombination mit alexa routinen.
Ja, deswegen habe ich gefragt! Auf eure Lösungen wäre ich nie gekommen! 8)
Zitat von: MadMax-FHEM am 22 Juni 2022, 09:44:50
Das hast du aber (auch) beachtet:
Weil damit fängt alles an ;-)
Evtl. auch value=... im homebridgeMapping setzen...
Ich habe neben dem Forum, Wiki, Google, auf der Amazon Seite und auf:
https://wiki.fhem.de/wiki/Attribut_genericDeviceType (https://wiki.fhem.de/wiki/Attribut_genericDeviceType) und
https://wiki.fhem.de/wiki/Alexa_und_Mappings#Liste_der_unterst.C3.BCtzten_Characteristics_und_ihrer_Parameter (https://wiki.fhem.de/wiki/Alexa_und_Mappings#Liste_der_unterst.C3.BCtzten_Characteristics_und_ihrer_Parameter)
versucht schlau zu werden, was Alexa vesteht. Auf eure Lösungen bin ich dabei nicht gekommen. :(
Mit "value=... " hab ich noch nicht weiter probiert. Ich hab versucht den Vorschlag von @TomLee zu verstehen.
@TomLee
Klingt sehr interessant! Ich hätte dazu aber noch gerne ein paar Fragen: ::)
Eine "Tasmota_ir geflashter FB" soll für
mehrere Geräte (Lüfter, TV, Reciver,...) verwendet werden. Wenn ich für alle ein eigenes MQTT2_Device anlege, werden immer wieder die gleichen Readings von der "FB" abgefragt. Ist das nicht doppelt gemoppelt, oder muss das so?
Was macht "scalar"? Was ich darüber finde verstehe ich nicht. Zählt (bei deinem Code) die Funktion die Dimensionen vom Array?
Ich finde das mit dem "codes"- Reading nicht so schick, bekomme aber "codes" als userattr angelegt, nicht mit: "ReadingsVal($name,'codes','none')" gelesen / verarbeitet. Ich habe aber auch noch nicht soooo lange gesucht.
@justme1968
Super interessant! genericDeviceType "mode", hab ich auch noch nicht für voll genommen. :o
Ich übe Mal die nächste Zeit. Vielen Dank für eure Vorschläge! :D
Attributabfrage: AttrVal ;)
ReadungsVal und ReadingsNum für Readings...
Gruß, Joachim
ZitatEine "Tasmota_ir geflashter FB" soll für mehrere Geräte (Lüfter, TV, Reciver,...) verwendet werden. Wenn ich für alle ein eigenes MQTT2_Device anlege, werden immer wieder die gleichen Readings von der "FB" abgefragt. Ist das nicht doppelt gemoppelt, oder muss das so?
Wenn du den Weg über mehrere MQTT2_Devices gehst, darfst in den weiteren Devices halt nicht alle Topics in der ReadingsList "abonnieren", einfach die Zweige (in den weiteren Devices) die du für doppelt gemoppelt hältst weglassen.
ZitatWas macht "scalar"? Was ich darüber finde verstehe ich nicht. Zählt (bei deinem Code) die Funktion die Dimensionen vom Array?
Wie gesagt weiß ich nicht mehr was mich dazu getrieben hatte scalar zu verwenden, split gibt die Anzahl der Elemente zurück und das ist wie ich es bis jetzt verstanden habe ja eh ein Skalar.
Verstehs auch nicht wenn ich mir die Beschreibung (https://perldoc.perl.org/functions/scalar) dazu übersetze.
Zum Verständnis:
Ich hatte bei meinem Vorschlag nur den Lüfter (alexaName Lüfter) im Kopf, dazu hätte ich noch zwei setter (on und off) ergänzt.
Beispiel:
on:NoArg cmnd/tasmotairwz/IRSend {"protocol": "NEC","bits": 32, "data": 0x00FF40BF}
off:noArg cmnd/tasmotairwz/IRSend {"protocol": "NEC","bits": 32, "data": 0x00FF40BF}
(Die IR-Codes könnte man auch aus einem Reading oder Attribut lesen)
Damit wären dann die Sprachbefehle möglich:
ZitatAlexa, schalte Lüfter an/aus
und
ZitatAlexa, Lüfter auf Stufe 2/3
, natürlich auch
ZitatAlexa, Lüfter auf Stufe 1
Sollten weitere Geräte in diesem Device folgen, war mein Gedanke, diese dann über den pct-setter iVm. dem im code-Reading (oder Attribut) hinterlegten Ir-Code zu ergänzen (pct >=4).
Nachteil, für jeden pct-Wert dann aber eine Routine erstellen, was dann der Vorteil mehrerer MQTT2-Devices wäre und wsl. auch sinnvoll.
Zitat von: TomLee am 24 Juni 2022, 12:01:18
split gibt die Anzahl der Elemente zurück und das ist wie ich es bis jetzt verstanden habe ja eh ein Skalar.
Mißverständnis:
"split" gibt ein Array zurück! Mit dem "scalar" weist du Perl explizit an, die Zahl der in dem Array enthaltenen Elemente zu verwenden, meistens kann man das weglassen, weil Perl das auch so korrekt interpretiert.
In dem unverstandenen Beispiel
my @counts = ( scalar @a, scalar @b, scalar @c );
braucht man das explizite scalar aber, weil sonst in @counts keine Zahl
en landen würden, sondern ein neues Array mit allen Elementen der aufgenommenen Arrays gebildet würde.
Hoffe, das ist jetzt etwas klarer?
Nee, nicht Missverständnis, nur nicht richtig ausgedrückt.
ZitatHoffe, das ist jetzt etwas klarer?
Ja, danke.
OT
Jetzt nach kurzer Zeit grübeln, nach der Erläuterung zu scalar, kommt mir mein ich warum ich scalar verwendet hab wieder.
Einfach weil ich damals zu der Erkenntnis kam es sei korrekter es zu verwenden. Hatte hier im Forum irgendwo (in einem anderen Kontext) diesbezüglich auch nachgefragt ob es nicht besser wäre scalar zu verwenden, aber keine Antwort erhalten.
Ich würde sagen, der Gewinner ist der Vorschlag von @Joachim + @friesenjung. :) Den Code verstehe (vielleicht nicht nur) ich einigermaßen. Per Sprache funktioniert alles, in fhem auch:
defmod Test_Alexa DOIF ([$SELF:Stufe]==0)\
(set MQTT2_DVES_939567 irsend "NEC" 32 00FF0000)\
DOELSEIF ([$SELF:Stufe]==1)\
(set MQTT2_DVES_939567 irsend "NEC" 32 00FF1111)\
DOELSEIF ([$SELF:Stufe]==2)\
(set MQTT2_DVES_939567 irsend "NEC" 32 00FF2222)\
DOELSEIF ([$SELF:Stufe]==3)\
(set MQTT2_DVES_939567 irsend "NEC" 32 00FF3333)\
attr Test_Alexa DbLogExclude .*
attr Test_Alexa alexaName Lüftung
attr Test_Alexa alias Test_Alexa
attr Test_Alexa cmdState on|off
attr Test_Alexa comment https://forum.fhem.de/index.php/topic,104130.msg1119070.html#msg1119070
attr Test_Alexa devStateIcon 0:vent_ventilation 1:vent_ventilation_level_1 2:vent_ventilation_level_2 3:vent_ventilation_level_3
attr Test_Alexa event-on-change-reading .*
attr Test_Alexa genericDeviceType switch
attr Test_Alexa homebridgeMapping Brightness=Stufe,cmd=Stufe,minValue=0,maxValue=3 On:cmdOn=Stufe+1,cmdOff=Stufe+0
attr Test_Alexa readingList Stufe
attr Test_Alexa room Test
attr Test_Alexa setList off on Stufe:slider,0,1,3
attr Test_Alexa stateFormat Stufe
attr Test_Alexa webCmd Stufe
setstate Test_Alexa 3
setstate Test_Alexa 2022-06-26 20:17:36 Stufe 3
setstate Test_Alexa 2022-06-26 20:17:36 cmd 4
setstate Test_Alexa 2022-06-26 20:17:36 cmd_event Test_Alexa
setstate Test_Alexa 2022-06-26 20:17:36 cmd_nr 4
setstate Test_Alexa 2022-06-26 20:17:36 e_Test_Alexa_Stufe 3
setstate Test_Alexa 2022-06-26 19:26:13 mode enabled
setstate Test_Alexa 2022-06-26 20:17:36 state cmd_4
Nur warum das Doif die Stufe 1 als "aus" und die anderen Stufen (0,2,3) als "an" interpretiert, habe ich leider noch nicht herraus gefunden. Damit funktioniert die Alexa-App nicht richtig. Ich hoffe, ihr habt noch einen Tipp für mich? ::)
Das MQTT2-Device hab ich einigermaßen hin bekommen (an/aus/Stufe 1-4), nur nicht den Code ummodeln, das pct bei 0 anfängt. Per Sprache funktioniert auch alles, aber in der Alexa-App ist das gleiche Problem, was ich im ersten Post hatte, wenn pct nicht "0" ist, geht in der Alexa-App der Ein/Aus-Schalter immer wieder an:
defmod MQTT2_Demo_Ventilator MQTT2_DEVICE DVES_104A25
attr MQTT2_Demo_Ventilator userattr codes
attr MQTT2_Demo_Ventilator DbLogExclude .*
attr MQTT2_Demo_Ventilator IODev mqtt2server
attr MQTT2_Demo_Ventilator alexaName mairübe
attr MQTT2_Demo_Ventilator codes 0x00FF0ABF,0x00FF1ABF,0x00FF2CFF,0x00FF3DBF
attr MQTT2_Demo_Ventilator devicetopic DVES_468482
attr MQTT2_Demo_Ventilator event-on-change-reading .*
attr MQTT2_Demo_Ventilator icon IR
attr MQTT2_Demo_Ventilator readingList tele/tasmota_468482/LWT:.* LWT\
tele/tasmota_468482/STATE:.* { json2nameValue($EVENT) }\
tele/tasmota_468482/SENSOR:.* { json2nameValue($EVENT) }\
tele/tasmota_468482/INFO.:.* { json2nameValue($EVENT) }\
stat/tasmota_468482/RESULT:.* { json2nameValue($EVENT) }
attr MQTT2_Demo_Ventilator room Test
attr MQTT2_Demo_Ventilator setList off:noArg cmnd/tasmota_468482/IRSend {"protocol": "NEC","bits": 32, "data": 0x00FF50BF}\
on:noArg cmnd/tasmota_468482/IRSend {"protocol": "NEC","bits": 32, "data": 0x00FF60BF}\
irsend:textField cmnd/tasmota_468482/IRSend {"protocol":"NEC","bits": 32,"data": $EVTPART1}\
pct:{'slider,0,1,'.scalar(split(/,/,AttrVal($name,'codes','none'))).',0'} {my @d = split(/,/,AttrVal($NAME,'codes','none'));;my ($i,%pct2cmd);;map {$i++;;$pct2cmd{$i} = $_;;} (@d);;my $cmd = $pct2cmd{$EVTPART1};;return if !$cmd;;fhem("setreading $NAME pct $EVTPART1");;return qq(cmnd/tasmota_468482/IRSend {"protocol":"NEC","bits":32,"data":$cmd});;}
attr MQTT2_Demo_Ventilator verbose 5
setstate MQTT2_Demo_Ventilator pct
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Heap 27
setstate MQTT2_Demo_Ventilator 2022-06-26 19:42:31 IODev mqtt2server
setstate MQTT2_Demo_Ventilator 2022-06-24 00:21:45 IRSend Invalid JSON
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info1_FallbackTopic cmnd/DVES_468482_fb/
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info1_GroupTopic cmnd/tasmotas/
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info1_Module NX-4519-675
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info1_Version 12.0.2(ir)
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info2_Hostname tasmota-468482-1154
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info2_IPAddress 192.168.XXX.XXX
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info2_WebServerMode Admin
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info3_BootCount 20
setstate MQTT2_Demo_Ventilator 2022-06-23 23:53:41 Info3_RestartReason Software/System restart
setstate MQTT2_Demo_Ventilator 2022-06-24 02:58:13 LWT Offline
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 LoadAvg 19
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 MqttCount 1
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Sleep 50
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 SleepMode Dynamic
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Time 2022-06-24T01:53:45
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Uptime 0T03:00:11
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 UptimeSec 10811
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Vcc 3.533
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_AP 1
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_BSSId XX:XX:XX:XX:4F:39
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_Channel 6
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_Downtime 0T00:00:05
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_LinkCount 1
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_Mode 11n
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_RSSI 86
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_SSId XXXXXXX
setstate MQTT2_Demo_Ventilator 2022-06-24 02:53:45 Wifi_Signal -57
setstate MQTT2_Demo_Ventilator 2022-06-26 17:26:06 pct 4
setstate MQTT2_Demo_Ventilator 2022-06-26 17:26:06 state pct
Nicht wundern, das Tasmota_ir-Device (MQTT2_DVES_939567) ist aus. Ich habe im MQTT-Explorer verfolgt, was gesendet werden würde.
Also ich finde, es ist schon sehr viel Licht im Tunnel! Das Ende ist bestimmt bald erreicht! 8)
ZitatPer Sprache funktioniert auch alles ...
Dann ist doch alles gut, die App hab ich bewusst ignoriert, machs wie ich, einfach nicht öffnen.
Denke es liegt daran das alles was >= pct 1 ist als als auf (bei Rollläden) / an (bei Licht) interpretiert wird, also hilft gdDt blind/light nix, wie man das jetzt Alexa auf einfachstem Weg beibringt nicht zu tun weiß ich auch nicht.
Aber was interessiert dich der Status in der App, der ist selbst in FHEMWEB nur "Verdacht", es gibt doch eh keine Rückmeldung von dem Lüfter ?
Zitat von: TomLee am 26 Juni 2022, 22:42:18
Aber was interessiert dich der Status in der App, der ist selbst in FHEMWEB nur "Verdacht", es gibt doch eh keine Rückmeldung von dem Lüfter ?
Ja, stimmt. :-\
Aber in der App kommen die Befehle an: (an/aus/Stufe 0 bis 3), nur weil das DOIF die Stufe 1 als "OFF" interpretiert und Stufen (0,2,3) als "ON" stimmt das mit der Alexa-App nicht. Da gebe ich noch nicht auf! ::)
Übrigens hat mein Westinghouse Ventilator keine "NEC" kodierung, aber ich habe raus bekommen, was ich senden muss (inzwischen habe ich einige Decvice umbenannt):
defmod do_Deckenventilator_WZ DOIF ([$SELF:Stufe]==0)\
(set Tasm_IR_468482_WZ irsend2 SYMPHONY 12 C10 3008)\
DOELSEIF ([$SELF:Stufe]==1)\
(set Tasm_IR_468482_WZ irsend2 SYMPHONY 12 C01 3080)\
DOELSEIF ([$SELF:Stufe]==2)\
(set Tasm_IR_468482_WZ irsend2 SYMPHONY 12 C04 3020)\
DOELSEIF ([$SELF:Stufe]==3)\
(set Tasm_IR_468482_WZ irsend2 SYMPHONY 12 C43 30C2)\
attr do_Deckenventilator_WZ DbLogExclude .*
attr do_Deckenventilator_WZ alexaName Lüftung
attr do_Deckenventilator_WZ cmdState on|off
attr do_Deckenventilator_WZ comment https://forum.fhem.de/index.php/topic,104130.msg1119070.html#msg1119070
attr do_Deckenventilator_WZ devStateIcon 0:vent_ventilation 1:vent_ventilation_level_1 2:vent_ventilation_level_2 3:vent_ventilation_level_3
attr do_Deckenventilator_WZ event-on-change-reading .*
attr do_Deckenventilator_WZ genericDeviceType switch
attr do_Deckenventilator_WZ homebridgeMapping Brightness=Stufe,cmd=Stufe,minValue=0,maxValue=3 On:cmdOn=Stufe+1,cmdOff=Stufe+0
attr do_Deckenventilator_WZ readingList Stufe
attr do_Deckenventilator_WZ room Test
attr do_Deckenventilator_WZ setList off on Stufe:slider,0,1,3
attr do_Deckenventilator_WZ stateFormat Stufe
attr do_Deckenventilator_WZ webCmd Stufe
setstate do_Deckenventilator_WZ 0
setstate do_Deckenventilator_WZ 2022-06-26 23:56:40 Stufe 0
setstate do_Deckenventilator_WZ 2022-06-26 23:56:40 cmd 1
setstate do_Deckenventilator_WZ 2022-06-26 23:56:40 cmd_event do_Deckenventilator_WZ
setstate do_Deckenventilator_WZ 2022-06-26 23:56:40 cmd_nr 1
setstate do_Deckenventilator_WZ 2022-06-26 23:56:40 e_do_Deckenventilator_WZ_Stufe 0
setstate do_Deckenventilator_WZ 2022-06-26 23:54:02 mode enabled
setstate do_Deckenventilator_WZ 2022-06-26 23:56:40 state on
Im Tasm_IR_468482_WZ - Device habe ich die setList erweitert, von:
irsend:textField cmnd/tasmota_468482/IRsend {"Protocol":"$EVTPART1","Bits":$EVTPART2,"Data":"0x$EVTPART3","Repeat": 2}
auf:
irsend:textField cmnd/tasmota_468482/IRsend {"Protocol":"$EVTPART1","Bits":$EVTPART2,"Data":"0x$EVTPART3","Repeat": 2}
irsend2:textField cmnd/tasmota_468482/IRsend {"Protocol":"$EVTPART1","Bits":$EVTPART2,"Data":"0x$EVTPART3","DataLSB":"0x$EVTPART4"}
Habe ich hier noch nicht gefunden, vielleicht hilft es Jemandem...?
Ein bischen warte ich noch mit "gelöst". ::)
Herzliche Grüße, Lutz
Ich hab es gefunden, cmdState:
off|on|on|on
...dann geht es auch mit der App! 8)
Vielen Dank an alle!
Herzliche Grüße, Lutz
Moin zusammen,
die Lösung klappt bei mir auch. Danke dafür.
Frage habt Ihr auch eine Idee, wie man noch eine Zeitangabe mitgeben kann? "Alexa, schalte Lüfter auf Stufe 3 für 15 Minuten". Geht das?
Gruss
Enno
Zitat von: enno am 27 Juni 2022, 08:09:30
Moin zusammen,
die Lösung klappt bei mir auch. Danke dafür.
Frage habt Ihr auch eine Idee, wie man noch eine Zeitangabe mitgeben kann? "Alexa, schalte Lüfter auf Stufe 3 für 15 Minuten". Geht das?
Gruss
Enno
(Bislang) Nur mit dem Custom Skill...
...oder für jede gewünschte Zeitangabe eine Routine ;)
Gruß, Joachim
Zitat von: enno am 27 Juni 2022, 08:09:30
Idee, wie man noch eine Zeitangabe mitgeben kann?
Ich hätte eine Idee ohne Custom Skill: pct erweitern. 8)
"Alexa, schalte Lüfter auf Stufe 3" -> für die Stufe
"Alexa, schalte Lüfter auf Stufe 15" -> für den Abschaltbefehl (in 15 Minuten).
DOELSE ([$SELF:Stufe]>3)\
set_Exec...
...Syntax müsste ich erst probieren. ???
Zitat von: LutzG am 27 Juni 2022, 13:59:00
Ich hätte eine Idee ohne Custom Skill: pct erweitern. 8)
"Alexa, schalte Lüfter auf Stufe 3" -> für die Stufe
"Alexa, schalte Lüfter auf Stufe 15" -> für den Abschaltbefehl (in 15 Minuten).
DOELSE ([$SELF:Stufe]>3)\
set_Exec...
...Syntax müsste ich erst probieren. ???
Aber die Frage war ja:
Zitat
"Alexa, schalte Lüfter auf Stufe 3 für 15 Minuten". Geht das?
Und da ist der Vorschlag, wenn auch tricky doch etwas weg ;)
Gruß, Joachim