39_gassistant.pm (Google Assistant, Google Home)

Begonnen von dominik, 29 Januar 2019, 21:59:53

Vorheriges Thema - Nächstes Thema

Fry3199

So, jetzt funktionierts!

Allerdings hat nur "Öffne alle Rollos" gut funktioniert, "Öffne das Rollo im Kinderzimmer" hat nicht geklappt.

Nachdem ich das Rollo wieder in FHEM in RolloKinderzimmer umbenannt habe, kann ich alles sagen "Öffne (das) Rollo/die Jalousie (im) Kinderzimmer"

Sehr schön, so hab ich mir das vorgestellt. Vielen Dank!

dominik

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

R1k4rd

#737
Hey dominik,

ich wollte mich ja mal melden und ein wenig Feedback geben:
- bei Szenen kommt weiterhin der schon bekannte Fehler das die Geräte momentan nicht geschaltet werden könnten -> geschalten wird allerdings trotzdem, nur halt die Aussage ist halt immernoch ein "Bug" seitens Google, vllt doch mal ein issue eröffnen?
- zu dem Problem das Google mal 10 Minuten brauchte um einen Befehl auszuführen lag tatsächlich an meinem Netzwerk, scheinbar macht der Switch irgendwie ab und zu mal Pause, war also falsch zu vermuten es würde am Fhem Connector liegen
- ansonsten läuft alles ;D

LG Richard

EDIT: Ihr hattet mich ein bisschen mit euren Fenstersensoren inspiriert, wie immer hab ich die über Zigbee2MQTT eingebunden aber sie haben als state true/false, falls du mal Lust und Zeit hast sag bescheid ;)

dominik

Hi Richard,

kannst du mir einen Gefallen tun und einen Ablauf auf Englisch testen ob es da funktioniert?

Poste ein jsonlist2 von den Fenstersensoren, dann kann ich das integrieren.

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

Tabu

Zitat von: dominik am 16 April 2019, 18:22:35
Du meinst das Modell sensor_magnet.aq2 in FHEM? Die habe ich auch, einfach in den Raum hinzufuegen. Wird dann als door angelegt. Abfrage ueber: "Sind alle Tueren geschlossen?"
In der Home App kann man noch nichts damit tun, da muss Google noch nachbessern.

Ja, das scheint das Model zu sein. Leider werden diese in der Home-App als Thermostate bzw. Temperaturfühler erkannt. Bei der Abfrage ob alle Türen oder auch Fenster geschlossen sind, quittiert er mir, dass so ein Gerät nicht vorhanden ist.

Liegt es eventuell am devStateIcon?

Hier mal ein List eines Öffnungsmelders:

Internals:
   DEF        sensor 9  IODev=deCONZ
   FUUID      5caf693c-f33f-be04-34ab-7c091d4dabf255c8
   FVERSION   31_HUEDevice.pm:0.191880/2019-04-15
   ID         S9
   INTERVAL   
   IODev      deCONZ
   NAME       fensterkontakt_wz
   NR         320
   STATE      closed
   TYPE       HUEDevice
   lastupdated 2019-04-18 06:20:40
   lastupdated_local 2019-04-18 08:20:40
   manufacturername LUMI
   modelid    lumi.sensor_magnet.aq2
   name       Fensterkontakt_WZ
   on         1
   reachable  1
   swversion  20161128
   type       ZHAOpenClose
   uniqueid   00:15:8d:00:03:09:bd:29-01-0006
   READINGS:
     2019-04-18 08:20:40   battery         100
     2019-04-18 08:20:40   reachable       1
     2019-04-18 08:20:40   state           closed
     2019-04-18 08:20:40   temperature     26
   helper:
     devtype    S
     reachable  0
     update_timeout 1
     setList:
Attributes:
   IODev      deCONZ
   alias      Fensterkontakt
   devStateIcon closed:fts_window_1w@green open:fts_window_1w_open@blue
   group      Öffnungsmelder
   room       GoogleAssistant,Heizung,Wohnzimmer


Danke Tabu

R1k4rd

Guten Morgen,

Zitatkannst du mir einen Gefallen tun und einen Ablauf auf Englisch testen ob es da funktioniert?
Einfach nur auf Englisch den Befehl ansagen oder wie genau meinst du das? Falls ja -> es kommt der gleiche Fehler.

