IO-Homecontrol Devices über Tahoma Box einbinden

Begonnen von mike3436, 17 Oktober 2014, 22:07:36

Vorheriges Thema - Nächstes Thema

eckonator

Zitat von: mrfloppy am 20 Juni 2023, 14:18:10
Zitat von: mike3436 am 19 Juni 2023, 14:12:01Zum Developer Mode:
Ich würde die Änderungen von IT-Fuzzi gern übernehmen, habe aber leider nichts von ihm gehört. Vielleicht muss ich ihn mal direkt anschreiben.

DAs wäre super wenn du das machen würdest, vielleicht wird das ganze ja noch was.

LG


Hallo zusammen, ich habe auch Interesse an der Version mit der Local API. Nachdem ich mich hier eingelesen habe, befürchte ich allerdings, dass die Version von IT-Fuzzi hier nicht mehr ankommen wird.

Meine gebrauchte Tahoma Box Premium habe ich eben erst in ebay erstanden und befindet sich noch auf dem Weg zu mir.

@mike3436 schau dir mal folgende Code-Anpassungen an - so sollte man die Local API in der Theorie angesprochen bekommen. Kannst du daraus was zusammen mergen?


sub tahoma_login($) {
  my ($hash) = @_;
  my $name = $hash->{NAME};
  Log3 $name, 3, "$name: tahoma_login";

  HttpUtils_Close($hash);
  $hash->{logged_in} = undef;
  $hash->{startup_run} = undef;
  $hash->{startup_done} = undef;

  # URL und Pod für lokale API
  my $local_url = "https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/";
  my $pod = "YOUR_GATEWAY_PIN"; # Ersetzen Sie dies durch Ihre Gateway-PIN

  # Anmeldeinformationen für lokale API
  my $username = "YOUR_EMAIL_ADDRESS";
  my $password = "YOUR_PASSWORD";

  # Login-Anfrage an lokale API senden
  my $login_url = "${local_url}login";
  my $login_body = "userId=$username&userPassword=$password";
  my %login_headers = (
    'Content-Type' => 'application/x-www-form-urlencoded'
  );

  HttpUtils_NonblockingGet({
    timeout => 10,
    noshutdown => 1,
    hash => $hash,
    url => $login_url,
    data => $login_body,
    headers => \%login_headers,
    callback => \&tahoma_handle_login_response,
    nonblocking => 1,
  });
}

sub tahoma_handle_login_response($) {
  my ($hash, $response) = @_;
  my $name = $hash->{NAME};

  if ($response->{httpCode} == 200) {
    my $session_id = $response->{HTTPCookies}->{'JSESSIONID'}; # Sitzungs-ID aus der Antwort erhalten
    Log3 $name, 2, "$name: Login erfolgreich, Session-ID: $session_id";
   
    # Nach erfolgreicher Anmeldung können weitere Aktionen ausgeführt werden
    # Z.B. Token generieren, um die lokale API zu autorisieren
    tahoma_generate_token($hash, $session_id);
  } else {
    Log3 $name, 2, "$name: Login fehlgeschlagen, HTTP-Code: $response->{httpCode}";
    # Hier können Sie entsprechend auf einen fehlgeschlagenen Login reagieren
  }
}

sub tahoma_generate_token($) {
  my ($hash, $session_id) = @_;
  my $name = $hash->{NAME};

  # Token-Generierungs-Anfrage an lokale API senden
  my $token_url = "${local_url}config/$pod/local/tokens/generate";
  my %token_headers = (
    'Content-Type' => 'application/json',
    'Cookie' => "JSESSIONID=$session_id"
  );

  HttpUtils_NonblockingGet({
    timeout => 10,
    noshutdown => 1,
    hash => $hash,
    url => $token_url,
    headers => \%token_headers,
    callback => \&tahoma_handle_token_response,
    nonblocking => 1,
  });
}

sub tahoma_handle_token_response($) {
  my ($hash, $response) = @_;
  my $name = $hash->{NAME};

  if ($response->{httpCode} == 200) {
    my $token = $response->{data}->{token}; # Token aus der Antwort erhalten
    Log3 $name, 2, "$name: Token erfolgreich generiert: $token";
    # Hier können Sie den generierten Token speichern und für zukünftige lokale API-Anfragen verwenden
  } else {
    Log3 $name, 2, "$name: Fehler beim Generieren des Tokens, HTTP-Code: $response->{httpCode}";
    # Hier können Sie entsprechend auf einen Fehler beim Generieren des Tokens reagieren
  }
}


