alexa-fhem: amazon alexa smart home skill für fhem

Begonnen von justme1968, 05 November 2016, 23:21:32

Vorheriges Thema - Nächstes Thema

Amenophis86

Zitat von: oeiber am 22 Juli 2017, 08:56:49
Hallo,
ich habe bislang bei Steckdosen, die mit zwei Namen angesprochen werden sollen, die Namen im AlexaName Attribut mit Semikolon getrennt. Also bspw. Apple-TV;Blu-Ray. Seit gestern funktioniert das nicht mehr. Wenn ich sage: Alexa schalt den Blu-Ray ein, kommt: Es gibt mehrere Geräte mit dem Namen.
Habt ihr eine Idee?
Thx!

Ich meine gestern auch soetwas festgestellt zu haben, konnte es aber heute nicht mehr reproduzieren. Muss erst mal weiter testen.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

kaniggl

Hi justme1968,

ich habe die letzte Nacht deine geniale Software aufgesetzt. Soweit läuft auch alles. Nur mit den Rolladen hatte ich Probleme. Grund ist wohl, das ich bisher nicht die gängigen Funkaktoren sondern bautechnisch bedingt die Wired HMW_LC_BL1_DR einsetze. Ich musste die Einbindung von Funktastern und eben wired Komponenten immer mit Scripts verbinden.
Grundsätzlich scheinen diese Aktoren nicht mit dem Reading pct bewegbar zu sein sondern nur mit dem level Reading.
Deine Software scheint bis auf ein paar Ausnahmen schlussendlich alles mit pct abzuarbeiten, worauf meine Aktoren nicht reagieren, obwohl Alexa behauptet, sie hat brav gemacht, was ich gesagt habe :)

Ich habe daher deinen Code erweitert. Es funktioniert nun, aber ob es gut ist, kann ich als Laienhafter Programmierer nicht sagen.

