Mini Howto für ha-bridge (Alexa FHEM)

Begonnen von Simon74, 12 Februar 2017, 01:24:44

Vorheriges Thema - Nächstes Thema

Simon74

#30
Zitat von: rr725 am 03 März 2017, 13:35:45
ich hatte bis vor kurzem auch das Problem- es funktionierte erst mit "Alexa, stelle Heizung im Wohnzimmer aus 20 Grad" einwandfrei, dann- von einem Tag auf den anderen nicht mehr.

Danke für den Hinweis, das ist mir auch aufgefallen, bin dem aber nicht weiter nachgegangen..
Wie du schreibst funktioniert "Alexa, stelle Thermostat auf 20 Grad Celsius" wieder einwandfrei.  :)

@Pythonf
Danke für den Hinweis, ich habe zusätzlich zum allowfrom noch folgendes Attribut eingetragen(wobei mir persönlich set ausreicht):
attr WEBhabridge allowedCommands get,set

Ich bin mir nicht sicher was ein statisches "&fwcsrf=<MeinToken>" OHNE HTTPS sicherer macht ?
Auch dieser Token kann beim normalen HTTP Traffic mitgelesen werden.
Bitte um Aufklärung wenn ich falsch liege.

EDIT:
Ich habe mir die csfrToken mal durchgelesen, also das statische setzen von "attr WEB csrfToken ABCDEF" erhöht die Sicherheit um 0,0 Prozent.
Dies bewirkt nähmlich das dieser Token eben nicht mehr dynamisch ist.
Ich belasse es bei "Eigener WEBhabridge Instanz mit IP-Einschränkung".

EDIT2:
Möchte auf diese Diskussion verweisen: https://forum.fhem.de/index.php/topic,68368.msg598780.html#msg598780
allowedCommands ist somit auch kein wirklicher Sicherheitszugewinn, habe es aus dem ersten Beitrag wieder entfernt.
Ich mache es jetzt bei mir so das ich absichtlich! bei der habridge auf Authentifizierung verzichte. Was bringts wenn die habridge per http unverschlüsselt mit basicauth läuft und user/pass gelesen werden könnten, und ich mich damit an der SSL verschlüsselten WEB:/8083 anmelden könnte..



Simon74

#31
Thema ha-bridge Sicherheit/Abschottung (eigener ha-bridge Host!).

Anstatt der simplen NULL Route Lösung habe ich nun iptables so ergänzt das es funktioniert, Problem sind die dynamischen Ports von UPNP.
Ich mach es mir einfach und habe anstatt mehreren "match multiport" Regeln, den 2 Alexa Geräten ALLE Ports und Protokolle (wobei udp reichen müsste) auf die ha-bridge erlaubt.
Somit bleibt die ha-bridge für die restlichen Subnet Nutzer unsichtbar, und ich muss nicht unzählige Regeln definieren.

Bei mir ist es so das FHEM auf dem Proxmox-Wirtsystem (wegen USB, Audioschnittstelle) direkt läuft, darum möchte ich die ha-bridge nicht direkt darauf installieren.
Ohne Absicherung könnte JEDER auf die ha-bridge Weboberfläche zugreifen und schalten was ich nun mit iptables verhindere. (Netzwerk wird von mehreren Personen/Parteien genutzt)

Die Ausgabe meines iptables Firewall Scripts auf der separaten ha-bridge VM sieht nach dem reload so aus:

No Country Blocklist defined
No Blocklist available
Allow Ping inbound
Allow Ping outbound
TCP  inbound ports:  | 22 | 80 from 192.168.0.104/32 | 80 from 192.168.0.9/32
TCP outbound ports:  | 21 | 22 | 25 | 53 | 80 | 443 | 1024:1033 | 8088
UDP  inbound ports:
UDP outbound ports:  | 53 | 123
ALL Ports From/To :  | 192.168.0.154/32 | 192.168.0.176/32 | 192.168.0.177/32 | 239.255.255.250/24


Erklärung:

  • Meine Workstation (192.168.0.104) darf auf die Weboberfläche zugreifen.
  • FHEM (192.168.0.9) darf auf die Weboberfläche zugreifen. (Nur wegen Presence Online Prüfung, damit ich eine Message bekomme wenn dies nicht der Fall ist)
  • Eingehend ist SSH generell erlaubt.
  • TCP Ausgehend FTP,SSH,Mail,DNS,HTTP,HTTPS,FTP-Dynamic-Ports,FHEM-WEBhabridge(8088)
  • UDP Ausgehend DNS,NTP-Client
  • Alexa Hosts (192.168.0.176, 192.168.0.177) dürfen auf ALLE Ports zugreifen (einfachste Möglichkeit damit UPNP funktioniert)
  • Harmony Hub (192.168.0.154)
  • UPNP Broadcast (239.255.255.250/24)
