Neueste Beiträge

#1
Automatisierung / Aw: Neues Modul - 74_Unifi - F...
Letzter Beitrag von KyleK - 12 Juni 2026, 23:30:36
Ich hab einen anderen Weg gewählt:

Mit dem beigefügten Patch erhält das Modul ein Attribut `apiKey`.
Wenn dort ein in der Unifi OS Oberfläche generierter Api-Key hinterlegt wird, erfolgen danach alle API-Anfragen mit diesem Key, welcher kein Ablaufdatum hat.

Soweit funktioniert es bei mir gut, ich konnte noch keine Regressionen feststellen.

Achtung: Diese Variante ist wohl nur für UniFi OS-based consoles (UDM, UDR, UCG, UX, UDW, UCG-Ultra, UniFi OS Server) verfügbar.

Ich habe mich an dieser Seite orientiert: https://github.com/uchkunr/unifi-best-practices#authentication
#2
DOIF / Aw: DOIF mit eval fehler
Letzter Beitrag von Damian - 12 Juni 2026, 22:18:45
Offenbar wird beim Vergleich mit > ein leeres Reading übergeben, was nicht numerisch ist. Da ich keinen Vergleich in deiner Definition sehe, gehe ich davon aus, dass es aus einer Funktion kommt, evtl. round
#3
FHEM Code changes / Revision 31353: MiniSIP.pm: bu...
Letzter Beitrag von System - 12 Juni 2026, 22:10:40
Revision 31353: MiniSIP.pm: bugfix in '200 OK' message

MiniSIP.pm: bugfix in '200 OK' message

Source: Revision 31353: MiniSIP.pm: bugfix in '200 OK' message
#4
FHEM Code changes / Revision 31352: minisip: for d...
Letzter Beitrag von System - 12 Juni 2026, 22:10:40
Revision 31352: minisip: for debug only

minisip: for debug only

Source: Revision 31352: minisip: for debug only
#5
Server - Linux / Aw: [Docker / Container] echod...
Letzter Beitrag von Sidey - 12 Juni 2026, 20:53:35
Zitat von: FlatTV am 12 Juni 2026, 20:37:50Ich gebe jetzt hier erstmal auf.
Mein sub (nach Vorgabe aus dem Git) über at aufgerufen speichert des Cookie nicht, obwohl im log alles richtig aussieht.

Was ruft Alexa_CookieRefresh_ denn auf und vor allem mit welchen Parametern?

Grüße Sidey
#6
Sprachsteuerung / Aw: [37_echodevice] Amazon Ech...
Letzter Beitrag von cs-online - 12 Juni 2026, 20:50:56
...nachdem ich das richtige Verzeichnis für die zu patchende Datei genommen habe, funktioniert es nun auch bei mir :-)

Grüße
Christian
#7
Server - Linux / Aw: [Docker / Container] echod...
Letzter Beitrag von Sidey - 12 Juni 2026, 20:48:00
Zitat von: FlatTV am 11 Juni 2026, 04:57:43Was mir gerade aufgefallen ist.
[2026-06-11T04:53:29,536 Europe/Berlin] [INFO] 172.27.0.2 - - [11/Jun/2026:02:53:29 +0000] "POST /api/cookie/refresh?save=44result.json HTTP/1.0" 200 4355 "-" "fhem"
im Verzeichnis Cache liegt aber ein altes Cookie mit der NR 45

...

Gespeichert wird aber nix
I have no name!@46db69a954c5:/app$ ls -lisa /opt/fhem/cache/alexa-cookie/           
total 8
657271 4 drwxr-x--- 2 6061 6061 4096 Jun 11 18:50 .
668597 4 drwxr-xr-x 3 root root 4096 Jun 11 18:45 ..
I have no name!@46db69a954c5:/app$
Das ging aber schon mal.


Mir fällt es schwer, diese Aussagen einzuordnen. Einerseits ist der Ordner leer und dann liegt eine Datei mit alter Referenz darin?


alexa_cookie_service_export_name wird nach jedem Restart oder Reload neu gesetzt.
Hast Du denn eine Idee, ob es jetzt stimmt?

Dann würde ein List der Devices und ein Log des ACS Containers helfen.

Grüße Sidey

#8
Server - Linux / Aw: [Docker / Container] echod...
Letzter Beitrag von FlatTV - 12 Juni 2026, 20:37:50
Ich gebe jetzt hier erstmal auf.
Mein sub (nach Vorgabe aus dem Git) über at aufgerufen speichert des Cookie nicht, obwohl im log alles richtig aussieht.
#############################################################################
#  Refresh Alexa cookie via alexa-cookie2 service
#############################################################################