Hier mal die Codeerweiterung. Vielleicht kannst du es prüfen und verbessert in dein Release einbauen:

} else if( genericType == 'blind'
             || s.Attributes.subType == 'blindActuator' ) {
    if( !this.service_name ) this.service_name = 'blind';
    delete this.mappings.Brightness;
    if( s.PossibleSets.match(/(^| )position\b/) ) {
      this.mappings.CurrentPosition = { reading: 'position' };
      this.mappings.TargetPosition = { reading: 'position', cmd: 'position', delay: true };
      if( s.Internals.TYPE == 'DUOFERN' ) {
        this.mappings.CurrentPosition.invert = true;
        this.mappings.TargetPosition.invert = true;

        //the following could be used instead of invert
        //var reading2homekit = function(mapping, orig) { return 100 - parseInt( orig ) };
        //var homekit2reading = function(mapping, orig) { return 100 - orig };
        //this.mappings.CurrentPosition.reading2homekit = reading2homekit.bind(null, this.mappings.CurrentPosition);
        //this.mappings.TargetPosition.reading2homekit = reading2homekit.bind(null, this.mappings.TargetPosition);
        //this.mappings.TargetPosition.homekit2reading = homekit2reading.bind(null, this.mappings.TargetPosition);
      } else if( s.Internals.TYPE == 'SOMFY' ) {
        this.mappings.CurrentPosition.invert = true;
        this.mappings.TargetPosition.invert = true;
        this.mappings.TargetPosition.cmd = 'pos';
      }
    } else if( s.Attributes.subType == 'blind' ) {
        this.mappings.CurrentPosition = { reading: 'level' };
        this.mappings.TargetPosition = { reading: 'level', cmd: 'level', delay: true };

    } else {
      this.mappings.CurrentPosition = { reading: 'pct' };
      this.mappings.TargetPosition = { reading: 'pct', cmd: 'pct', delay: true };
      if( s.Attributes.param && s.Attributes.param.match(/levelInverse/i) ) {
        this.mappings.CurrentPosition.invert = true;
        this.mappings.TargetPosition.invert = true;
      }


Den Code habe ich um Zeile 2086 eingefügt in deiner aktuellen Version.
Da meine Aktoren per default den subType blind haben, habe ich den gewählt.

Wenn du noch was wissen musst, melde dich.

gruß
kaniggl

justme1968

@oeiber, Amenophis86: bitte mit --debug starten und schauen was genau erkannt wird. wenn es mehr als ein device ist werden beide ausgegeben.

@kaniggl: dafür muss man gar nichts im code ändern :). über das homebridgeMapping attribut lässt sich das (und noch viel mehr) konfigurieren. z.b. etwa so sollte es bei dir funktionieren: attr <name> homebridgeMapping CurrentPosition=level TargetPosition=level,cmd=level

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

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

kaniggl

Hi,

danke. Hab ich wieder am falschen Ende angefangen zu tüfteln.

gruß
kaniggl

Markus.

Mal ne anfängerfrage...:-(
Im code der myutils für die Temperaturansage basierend auf Räumen ist ja folgende Zeile für die Readings der Werte.

my $temperature = ReadingsVal($device, "temperatureVal", 0);

Ist es möglich für temperatureval ein wildcard zu setzten, so was ähnliches wie temperature* oder so?
Wie würde denn da die syntax aussehen?

Gruß

Markus

justme1968

nein.

readings müssen bei ReadingsVal immer mit dem vollständigen namen angegeben werden.

du kannst aber statt der 0 als default wert undef verwenden und dann mit defined($temperature) prüfen ob es das reading gab und dann ein anderes verwenden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

dela2017

Hallo,

erstmal einen riesen Dank !!!
Alexa-Fhem funktioniert echt super!

Seit wenigen Tagen sind in der API nun auch die Türaktionen freigegeben:
Door Lock Control and Query Messages

Das ist wahrscheinlich noch nicht integriert, oder?

Viele Grüße,
Ingo

Markus.

@justme1968

mmh könntest Du mir da weiterhelfen wie das auszusehen hat in dem Skript?

Zur Zeit sieht es ja so aus..


sub
alexaRoomTemperature($$) {
my($preposition,$room) = @_;
my $device = "";

$room = lc($room);

if ($room eq "schlafzimmer") {
$device = "mys_temp_hum_02";
} elsif ($room eq "badezimmer") {
$device = "mys_temp_hum_04";
} elsif ($room eq "vorratskammer") {
$device = "mys_temp_hum_01";
} elsif ($room eq "kinderzimmer") {
$device = "mys_temp_hum_03";
} else {
return "Kein passendes Thermometer gefunden";
}

my $temperature = ReadingsVal($device, "temperature1", 0);
$temperature =~ s/\./\,/g;
my $humidity = ReadingsVal($device, "humidity", 0);

return "Die aktuelle Temperatur beträgt $temperature Grad bei $humidity Prozent Luftfeuchtigkeit";
}



Das Problem ist, das ich bei den DHT22 Sensoren teilweise unterschiedliche Readings habe. Mal ist es temperature und manchmal ist es temperature1 zum Beispiel. Bei dem reading der Luftfeuchtigkeit verhält es sich ähnlich..

Gruß

Markus


oeiber

Zitat von: justme1968 am 22 Juli 2017, 19:23:37
@oeiber, Amenophis86: bitte mit --debug starten und schauen was genau erkannt wird. wenn es mehr als ein device ist werden beide ausgegeben.

@kaniggl: dafür muss man gar nichts im code ändern :). über das homebridgeMapping attribut lässt sich das (und noch viel mehr) konfigurieren. z.b. etwa so sollte es bei dir funktionieren: attr <name> homebridgeMapping CurrentPosition=level TargetPosition=level,cmd=level

Jetzt gehts aus heiterem himmel wieder. scheint wohl an amazon gelegen zu haben.
Danke!

Markus.

Hallo Zusammen,

hat eigentlich jemand ein Milight device mit dem Custom skill laufen? Bei mir wird das Gerät zwar in der Geräteliste angesagt aber wenn ich z.B. auf an oder 50% stellen will, kommt die Meldung das das Device nicht gefunden wird. Auch nicht wenn ich es in dem in der json.config eingestelleten Raum habe. Über die Alexa app wird es auch nicht gefunden. Muss ich da zusätzlich einen generic devicetype angeben oder irgendwo noch was anderes einstellen? Ich verwende haupsächlich RGBW Bulbs über eine selbstgebaute Bridge. Die orginal Bridges waren einfach nur Schrott von Milight. Wäre klasse wenn mir da einer einen Tipp geben kann. Ich habe zur Zeit nur den Custom skill aktiviert, der Standard Smart home skill ist deaktiviert.

Hier mal ein list von dem Device


Internals:
   DEF        RGBW Milight02 6
   INIT       1
   IODev      Milight02
   LEDTYPE    RGBW
   NAME       SZ_Stehlampe
   NR         83
   NTFY_ORDER 50-SZ_Stehlampe
   SLOT       6
   SLOTID     6
   STATE      off
   TYPE       MilightDevice
   READINGS:
     2017-07-23 09:01:05   brightness      0
     2017-07-23 09:01:05   brightness_on   100
     2017-07-23 09:01:05   discoMode       0
     2017-07-23 09:01:05   discoSpeed      0
     2017-07-23 09:01:05   hsv             0,0,0
     2017-07-23 09:01:05   hue             0
     2017-07-23 09:01:05   previousState   0,0,100
     2017-07-23 09:01:05   rgb             000000
     2017-07-23 09:01:05   saturation      0
     2017-07-23 09:01:05   state           off
     2017-07-23 09:01:05   transitionInProgress 0
   helper:
     COMMANDSET on off toggle dimup dimdown discoModeUp:noArg discoSpeedUp:noArg discoSpeedDown:noArg night:noArg white:noArg toggleWhite:noArg pair unpair restorePreviousState:noArg saveState:noArg restoreState:noArg hsv rgb:colorpicker,RGB hue:colorpicker,HUE,0,1,360 saturation:slider,0,100,100 preset dim:slider,0,4,100 brightness:slider,0,4,100
     colorLevel 0
     colorValue 176
     targetHue  0
     targetSat  0
     targetTime 1500793265.45097
     targetVal  0
     whiteLevel 0
     COLORMAP:
       176
       175
       175
       174
       174
       173
       173
       172
       172
       171
       171
       170
       170
       169
       169
       168
       167
       167
       166
       166
       165
       165
       164
       164
       163
       163
       162
       162
       161
       161
       160
       159
       159
       158
       158
       157
       157
       156
       156
       155
       155
       154
       154
       153
       153
       152
       151
       151
       150
       150
       149
       149
       148
       148
       147
       147
       146
       146
       145
       145
       144
       143
       142
       142
       141
       140
       139
       138
       138
       137
       136
       135
       134
       134
       133
       132
       131
       130
       130
       129
       128
       127
       126
       126
       125
       124
       123
       122
       122
       121
       120
       119
       118
       118
       117
       116
       115
       114
       114
       113
       112
       111
       110
       110
       109
       108
       107
       106
       106
       105
       104
       103
       102
       102
       101
       100
       99
       98
       98
       97
       96
       95
       95
       94
       93
       93
       92
       91
       91
       90
       89
       89
       88
       87
       87
       86
       85
       85
       84
       83
       83
       82
       81
       81
       80
       79
       79
       78
       77
       77
       76
       75
       75
       74
       73
       73
       72
       71
       71
       70
       69
       69
       68
       67
       67
       66
       65
       65
       64
       63
       63
       62
       61
       61
       60
       59
       59
       58
       57
       57
       56
       55
       55
       54
       53
       53
       52
       51
       51
       50
       49
       49
       48
       47
       47
       46
       45
       45
       44
       43
       43
       42
       41
       41
       40
       39
       39
       38
       37
       37
       36
       35
       35
       34
       33
       33
       32
       31
       31
       30
       29
       29
       28
       27
       27
       26
       25
       25
       24
       23
       23
       22
       21
       21
       20
       19
       19
       18
       17
       17
       17
       16
       15
       15
       14
       13
       12
       11
       11
       10
       9
       8
       7
       7
       6
       5
       4
       3
       3
       2
       1
       0
       254
       254
       253
       252
       251
       250
       250
       249
       248
       247
       246
       246
       245
       244
       243
       242
       242
       241
       240
       239
       238
       238
       237
       236
       235
       234
       234
       233
       232
       231
       230
       230
       229
       228
       227
       226
       226
       225
       224
       223
       222
       222
       221
       220
       219
       218
       218
       217
       216
       215
       214
       214
       213
       212
       211
       210
       210
       209
       208
       207
       206
       206
       205
       204
       203
       202
       202
       201
       200
       199
       198
       198
       197
       196
       195
       194
       194
       193
       192
       191
       190
       190
       189
       188
       187
       186
       186
       185
       184
       183
       182
       182
       181
       180
       179
       178
       178
       177
     GAMMAMAP:
       0
       4
       4
       4
       4
       5
       6
       7
       8
       9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       30
       31
       32
       33
       34
       35
       36
       37
       38
       39
       40
       41
       42
       43
       44
       45
       46
       47
       48
       49
       50
       51
       52
       53
       54
       55
       56
       57
       58
       59
       60
       61
       62
       63
       64
       65
       66
       67
       68
       69
       70
       71
       72
       73
       74
       75
       76
       77
       78
       79
       80
       81
       82
       83
       84
       85
       86
       87
       88
       89
       90
       91
       92
       93
       94
       95
       96
       97
       98
       99
       100
     cmdQueue:
Attributes:
   DbLogExclude .*
   IODev      Milight02
   alexaName  schlafzimmerlampe
   alexaRoom  schlafzimmer
   devStateIcon {(MilightDevice_devStateIcon($name),"toggle")}
   event-on-change-reading state,transitionInProgress
   lightSceneParamsToSave hsv
   restoreAtStart 1
   room       097_Beleuchtung,alexa
   webCmd     on:off:dim:hue:night:rgb ffffff:rgb ff0000:rgb 00ff00:rgb 0000ff:rgb ffff00


Gruß

Markus

justme1968

#2890
@dela2017: nein. die nachriten für türschlösser sind noch nicht eingebaut. kommt in der nächsten version nach den ferien. die multimedia geräte ebenfalls. zumindest so weit es sinnvoll ist.

@Markus.: etwa so:my $temperature = ReadingsVal($device, "temperature", undef);
$temperature = ReadingsVal($device, "temperature1", undef) if( !defined($temperature) );
$temperature = 0 if( !defined($temperature) );


miilight sollten automatisch erkannt werden. schau dir die meldungen beim start von alexa-fhem an.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Markus.

Homebridge-fhem ist wohl der alexa-fhem Service?  🤔

justme1968

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

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

justme1968

ich habe hier: https://forum.fhem.de/index.php/topic,60244.msg654450.html#msg654450 eine neue test version hoch geladen.

die wichtigen änderungen sind:
- die neuen events für türschlösser sind eingebaut. achtung: alexa kann schlossern nur abschließen. nicht aufschließen.

- wenn der antwort string eines fhemIntents mit einem & beginnt bleibt die session erhalten. damit kann man z.b. rückfragen stellen und muss den skill nicht erneut starten.

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

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