Zusatzinfo UPNP Broadcast:
Es funktionierte bei mir auch ohne Freischaltung für die Broadcast Adresse "239.255.255.250/24", jedoch beschwert sich habridge ohne erlaubtes Broadcast im Log mit:
WARN  com.bwssystems.HABridge.upnp.UpnpListener - UpnpListener encountered an error sending upnp notify packet. IP: 239.255.255.250 with message: Die Operation ist nicht erlaubt (sendto failed)


Die iptables Ausgabe:
root@ha ~ > iptables -L -v
Chain INPUT (policy DROP 48 packets, 7092 bytes)
pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  any    any     amazon-3f715abf0.domain.net  anywhere
    0     0 ACCEPT     all  --  any    any     amazon-fbf5129e9.domain.net  anywhere
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
   97  8297 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  any    any     anywhere             anywhere             icmp echo-request
    2   172 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh
    0     0 ACCEPT     tcp  --  any    any     pc1.domain.net       anywhere             tcp dpt:http
    0     0 ACCEPT     tcp  --  any    any     fhem.domain.net      anywhere             tcp dpt:http
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy DROP 3 packets, 426 bytes)
pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  any    any     anywhere             amazon-3f715abf0.domain.net
    0     0 ACCEPT     all  --  any    any     anywhere             amazon-fbf5129e9.domain.net
    2    80 ACCEPT     all  --  any    lo      anywhere             anywhere
   52  6811 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  any    any     anywhere             anywhere             icmp echo-request
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ftp
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:smtp
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:domain
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpts:1024:1033
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:omniorb
   32  1806 ACCEPT     udp  --  any    any     anywhere             anywhere             udp dpt:domain
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp dpt:ntp


Ausschnitt aus dem iptables Script für die "ALL Ports from/to" (ansonsten setze ich nur iptables -A (Append), und am Schluss der generelle DROP)
      echo "" && echo -n "ALL Ports From/To :  "
      # IP Allowed ALL Ports
      for iprange in "${IP_ALLOWED_ALL[@]}"; do
                IFS=' ' read range <<< $iprange
        echo -n "| $range "
        iptables -I INPUT -p ALL -s $range -j ACCEPT
        iptables -I OUTPUT -p ALL -d $range -j ACCEPT
      done
      echo ""


Bevor jemand nach dem iptables Script fragt, Google findet es: http://lmgtfy.com/?q=easy+debian+iptables+firewall+script

Mickey Mouse

ich weiß nicht ob das falsch verstanden wurde, oder ich etwas falsch verstanden habe...

wir reden hier über die ha-bridge, die "emuliert" halt "nur" eine Philips HUE Bridge mit Lampen. Die können halt nur mit bestimmten Befehlen gesteuert werden.
ob das jetzt "stelle" oder "dimme" ist, keine Ahnung, ich nutze immer nur "dimme".
aber Alexa denkt auf jeden Fall, dass es Lampen sind, egal ob sich dahinter ein Heizungsthermostat, AV-Receiver oder tatsächlich eine Lampe (nur als FS20 oder Homematic Dimmer) versteckt.
eine Lampe kann man halt nicht auf 21° stellen, nur auf 21%, genauso wenig wie man sie auf -30dB stellen kann.

mit anderen Worten: man muss sich an die "Lampen Syntax" halten und "Prozent" sagen, diesen Wert kann man dann als "intensity.percent" innerhalb der ha-bridge Kommandos verwerten.

natürlich wäre es schön, wenn man Prozent, dB, Grad usw. verwenden könnte, aber das passt nunmal nicht zum HUE System das die ha-bridge emuliert.

rr725

Zitat von: Mickey Mouse am 03 März 2017, 23:46:21
ich weiß nicht ob das falsch verstanden wurde, oder ich etwas falsch verstanden habe...

