Neues Modul PHTV für Philips Fernseher (inkl. Ambilight)

Begonnen von Loredo, 06 März 2014, 22:09:17

Vorheriges Thema - Nächstes Thema

Christian72D

Ich habe jetzt seit Freitag den  Philips 55PUS7101, bekomme ich den aktiviert in fhem?
Also mir würde es schon reichen den Status vom TV zu sehen.
Wenn ja: wie? Hier liest man ja was mit Version usw.

kurt6908

Hallo,

ich gehe mal davon aus, da musst Du warten, bis das Modul PHTV auf die neuen Philips-TVs angepasst wurde, siehe Beiträge vorher.

Dem Grunde nach sollte es gehen, wir brauchen nur jemanden, der Phyton in ein Perl-Modul umwandeln kann.

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

oxident

Gibt es eigentlich eine Möglichkeit, auch andere RGB-Lampen (außer Philips HUE) für die AmbiHue... Attribute zu verwenden?
Ich verwende hier nämlich auch ein paar WifiLight-basierte Lampen und würde diese liebend gerne auch zur "Ambilight-Verstärkung" nutzen...

oxident

Hat jemand eine Idee, warum meine ChannelList nur aus vier Einträgen (plus einem "Null"-Eintrag) besteht, obwohl ich channelsMax auf 50 gestellt habe?
-,Disney_Channel,Boomerang_HD,CNN_HD_(eng),TELE_5_HD,
(man beachte das letzte Komma)

kurt6908

Hallo,

nachdem ich sehnsüchtig auf die Erweiterung für die neuen Philips-TVs warte und sich noch nichts getan hat, habe ich mich mal selber drangesetzt und versucht Phython in Perl zu übersetzen.

Hier mal ein ersten kleines reines Perl-Script, welches den TV anspricht und die Ausgabe einer PIN am Bildschirm veranlasst (1. von 2 Schritten des Pairing).

#!/usr/bin/perl

use strict;
use warnings;
use JSON;
use Digest::SHA qw(hmac_sha256_base64);
use LWP::UserAgent;
use IO::Socket::SSL;

my $secretkey;
my @chars;
my $len;
my $deviceid;
my $tosign;
my $sign;
my %config;
my %devicespec;
my %data;
my $data_json;
my $uri;
my $req;
my $authTimestamp;
my $authTimeout;
my $lwp = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
my $resp;
my $message;
my $authtimestamp;
my $authtimeout;
my $pin;
my %auth;

# TV-IP, hier IP des TV-Gerätes eintragen
$config{'address'} = "xxx.xxx.xxx.xxx";

$secretkey = "ZmVay1EQVFOaZhwQ4Kv81ypLAZNczV9sG4KkseXWn1NEk6cXmPKO/MCa9sryslvLCFMnNe4Z4CPXzToowvhHvA==";

# 16-stellige Device-ID aufbauen
sub createDeviceId(){
@chars = split("","abcdefghkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789");
$len = 16;
foreach (0..$len-1) {
$deviceid .= $chars[int(rand(@chars))]; 
}
return $deviceid;
}

# Signatur aufbauen
sub createsignature(){
$sign = hmac_sha256_base64($tosign, $secretkey);
while (length($sign) % 4) {
$sign .= '=';
}
return $sign;
}

# JSON aufbauen
sub getDeviceSpecJson(){
$data{'device'} =  {
device_name => 'heliotrope',
device_os => 'Android',
app_name => 'ApplicationName',
type => 'native',
app_id => $config{'application_id'},
id => $config{'device_id'},
};
return $data{'device'};
}

$config{'application_id'} = "app.id";
createDeviceId();
$config{'device_id'} = $deviceid;
$data{'scope'} = ["read", "write", "control"];
getDeviceSpecJson();
$data_json = encode_json \%data;
$uri = "https://".$config{'address'}.":1926/6/pair/request";

$req = HTTP::Request->new( 'POST', $uri );
$req->header('Content-Type'=>'application/json');
$req->content( $data_json );
$lwp->request( $req );

$resp = $lwp->request($req)->as_string;

if ($resp->is_success) {
    $message = $resp->decoded_content;
    print "Received reply: $message \n";
}
else {
    print "HTTP POST error code: ", $resp->code, "\n";
    print "HTTP POST error message: ", $resp->message, "\n";
}
print Dumper $resp;
print "message: ", $message, "\n";

