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.

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 nixI have no name!@46db69a954c5:/app$ ls -lisa /opt/fhem/cache/alexa-cookie/Das ging aber schon mal.
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$
#############################################################################
# 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";
} 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 curl -sS -X POST -H "x-auth-token: xxx" -w "\\n%{http_code}" "http://alexa-cookie-service:58080/api/cookie/refresh?save=45result.json"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;
}