IKEA Trådfri Modul

Begonnen von Peter Kappelt, 16 April 2017, 15:07:07

Vorheriges Thema - Nächstes Thema

dtavb

Hoi Ihr,

@Peter: vielen lieben Dank für die Unterstützung!
Schaltungen funktionieren tadellos.

Was mir nun beim Durchklicken der get-Methoden aufgefallen ist:
Gateway "get devicelist": es wird nur noch ein Array mit den IDs geliefert.
Die Beschreibungen der Lampen etc. fehlen.
Schaue ich im Java-Client nach, ist dem auch. Der Java-Client liefert nur noch die IDs:
[TcpServerThread] Received data: coapGet|coaps://192.168.192.141/15001
[TcpServerThread] Command "coapGet" on "coaps://192.168.192.141/15001" returned "[65538,65536,65537,65540,65539]"


Genauso auch bei den Gruppen, nur die Gruppen-ID wird zurückgliefert.

Wenn das Gateway States zurückmeldet, sind die Beschreibungen dabei:
[TcpServerThread] New state for observed resource coaps://192.168.192.141/15001/65537: {"5750":2,"9001":"Bulp1","3":{"0":"IKEA of Sweden","2":"","1":"TRADFRI bulb E27 WS opal 980lm","3":"1.1.1.1-5.7.2.0","6":1},"9002":1499502983,"9020":1500227033,"9003":65537,"9054":0,"9019":1,"3311":[{"5850":1,"5851":254,"5707":0,"5708":0,"5709":24930,"5710":24694,"5711":250,"5706":"f5faf6","9003":0}]}
[TcpServerThread] Command "coapPutJSON" on "coaps://192.168.192.141/15001/65538" returned ""
[TcpServerThread] New state for observed resource coaps://192.168.192.141/15001/65538: {"5750":2,"9001":"Bulp2","3":{"0":"IKEA of Sweden","2":"","1":"TRADFRI bulb E27 WS opal 980lm","3":"1.1.1.1-5.7.2.0","6":1},"9002":1499505749,"9020":1500233511,"9003":65538,"9054":0,"9019":1,"3311":[{"5850":1,"5851":254,"5707":0,"5708":0,"5709":24930,"5710":24694,"5711":250,"5706":"f5faf6","9003":0}]}


Frage bzgl. Java-Client:
@Peter:
belässt Du es so, dass man manuell den Java-Client starten muss?
Ein kleines HowTo wäre nicht schlecht wie man das bei System-Reboot wieder automatisiert anstarten kann.

@Brause
Ich würde den Befehl als bash-script bei Boot ausführen lassen. Wie hast Du das getan?

Gerne schreibe ich das HowTo, würde nur gerne Eure Wege zum Autostart erst kennenlernen.

Grüsse,
dtavb
fhem:pi3&kvm, z-wave, it-funk, milight, zigbee, wifi, bt & presence, geo-tracking, alexa, esp.
Monitoring: ELK(syslog), grafana (grafik), netdata (ermittlung)
Security: haproxy (access), ossec (überall), snort (access), opnsense (fw)
Geplant: KVM-Cluster

Peter Kappelt

Hallo,

Bitteschön!

Bei den get deviceList und get groupList bin ich erstmal einen Schritt zurück gegangen. Die Tatsache ist mir bewusst und das Feature wird wieder re-implementiert werden. Ich suche allerdings noch nach einer Möglichkeit, die notwendigen blockierenden Aufrufe effizienter zu gestalten. Ein Gedanke ist, dass ich mehr aufgaben an den Java-Client "outsource" und dem die Arbeit überlasse - denn der unterstützt auch parallele Abfragen und Ähnliches. Also quasi ein Kommando in der Form "getGroupList", welches an den Java-Client gesendet wird und der die notwendige Verarbeitung schneller macht. Mal schauen.

Wie schon gesagt: Es ist sehr ärgerlich, dass es für Perl keine CoAP-Module gibt. So eine native Lösung wäre das Idealste. Mit dem Gedanken, das CoAP-Perl-Modul selbst bereitzustellen, habe ich auch schon gespielt - aber da scheue ich vor (nicht genug Hardware zum Testen, Zeitverbrauch, Grenzen von Programmierkenntnissen, ...).