wir reden hier über die ha-bridge, die "emuliert" halt "nur" eine Philips HUE Bridge mit Lampen. Die können halt nur mit bestimmten Befehlen gesteuert werden.
ob das jetzt "stelle" oder "dimme" ist, keine Ahnung, ich nutze immer nur "dimme".
aber Alexa denkt auf jeden Fall, dass es Lampen sind, egal ob sich dahinter ein Heizungsthermostat, AV-Receiver oder tatsächlich eine Lampe (nur als FS20 oder Homematic Dimmer) versteckt.
eine Lampe kann man halt nicht auf 21° stellen, nur auf 21%, genauso wenig wie man sie auf -30dB stellen kann.

mit anderen Worten: man muss sich an die "Lampen Syntax" halten und "Prozent" sagen, diesen Wert kann man dann als "intensity.percent" innerhalb der ha-bridge Kommandos verwerten.

natürlich wäre es schön, wenn man Prozent, dB, Grad usw. verwenden könnte, aber das passt nunmal nicht zum HUE System das die ha-bridge emuliert.

stimmt nicht ganz...
ich verwende homematik thermostate über ha bridge. dort kann ich sagen  stelle die heizung auf x Grad celsius...funktioniert einwandfrei

Mickey Mouse

naja, ob die ha-bridge da jetzt homematic oder FHT Kommandos draus macht ist doch egal...
bei mir zeigt die Alexa App für alle von der ha-bridge bereitgestellten Geräte "Lux Light" an!
und dafür kommt dann auf "Alexa, stelle Wohnzimmerheizung auf 20 Grad" nur ein "dieser Befehl funktioniert für das Gerät Wohnzimmerheizung nicht"

es wäre interessant zu wissen wie man bei der ha-bridge den Geräte Typ ändert, aber HUE unterstützt doch gar keine Heizungen?!?
bist du dir überhaupt sicher, dass du über die ha-bridge steuerst und nicht mit einem anderen Still direkt?

rr725

Zitat von: Mickey Mouse am 04 März 2017, 14:30:54
naja, ob die ha-bridge da jetzt homematic oder FHT Kommandos draus macht ist doch egal...
bei mir zeigt die Alexa App für alle von der ha-bridge bereitgestellten Geräte "Lux Light" an!
und dafür kommt dann auf "Alexa, stelle Wohnzimmerheizung auf 20 Grad" nur ein "dieser Befehl funktioniert für das Gerät Wohnzimmerheizung nicht"

hatte ich oben bereits geschrieben......wenn du sagst:
"Alexa, stelle Wohnzimmerheizung auf 20 Grad Celsius" geht es wieder !!!

Mickey Mouse

jetzt habe ich es verstanden, danke! ;)

gibt es eine Übersicht mit allen "möglichen Befehlen"?

ich stelle die Lautstärke der Squeezeboxen im Haus über die ha-bridge. Da lautet der aktuelle Befehl z.B.:
"Alexa, dimme Kuechenradio auf 20 Prozent"

am liebsten wäre mir ja eine Möglichkeit ala "Küchenradio lauter/leiser", aber da ist mir noch kein vernünftiger Trick eingefallen.
die ha-bridge kennt ja nicht die aktuelle Lautstärke und kann daher keinen absoluten Wert senden.
das einzige was mir eingefallen ist: ein zweites Gerät einrichten wie "Kuechenlautstärke" und bei "ein" ein Volume-Up und "aus" Volume-Down senden.
dann kann ich halt sagen: "Alexa, schalte Küchenlautstärke ein" um "lauter zu drehen", irgendwie doof...

Simon74

Mittlerweile gibt es eine neue Version 4.2.0 der ha-brdige.
service habridge stop
wget https://github.com/bwssytems/ha-bridge/releases/download/v4.2.0/ha-bridge-4.2.0.jar -O /opt/habridge/ha-bridge.jar
service habridge stop


Ich weiss nicht ob es an meinen Einstellungen lag..
Jedoch mit der aktuellen 4.2.0 Version funktioniert bei mir das direkte schalten des Logitech Harmony Hubs per habridge (ohne FHEM). Habe es im 1. Beitrag ergänzt.
Wer von Target Typ "HTTP-Device" auf Harmony "Activity/Button" umstellt darf nicht vergessen die alten Devices auch ONLINE zu löschen.

Habe für das löschen/verwerfen der Geräte noch keinen Sprachbefehl finden können, so das man sich die Browseranmeldung sparen könnte.
Am liebsten wäre mir Alexa könnte so eingestellt werden das Sie vor "Geräte suchen" immer zuvor alle vorhandenen Smarthome-Geräte löscht.
Habe schon öfters vergessen nach dem löschen eines Devices in der habridge, dieses auch in der Alexa-App zu löschen, die dann doppelt vorhanden sind.

