[ghome-fhem] HowTo: Google Home/Assistant Integration

Begonnen von dominik, 27 November 2018, 21:56:29

Vorheriges Thema - Nächstes Thema

dominik

Diese Anleitung wird nicht mehr offiziell supported, bitte waehle den einfacheren Weg den Google Assistant Einrichtung ueber folgende Anleitung:
https://forum.fhem.de/index.php/topic,96696.0.html



Hallo zusammen,

ich möchte an dieser Stelle nun offiziell die FHEM Integration in Google Home/Assistant vorstellen. Danke vielmals an die Vorarbeiten von justme-1968 (homebridge-fhem) und yanniks (ghome-fhem) ohne die ich die Integration sicher nicht weiter verfolgt hätte.

Anleitung
https://github.com/dominikkarall/ghome-fhem/blob/master/README.md
Bitte beachtet, dass ich versuche die Integration der Devices weitestgehend automatisch durchzuführen. Das bedeutet, dass im Normalfall kein genericDeviceType oder homebridgeMapping gesetzt werden muss, sondern das Device, wie in der Anleitung beschrieben, nur dem Raum hinzugefügt werden muss.


Nützliche Informationen
Hier die Liste der Device Traits (https://developers.google.com/actions/smarthome/traits/) welche unterstützt werden. In Klammer wo diese aktuell verwendet werden und darunter Beispiele für die Verwendung mit OK Google...

- Brightness (Helligkeit, Volume, Rollo)
"...stelle die Wohnzimmerlampe auf 50%"
"...stelle das Wohnzimmer Radio auf 13%"

- ColorSetting (RGB, HSV und Color Temperature Lichter)
"...stelle die Lampe auf rot"
"...stelle die Lampe auf warm weiß"

- Dock (Xiaomi Vacuum)
"...ist der Staubsauger angedockt?"
"...sende den Staubsauger in die Ladestation"

- FanSpeed (-)
Funktioniert auf Deutsch noch nicht, daher nicht in Verwendung.

- Locator (Xiaomi Vacuum)
"...suche den Staubsauger"

- Modes (Xiaomi Vacuum)
Funktioniert auf Deutsch noch nicht, daher nicht voll integriert.

- OnOff (alle Geräte die on/off als cmd nutzen)
"...schalte die Kaffeemaschine ein"
"...schalte die Lichter im Wohnzimmer aus"

- Scene (LightScene)
"...aktiviere den Partymodus"

- StartStop (Xiaomi Vacuum)
"...starte den Staubsauger"
"...stoppe den Staubsauger"
"...läuft der Staubsauger gerade?"
"...pausiere den Staubsauger"

- TemperatureSetting (Thermostat, Temperatursensor)
"...stelle die Wohnzimmer Heizung auf 22 Grad."
"...auf wie viel Grad steht die Lüftung?"

- Toggles (-)
Funktioniert auf Deutsch noch nicht, daher nicht in Verwendung.


Neue Attribute:
- realRoom
Wird verwendet um den Raum bei der ersten Synchronisation des Gerätes in Google zu setzen. Google hat es so implementiert, dass es nur bei der erstmaligen Synchronisation in Google Home gesetzt wird!
- genericDeviceType
Erweitert um Google Device Types (https://developers.google.com/actions/smarthome/guides/). Muss im Normalfall nicht gesetzt werden.


Bei Problemen, Wünschen, Anregungen, ... nutzt bitte ausschließlich diesen Thread. Code Beiträge nehme ich sehr gerne als Pull Request für den development Branch (https://github.com/dominikkarall/ghome-fhem/tree/development) auf.

Danke nochmals an alle die bei der Entwicklung mitgeholfen haben (Dokumentation, Code Beiträge, Support, ...)!

Viel Spaß!

Gruß,
Dominik
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

klausw

Folgendes Szenario:

Ich würde gern einen über MQTT angebundenen Dimmer steuern.
Mit diesem Device würde ich gern den Dimmzustand setzen. (an/aus funktioniert bereits)

List vom MQTT Dev:
Internals:
   IODev      mqtt
   NAME       mqtt_regal
   NR         373
   STATE      0
   TYPE       MQTT_DEVICE
   READINGS:
     2018-11-28 01:54:57   state           0
     2018-11-28 01:54:57   transmission-state incoming publish received
   message_ids:
   publishSets:
     :
       topic      adl/Schalter/regal/schalte
       values:
         on
         off
         state:slider,0,1,100
     state:
       topic      adl/Schalter/regal/schalte
       values:
         slider,0,1,100
   sets:
     off       
     on         
     state:slider,0,1,100
   subscribe:
     adl/Schalter/regal/state
   subscribeExpr:
     ^adl\/Schalter\/regal\/state$
   subscribeQos:
     adl/Schalter/regal/state 0
   subscribeReadings:
     adl/Schalter/regal/state:
       cmd       
       name       state
Attributes:
   IODev      mqtt
   alias      Regal
   publishSet on off state:slider,0,1,100 adl/Schalter/regal/schalte
   room       GoogleHome
   stateFormat state
   subscribeReading_state test/Schalter/regal/state
   webCmd     off:state:on


Grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

dominik

Kannst du mir sagen wie das Command für das Dimmen lautet und aus welchem Reading man den aktuellen Wert des Dimmers erhält? Dann könnte ich das mit integrieren.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

SouzA

Hi,
Was mir gerade zu scenes auffällt ist, dass wenn einzelne Szenen entfernt werden oder das gesamte LightScenes device aus dem Synchordner entfernt wird, wird dies nicht in der App nachgeführt. Selbst nach mehrmaligem synchen und zwei Stunden warten sind die scenes noch da.

Eine Neuverbindung in der App bereinigt dies wieder.
Bei anderen Devices geht das allerdings durch das normale synchen. Nur halt bei scenes nicht.

Ist das bei anderen auch so?

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

klausw

Zitat von: dominik am 28 November 2018, 21:23:33
Kannst du mir sagen wie das Command für das Dimmen lautet und aus welchem Reading man den aktuellen Wert des Dimmers erhält? Dann könnte ich das mit integrieren.
Auf 5% setzen:
set <gerätename> 5
Aus
set <gerätename> off
Ein
set <gerätename> on

Der Dimmwert ist in state. Das lässt sich aber anpassen.
Das macht vielleicht auch Sinn. Aber das weisst du sicher besser.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

dominik

@Klaus, ist das "normal" bei den MQTT Devices, dass nur ein set <name> PROZENT notwendig ist? Also muss ich aus state on/off 0-100 auswerten?

@SouzA, das muss ich mir genauer anschauen woran das liegt. Ich melde mich dazu noch...
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

klausw

#9
Zitat von: dominik am 28 November 2018, 22:38:21
@Klaus, ist das "normal" bei den MQTT Devices, dass nur ein set <name> PROZENT notwendig ist? Also muss ich aus state on/off 0-100 auswerten?

nein, MQTT ist da sehr flexibel. Es können beliebige set Befehle angelegt werden, welche dann die Werte über MQTT rausschicken.
Im Regenzug können ankommende Werte in beliebige Readings gesteckt werden.

man könnte als auch ein set <name> dim PROZENT machen.

Eventuell mußt du gar nix anpassen und ich erzeuge die entsprechenden readings/set befehle.
Das wäre sogar sinnvoller. Da man sich an bestehenden Strukturen anlehnt.


Ich hätte noch eine Frage. Was ist bei Geräten mit gleichem Namen in unterschiedlichen Räumen?
Geht das, oder muß ich mir für jedes Licht einen separaten Namen ausdenken?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

dominik

Ja, in diesem Fall ist es definitiv sinnvoller wenn du das MQTT Device so anlegst, dass es die Standardkommandos unterstützt:
on / off / pct 0-100
Aktuelle Helligkeit gespeichert im Reading: pct
Damit wird es als Licht inkl. Helligkeitsregelung richtig erkannt.

Gleiche Name in unterschiedlichen Räumen sollte kein Problem sein. Wenn du "alias" für die Namen verwendest, ist das sowieso nur ein informativer Wert.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

Zitat von: SouzA am 28 November 2018, 22:20:33
Hi,
Was mir gerade zu scenes auffällt ist, dass wenn einzelne Szenen entfernt werden oder das gesamte LightScenes device aus dem Synchordner entfernt wird, wird dies nicht in der App nachgeführt. Selbst nach mehrmaligem synchen und zwei Stunden warten sind die scenes noch da.

Eine Neuverbindung in der App bereinigt dies wieder.
Bei anderen Devices geht das allerdings durch das normale synchen. Nur halt bei scenes nicht.

Ist das bei anderen auch so?

Kannst du bitte mal beim SYNC im Log prüfen ob die Scenes auch wirklich nochmals an Google übertragen werden? Ich habe gerade im Code geprüft und da sollte definitiv nichts mehr übertragen werden, egal ob eine einzelne Scene weg ist oder das gesamte Device.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Phantomato

Hallo,

so ganz will das bei mir nicht klappen. Ich habe bereits den alexa connector auf port 3000 am laufen. Der GHome braucht ebenfalls diesen. Lässt es sich ohne weiteres ändern?
Server: RaspberryPi4 4GB @Raspbian GNU/Linux 10 (buster), Docker, FHEM Docker | Homematic nanoCUL868 (VCCU) | Tasmota Switch & Sensors | Tasmota Zigbee | Zigbee2mqtt | SIGNALduino | Alexa & GoogleHome

SouzA

Zitat von: kadettilac89 am 24 November 2018, 19:07:47
Beide auf selbem Port geht nicht.

In Config.json kannst du den Port beliebig ändern.

{
    "ghome": {
        "port": 3005,
        "name": "Google Home",


Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Phantomato

#14
Ok. Danke. Dachte da steckt mehr dahinter.

In der Anleitung sollte auch aufgenommen werden was zu tun ist wenn fhem durch passwort und ssl abgesichert ist:
    "connections": [
        {
            "name": "FHEM",
            "server": "127.0.0.1",
            "port": "8083",
            "ssl":true,
            "auth": {"user": "fhemUser", "pass": "fhemUserPasswort"},
            "webname": "fhem",
            "filter": "room=GoogleHome"
        }
Server: RaspberryPi4 4GB @Raspbian GNU/Linux 10 (buster), Docker, FHEM Docker | Homematic nanoCUL868 (VCCU) | Tasmota Switch & Sensors | Tasmota Zigbee | Zigbee2mqtt | SIGNALduino | Alexa & GoogleHome