jsonlist2:
{
  "Arg":"fensterRichard",
  "Results": [
  {
    "Name":"fensterRichard",
    "PossibleSets":"attrTemplate:?,0_00_General_Info,A_00_MQTT2_CLIENT_general_bridge,A_01_tasmota_basic,A_01a_tasmota_basic_state_power1,A_10_shelly1,E_01a_eBus_daemon_splitter,L_01_zigbee2mqtt_bridge,L_01a_zigbee2mqtt_bridge_0x,L_01x_zigbee2mqtt_bridge_outdated,L_02a_zigbee2mqtt_light_dimmer,L_02b_zigbee2mqtt_light_cct,L_02c_zigbee2mqtt_light_rgb_hex,L_02c_zigbee2mqtt_light_rgb_rgb,L_02d_zigbee2mqtt_light_rgbw_hex,L_02d_zigbee2mqtt_light_rgbw_rgb,L_02e_zigbee2mqtt_light_rgbcct_hex,L_02e_zigbee2mqtt_light_rgbcct_rgb,L_03_zigbee2mqtt_smokeDetector,L_04_zigbee2mqtt_hueMotionSensor,L_05_zigbee2mqtt_smart+plug,L_06_zigbee2mqtt_ContactSensor,L_07_zigbee2mqtt_TempHumHpaSensor,L_08_zigbee2mqtt_Human_Motion_Sensor,L_09_zigbee2mqtt_Motion_Sensor,L_10_zigbee2mqtt_Water_Leak_Sensor,L_11_zigbee2mqtt_Light_Switch,L_12_zigbee2mqtt_Wireless_Button,L_13_zigbee2mqtt_wireless_button_old,L_14_zigbee2mqtt_aqara_cube,X_01_esp_milight_hub_bridge",
    "PossibleAttrs":"alias comment:textField-long eventMap:textField-long group room suppressReading userReadings:textField-long verbose:0,1,2,3,4,5 IODev autocreate:0,1 bridgeRegexp:textField-long devicetopic devPos disable:0,1 disabledForIntervals getList:textField-long imageLink jsonMap:textField-long model readingList:textField-long setExtensionsEvent:1,0 setList:textField-long setStateList event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading assistantName:textField cmdIcon devStateIcon:textField-long devStateStyle gassistantName:textField genericDeviceType:security,ignore,switch,outlet,light,blind,thermometer,thermostat,contact,garage,window,lock,aircondition,airpurifier,camera,coffeemaker,dishwasher,dryer,fan,kettle,oven,refrigerator,scene,sprinkler,vacuum,washer,airfreshener,fireplace,heater,blinds homebridgeMapping:textField-long icon realRoom:textField sortby webCmd webCmdLabel:textField-long widgetOverride userattr",
    "Internals": {
      "CID": "zigbee_contact02",
      "DEF": "zigbee_contact02",
      "DEVICETOPIC": "fensterRichard",
      "FUUID": "5c9e3db3-f33f-3868-c80a-5ad4b8d277a600cf",
      "LASTInputDev": "mqttServer",
      "MSGCNT": "17",
      "NAME": "fensterRichard",
      "NR": "98",
      "STATE": "true",
      "TYPE": "MQTT2_DEVICE",
      "mqttServer_MSGCNT": "17",
      "mqttServer_TIME": "2019-04-18 10:33:24"
    },
    "Readings": {
      "associatedWith": { "Value":"mqttZigbee", "Time":"2019-03-29 16:45:55" },
      "battery": { "Value":"100", "Time":"2019-04-18 10:33:24" },
      "contact": { "Value":"true", "Time":"2019-04-18 10:33:24" },
      "linkquality": { "Value":"136", "Time":"2019-04-18 10:33:24" },
      "voltage": { "Value":"3015", "Time":"2019-04-18 10:33:24" }
    },
    "Attributes": {
      "IODev": "mqttServer",
      "gassistantName": "Fenster",
      "model": "L_06_zigbee2mqtt_ContactSensor",
      "readingList": "zigbee2mqtt/contact02:.* { json2nameValue($EVENT) }",
      "realRoom": "Richard",
      "room": "Heizung,Sprachsteuerung",
      "sortby": "1",
      "stateFormat": "contact"
    }
  }  ],
  "totalResultsReturned":1
}

contact true=close, false=open

LG Richard

Wolfgang Hochweller

gassistant liefert mir ein Reading :


gassistant-fhem-lastServerError

rgb not a number: undefined => NaN

2019-04-19 17:17:17


Das ausfuehrliche Log :