Mickey Mouse

#38
das direkte Schalten der Harmony Hubs funktionierte bei mir auch mit der 4.1.4! (sowohl Aktionen als auch direkte Kommandos an die Geräte "an der Aktion vorbei" oder ohne dass überhaupt eine Aktion läuft)
ich habe Yonomi abgeschaltet und mache alles nur noch über die ha-bridge.

allerdings hatte ich mehrfach das Problem, wenn "auf einem Hub keine Aktion ausgeführt" wird und sende einen Ausschaltbefehl (-1), dann wird ein Gerät eingeschaltet. Bei jedem Hub (ich habe drei) ein anderes und ich kann kein Muster erkennen. Im Wohnzimmer ist es die PS3, im Schlafzimmer der PopcornHour. Es kann sein, dass das die zuletzt angelegten Geräte sind, bin mir aber nicht sicher.

das scheint nicht direkt mit der ha-bridge zusammen zu hängen, ich habe noch gar nicht probiert ob FHEM auch einen -1 Befehl sendet wenn der Hub schon "Idle" ist?!?
ich probiere es aber mal mit der 4.2 aus.

btw.: ich habe hier auch viele "Geräte" die gemischt sind!
Also z.B. "Arbeitszimmer" schaltet bei "ein" das Licht dort ein. "aus" schaltet das Licht aus (per FHEM/http) und auch den AVR dort per direktem Harmony Befehl.
der Typ steht auf http, aber ist ja auch explizit als "Legacy" bezeichnet, hat also offensichtlich keine weitere Bedeutung.

Mickey Mouse

Zitat von: Simon74 am 06 März 2017, 13:19:15Wer von Target Typ "HTTP-Device" auf Harmony "Activity/Button" umstellt darf nicht vergessen die alten Devices auch ONLINE zu löschen.

Habe für das löschen/verwerfen der Geräte noch keinen Sprachbefehl finden können, so das man sich die Browseranmeldung sparen könnte.
kannst du das nochmal erklären?!?

Alexa "sieht" doch nur "Lux Light" Geräte und interessiert sich einen Dreck dafür, ob die ha-bridge da jetzt einen http oder direkten IP Harmony Befehl absetzt?!?
wie gesagt, ich habe hier diverse "Geräte" mit "gemischten" Kommandos, das ist doch eine reine ha-bridge Geschichte.

Interessant ist die Sache doch nur, wenn man z.B. ein "Gerät" mit Yonomi erstellt hatte und das jetzt mit der ha-bridge emuliert. DANN muss man das alte Gerät verwerfen! Aber ein bestehendes Gerät innerhalb der ha-bridge kann man doch nach belieben verändern und erweitern, da braucht Alexa gar nichts von zu wissen, die liefert nur weiterhin die Kommandos an/aus/dim wie vorher auch. Was die ha-bridge daraus macht ist völlig egal!

Simon74

Zitat von: Mickey Mouse am 07 März 2017, 23:15:11
kannst du das nochmal erklären?!?
Bitteschön, bei mir ist es so das wenn ich Geräte aus der habridge lösche, diese nicht in der Alexa App bzw. alexa.amazon.de gelöscht werden. (Auch nicht nach neuer Gerätesuche)
Wenn ich also zuerst ein Gerät aus habridge lösche, dann ein neues Device "mit selbem Nahmen" anlege, ist es in der APP doppelt mit selbem Namen vorhanden.
Deshalb meinte ich: wünschte ich mir das generell ein löschen der Smarthomegeräte vor der neuen "Geräte suchen" Aktion eingestellt werden könnte, oder ein Sprachbefehl für "Geräte löschen" existieren würde.

Zitat von: Mickey Mouse am 06 März 2017, 14:17:44
allerdings hatte ich mehrfach das Problem, wenn "auf einem Hub keine Aktion ausgeführt" wird und sende einen Ausschaltbefehl (-1), dann wird ein Gerät eingeschaltet.
Das liegt jedoch höchstwahrscheinlich am gemeinsamen ON/OFF IR-Code des Empfangsgerät. Leider ist es so das hier viele Geräte für On/Off denselben IR-Code verwenden, also keinen eindeutigen On UND Off Code, sondern denselben, somit kommt es bei diesen Geräten auch immer wieder mal vor das die gewählte Harmony Aktion nicht zum Schaltzustand des Gerätes passt.

ZitatAlexa "sieht" doch nur "Lux Light" Geräte und interessiert sich einen Dreck dafür, ob die ha-bridge da jetzt einen http oder direkten IP Harmony Befehl absetzt?!?
Ich denke der Unterschied ist im ersten Beitrag, Absatz "Logitech Harmony" Variante1 und Variante2 klar ersichtlich, da das Thema hier habridge ist.

Noch was am Rande:
Ich muss sagen das ich mit der Ausdrucksweise deiner Beiträge ("Dreck,Bullshit,Wichtigtuerei,Sauerei") etwas überfordert bin.
https://forum.fhem.de/index.php/topic,67285.msg587456.html#msg587456
Also bitte nicht wundern das bei Beibahltung dieser "Qualität" von mir keine Antwort mehr kommen wird.

Mickey Mouse

Zitat von: Simon74 am 08 März 2017, 10:19:05
Bitteschön, bei mir ist es so das wenn ich Geräte aus der habridge lösche, diese nicht in der Alexa App bzw. alexa.amazon.de gelöscht werden. (Auch nicht nach neuer Gerätesuche)
Wenn ich also zuerst ein Gerät aus habridge lösche, dann ein neues Device "mit selbem Nahmen" anlege, ist es in der APP doppelt mit selbem Namen vorhanden.
sorry, aber das war doch gar nicht das Thema?!?
du hast geschrieben:
ZitatWer von Target Typ "HTTP-Device" auf Harmony "Activity/Button" umstellt darf nicht vergessen die alten Devices auch ONLINE zu löschen.
darauf bezog sich meine Frage!
es ist von "Umstellen" die Rede und nicht von "Löschen und Neu Anlegen"!

1) meiner Meinung nach braucht man da gar nichts "Umstellen" (ist ja auch als Legacy gekennzeichnet)
2) wenn man das tut (der Form halber) dann braucht man Online auch nichts verwerfen

hase6578

Hallo zusammen,

erst mal Danke für die tolle Hilfe und Anleitung hier.

Ich habe allerdings ein Problem bei der Einrichtung der Geräte in der Bridge. Richte ich ein neues Geräte ein, funktioniert dies zunächst mit den beschriebenen Einstellungen völlig fehlerfrei.

http-Aufruf:
http://192.168.1.63:8083/fhem?detail=MiLightArtimideWZ&cmd.MiLightArtimideWZ=set%20MiLightArtimideWZ%20on&fwcsrf=csrf_162808380821644

Wenn ich meinen Pi neu starte, bekomme ich allerdigns beim Aufruf folgende Fehlermeldung:

Request Error, Pleae look in your habridge log: error {"type":"6","address":"/lights/12","description":"Error on calling url to change device state","method_name":"/lights/12state"}

Jemand eine Idee, woran das liegen könnte?

Danke und Grüße

Andreas

Simon74

Zitat von: Mickey Mouse am 08 März 2017, 15:02:03
du hast geschrieben: darauf bezog sich meine Frage!
es ist von "Umstellen" die Rede und nicht von "Löschen und Neu Anlegen"!

Das ist meinerseits unklar geschrieben, richtig.  ;)
Tatsächlich habe ich nicht umgestellt sondern Delete- und Add Device..

Zitat von: hase6578 am 09 März 2017, 07:14:45
Wenn ich meinen Pi neu starte, bekomme ich allerdigns beim Aufruf folgende Fehlermeldung:
Request Error, Pleae look in your habridge log: error {"type":"6","address":"/lights/12","description":"Error on calling url to change device state","method_name":"/lights/12state"}
Jemand eine Idee, woran das liegen könnte?

Da du anscheinend den csrf Token verwendest -> hast du diesen per Attribut (attr myWEBinstanz csrfToken ..) in der Webinstanz auch gesetzt ?
Wenn nein ändert sich dieser bei jedem Neustart von FHEM.

scottyfhem

Hallo,

ich bin neu in diesem Forum und hoffe, ich mache nicht allzuviel falsch.

Erst einmal vielen Dank für die Anleitung. Hat auf meinem "Test"-pi mit Jessie wunderbar funktioniert. Leider hat mein "Produktions"-pi noch Wheezy. An ihm möchte ich auch nicht allzuviel ändern, um meine umfangreiche FHEM-Installation nicht zu gefährden.

Kann mit deshalb jemand sagen, wie ich den Daemon für die ha-bridge unter Wheezy einrichte?

Vielen Dank.