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

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

Vorheriges Thema - Nächstes Thema

TomLee

Ich bin heute abend direkt auf 0.3.0, 0.2.0 kam ich gar nicht dazu.

Jetzt geht ab dem 20. fhemintents nichts mehr. Im Verlauf steht genau was gesprochen wurde. Echo frägt aber, ob noch jemand da ist ?

Master_Nick

#2131
Wenn du mir nun sagst, wie ich feststellen kann wieviele Intents ich habe, sage ich dir, ob ich das ebenso habe. Aktuell läuft bei mir die 0.3.0 ohne Probleme.

Ich habe festgestellt, dass in der fhem.js ja durchaus etwas über Luftfeuchtigkeitssensoren drin steht - mein reading passt auch ... aber angesagt wird es nicht, da der Service type ein anderer ist als thermometer....  aber dann fehlt ja der Service Thermo-Hygrometer ;-) Somit habe ich mal für mich angepasst - aber eventuell passt es ja noch anderen.

Ich habe 6 Oregon Scientificy Sensoren (temperature, humidity, battery)

Ich habe nun einfach mal in der fhem.js den Bereich kopiert mit dem humidity Sensor und als service das thermomerter eingetragen, da es ja eine Abfrage ist, wenn vorhanden dann... sollte das ja nicht stören.

Folgende Zeile kopieren:
  if( s.Readings.humidity ) {
    if( !this.service_name ) this.service_name = 'HumiditySensor';
    this.mappings.CurrentRelativeHumidity = { reading: 'humidity' };


Einfügen und anpassen zu:
  if( s.Readings.humidity ) {
    if( !this.service_name ) this.service_name = 'thermometer';
    this.mappings.CurrentRelativeHumidity = { reading: 'humidity' };
  }


Und schon cached er auch pro Sensor die Luftfeuchtigkeit.... nur die Antwort muss noch geändert werden, so dass die Luftfeuchtigkeit mit drin ist.

Datei server.js

          if( device.mappings.CurrentTemperature ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += ' misst '+ device.fhem.cached(device.mappings.CurrentTemperature.informId).replace('.',',') +' Grad';


Anpassen zu:
          if( device.mappings.CurrentTemperature ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += ' misst '+ device.fhem.cached(device.mappings.CurrentTemperature.informId).replace('.',',') +' Grad,' + ' die Luftfeuchtigkeit beträgt ' + device.fhem.cached(device.mappings.CurrentRelativeHumidity.informId).replace('.',',') +' Prozent';
          }


Und schon geht es:
Zitataußenthermometer  misst 6 Grad, die Luftfeuchtigkeit beträgt 91 Prozent und der Batteriestand ist niedrig
Batterie ignorieren wir mal ;-D Da stimmt ja irgendetwas nicht.

@justme1968 wahrscheinlich macht es mehr Sinn einen eigenen Service für Geräte mit Temperatur und Luftfeuchtigkeit zu schaffen oder?
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

#2132
So ich habe mir die Geschichte mit dem Batteriewert in der server.js mal angesehen.

Aus meiner Sicht lag hier die Fehlerquelle bei dem Teil:

            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist '+ (device.fhem.cached(device.mappings.StatusLowBattery.informId)?'niedrig':'in ordnung');


Wenn ich das richtig verstehe, ist das eine Abfrage auf "Variable gesetzt/vorhanden true or false", da sie immer gefüllt ist, wird immer niedrig ausgegeben. ;)

Ich habe das nun so geändert, getestet und es funktioniert:


          if( device.mappings.BatteryLevel ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist '+ device.fhem.cached(device.mappings.BatteryLevel.informId).replace('.',',');
          } else if( device.mappings.StatusLowBattery ) {
            if( device.fhem.cached(device.mappings.StatusLowBattery.informId) == 'ok'  ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist in ordnung';
           }
            else if( device.fhem.cached(device.mappings.StatusLowBattery.informId) == 'low'  ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist niedrig';
           }

          }


Eventuell macht es noch Sinn, dass if mit oder zu ergänzen um auch Zahlen abgefrühstückt zu haben:

          if( device.mappings.BatteryLevel ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist '+ device.fhem.cached(device.mappings.BatteryLevel.informId).replace('.',',');
          } else if( device.mappings.StatusLowBattery ) {
            if(( device.fhem.cached(device.mappings.StatusLowBattery.informId) == 'ok'  ) || (device.fhem.cached(device.mappings.StatusLowBattery.informId) == '1'))  {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist in ordnung';
           }
            else if(( device.fhem.cached(device.mappings.StatusLowBattery.informId) == 'low'  ) || ( device.fhem.cached(device.mappings.StatusLowBattery.informId) == '0'  )) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist niedrig';
           }

          }
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

michael.winkler