[4/19/2019, 8:13:53 AM] reportstate: LichtFlur
[4/19/2019, 8:13:54 AM] GOOGLE MSG RECEIVED: {"log":"rgb not a number: undefined => NaN","msg":"LOG_ERROR"}
[4/19/2019, 8:13:54 AM] Received firestore2fhem: {"log":"rgb not a number: undefined => NaN","msg":"LOG_ERROR"}
[4/19/2019, 8:13:54 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20gassistant%20gassistant-fhem-lastServerError%20rgb%20not%20a%20number%3A%20undefined%20%3D%3E%20NaN&XHR=1
[4/19/2019, 8:13:54 AM] GOOGLE MSG RECEIVED: {"log":"rgb not a number: undefined => NaN","msg":"LOG_ERROR"}
[4/19/2019, 8:13:54 AM] Received firestore2fhem: {"log":"rgb not a number: undefined => NaN","msg":"LOG_ERROR"}
[4/19/2019, 8:13:54 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20gassistant%20gassistant-fhem-lastServerError%20rgb%20not%20a%20number%3A%20undefined%20%3D%3E%20NaN&XHR=1


Das Geraet dazu :


Internals:
   DEF        cfba8db6 56
   FUUID      5c4ef132-f33f-775d-a96a-3333ac9be4df2b0d
   IODev      ZWAVE2
   NAME       LichtFlur
   NR         162
   STATE      white
   TYPE       ZWave
   ZWaveSubDevice no
   homeId     cfba8db6
   nodeIdHex  38
   READINGS:
     2019-03-09 10:53:27   CMD             ZW_APPLICATION_UPDATE
     2019-04-06 09:52:46   SEND_DATA       failed:00
     2019-04-19 16:10:40   config_2        0
     2019-04-19 16:10:33   model           Zipato Bulb 2
     2019-04-19 16:10:33   modelConfig     zipato/RGBBulb2.xml
     2019-04-19 16:10:33   modelId         0131-0002-0003
     2018-06-12 18:08:19   neighborList    ZWAVE2 ZWEisenbahn AirconUp AirconWohn LichtWohnKamin LichtWohnEsstisch LichtWohnTuer LichtKeller Warmwasser
     2019-03-09 10:53:32   reportedState   dim 92
     2019-04-19 10:43:44   state           wcrgb 255 0 0 0 0
     2019-04-19 16:10:40   timeToAck       0.028
     2019-04-19 16:10:40   transmit        OK
Attributes:
   IODev      ZWAVE2
   classes    ZWAVEPLUS_INFO ASSOCIATION ASSOCIATION_GRP_INFO VERSION MANUFACTURER_SPECIFIC DEVICE_RESET_LOCALLY COLOR_CONTROL SWITCH_MULTILEVEL CONFIGURATION SWITCH_ALL SECURITY POWERLEVEL FIRMWARE_UPDATE_MD
   devStateIcon .*off:off .*on:on .*white:light_light_dim_100@white .*blue:light_light_dim_100@blue .*red:light_light_dim_100@red
   eventMap   /off:off/on:on/wcrgb 255 0 0 0 0:white/wcrgb 0 0 0 0 255:blue/wcrgb 0 0 255 0 0:red/
   group      Licht
   icon       li_wht_off
   room       Aussen,Security,ZWave
   vclasses   ASSOCIATION:2 ASSOCIATION_GRP_INFO:1 COLOR_CONTROL:1 CONFIGURATION:1 DEVICE_RESET_LOCALLY:1 FIRMWARE_UPDATE_MD:2 MANUFACTURER_SPECIFIC:2 POWERLEVEL:1 SECURITY:1 SWITCH_ALL:1 SWITCH_MULTILEVEL:2 VERSION:2 ZWAVEPLUS_INFO:2
   webCmd     off:on:white:blue:red



SouzA

Hi,
Ich habe zum Versuch mal wieder ein Fenstersensor in den Google-Raum kopiert.
Nun wird mir ein komisches Symbol in der App angezeigt.
Statusänderungen des Fensters sind hier nicht zu erkennen.
Die Abfrage, ob das Fenster zu ist, wird immer, unabhängig vom tatsächlichen Status, mit "das Fenster ist offen" quittiert.
Siehe Bilder für Symbol.
Geht das noch nicht?

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

dominik

Zitat von: Tabu am 18 April 2019, 08:44:16
Ja, das scheint das Model zu sein. Leider werden diese in der Home-App als Thermostate bzw. Temperaturfühler erkannt. Bei der Abfrage ob alle Türen oder auch Fenster geschlossen sind, quittiert er mir, dass so ein Gerät nicht vorhanden ist.

Liegt es eventuell am devStateIcon?

Hier mal ein List eines Öffnungsmelders:

Internals:
   DEF        sensor 9  IODev=deCONZ
   FUUID      5caf693c-f33f-be04-34ab-7c091d4dabf255c8
   FVERSION   31_HUEDevice.pm:0.191880/2019-04-15
   ID         S9
   INTERVAL   
   IODev      deCONZ
   NAME       fensterkontakt_wz
   NR         320
   STATE      closed
   TYPE       HUEDevice
   lastupdated 2019-04-18 06:20:40
   lastupdated_local 2019-04-18 08:20:40
   manufacturername LUMI
   modelid    lumi.sensor_magnet.aq2
   name       Fensterkontakt_WZ
   on         1
   reachable  1
   swversion  20161128
   type       ZHAOpenClose
   uniqueid   00:15:8d:00:03:09:bd:29-01-0006
   READINGS:
     2019-04-18 08:20:40   battery         100
     2019-04-18 08:20:40   reachable       1
     2019-04-18 08:20:40   state           closed
     2019-04-18 08:20:40   temperature     26
   helper:
     devtype    S
     reachable  0
     update_timeout 1
     setList:
Attributes:
   IODev      deCONZ
   alias      Fensterkontakt
   devStateIcon closed:fts_window_1w@green open:fts_window_1w_open@blue
   group      Öffnungsmelder
   room       GoogleAssistant,Heizung,Wohnzimmer


Danke Tabu

Was ist das fuer ein Sensor? temperature Reading fuer einen Kontakt? :) ...und HUEDevice als TYPE? Ist das wirklich korrekt?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Luckbert

Hallo Zusammen,
Ich habe heute gassistant-fhem installiert.
Leider erhalte ich keine LoginUrl.
Ich habe alles auf den neusten Stand gebracht.
Ich erhalte folgende Fehlermeldung im der Log:

Error: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /usr/lib/node_modules/gassistant-fhem/node_modules/grpc/src/node/extension_binary/node-v64-linux-arm-glibc/grpc_node.node)
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:730:18)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/usr/lib/node_modules/gassistant-fhem/node_modules/grpc/src/grpc_extension.js:32:13)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
/usr/lib/node_modules/gassistant-fhem/node_modules/grpc/src/grpc_extension.js:57
    throw e;
    ^