sub Alexa_CookieRefresh_
{
  my ($name) = @_;
  my $hash   = $defs{$name};

  if (!$hash)
  {
    Log 1, "[Alexa_CookieRefresh] unknown device $name";
    return;
  }

  my $save_name = $hash->{NR} . "result.json";

  setKeyValue(
    "alexa_cookie_service_export_name",
    $save_name
  );

  my $token = "xxx";

  my $refresh_raw = qx(curl -sS -X POST -H "x-auth-token: $token" -w "\\n%{http_code}" "http://alexa-cookie-service:58080/api/cookie/refresh?save=$save_name" 2>&1);

  if (!defined($refresh_raw) || $refresh_raw eq "")
  {
    Log 1, "[Alexa_CookieRefresh] empty response";
    return;
  }

  $refresh_raw =~ s/\r//g;

  my ($body, $code) = $refresh_raw =~ /\A(.*)\n(\d{3})\z/s;

  if (!defined($code))
  {
    Log 1, "[Alexa_CookieRefresh] cannot parse response: $refresh_raw";
    return;
  }

  if ($code ne "200")
  {
    Log 1, "[Alexa_CookieRefresh] http=$code body=$body";
    return;
  }

  if ($body eq "")
  {
    Log 1, "[Alexa_CookieRefresh] empty body";
    return;
  }

  echodevice_NPMWaitForCookie($hash);

  Log 3, "[Alexa_CookieRefresh] refresh successful for $name";
}

Log:
alexa-cookie-service  | [2026-06-12T20:35:11,019 Europe/Berlin] [INFO] Proxy Init: reuse deviceSerial from former data
alexa-cookie-service  | [2026-06-12T20:35:11,020 Europe/Berlin] [INFO] Refresh finished (api) in 767 ms
alexa-cookie-service  | [2026-06-12T20:35:11,029 Europe/Berlin] [INFO] Refresh request handled in 776 ms (saveTarget=45result.json)
alexa-cookie-service  | [2026-06-12T20:35:11,031 Europe/Berlin] [INFO] 172.27.0.2 - - [12/Jun/2026:18:35:11 +0000] "POST /api/cookie/refresh?save=45result.json HTTP/1.1" 200 4405 "-" "curl/7.88.1"
alexa-cookie-service  | [2026-06-12T20:35:11,035 Europe/Berlin] [INFO] Cookie export written to /opt/fhem/cache/alexa-cookie/45result.json alexa-cookie-service  | [2026-06-12T20:35:11,019 Europe/Berlin] [INFO] Proxy Init: reuse deviceSerial from former data
alexa-cookie-service  | [2026-06-12T20:35:11,020 Europe/Berlin] [INFO] Refresh finished (api) in 767 ms
alexa-cookie-service  | [2026-06-12T20:35:11,029 Europe/Berlin] [INFO] Refresh request handled in 776 ms (saveTarget=45result.json)
alexa-cookie-service  | [2026-06-12T20:35:11,031 Europe/Berlin] [INFO] 172.27.0.2 - - [12/Jun/2026:18:35:11 +0000] "POST /api/cookie/refresh?save=45result.json HTTP/1.1" 200 4405 "-" "curl/7.88.1"
alexa-cookie-service  | [2026-06-12T20:35:11,035 Europe/Berlin] [INFO] Cookie export written to /opt/fhem/cache/alexa-cookie/45result.json

Händisch im fhem Container ausgeführt, wird auch gespeichert.
curl -sS -X POST -H "x-auth-token: xxx" -w "\\n%{http_code}" "http://alexa-cookie-service:58080/api/cookie/refresh?save=45result.json"
#9
TabletUI / [FTUI3] Default-Farbe / Hellig...
Letzter Beitrag von caldir65 - 12 Juni 2026, 20:23:37
Moin,

ich habe mir meine UI einigermaßen weit zusammen gestrickt, mit Menütab an der seite usw.

Jetzt ist mir aufgefallen, daß ich entweder eine Farbe in dem Menü für jeden Punkt mitgeben kann, dann sind Icon und Schrift des Eintrages gut zu erkennen, jedoch bleiben sie unverändert, egal, welche Seite ich auswähle, oder aber ich lasse hier den Eintrag color="farbe" weg, dann kann ich sehen, welche Seite als aktiv angezeigt wird, dafür sind die einzelnen Einträge sehr blass.

Gibt es eine Möglichkeit, daß ich z.B. eine Farbe zuordnen kann, aber diese wird dann durch die Aktivierung der Seite überschrieben?