print "Enter onscreen passcode: ";
$pin = <STDIN>;


Also die PIN sollte schon mal am TV ersichtlich sein, leider bekomme ich im Response immer den Fehler

{"error_id":"CONCURRENT_PAIRING","error_text":"Another pairing is in process"}

so dass ich die Rückantwort, die einen Zeitstempel beinhalten sollte, nicht weiter verarbeiten kann. Den Zeitstempel brauche ich aber für den 2. Schritt des Pairing. Nach dem erfolgten Pairing hat man einen Benutzer/Passwort und kann den TV steuern.

Vielleicht kann man dieses schon mal ins Modul einbauen, bzw. vielleicht findet jemand den Fehler, warum ich keinen Zeitstempel vom TV bekomme....

Gruß

Kurt


3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

CoolTux

Zitat von: kurt6908 am 07 Februar 2017, 21:16:11
Hallo,

nachdem ich sehnsüchtig auf die Erweiterung für die neuen Philips-TVs warte und sich noch nichts getan hat, habe ich mich mal selber drangesetzt und versucht Phython in Perl zu übersetzen.

Hier mal ein ersten kleines reines Perl-Script, welches den TV anspricht und die Ausgabe einer PIN am Bildschirm veranlasst (1. von 2 Schritten des Pairing).

#!/usr/bin/perl

use strict;
use warnings;
use JSON;
use Digest::SHA qw(hmac_sha256_base64);
use LWP::UserAgent;
use IO::Socket::SSL;

my $secretkey;
my @chars;
my $len;
my $deviceid;
my $tosign;
my $sign;
my %config;
my %devicespec;
my %data;
my $data_json;
my $uri;
my $req;
my $authTimestamp;
my $authTimeout;
my $lwp = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
my $resp;
my $message;
my $authtimestamp;
my $authtimeout;
my $pin;
my %auth;

# TV-IP, hier IP des TV-Gerätes eintragen
$config{'address'} = "xxx.xxx.xxx.xxx";

$secretkey = "ZmVay1EQVFOaZhwQ4Kv81ypLAZNczV9sG4KkseXWn1NEk6cXmPKO/MCa9sryslvLCFMnNe4Z4CPXzToowvhHvA==";

# 16-stellige Device-ID aufbauen
sub createDeviceId(){
@chars = split("","abcdefghkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789");
$len = 16;
foreach (0..$len-1) {
$deviceid .= $chars[int(rand(@chars))]; 
}
return $deviceid;
}

# Signatur aufbauen
sub createsignature(){
$sign = hmac_sha256_base64($tosign, $secretkey);
while (length($sign) % 4) {
$sign .= '=';
}
return $sign;
}

# JSON aufbauen
sub getDeviceSpecJson(){
$data{'device'} =  {
device_name => 'heliotrope',
device_os => 'Android',
app_name => 'ApplicationName',
type => 'native',
app_id => $config{'application_id'},
id => $config{'device_id'},
};
return $data{'device'};
}

$config{'application_id'} = "app.id";
createDeviceId();
$config{'device_id'} = $deviceid;
$data{'scope'} = ["read", "write", "control"];
getDeviceSpecJson();
$data_json = encode_json \%data;
$uri = "https://".$config{'address'}.":1926/6/pair/request";

$req = HTTP::Request->new( 'POST', $uri );
$req->header('Content-Type'=>'application/json');
$req->content( $data_json );
$lwp->request( $req );

$resp = $lwp->request($req)->as_string;

if ($resp->is_success) {
    $message = $resp->decoded_content;
    print "Received reply: $message \n";
}
else {
    print "HTTP POST error code: ", $resp->code, "\n";
    print "HTTP POST error message: ", $resp->message, "\n";
}
print Dumper $resp;
print "message: ", $message, "\n";

print "Enter onscreen passcode: ";
$pin = <STDIN>;


Also die PIN sollte schon mal am TV ersichtlich sein, leider bekomme ich im Response immer den Fehler

{"error_id":"CONCURRENT_PAIRING","error_text":"Another pairing is in process"}

so dass ich die Rückantwort, die einen Zeitstempel beinhalten sollte, nicht weiter verarbeiten kann. Den Zeitstempel brauche ich aber für den 2. Schritt des Pairing. Nach dem erfolgten Pairing hat man einen Benutzer/Passwort und kann den TV steuern.