Was mache ich falsch?
Grüße Jürgen
Ich bin Neueinsteiger mit RPi3 mit  HM-MOD-RPI-PCB.

Tabu

Zitat von: dominik am 20 April 2019, 14:49:05
Was ist das fuer ein Sensor? temperature Reading fuer einen Kontakt? :) ...und HUEDevice als TYPE? Ist das wirklich korrekt?

Ich nutze den ConBee - ZigBee USB Stick. Diesen habe ich in Fhem als HUEBridge und die Öffnungsmelder als HUEDevice eingerichtet. Innerhalb von Fhem funktioniert es einwandfrei. Die Türöffner haben wohl auch einen Temperatursensor, zumindest habe ich ein Reading "temperature". Die Werte sind auch realistisch.

Auch in der Phoscon App werden die Temperaturwerte angezeigt (siehe Screenshot).

Danke
Tabu


dominik

@Richard, bau ich beim naechsten Update mit ein, wahrscheinlich erst naechste Woche, vorher komme ich nicht dazu.

@howi42, das kann ich beheben, kannst du mir bitte noch folgende Infos geben:
Wo kann ich den aktuellen RGB Status ablesen? state oder geht state auch auf 'on', was ich leider vermute.
Wie lautet der Befehl um RGB zu setzen? rgb oder RGB?
Wo kann ich den aktuellen dim Level auslesen? reportedState? Oder beinhaltet das jegliche states?

@SouzA, die Icons in der App sind richtig. Wird als DOOR angelegt, was die App noch nicht unterstuetzt und daher kann man dort auch keinen Status ablesen. Da muss Google noch ran. Ob die Tuer offen oder zu ist, sollte aber richtig beantwortet werden. Wie heisst das Device (Internals NAME)? Dann schau ich mal im Log.

@Luckbert, hast du stretch oder jessie? Bitte unbedingt auf stretch aktualisieren. Ansonsten nochmals gassistant-fhem deinstallieren und auch grpc deinstallieren. grpc muss als Binary installiert werden, dann klappt es. Ich hatte das selber schon mal, es liegt leider an der grpc Installation die vom Source statt direkt als Binary installiert wird.

@Tabu, das ist ja cool. Ich wusste nicht, dass die einen Temperaturwert haben. Das hat Xiaomi bislang verborgen. Ich werde es beim naechsten Update anpassen, damit es richtig angelegt wird.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