FHEM 6.2 | PiHole | MagicMirror2 | Fritz!Box 7590 (Basis) + 3x Fritz!Box 4040 (IP-Client) | Amazon DOT | HomeBridge | Max!Cube (geflasht) + Max Komponenten | Harmony Hub | YeeLight Bulbs | G-Homa und Fritz!DECT Steckdosen

mike3436

@eckonator

ich kann gerne funktionierenden, getesteten Code übernehmen, aber wie schon geschrieben habe ich eine Tahoma der 1. Generation und ich kann das Feature des lokalen Zugriffs im Tahoma Control Center für meine Box nicht aktivieren, und somit auch nichts selber testen.
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

sig10680

Zitat von: eckonator am 05 April 2024, 23:04:24
Zitat von: mrfloppy am 20 Juni 2023, 14:18:10
Zitat von: mike3436 am 19 Juni 2023, 14:12:01Zum Developer Mode:
Ich würde die Änderungen von IT-Fuzzi gern übernehmen, habe aber leider nichts von ihm gehört. Vielleicht muss ich ihn mal direkt anschreiben.

DAs wäre super wenn du das machen würdest, vielleicht wird das ganze ja noch was.

LG


Hallo zusammen, ich habe auch Interesse an der Version mit der Local API. Nachdem ich mich hier eingelesen habe, befürchte ich allerdings, dass die Version von IT-Fuzzi hier nicht mehr ankommen wird.

Meine gebrauchte Tahoma Box Premium habe ich eben erst in ebay erstanden und befindet sich noch auf dem Weg zu mir.

@mike3436 schau dir mal folgende Code-Anpassungen an - so sollte man die Local API in der Theorie angesprochen bekommen. Kannst du daraus was zusammen mergen?


sub tahoma_login($) {
  my ($hash) = @_;
  my $name = $hash->{NAME};
  Log3 $name, 3, "$name: tahoma_login";

  HttpUtils_Close($hash);
  $hash->{logged_in} = undef;
  $hash->{startup_run} = undef;
  $hash->{startup_done} = undef;

  # URL und Pod für lokale API
  my $local_url = "https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/";
  my $pod = "YOUR_GATEWAY_PIN"; # Ersetzen Sie dies durch Ihre Gateway-PIN

  # Anmeldeinformationen für lokale API
  my $username = "YOUR_EMAIL_ADDRESS";
  my $password = "YOUR_PASSWORD";

  # Login-Anfrage an lokale API senden
  my $login_url = "${local_url}login";
  my $login_body = "userId=$username&userPassword=$password";
  my %login_headers = (
    'Content-Type' => 'application/x-www-form-urlencoded'
  );

  HttpUtils_NonblockingGet({
    timeout => 10,
    noshutdown => 1,
    hash => $hash,
    url => $login_url,
    data => $login_body,
    headers => \%login_headers,
    callback => \&tahoma_handle_login_response,
    nonblocking => 1,
  });
}

sub tahoma_handle_login_response($) {
  my ($hash, $response) = @_;
  my $name = $hash->{NAME};

  if ($response->{httpCode} == 200) {
    my $session_id = $response->{HTTPCookies}->{'JSESSIONID'}; # Sitzungs-ID aus der Antwort erhalten
    Log3 $name, 2, "$name: Login erfolgreich, Session-ID: $session_id";
   
    # Nach erfolgreicher Anmeldung können weitere Aktionen ausgeführt werden
    # Z.B. Token generieren, um die lokale API zu autorisieren
    tahoma_generate_token($hash, $session_id);
  } else {
    Log3 $name, 2, "$name: Login fehlgeschlagen, HTTP-Code: $response->{httpCode}";
    # Hier können Sie entsprechend auf einen fehlgeschlagenen Login reagieren
  }
}

sub tahoma_generate_token($) {
  my ($hash, $session_id) = @_;
  my $name = $hash->{NAME};

  # Token-Generierungs-Anfrage an lokale API senden
  my $token_url = "${local_url}config/$pod/local/tokens/generate";
  my %token_headers = (
    'Content-Type' => 'application/json',
    'Cookie' => "JSESSIONID=$session_id"
  );

  HttpUtils_NonblockingGet({
    timeout => 10,
    noshutdown => 1,
    hash => $hash,
    url => $token_url,
    headers => \%token_headers,
    callback => \&tahoma_handle_token_response,
    nonblocking => 1,
  });
}

sub tahoma_handle_token_response($) {
  my ($hash, $response) = @_;
  my $name = $hash->{NAME};

  if ($response->{httpCode} == 200) {
    my $token = $response->{data}->{token}; # Token aus der Antwort erhalten
    Log3 $name, 2, "$name: Token erfolgreich generiert: $token";
    # Hier können Sie den generierten Token speichern und für zukünftige lokale API-Anfragen verwenden
  } else {
    Log3 $name, 2, "$name: Fehler beim Generieren des Tokens, HTTP-Code: $response->{httpCode}";
    # Hier können Sie entsprechend auf einen Fehler beim Generieren des Tokens reagieren
  }
}




Hallo @eckonator,
ich biete mich auch als tester an. Ich habe meine Box schon für die locale nutzung freigeschaltet.

mfg Sig10680

sig10680

Zitat von: sig10680 am 22 April 2024, 14:44:42
Zitat von: eckonator am 05 April 2024, 23:04:24
Zitat von: mrfloppy am 20 Juni 2023, 14:18:10
Zitat von: mike3436 am 19 Juni 2023, 14:12:01Zum Developer Mode:
Ich würde die Änderungen von IT-Fuzzi gern übernehmen, habe aber leider nichts von ihm gehört. Vielleicht muss ich ihn mal direkt anschreiben.

DAs wäre super wenn du das machen würdest, vielleicht wird das ganze ja noch was.

LG


Hallo zusammen, ich habe auch Interesse an der Version mit der Local API. Nachdem ich mich hier eingelesen habe, befürchte ich allerdings, dass die Version von IT-Fuzzi hier nicht mehr ankommen wird.

Meine gebrauchte Tahoma Box Premium habe ich eben erst in ebay erstanden und befindet sich noch auf dem Weg zu mir.

@mike3436 schau dir mal folgende Code-Anpassungen an - so sollte man die Local API in der Theorie angesprochen bekommen. Kannst du daraus was zusammen mergen?


sub tahoma_login($) {
  my ($hash) = @_;
  my $name = $hash->{NAME};
  Log3 $name, 3, "$name: tahoma_login";

  HttpUtils_Close($hash);
  $hash->{logged_in} = undef;
  $hash->{startup_run} = undef;
  $hash->{startup_done} = undef;

  # URL und Pod für lokale API
  my $local_url = "https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/";
  my $pod = "YOUR_GATEWAY_PIN"; # Ersetzen Sie dies durch Ihre Gateway-PIN

  # Anmeldeinformationen für lokale API
  my $username = "YOUR_EMAIL_ADDRESS";
  my $password = "YOUR_PASSWORD";

  # Login-Anfrage an lokale API senden
  my $login_url = "${local_url}login";
  my $login_body = "userId=$username&userPassword=$password";
  my %login_headers = (
    'Content-Type' => 'application/x-www-form-urlencoded'
  );

  HttpUtils_NonblockingGet({
    timeout => 10,
    noshutdown => 1,
    hash => $hash,
    url => $login_url,
    data => $login_body,
    headers => \%login_headers,
    callback => \&tahoma_handle_login_response,
    nonblocking => 1,
  });
}

sub tahoma_handle_login_response($) {
  my ($hash, $response) = @_;
  my $name = $hash->{NAME};

  if ($response->{httpCode} == 200) {
    my $session_id = $response->{HTTPCookies}->{'JSESSIONID'}; # Sitzungs-ID aus der Antwort erhalten
    Log3 $name, 2, "$name: Login erfolgreich, Session-ID: $session_id";
   
    # Nach erfolgreicher Anmeldung können weitere Aktionen ausgeführt werden
    # Z.B. Token generieren, um die lokale API zu autorisieren
    tahoma_generate_token($hash, $session_id);
  } else {
    Log3 $name, 2, "$name: Login fehlgeschlagen, HTTP-Code: $response->{httpCode}";
    # Hier können Sie entsprechend auf einen fehlgeschlagenen Login reagieren
  }
}

sub tahoma_generate_token($) {
  my ($hash, $session_id) = @_;
  my $name = $hash->{NAME};

  # Token-Generierungs-Anfrage an lokale API senden
  my $token_url = "${local_url}config/$pod/local/tokens/generate";
  my %token_headers = (
    'Content-Type' => 'application/json',
    'Cookie' => "JSESSIONID=$session_id"
  );

  HttpUtils_NonblockingGet({
    timeout => 10,
    noshutdown => 1,
    hash => $hash,
    url => $token_url,
    headers => \%token_headers,
    callback => \&tahoma_handle_token_response,
    nonblocking => 1,
  });
}