Wie auch immer - Ja, momentan wollte ich keine Autostartskripte mit der Beta verteilen. Bedenkt bitte auch, dass mindestens noch eine Änderung im Aufruf des Java-Clients folgt. Das hängt einfach damit zusammen, dass ich verschiedene Möglichkeiten zur verkapselten Verteilung der Software teste. Der Nutzer soll sich idealerweise nicht um die Installation des JRE kümmern, andererseits soll auch nicht an alle Nutzer prophylaktisch ein JRE verteilt werden. Wenn ich dafür eine Lösung habe, will ich das Starten und Stoppen des Clients durch FHEM selbst automatisieren, i.e. ein FHEM Start führt auch zum Start des Clients.
Ziel ist es, dass sich die tatsächliche Installation auf das Hinzufügen der Repository und ein "update" reduziert.

Den Client per One-Liner im Hintergrund laufen zu lassen funktioniert z.B. so, vielleicht gibt es einfachere Möglichkeiten:
screen -dmS fhem_tradfri_client && screen -r fhem_tradfri_client -p 0 -X stuff $"java -jar /voller/Pfad/zum/kCoAPSocket.jar -s psk \n"
Darin wirklich nur den Pfad für den Client und den PSK ersetzen.

Das ganze kann dann beispielsweise in die Crontab-Datei, sollte so gehen, aber nicht getestet:
pi@hcpi01:~ $ cat /etc/crontab
@reboot screen -dmS fhem_tradfri_client && screen -r fhem_tradfri_client -p 0 -X stuff $"java -jar /voller/Pfad/zum/kCoAPSocket.jar -s psk \n"


Wenn du das ganze austestest und noch ein paar Worte zu schreibst könnte ich das mit in die Anleitung aufnehmen.

Schönen Abend,
Peter

Brause

Hoi

Ich habe den Autostart über ein rc.d-Script gelöst (praktische äquivalent zum FHEM-Start)


#!/bin/sh

### BEGIN INIT INFO
# Provides:             tradfri
# Required-Start:       $local_fs $remote_fs networking
# Required-Stop:        $local_fs $remote_fs networking
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    FHEM - Tradfri-JAVA
# Description: Start / Stop / Status or Restart the FHEM - Tradfri-JAVA
### END INIT INFO

case "$1" in                                                                                                                                                                         
'start')
echo "Starting FHEM - Tradfri-JAVA"
screen -dmS Tradfri /opt/java-Tradfri.sh
RETVAL=$?
;;                                                                                                                                     
'stop')
pkill -USR1 -U fhem java                                                                                                                     
    echo " ... done. FHEM - Tradfri-JAVA Stopped."
    RETVAL=$?
;;
'restart')
pkill -USR1 -U fhem java
    echo " Closed Process, Restarting"
screen -dmS Tradfri /opt/java-Tradfri.sh
echo " ... done. FHEM - Tradfri-JAVA Restarted"
RETVAL=$?
;;
'status')
        cnt=`ps -ef | grep "java -jar" | grep -v grep | wc -l`
        if [ "$cnt" -eq "0" ] ; then
                echo "FHEM - Tradfri-JAVA is not running"
        else
                echo "FHEM - Tradfri-JAVA is running"
        fi
        ;;
*)
echo "Usage: $0 { start | stop | status | restart }"
RETVAL=1
;;
esac
exit $RETVAL



in der "java-Tradfri.sh" erfolg dann der JAVA-Start

#! /bin/bash

cd /opt/Tradfri-FHEM/kCoAPSocket/kCoAPSocket
su fhem -c "java -jar kCoAPSocket.jar -s psk"


Der Einzeiler von Peter ist eine gute Idee, den könnte man prima direkt im rc.d-Script einbauen.
Da ich den screen nicht direkt mit root-Rechten laufen lassen wollte, ist bei mir halt noch der "su fhem" eingebaut.
Nachteil meines Startscripts ist das man sich anschließend nicht mehr in den screen einlogen kann, um zu schauen was da drin so alles protokolliert wird.

Gruss Brause


Brause

Eine Frage hätte ich noch

Peter hast du eventuell auch geplant die SetExtensions irgendwann mit einzubauen??
Ein "on-for-timer" und "toggle" für Device und Group wären echt noch Klasse.

Gruss Brause

Peter Kappelt

Du kannst mal probieren, die Ausgabe des Clients in eine Logdatei zu schreiben, so müsste es gehen:
su fhem -c "java -jar kCoAPSocket.jar -s psk >> /tmp/deineLogdatei"

Geplant ist vieles, die Set Extensions stehen schon auf der Liste. Die höchste Prio ist aber momentan für mich, die Beta stabil zu bekommen und sinnvoll zu verteilen.

An Alle, die die Beta nutzen: Bitte passt auf, wenn ihr das nächste mal den Java-Client updatet. Die Jar-Datei heißt nun "kCoAPSocket-latest.jar", nicht mehr "kCoAPSocket.jar".