Vielleicht kann man dieses schon mal ins Modul einbauen, bzw. vielleicht findet jemand den Fehler, warum ich keinen Zeitstempel vom TV bekomme....

Gruß

Kurt

Es steht doch im Response. Der Fernseher ist schon aktuell gepaired. Eventuell mit ner App oder mit FHEM. Auf jeden Fall kann man wohl nur ein pairing machen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

kurt6908

Hallo,

danke für die Antwort.

Im Resonse steht "Another pairing is in process", also "... ist in Bearbeitung" und nicht "....ist schon aktuell gepaired".

Eine Pairung kann auch noch nicht stattgefunden haben, da, wie auch im weiter vorne genannten Phython-Script, erst ein "pair/grant" aufgerufen wird. Hier wird dann eine Signatur übergeben, die mit dem timestamp aus dem 1. Schritt in oberen Perl-Script erzeugt wird. Erst dann wäre der Client mit dem TV-Gerät wirklich gepairt.

Ich vermute momentan eher, dass im Rahmen meiner Tests, wo ich das Script ja mehrfach aufgerufen habe und jeweils eine PIN auf dem TV-Gerät erzeugt habe, noch was hängt. Da ich nach der PIN immer abgebrochen habe und nicht bis zum "pair/grant" gekommen bin, geht das TV-Gerät davon aus, dass der erste erfolgreiche Versuch (also PIN am TV) immer noch  "... ist in Bearbeitung" ist.

Ich kann das Script auch nicht anders testen als step-by-step, da ich perl nur rudimentär beherrsche (siehe Syntax meines Scriptes) und Phython, das ja als Grundlage dient, gar nicht.

Übrigens kann man zumindest an meinem aktuellen Philips-Gerät mehrere Apps anbinden, zumindest habe ich erfolgreich ein iPad und ein Android mit den jeweiligen Apps verbunden, aber eben in einem Durchlauf.

Ich müsste also jetzt herausfinden, wie ich dem Fernseher beibringe, dass gar kein Pairing mehr läuft oder jemand müsste das o.g. Perl-Script erstmalig auf seinen Philips-TV loslassen und schauen, dass auf dem TV eine PIN steht und das Script eine Rückmeldung liefert in der ein "timestamp", ein "auth_key" und ein "timeout" enthalten ist.

Mit PIN, "timestamp", "auth_key" und "timeout" gehts dann weiter zum "pair/grant" ....

ODER: Ich kapier das Ganze nicht und das Phython-Script https://github.com/suborb/philips_android_tv macht was ganz anderes  :-\

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

Cruiser79

Zitat von: kurt6908 am 08 Februar 2017, 10:56:02
Hallo,

danke für die Antwort.

Im Resonse steht "Another pairing is in process", also "... ist in Bearbeitung" und nicht "....ist schon aktuell gepaired".

Eine Pairung kann auch noch nicht stattgefunden haben, da, wie auch im weiter vorne genannten Phython-Script, erst ein "pair/grant" aufgerufen wird. Hier wird dann eine Signatur übergeben, die mit dem timestamp aus dem 1. Schritt in oberen Perl-Script erzeugt wird. Erst dann wäre der Client mit dem TV-Gerät wirklich gepairt.

Ich vermute momentan eher, dass im Rahmen meiner Tests, wo ich das Script ja mehrfach aufgerufen habe und jeweils eine PIN auf dem TV-Gerät erzeugt habe, noch was hängt. Da ich nach der PIN immer abgebrochen habe und nicht bis zum "pair/grant" gekommen bin, geht das TV-Gerät davon aus, dass der erste erfolgreiche Versuch (also PIN am TV) immer noch  "... ist in Bearbeitung" ist.

Ich kann das Script auch nicht anders testen als step-by-step, da ich perl nur rudimentär beherrsche (siehe Syntax meines Scriptes) und Phython, das ja als Grundlage dient, gar nicht.

Übrigens kann man zumindest an meinem aktuellen Philips-Gerät mehrere Apps anbinden, zumindest habe ich erfolgreich ein iPad und ein Android mit den jeweiligen Apps verbunden, aber eben in einem Durchlauf.

Ich müsste also jetzt herausfinden, wie ich dem Fernseher beibringe, dass gar kein Pairing mehr läuft oder jemand müsste das o.g. Perl-Script erstmalig auf seinen Philips-TV loslassen und schauen, dass auf dem TV eine PIN steht und das Script eine Rückmeldung liefert in der ein "timestamp", ein "auth_key" und ein "timeout" enthalten ist.