sub tahoma_handle_token_response($) {
  my ($hash, $response) = @_;
  my $name = $hash->{NAME};

  if ($response->{httpCode} == 200) {
    my $token = $response->{data}->{token}; # Token aus der Antwort erhalten
    Log3 $name, 2, "$name: Token erfolgreich generiert: $token";
    # Hier können Sie den generierten Token speichern und für zukünftige lokale API-Anfragen verwenden
  } else {
    Log3 $name, 2, "$name: Fehler beim Generieren des Tokens, HTTP-Code: $response->{httpCode}";
    # Hier können Sie entsprechend auf einen Fehler beim Generieren des Tokens reagieren
  }
}




Hallo @eckonator,
ich biete mich auch als tester an. Ich habe meine Box schon für die locale nutzung freigeschaltet.

mfg Sig10680

Hallo in die Runde,

ich habe meine Box für die local Api freigeschaltet und kann die Geräte über Curl befehle steuern. Ausserdem habe ich versucht es mit Fhem und diesen Modul hinzubekommen bin aber gescheitert. Mal sehen vielleicht hat ja einer eine Idee wie man es in das vorhanden Modul einbauen könnte.

mfg Sig10680

sig10680

Hallo in die Runde,

Wenn ich die lokale API Freigeschaltet und den Token ausgelesen habe, würde es möglich sein über das Attribut URL die interne api anzusprechen?

Mfg sig10680

sig10680

Hallo,

ich habe die Local Api freigeschaltet und kann mit befehlen die Jalousie steuern. Könnte man nicht einfach in den Modul oder als Attr. die erzeugten Cookies / GatewayID und die URL eintragen und es sollte mit die Local API Steuerung funktionieren?! Ohne es über die Cloud zu nutzen!

Ich habe seit kurzen wieder extreme Probleme und viele Fehler im Log! tahoma_dispatch error: Too many asynchronous jobs, try again later (job was Full refresh all states) aller 2 Minuten!

mfg Sig10680

Helmut-NSU

Hallo,

ich benutze die TaHoma switch und habe mehrere Rolladen eingebunden. Die Steuerung der Rolladen über die App funktioniert.
Auch in FHEM kann ich (fast) alle Rolladen ansteuern und von allen Rolladen die Daten lesen.

Bei einem Rolladen ist jedoch das Ansteuern nicht möglich. Dies funktioniert nur wenn ich den Raum ansteuere und alle Rolladen fahre.