Gruß
Christoph
#10
Automatisierung / Aw: Neues Modul - 74_Unifi - F...
Letzter Beitrag von Ralli - 12 Juni 2026, 18:37:51
Ich habe in der 74_Unifi.pm in der Zeile 967 jetzt quick and dirty einfach eine Codezeile eingefügt, die bewirkt, dass stumpf nach einer Stunde ein erneutes Login stattfindet. Mal schauen, ob dadurch die Problematik behoben oder umgangen wird.

sub Unifi_Login_Receive($) {
    my ($param, $err, $data) = @_;
    my ($name,$self,$hash) = ($param->{hash}->{NAME},Unifi_Whoami(),$param->{hash});
    Log3 $name, 5, "$name ($self) - executed.";
   
    if ($err ne "") {
        Log3 $name, 5, "$name ($self) - Error while requesting ".$param->{url}." - $err";
    }
    elsif ($data ne "" ) {
        if ($param->{code} == 200 || $param->{code} == 400 || $param->{code} == 401 || $param->{code} == 200) {
            eval { $data = decode_json($data); 1; } or do { $data = { meta => {rc => 'error.decode_json', msg => $@} }; };
           
            if (($data->{meta}->{rc} && $data->{meta}->{rc} eq "ok") || ($data->{username} && $data->{username} ne '')) {
                Log3 $name, 5, "$name ($self) - state=ok";
                $hash->{httpParams}->{header} = '';
                my $cookie = '';
                my $csrfToken = '';
                for (split("\r\n",$param->{httpheader})) {
                    if(/^Set-Cookie/) {
                        m/Set-Cookie:\s(.*)$/i;
                        $cookie = $1;
                        Log3 $name, 5, "$name ($self) - got Cookie: $cookie";
                    }
                    if(m/^X-CSRF-Token/i) {
                        m/X-CSRF-Token:\s?(.*)(\r\n|'|$)/i;
                        $csrfToken = $1;
                        Log3 $name, 5, "$name ($self) - got X-CSRF-Token: $csrfToken";
                    }
                }
                $hash->{httpParams}->{header} = { 'X-CSRF-Token' => $csrfToken, 'Cookie' => $cookie } if(($cookie ne '') || ($csrfToken ne ''));
                if($hash->{httpParams}->{header} ne '') {
                    $hash->{httpParams}->{header} =~ s/\\r\\n$//;
                    Log3 $name, 3, "$name ($self) - Login successfully!  $hash->{httpParams}->{header}";
                    Unifi_CONNECTED($hash,'connected');
                    Unifi_GetSysinfo_Send($hash);
                    Unifi_UsergroupRestJson_Send($hash);
                    #Unifi_DoUpdate($hash);
                    InternalTimer(time()+$hash->{unifi}->{interval}, 'Unifi_DoUpdate', $hash, 0);
                    InternalTimer(time()+3600, 'Unifi_Login_Send', $hash, 0);
                    return undef;
                } else {
                    $hash->{httpParams}->{header} = undef;
                    Log3 $name, 5, "$name ($self) - Something went wrong, login seems ok but no cookies received.";
                }
            }
            else {
                if (defined($data->{meta}->{msg})) {
                    if ($data->{meta}->{msg} eq 'api.err.Invalid') {
                        Log3 $name, 1, "$name ($self) - Login Failed! Invalid username or password!"
                                      ." - state:'$data->{meta}->{rc}' - msg:'$data->{meta}->{msg}'";
                    } elsif ($data->{meta}->{msg} eq 'api.err.LoginRequired') {
                        Log3 $name, 1, "$name ($self) - Login Failed! - state:'$data->{meta}->{rc}' - msg:'$data->{meta}->{msg}' -"
                                      ." This error while login indicates that you use an unsupported UnifiController-version";
                    } else {
                        Log3 $name, 5, "$name ($self) - Login Failed! - state:'$data->{meta}->{rc}' - msg:'$data->{meta}->{msg}'";
                    }
                } else {
                    Log3 $name, 5, "$name ($self) - Login Failed (without msg)! - state:'$data->{meta}->{rc}'";
                }
                $hash->{httpParams}->{header} = undef;
            }
        } else {
            Log3 $name, 5, "$name ($self) - Failed with HTTP Code $param->{code}!";
        }
    } else {
        Log3 $name, 5, "$name ($self) - Failed because no data was received!";
    }
    Log3 $name, 5, "$name ($self) - Connect/Login to Unifi-Controller failed. Will try again after interval...";
    Unifi_CONNECTED($hash,'disconnected');
    InternalTimer(time()+$hash->{unifi}->{interval}, 'Unifi_Login_Send', $hash, 0);
    return undef;
}