Peter Kappelt

An die Nutzer der Beta: Bitte beachtet, dass mit dem neusten Update ein weiterer Parameter (-g) erforderlich ist. Dieser definiert die Adresse des Gateways und muss, bis FHEM das automatisch erledigt, beim Start und Stopp des Clients angegeben werden. Beispielsweise:
java -jar kCoAPSocket-latest.jar -s Code -g 192.168.2.65

Außerdem habe ich noch eine Mailgruppe eingerichtet, in der ich künftig solche wichtigen Änderungen an Beta-Tester verteilen werde. Falls ihr sofortige Info über die Updates wünscht könnt ihr der Gruppe gerne hier beitreten: https://groups.google.com/group/tradfri-betatester/subscribe

Brause

Guten Morgen

nur kurze Rückmeldung.
Habe gerade das update gemacht.
- Startscript den neuen Parameter (und Log-File) hinzu
- git pull / git submodule update --remote
- Dank meines Startscripts ein "service tradfri restart"
- knappe Minute später erfolge automatisch das reopen vom Getaway-Device

- Alles läuft - ohne Probleme

Euch einen angenehmen Freu-tag
Gruss Brause

Fillip

Hallo zusammen,
ich nutze auch schon seit längerem die Tradfri Leuchten in FHEM, anfangs mit einem Skript zusammen gebastelt welches ich mal im Netz gefunden habe. Nun habe / musste ich meine FHEM installation neu machen. Da bin ich dann auch gleich auf das Modul von Peter umgestiegen - was soll ich sagen, super Arbeit!
Nur zwei fragen hätte ich (aktuell)
- Wie verhält sich das mit dem AutoUpdateIntervatt? Sind das angaben in sekunden oder einfach nur 1 für an? Hatte eben etwas getetstet, aber kam keine Änderung...
- Nutz jemand hier das ganze in Verbindung mit der Homebridge? Lässt sich das Gerät (die Lampe) so einbinden, das ich über die Homebridge, Ein/Aus, Helligkeit (und eventuell Farbe) stellen kann? Habe aktuell das GenericDeviceType auf Light stehen, damit geht halt nur An/Aus

P.S. @Peter, die E-Mail von mir, bzgl des BWM kannst du ignorieren, bin ja nun hier in dem Thread gelanden und hab schon was darüber gelesenn  ;)

FunkOdyssey

Offtopic:

Ich habe die (große) Ikea Tradfri Fernbedienung. Mit dieser kann man anscheinend nur zwischen den drei Farbmodi hin- und herwechseln wie auch die Helligkeit regulieren.
Kann man damit gar nicht zwischen den individuellen und vorkonfigurierten Szenen wechseln? Habe ich etwas übersehen?

Danke.

Mickey Mouse

soviel ich weiß sind die Funktionen auf den von dir angesprochenen Umfang begrenzt :(

u.a. deshalb ist ja dieses Modul so wertvoll!
ich habe zwar die Ikea FBs um "im Notfall unabhängig von allem" zu sein, aber durch die Umrüstung mehrerer (eigentlich fast aller ;) ) Räume auf Trådfri sind dadurch die alten FS20 Display Taster https://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=35404 "über" und können jetzt irgendwelche Dummy FS20 absenden, die FHEM in die entsprechenden Trådfri Befehle umsetzt (FS20 CUL muss natürlich vorhandne sein). Damit ist dann (nahezu) alles an Spielereien möglich was einem so an Unsinn in den Kopf kommt ;)

FunkOdyssey

Ich habe Homematic und Z-Wave im Einsatz. Ich war nie so der FS20-Fan.
Das HM-Äquivalent
Homematic Funk-Wandsender mit Display
ist a) ziemlich teuer und b) zu umständlich. Ich möchte nicht erst die Ebenen wechseln, sondern sofort den gewünschten Modus aktivieren. Vermutlich werde ich das mit einem Homematic 6-fach-Taster machen. Wobei der auch keinen Schönheitspreis gewinnt.
Oder alternativ Z-Wave 8-fach-Taster 55er.

Ich hasse es, wenn ich die Deckenleuchten einschalte und ich mich dann erst zum Couch-Tisch bewegen muss, um die Lichtfarbe & Co. zu ändern.
Das Ganze muss den WAF haben. Einschalten - Klick auf gewünschten Farbmodi-Taster - fertig.
Der Rest wird vollautomatisch gesteuert (wie bspw. Änderung der Beleuchtung bei Telefonanruf, Türklingel, Pausen-Taste, Einschaltung der HiFi-Anlage, etc.)