Zitat von: michael.winkler am 16 Februar 2017, 15:39:33
Hallo,

ich habe, glaube ich einen BUG gefunden.

wenn in dem attr alexaTypes eine Leerzeile am Ende ist, ist im alexa.log folgendes zu sehen. Ist das schon bekannt?


[2/16/2017, 3:35:12 PM] [FHEM] TypeError: Cannot read property 'length' of null
    at Server.<anonymous> (/opt/alexa-fhem/lib/server.js:433:20)
    at emitOne (events.js:96:13)
    at FHEM.emit (events.js:188:7)
    at FHEM.<anonymous> (/opt/alexa-fhem/lib/fhem.js:1093:28)
    at Request._callback (/opt/alexa-fhem/lib/fhem.js:1148:27)
    at Request.self.callback (/opt/alexa-fhem/node_modules/request/request.js:186:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (/opt/alexa-fhem/node_modules/request/request.js:1081:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)


@justme
Das Problem ist in der Version 0.3.0 immer noch vorhanden

justme1968

@Master_Nick: das umbauen für neue datentypen wird demnächst nicht mehr nötig sein weil die abfragen konfigurierbar werden.

@michael.winkler: du hast recht. ich habe es eben wirklich repariert.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

justme1968

ein kurzer hinweis: es gibt hier: https://forum.fhem.de/index.php/topic,67490.msg589378.html#msg589378 eine test version die custom slots in den fhemIntents erlaubt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Master_Nick

Ist damit auch so etwas wie die Batterie-Geschichte erledigt?
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

wthiess

Hallo!
Alexa schaltet meine Glocke. Gott und euch sei Dank.
Jetzt Thema Sicherheit. Das mit Dem Proxy ist mir zu kompliziert. Weiß jemand welche Adressen oder Range ich in meiner Firewall freigeben muss damit Amazon auf Fhem zugreifen kann. Derzeit hab ich keine Einschräkungen. Ist eh nur ein Testsystem.
Bisher habe ich nur per VPN auf meine Fhem zugreifen können.

lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

Fixel2012

Zitat von: wthiess am 20 Februar 2017, 12:35:35
Hallo!
Alexa schaltet meine Glocke. Gott und euch sei Dank.
Jetzt Thema Sicherheit. Das mit Dem Proxy ist mir zu kompliziert. Weiß jemand welche Adressen oder Range ich in meiner Firewall freigeben muss damit Amazon auf Fhem zugreifen kann. Derzeit hab ich keine Einschräkungen. Ist eh nur ein Testsystem.
Bisher habe ich nur per VPN auf meine Fhem zugreifen können.

lg
Wolfgang
Eine simple Port freigabe vom Port 3000 extern auf dein fhem Port 3000 genügt schon.

Gesendet von meinem ONEPLUS A3003 mit Tapatalk

Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

wthiess

@Fixel2012

das ist eh klar. Läuft ja auch schon. Aber in Punkto Sicherheit möchte ich nur die IP_Adressen oder Ranges in meiner Firewall freischalten die von Amazon benötigt werden. Mir hat ein Profi gesagt es könnten mehrere wechselnde IP_Adressen sein. Aber welche?

lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

Fixel2012

Zitat von: wthiess am 20 Februar 2017, 13:09:27
@Fixel2012

das ist eh klar. Läuft ja auch schon. Aber in Punkto Sicherheit möchte ich nur die IP_Adressen oder Ranges in meiner Firewall freischalten die von Amazon benötigt werden. Mir hat ein Profi gesagt es könnten mehrere wechselnde IP_Adressen sein. Aber welche?

lg
Wolfgang
Achso, du möchtest also nur gewisse ipadressen auf Port 3000 Zulassen? Interessante Idee, ist das so überhaupt möglich?

Gesendet von meinem ONEPLUS A3003 mit Tapatalk

Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

wthiess

ja sicher in jedem billigen router.

lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

Fixel2012

Zitat von: wthiess am 20 Februar 2017, 13:14:18
ja sicher in jedem billigen router.

lg
Wolfgang
Wieder was gelernt, danke! Werde mich in der Hinsicht auch Mal erkundigen.

Gesendet von meinem ONEPLUS A3003 mit Tapatalk

Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Ma_Bo

@justme1968: änderst du demnächst die Ausgabe für das Reading fhemIntent nochmal oder bleibt es erst einmal dabei...?
In V0.2.0 stand dort der Name des Intents und die Skill ID, jetzt steht dort um welches Intent es sich handelt und die Skill ID.

Ich baue jetzt meine notify´s dementsprechend um, aber damit ich für die Zukunft vorbereitet bin, wäre es gut zu wissen ob das jetzt so bleibbt.

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

justme1968

das war nicht absichtlich. ich repariere das wieder
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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