Mit PIN, "timestamp", "auth_key" und "timeout" gehts dann weiter zum "pair/grant" ....

ODER: Ich kapier das Ganze nicht und das Phython-Script https://github.com/suborb/philips_android_tv macht was ganz anderes  :-\

Gruß

Kurt

Wenn wirklich noch alte Pair-Prozesse hängen, müsste doch vielleicht ein Neustart des Fernsehers helfen können? Bei vielen ist das ja nicht mehr mit der Fernbedienung machbar, da diese ja nur in den Standby gehen, sondern nur noch mit "Stecker-ziehen" 5 Minuten warten und dann wieder einstecken. Das schonmal probiert?
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

kurt6908

Hallo,

der TV war heute tagsüber komplett vom Strom getrennt, d.h. ausgeschalten.

Ich habe den TV eingeschalten und das obige Script ausgeführt => gleicher Fehler.

Danach habe ich jedoch erfolgreich ein weiteres iOS mit der normalen Philips TV App pairen können, d.h. hier war kein weiteres Pairing vorhanden.

Ein erneuter Start des Scriptes brachte dann aber wieder die Fehlermeldung.

Also TV war aus, normale Apps kann ich pairen, nur Script bringt die Fehlermeldung....ich glaube es liegt am Script.

Nun wollte ich überpürfen, ob das originale Phyton-Script funktioniert oder die gleiche Fehlermeldung bringt. Leider bringe ich es aus Unkenntnis nicht zu laufen, da bei den Zeilen

# import requests
# from Crypto.Hash import SHA, HMAC
# from requests.auth import HTTPDigestAuth

ein Fehler angezeigt wird.

Fazit: Meins funktioniert nicht und das originale geht nicht .... :-\

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

CoolTux

Zitat von: kurt6908 am 08 Februar 2017, 21:19:43
Hallo,

der TV war heute tagsüber komplett vom Strom getrennt, d.h. ausgeschalten.

Ich habe den TV eingeschalten und das obige Script ausgeführt => gleicher Fehler.

Danach habe ich jedoch erfolgreich ein weiteres iOS mit der normalen Philips TV App pairen können, d.h. hier war kein weiteres Pairing vorhanden.

Ein erneuter Start des Scriptes brachte dann aber wieder die Fehlermeldung.

Also TV war aus, normale Apps kann ich pairen, nur Script bringt die Fehlermeldung....ich glaube es liegt am Script.

Nun wollte ich überpürfen, ob das originale Phyton-Script funktioniert oder die gleiche Fehlermeldung bringt. Leider bringe ich es aus Unkenntnis nicht zu laufen, da bei den Zeilen

# import requests
# from Crypto.Hash import SHA, HMAC
# from requests.auth import HTTPDigestAuth

ein Fehler angezeigt wird.

Fazit: Meins funktioniert nicht und das originale geht nicht .... :-\

Gruß

Kurt

Hier scheinen Dir zusätzliche Phyton Packete zu fehlen. Suche doch mal nach Phyton SHA und HTTPDigestAuth
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Loredo

Wenn ihr aus dem Pairing-Prozess eine Device-ID und einen Auth-Key erhalten habt, könnt ihr den als Attribute device_id und auth_key in das PHTV Device eintragen. Ich habe gerade entsprechende Attribute hinzugefügt.

Um den Pairing-Prozess ins Modul einzubauen habe ich leider keine Zeit.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Paul Guijt

Hallo Julian,

In mein Log sah ich:

2017.02.11 18:33:17 1: PERL WARNING: Use of uninitialized value $cmd in hash element at ./FHEM/70_PHTV.pm line 1892.
2017.02.11 18:33:17 1: PERL WARNING: Use of uninitialized value $value in string eq at fhem.pl line 4171.


Ich glaube, der TV würde angestellt.

Hat das für dich eine Bedeutung?

Freundliche Grüße,
Paul
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände

Loredo

Hallo Paul,


ich denke, ich konnte das beheben. Eine aktualisierte Version steht ab morgen dafür bereit.


Gruß
Julian

Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

akr1983

Hallo,