SouzA

Zitat von: dominik am 20 April 2019, 18:08:39
@SouzA, die Icons in der App sind richtig. Wird als DOOR angelegt, was die App noch nicht unterstuetzt und daher kann man dort auch keinen Status ablesen. Da muss Google noch ran. Ob die Tuer offen oder zu ist, sollte aber richtig beantwortet werden. Wie heisst das Device (Internals NAME)? Dann schau ich mal im Log.


defmod azi_Fenster CUL_HM 532210
attr azi_Fenster .mId 0030
attr azi_Fenster IODev myHmUART
attr azi_Fenster IOgrp VCCU:myHmUART
attr azi_Fenster actCycle 028:00
attr azi_Fenster actStatus alive
attr azi_Fenster alias Arbeitszimmer Fenster
attr azi_Fenster autoReadReg 4_reqStatus
attr azi_Fenster devStateIcon closed:fts_window_1w@green open:fts_window_1w_open@red tilted:fts_window_1w_tilt@red
attr azi_Fenster expert 2_raw
attr azi_Fenster firmware 2.4
attr azi_Fenster genericDeviceType window
attr azi_Fenster group Fenster
attr azi_Fenster icon fts_window_1w
attr azi_Fenster model HM-SEC-RHS
attr azi_Fenster peerIDs 00000000,
attr azi_Fenster realRoom Arbeitszimmer
attr azi_Fenster room Arbeitszimmer,GoogleHome,HomeMatic
attr azi_Fenster serialNr Neq
attr azi_Fenster sortby 2
attr azi_Fenster subType threeStateSensor


Thx und 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

Step321

Guten Morgen,
zunächst erstmal herzlichen Dank für die viele Mühe der Implementierung und des Supports. Ich habe leider Probleme mit meinen Homematic Fensterkontakten...die erhalten kein Statusupdate (nach dem BefehlBefehl set"set gassistant reload" wird der Status allerdings im Gassistant-Log korrekt angezeigt, wie im untenstehenden Log zu sehen ist). Habe diese zuvor einmal als Gerätetyp "Blinds" eingebunden, da wurde der Status korrekt erkannt.
Mit Statusupdate meine ich: Auf die Frage ist das Esszimmerfenster geöffnet erhalte ich IMMER die Aussage es ist geöffnet...(egal wie der Status nach einem reload ist). Beim Typ Blinds hatte es funktioniert...
Nachfolgend ein Auszug meiner Gerätedefinition sowie ein Auszug aus dem Gassistant Log...


Das Gerät FK.EZ:

defmod FK.EZ CUL_HM 3D0BF8
...
attr FK.EZ actStatus alive
attr FK.EZ assistantName Esszimmer Fenster
attr FK.EZ autoReadReg 4_reqStatus
attr FK.EZ event-on-change-reading state
attr FK.EZ model HM-SEC-SCO
attr FK.EZ room GoogleAssistant,Wohnung
attr FK.EZ subType threeStateSensor



Die Gassistant Log-Datei (nach einem Reload sowie nachfolgendem Öffnen/Schliessen des Fensters...letzteres sehe ich im Log allerdings nicht...):


22.4.2019, 10:05:28] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20gassistant%20gassistant-fhem-connection%20connected&XHR=1
...
[22.4.2019, 10:05:29] update reading: FK.EZ:contact = closed (to HMLAN1)
[22.4.2019, 10:05:29] update reading: FK.Gast:contact = open (to HMLAN1)
...
[22.4.2019, 10:05:29] GOOGLE MSG RECEIVED: {"featurelevel":3,"msg":"UPDATE_SYNCFEATURELEVEL"}
[22.4.2019, 10:05:29] Received firestore2fhem: {"featurelevel":3,"msg":"UPDATE_SYNCFEATURELEVEL"}
[22.4.2019, 10:05:29] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20gassistant%20gassistant-fhem-usedFeatureLevel%203&XHR=1
[22.4.2019, 10:05:29] GOOGLE MSG RECEIVED: {"delay":40,".........","msg":"REPORTSTATEALL"}
[22.4.2019, 10:05:29] Received firestore2fhem: {"delay":40,"id":"....","msg":"REPORTSTATEALL"}
[22.4.2019, 10:06:08] reportstateall initiated
[22.4.2019, 10:06:09] reportstateall initiated

SouzA

Jup, das gleiche Problem hab ich mit meinen Fenstersensoren ja auch. Vielleicht kommt der nicht mit three-state klar?

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