Ich habe schon mal den Rolladen gelöscht und sich neu anlegen lassen. Das hatte das gleiche Ergebniss :-(

Hat jemand eine Idee wie ich auch diesen Rolladen ansteuern kann?

MfG Helmut

mike3436

Hallo Helmut,
ist der Rollladenmotor vom gleichen Typ wie die anderen (IO) und wird in der Liste der Devices aufgeführt?
Kannst du den Motor über die Tahoma App einzeln steuern?
Bei einem RTS könnte ich mir vorstellen, dass nur open und close bzw. 0 und 100% geht - bin mir aber nicht sicher, da ich nur IO habe.
Grüße, Rolf
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

Mariobozze

Hallo,
Kann mir jemand verraten, wie es möglich ist eine Tahoma Box Version 2025.3.2-7 in FHEM einzubinden?
Also ich möchte das ganze für Loxone in Loxberry nutzen. Habe das Plugin installiert, jedoch ist es mir nicht möglich die Tahoma Box zu verbinden.
Vielen Dank

mike3436

Hallo Mariobozze,
die Informationen sind zu spärlich um deim Problem zu verstehen und ggf. zu lösen.
  • die Tahoma Box ist am Internet funktioniert mit der App
  • FHEM hat ebenfalls einen Internetzugang
  • in FHEM logfile steht "tahoma1 ...Bad credentials" -> idR. Bunutzername und/oder passwort falsch
  • wenn aber die ganzen Devices schon automatisch angelegt worden sind, hat der login mindestens einmal funktioniert
  • -> FHEM logfile posten
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

sig10680

Hallo,

nach Rücksprache mit dem Modulentwickler (mike3436) habe ich eine angepasste Version für die Locale/Cloud Nutzung erstellt! Vielleicht kann es jemand gebrauchen!

Um das angepasste Modul zu nutzen muss der Developer Mode in der Somfy Bridge App Freigeschaltet sein!
Anleitungen gibt es im Netz!

1. die neue Verion des Moduls in FHEM überschreiben /opt/fhem/FHEM/26_tahoma.pm  (vorher Backup der alten Version)
2. attr global exclude_from_update 26_tahoma.pm (damit wird die neue Version des Moduls bei FHEM Update ausgeschlossen, sonst wird immer wieder die alte geladen!)
3. reload 26_tahoma.pm oder shutdown restart (somit wird das Modul neu geladen)
4. es gibt mehrere neue attribute "mode" (Cloud- oder lokaler Modus)
   "localPIN" (PIN für lokale Kopplung)
   "localPort" (Port des lokalen Gateways def. 8443)
   "localToken" (Bearer-Token für lokalen Zugriff)
   "localSSLVerify:0,1" (SSL-Zertifikatsprüfung im lokalen Modus)

Mit freundlichen Grüßen
Sig10680

Luposoft

Hi,
danke für die Arbeit.
im mode cloud funktioniert alles wie eh und je
mode local passiert nichts

Ich habe ein python-Sript, da funktioniert die lokale Steuerung. Daher denke ich, dass meine Einstellungen localPIN, localToken passen.
localSSLverify habe ich 0 und 1 probiert. Muss aber auf 0, oder?

Muss ich nach mode local noch etwas resetten etc. bevor es geht?
Raspi B+
CUL nano 433MHz
CUL nano 868MHz
ELCO Thision S Plus 19
Arduino Due

Luposoft

Noch eine Frage hätte ich in die Runde.
Ich habe RTS-Jalousien. Die Kommandos tiltNegative und -Positive benötigen 2 Parameter. Hat jemand rausgefunden, was die genau machen? Der erste ist für die Bewegung. Der zweite muss nur da sein. Mir fällt zumindest kein Unterschied auf, wenn ich diesen Wert ändere.
Raspi B+
CUL nano 433MHz
CUL nano 868MHz
ELCO Thision S Plus 19
Arduino Due

sig10680

Zitat von: Luposoft am 07 August 2026, 17:23:33Hi,
danke für die Arbeit.
im mode cloud funktioniert alles wie eh und je
mode local passiert nichts

Ich habe ein python-Sript, da funktioniert die lokale Steuerung. Daher denke ich, dass meine Einstellungen localPIN, localToken passen.
localSSLverify habe ich 0 und 1 probiert. Muss aber auf 0, oder?

Muss ich nach mode local noch etwas resetten etc. bevor es geht?

Hallo,

was kommt den für eine Fehlermeldung im Log? Was du machen kannst ist einmal komplett FHEM Neustarten und das attr. URL setzen. (URL attr https://IP der BOX:8443/enduser-mobile-web/1/enduserAPI/)

mfg sig10680

sig10680

Zitat von: Luposoft am 07 August 2026, 17:37:04Noch eine Frage hätte ich in die Runde.
Ich habe RTS-Jalousien. Die Kommandos tiltNegative und -Positive benötigen 2 Parameter. Hat jemand rausgefunden, was die genau machen? Der erste ist für die Bewegung. Der zweite muss nur da sein. Mir fällt zumindest kein Unterschied auf, wenn ich diesen Wert ändere.


Das Habe ich darüber im Netz gefunden!

Bei der Integration von Somfy RTS-Jalousien (beispielsweise über die Overkiz-Integration oder die TaHoma-API in Home Assistant) benötigen die nativen Befehle tiltNegative und tiltPositive zwei spezifische Parameter, um die Lamellenneigung korrekt zu steuern.Die beiden Parameter sind wie folgt definiert:Parameter 1 (Value/Duration): Ein numerischer Wert, der die Intensität bzw. die Dauer des Sendeimpulses in Millisekunden angibt (z. B. 500 für eine halbe Sekunde). Da das RTS-Protokoll keine absolute Positionsrückmeldung unterstützt, steuert dieser Wert, wie lange der Motor in die jeweilige Richtung "tippt", um die Lamelle zu neigen.Parameter 2 (Mode/Type): Ein String oder Integer, der den Befehlsmodus festlegt. In den meisten Implementierungen der API wird hier der Standardwert "step" (oder eine 1 für den Schrittmodus) erwartet. Er signalisiert dem Controller, dass es sich um eine schrittweise Justierung und nicht um eine kontinuierliche Fahrt bis zur Endlage handelt.
Ich selber habe kein RTS sondern io-homecontrol!

mfg sig10680