Peter Kappelt

@Fillip

'Schuldige, das ich nicht zeitnah auf die Mail geantwortet habe. Mache ich eigentlich sonst immer innerhalb von 24h, hatte aber gerade andere Sachen auf der Liste.

Das autoUpdateInterval ist eine Angabe in Sekunden. Jede Sekunde zu Updaten ist möglich, aber nicht sinnvoll. Du musst dabei beobachten, wie sich das auf die Systemlast auswirkt.
Sofern du mit der entstehenden Latenz leben kannst, empfehle ich, autoUpdateInterval aus fünf Sekunden oder größer zu setzen. (Wenn dein System aber genug Leistung hat, das jede Sekunde zu aktualisieren, spricht nichts dagegen.)

Zur Homebridge kann ich selbst nichts sagen, da ich keine angebissenen Äpfel ins Haus lasse. Etwas weiter oben im Thread hat das aber schon jemand versucht, vielleicht kann er dir da nochmal weiterhelfen.

@FunkOdyssey

Ich denke, dass es nur eine Frage der Zeit ist, bis jemand anfängt, die Firmware von IKEA zu reverse-engineeren, dekompillieren und selbst zu modifizieren. Ich denke, dass wenn man erstmal die ganze Toolchain stehen hat, eine Funktionserweiterung (z.B. Szenenwechsel auf Doppeldruck) eine einfache Fingerübung ist.
Mal schauen...

dtavb

#162
Hoi Ihr,

inspiriert von Brause und Peter habe ich bei mir folgendes eingerichtet:

"Kleines" HowTo für Autostart Beta-Version

1.) sudoers Datei angepasst: Alias erstellen und User fhem berechtigen
Info: Alias benötigt man nur, wenn man plant den Benutzer fhem noch mehrere Befehle ausführen lassen zu können.

vi /etc/sudoers

# Cmnd alias specification
Cmnd_Alias FHEMEXEC = /opt/fhem/bin/send,/usr/bin/java,/usr/bin/screen

fhem ALL = NOPASSWD: FHEMEXEC

2.) hemmungslos Brauses init.d-Skript kopieren:
Achtung: Brause geht davon aus, dass ein aufgerufenen Bash-Skript hier liegt: /opt/java-Tradfri.sh
Wem das nicht passt, entsprechend unten ändern.

ich habe es folgendermassen erledigt, um etwaige Berechtigungen gleich richtig zu setzen:

cp -p /etc/init.d/fhem /etc/init.d/tradfri

vi /etc/init.d/tradfri


Brauses Skript kopieren und einfügen:

Ergänzung 01.08.2017:
Inhalt des kopierten fhem-files löschen via vi: "10000dd", löscht 10.000 Zeilen
Danach via copy&past Inhalte im "i" für insert-mode einfügen.

#!/bin/sh

### BEGIN INIT INFO
# Provides:             tradfri
# Required-Start:       $local_fs $remote_fs networking
# Required-Stop:        $local_fs $remote_fs networking
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    FHEM - Tradfri-JAVA
# Description: Start / Stop / Status or Restart the FHEM - Tradfri-JAVA
### END INIT INFO

case "$1" in                                                                                                                                                                         
'start')
echo "Starting FHEM - Tradfri-JAVA"
screen -dmS Tradfri /opt/java-Tradfri.sh
RETVAL=$?
;;                                                                                                                                     
'stop')
pkill -USR1 -U fhem java                                                                                                                     
    echo " ... done. FHEM - Tradfri-JAVA Stopped."
    RETVAL=$?
;;
'restart')
pkill -USR1 -U fhem java
    echo " Closed Process, Restarting"
screen -dmS Tradfri /opt/java-Tradfri.sh
echo " ... done. FHEM - Tradfri-JAVA Restarted"
RETVAL=$?
;;
'status')
        cnt=`ps -ef | grep "java -jar" | grep -v grep | wc -l`
        if [ "$cnt" -eq "0" ] ; then
                echo "FHEM - Tradfri-JAVA is not running"
        else
                echo "FHEM - Tradfri-JAVA is running"
        fi
        ;;
*)
echo "Usage: $0 { start | stop | status | restart }"
RETVAL=1
;;
esac
exit $RETVAL


Ich benutze Raspian (Jessie lite), so sehen bei mir die Berechtigungen aus:
-rwxr-xr-x 1 root root   1553 Jul 26 16:11 tradfri

Danach:
update-rc.d tradfri  defaults

kurze Kontrolle für run-level 3:
ls -l /etc/rc3.d/

Ausgabe bei mir:
lrwxrwxrwx 1 root root  17 Jul 26 16:17 S01tradfri -> ../init.d/tradfri

3.) Eigentliches Start-Skript erstellen: /opt/java-Tradfri.sh

Vorbereitung:
#! /bin/bash
su -c "java -jar /DEINPFADzuCOAPvonPETER/kCoAPSocket-latest.jar -s DEINTRADFRICODE-g DEINETRADFRIGWIP >> /DEINLOGPFAD/tradfri_java.log" -s /bin/sh fhem

Der Aufruf von Brause (wollte hemmungslos kopieren  ;D ) hat nicht geklappt bei mir.
Habe es dann auf die obige Zeile von mir erledigt, gleicher Effekt Java-Aufruf als User fhem.

vi /opt/java-Tradfri.sh

Tippen: i

copy&paste: Deine bearbeitete Zeile von oben

Bei mir sieht es dann so ungefähr aus:
#! /bin/bash

su -c "java -jar /opt/Tradfri-FHEM/kCoAPSocket/kCoAPSocket/kCoAPSocket-latest.jar -s ABC -g xxx.xxx.xxx.xxx >> /log/tradfri_java.log" -s /bin/sh fhem



Berechtigungen ändern:
chmod 740 /opt/java-Tradfri.sh
chown fhem:dialout /opt/java-Tradfri.sh


Kontrolle:
-rwxr-----  1 fhem dialout  200 Jul 26 16:34 java-Tradfri.sh

Zum Schluss: Augen zu und durch :)
Reboot tut gut um zu sehen ob auch alles soweit hochstartet, fhem das GW als "opened" ansieht und testweise mal die Devices via webfhem abfragen.

reboot

Im Anschluss:

via:
netstat -tulpn | grep java

sieht man ganz gut ob etwas lauscht:

Bei mir:
tcp        0      0 127.0.0.1:1505          0.0.0.0:*               LISTEN      888/java

TCP/1505 ist das Tradfri-Modul, was man auch im Log sehen kann:
"[TcpServerThread] Binding of socket @ port 1505 successfull."

4.) Brauses Skript
Im Anschluss kann man wunderbar abfragen:
/etc/init.d/tradfri status
Das meldet die CLI dann zurück: "FHEM - Tradfri-JAVA is running"


Offene Frage meinerseits

ps -aux | grep fhem

[Auszug]:
fhem       888  0.0  0.0   1908   376 ?        Ss   17:16   0:00 sh -c java -jar /DUMMY/kCoAPSocket-latest.jar -s CODE -g IP >> /log/tradfri_java.log
fhem       889 11.0  3.7 324704 36664 ?        Sl   17:16   0:04 java -jar /DUMMY/kCoAPSocket-latest.jar -s CODE -g IP

Warum läuft das 2x?

netstat -tulpn ergibt:
tcp        0      0 127.0.0.1:1505          0.0.0.0:*               LISTEN      889/java
udp        0      0 0.0.0.0:60085           0.0.0.0:*                           889/java

Klar, der Screen wäre einer und der java der zweite Befehl. Irritiert bin ich wegen 2x java Aufruf.
Der Prozess mit ID 888 macht netztechnisch nichts, demnach gehe müsste es passen und ich habe wieder etwas gelernt :)


Grüße,
dtavb
fhem:pi3&kvm, z-wave, it-funk, milight, zigbee, wifi, bt & presence, geo-tracking, alexa, esp.
Monitoring: ELK(syslog), grafana (grafik), netdata (ermittlung)
Security: haproxy (access), ossec (überall), snort (access), opnsense (fw)
Geplant: KVM-Cluster

Brause

Das howto hätte ich nicht besser schreiben können,
Ja bei mir liegen die Scripte für fhem alle im /opt bzw /opt/xxxxx.

Du kannst den Status auch mit "service tradfri status" abfragen, bzw auch als service stoppen und restarten.

Ich habe mir auch ein LogDevice angelegt. Somit kann ich mir das Log auch direkt im WebUI anzeigen lassen.

define xx.GW.Tradfri.log FileLog ./log/tradfri.log xx.GW.Tradfri:.*



stratege-0815

Hallo zusammen,
Ich habe eine Frage zur Reichweite. Was sind so konkret eure Erfahrungswerte?
Hier war mal von einem Stockwerk im Altbau die Rede. Ich weiß das zigbee laut Standard 10m-100m
beherrschen soll. Wie ist das konkret, klappen mehrere Stockwerke?
Beste Grüße
Jan