ich konnte jetzt meinen 55PUS6551 (Modelljahr 2016) erfolgreich mit dem Python Script "pairen" und mit dem Benutzernamen(device_id) und dem Kennwort (auth_key) aus dem Python Script in FHEM zumindest den Fernseher hinzufügen. Hier meine Meldung aus dem FHEM:
2017.02.12 13:21:53 3: PHTV set PhilipsTV statusRequest
2017.02.12 13:21:53 5: PHTV PhilipsTV: called function PHTV_GetStatus()
2017.02.12 13:21:53 5: PHTV PhilipsTV: called function PHTV_SendCommand()
2017.02.12 13:21:53 4: PHTV PhilipsTV: REQ audio/volume
2017.02.12 13:21:53 5: PHTV PhilipsTV: GET https://pMOQPLK0qgDApuVJ:8fa3b59b111e41f541037c6cb06357c1caff3fb8f7881bb427c06c15d9ef4659@192.168.2.7:1926/6/audio/volume
2017.02.12 13:21:53 5: PHTV PhilipsTV: called function PHTV_ReceiveCommand()
2017.02.12 13:21:53 4: PHTV PhilipsTV: RCV TIMEOUT audio/volume
2017.02.12 13:21:54 5: PHTV PhilipsTV: called function PHTV_Set()
2017.02.12 13:21:54 5: PHTV PhilipsTV: called function PHTV_Set()
2017.02.12 13:21:54 5: PHTV PhilipsTV: called function PHTV_Get()
2017.02.12 13:21:54 5: PHTV PhilipsTV: called function PHTV_Set()
2017.02.12 13:22:38 5: PHTV PhilipsTV: called function PHTV_GetStatus()
2017.02.12 13:22:38 5: PHTV PhilipsTV: called function PHTV_SendCommand()
2017.02.12 13:22:38 4: PHTV PhilipsTV: REQ audio/volume
2017.02.12 13:22:38 5: PHTV PhilipsTV: GET https://pMOQPLK0qgDApuVJ:8fa3b59b111e41f541037c6cb06357c1caff3fb8f7881bb427c06c15d9ef4659@192.168.2.7:1926/6/audio/volume
2017.02.12 13:22:38 5: PHTV PhilipsTV: called function PHTV_ReceiveCommand()
2017.02.12 13:22:38 4: PHTV PhilipsTV: RCV TIMEOUT audio/volume
2017.02.12 13:23:23 5: PHTV PhilipsTV: called function PHTV_GetStatus()
2017.02.12 13:23:23 5: PHTV PhilipsTV: called function PHTV_SendCommand()


Nur es funktionieren halt keine Commands und der Fernseher wird auch egal welchen Status er in wirklichkeit hat, als "absent" angezeigt. Vermutlich weil im Protokoll halt zu viel Unterschiedlich ist...

Also wenn jemand Dinge hat, die ich ausprobieren soll, immer her damit ;-)

Mit dem Python Script kann ich erfolgreich die Lautstärke auslesen als auch den Fernseher in den Standby versetzen...

@Kurt:
Übrigens gibt es seit Ende Januar eine neuere Firmware für den Fernseher, eventuell mal die ausprobieren. Die ist bei mir auch drauf und seit dem stürzt der Fernseher nicht mehr ab ;-)

@Loredo:
Danke für die Anpassung. Eventuell frickeln wir uns den Rest auch so halbwegs zusammen ;-)

kurt6908

#284
Hallo,

also neue Erkenntnisse.

Das original Python-Script habe ich erfolgreich zum Laufen gebracht, das Pairing funktioniert ohne Fehlermeldung, man bekommt User und Passwort zurück und man kann mit dem TV kommunizieren.

Ein 'get_volume' bringt z.B. folgendes Ergebnis: {"muted":false,"current":12,"min":0,"max":60}

Also liegt die Fehlermeldung an der oben aufgeführten Perl-Portierung von mir, hier ist noch der Wurm drinnen ....

Viele Grüße

Kurt

P.S.: Im Modul PHTV ist die Funktionalität des Pairing nicht enthalten, darum kann man TVs hinzufügen, aber das Pairung und das Steuern geht noch nicht, da das Modul den Benutzernamen (device_id) und das Kennwort (auth_key) noch verschlüsseln muss und an die "alten" Steueranfragen anhängen muss. Daher versucht ich ja das Python-Script in Perl umzusetzen (siehe Beiträge voraus), denn das Modul muss ja auch das Pairing komplett abdecken können, aber ich frimel halt so rum, ...  :-\ 
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger