Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

Rudibarani

#645
Hallo Stefan,

vielen Dank für Deine Antwort im anderen Thread. Ich nutze die die Funktion preProcessRegex um damit ein "Tab" aus dem JSON-File rauszunehmen, das der Hersteller Lupus Electronics im Status-File einbaut. Das "\t" wird von Python automatisch in ein "richtiges" Tab umgewandelt, bevor der JSON-Processor das überhaupt zu sehen bekommt und führt mit extractAllJSON daher zu einer Fehlermeldung.

Als Regel für preProcessRegex nutze ich: s/\t//g

Ich habe Dir mal ein Status-File als Demo angehängt. Das "\t" ist in den rssi-Werten.

Vielen Dank
Phillip

All-Ex

#646
Hallo zusammen,

nach einiger Zeit habe ich heute ein Update von FHEM gemacht und Probleme bei HTTPMOD festgestellt:

error in regex matching with regex option: Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE ?^s:prognosis">(.*?>.*?)</ at (eval 7965) line 1.

error in regex matching with regex option: Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE ?^s:headers="hafasSQTrain">(?:\s?<.*?>\s?){5}(?:Bus\s|Tram\s)(.*?)</ at (eval 7966) line 1.

Die entsprechenden RegExs sehen so aus (Fehler bei reading02 und reading03. Dagegen sind reading 01 und reading04 fehlerfrei):
attr dep get01URL https://www.rmv.de/auskunft/bin/jp/stboard.exe/dn?input=friedberger+platz&boardType=dep&maxJourneys=20&start=Suchen
attr dep reading01Name time
attr dep reading01RegOpt gs
attr dep reading01Regex headers="hafasSQTime">.*?(\d\d:\d\d)
attr dep reading02Name prognosis
attr dep reading02RegOpt gs
attr dep reading02Regex prognosis">(.*?>.*?)<\/span
attr dep reading03Name train
attr dep reading03RegOpt gs
attr dep reading03Regex headers="hafasSQTrain">(?:\s?<.*?>\s?){5}(?:Bus\s|Tram\s)(.*?)<\/span>
attr dep reading04Name direction
attr dep reading04RegOpt gs
attr dep reading04Regex headers="hafasSQTimetable">(?:\s?<.*?>\s?){2}\s?(?:Frankfurt \(Main\) )?(.*?)\s?<


Nach Downgrade auf 98_HTTPMOD.pm 19978 2019-08-10 12:51:48Z StefanStrobel läuft es wieder problemlos.

Hat jemand eine Idee, woran das liegen kann?

Viele Grüße,
Alex

EDIT:
Hab gerade nochmal geschaut, vermutlich an den nicht geschlossenen Anführungszeichen?

StefanStrobel

Hallo,

Offenbar hast Du einen weiteren Fall, in dem das mit den vorcompilierten Regexes zusammen mit RegOpt nicht klappt.
Ich hatte gehofft, dass der Mechanismus ein memory leak in aktuellen Perl-Versionen umschiffen kann, ohne dass dabei Konfigurationen angepasst werden müssen. So einfach ist es aber offenbar nicht.

Ich werde daher vermutlich in den nächsten Tagen eine neue Version einchecken, in der das mit dem Vorcompilieren per Attribut aktiviert werden kann, aber nicht per Default angeschaltet wird.
Wer also eine defekte Perl-Version hat, muss sich dann entscheiden, welche Variante das Problem am passendstem umgeht. Vorcompilieren, decode der Regex oder Regex-Option a.
Leider hat offenbar alles irgendwo Nebenwirkungen.

In der Zwischenzeit kannst Du entweder mit der alten Version arbeiten oder Du probierst mal aus, die Regex-Option s nicht per RegOpt anzugeben sondern mit (?s) in die Regex einzubetten (siehe Post 628).

Gruß und Sorry
    Stefan

StefanStrobel

Hallo Alex,

könntest Du bitte die angehängte neue Version mal testen?
Ich habe das mit den compilierten Regexes mit Regopts nochmal ein wenig modifiziert.

Gruss
   Stefan

All-Ex

Hallo Stefan,

vielen Dank für deine schnelle Antwort und den Fix. Haben den gerade eingespielt und sieht gut aus :-)

Alles läuft wie es soll, keine Fehlermeldungen im Log  ;D

Danke und viele Grüße,
Alex

Ellert

Mit der Version vom 20.11. wurden die Regexp mit der Option s nicht ausgewertet, mit der Version aus #650 funktioniert es wieder.

StefanStrobel

Vielen Dank fürs Testen!

die neue Version ist jetzt eingecheckt.

Gruss
   Stefan

carlos

Hallo,
Ich würde gerne mit HTTPMOD meinen proxmox server Informationen über das api entlocken.
Jetzt stellt sich mir die Frage wie ich sowas mit HTTPMOD umsetzen kann:

Ich zitiere hier mal ein Beispiel aus dem Proxmox wiki wie  mit curl ein LXC container erstellt wird.



Step by step example of LXC creation using the API
assumptions:

the node where we login is called APINODE
the node on which is the container will be created is called TARGETNODE
the auth cookie will be placed in the file "cookie"
the CSRF token will be placed in the file "csrftoken"
Note: for ease of use we use the jq(1) package which parses and pretty prints json data

export variables
export APINODE=pve4
export TARGETNODE=pve4
Save an authorization cookie on the hard drive

curl --silent --insecure --data "username=root@pam&password=yourpassword" \
https://$APINODE:8006/api2/json/access/ticket\
| jq --raw-output '.data.ticket' | sed 's/^/PVEAuthCookie=/' > cookie

Save a CSRF token locally

curl --silent --insecure --data "username=root@pam&password=yourpassword" \
https://$APINODE:8006/api2/json/access/ticket \
| jq --raw-output '.data.CSRFPreventionToken' | sed 's/^/CSRFPreventionToken:/' > csrftoken

Test auth credentials
We display the target node status

curl  --insecure --cookie "$(<cookie)" https://$APINODE:8006/api2/json/nodes/$TARGETNODE/status | jq '.'
creates an lxc container (with the given parameters)
Note: we need to encode the HTTP POST body when passing non alphanumeric parameters

curl --silent --insecure  --cookie "$(<cookie)" --header "$(<csrftoken)" -X POST\
--data-urlencode net0="name=myct0,bridge=vmbr0" \
--data-urlencode ostemplate="local:vztmpl/debian-8.0-standard_8.0-1_amd64.tar.gz" \
--data vmid=601\
https://$APINODE:8006/api2/json/nodes/$TARGETNODE/lxc

This should return a json structure containing the task id of the creation process which looks like:

{
  "data": "UPID:pve4:00002F9D:000DC5EA:57500527:vzcreate:602:root@pam:"
}


Wäre das auch mit HTTPMOD umzusetzen?
Nicht unbedingt gleich das erstellen eines containers, es geht erst mal nur um die Anmeldung via cookie und token.

Vielleicht kann mir ein HTTPMOD Guru mal ein wenig unter die Arme greifen, ob/wie man das machen könnte.

Gruß

Carlos

FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

holle75

@Stefan

Gestern ein Update gemacht. Auch ich möchte berichten, dass, ohne bis jetzt ersichtliche Nebenwirkungen oder von mir gemachten Änderungen an der config, die Speicherproblematik gelöst scheint. Bei mir war das allerdings ein mehrwöchiger Prozess, bis der Speicher komplett vollgelaufen ist. Werde weiter beobachten. Danke dir für den Fix!

amenomade

Zitat von: carlos am 05 Dezember 2019, 14:35:14
Hallo,
Ich würde gerne mit HTTPMOD meinen proxmox server Informationen über das api entlocken.
Jetzt stellt sich mir die Frage wie ich sowas mit HTTPMOD umsetzen kann:

Ich zitiere hier mal ein Beispiel aus dem Proxmox wiki wie  mit curl ein LXC container erstellt wird.



Step by step example of LXC creation using the API
assumptions:

the node where we login is called APINODE
the node on which is the container will be created is called TARGETNODE
the auth cookie will be placed in the file "cookie"
the CSRF token will be placed in the file "csrftoken"
Note: for ease of use we use the jq(1) package which parses and pretty prints json data

export variables
export APINODE=pve4
export TARGETNODE=pve4
Save an authorization cookie on the hard drive

curl --silent --insecure --data "username=root@pam&password=yourpassword" \
https://$APINODE:8006/api2/json/access/ticket\
| jq --raw-output '.data.ticket' | sed 's/^/PVEAuthCookie=/' > cookie

Save a CSRF token locally

curl --silent --insecure --data "username=root@pam&password=yourpassword" \
https://$APINODE:8006/api2/json/access/ticket \
| jq --raw-output '.data.CSRFPreventionToken' | sed 's/^/CSRFPreventionToken:/' > csrftoken

Test auth credentials
We display the target node status

curl  --insecure --cookie "$(<cookie)" https://$APINODE:8006/api2/json/nodes/$TARGETNODE/status | jq '.'
creates an lxc container (with the given parameters)
Note: we need to encode the HTTP POST body when passing non alphanumeric parameters

curl --silent --insecure  --cookie "$(<cookie)" --header "$(<csrftoken)" -X POST\
--data-urlencode net0="name=myct0,bridge=vmbr0" \
--data-urlencode ostemplate="local:vztmpl/debian-8.0-standard_8.0-1_amd64.tar.gz" \
--data vmid=601\
https://$APINODE:8006/api2/json/nodes/$TARGETNODE/lxc

This should return a json structure containing the task id of the creation process which looks like:

{
  "data": "UPID:pve4:00002F9D:000DC5EA:57500527:vzcreate:602:root@pam:"
}


Wäre das auch mit HTTPMOD umzusetzen?
Nicht unbedingt gleich das erstellen eines containers, es geht erst mal nur um die Anmeldung via cookie und token.

Vielleicht kann mir ein HTTPMOD Guru mal ein wenig unter die Arme greifen, ob/wie man das machen könnte.

Gruß

Carlos

Ja, meiner Meinung nach, könnte gehen. Die erste curls als sid Attribute, und das letzte als Hauptanfrage, dann requestXXJSON um die Antwort zu parsen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

carlos

Also ich habe mal so angefangen:

defmod myProxmox HTTPMOD https://192.168.178.3:8006/api2/json/access/ticket 300
attr myProxmox userattr sid1Data sid1Header01 sid1IdJSON sid1IgnoreRedirects:0,1 sid1URL
attr myProxmox alias myProxmox
attr myProxmox enableControlSet 1
attr myProxmox enableCookies 1
attr myProxmox enforceGoodReadingNames 1
attr myProxmox extractAllJSON 1
attr myProxmox room 01_Proxmox
attr myProxmox showBody 1
attr myProxmox showError 1
attr myProxmox showMatched 1
attr myProxmox sid1Data username=root@pam&password=xxxxxxx
attr myProxmox sid1Header01 Content-Type: application/json
attr myProxmox sid1IdJSON token
attr myProxmox sid1IgnoreRedirects 1
attr myProxmox sid1URL https://192.168.178.3:8006/api2/json/access/ticket
attr myProxmox timeout 60
attr myProxmox verbose 5

setstate myProxmox 2019-12-05 19:39:10 LAST_REQUEST update
setstate myProxmox 2019-12-05 19:39:10 MATCHED_READINGS
setstate myProxmox 2019-12-05 19:39:10 UNMATCHED_READINGS




Leider kommt folgende Antwort:
{"data":null}

Da scheint mir user/password noch falsch anzukommen.

Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

amenomade

Es fehlt mindestens ein attr reAuthRegex, um ein Authentifizierungsprozess zu starten.
Aber ohne eine Log mit verbose 5, wird es schwierig, weiter zu helfen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

carlos

Kann ich lefern:


2019.12.05 20:02:05 3: myProxmox: Defined with URL https://192.168.178.3:8006/api2/json and interval 300 featurelevel 5.9
2019.12.05 20:02:05 5: myProxmox: update timer modified: will call GetUpdate in 2.0 seconds at 2019-12-05 20:02:07
2019.12.05 20:02:05 5: myProxmox: UpdateHintList called
2019.12.05 20:02:05 5: myProxmox: UpdateHintList: setlist = interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
2019.12.05 20:02:05 5: myProxmox: UpdateHintList: getlist =
2019.12.05 20:02:07 5: myProxmox: GetUpdate called (update)
2019.12.05 20:02:07 5: myProxmox: update timer modified: will call GetUpdate in 300.0 seconds at 2019-12-05 20:07:07
2019.12.05 20:02:07 5: myProxmox: AddToQueue adds type update to URL https://192.168.178.3:8006/api2/json, no data, no headers, retry 0, initial queue len: 0
2019.12.05 20:02:07 5: myProxmox: HandleSendQueue called, qlen = 1
2019.12.05 20:02:07 4: myProxmox: HandleSendQueue sends update with timeout 60 to https://192.168.178.3:8006/api2/json, No Data, No Header
2019.12.05 20:02:07 5: HttpUtils url=https://192.168.178.3:8006/api2/json
2019.12.05 20:02:07 4: IP: 192.168.178.3 -> 192.168.178.3
2019.12.05 20:02:07 5: HttpUtils request header:
GET /api2/json HTTP/1.0
Host: 192.168.178.3:8006
User-Agent: fhem
Accept-Encoding: gzip,deflate
2019.12.05 20:02:11 4: https://192.168.178.3:8006/api2/json: HTTP response code 401
2019.12.05 20:02:11 5: HttpUtils https://192.168.178.3:8006/api2/json: Got data, length: 0
2019.12.05 20:02:11 5: HttpUtils response header:
HTTP/1.0 401 No ticket
Cache-Control: max-age=0
Connection: close
Date: Thu, 05 Dec 2019 19:02:08 GMT
Pragma: no-cache
Server: pve-api-daemon/3.0
Expires: Thu, 05 Dec 2019 19:02:08 GMT
2019.12.05 20:02:11 4: myProxmox: Read callback: request type was update retry 0,
header: HTTP/1.0 401 No ticket
Cache-Control: max-age=0
Connection: close
Date: Thu, 05 Dec 2019 19:02:08 GMT
Pragma: no-cache
Server: pve-api-daemon/3.0
Expires: Thu, 05 Dec 2019 19:02:08 GMT, no body
2019.12.05 20:02:11 5: myProxmox: Read callback: body empty
2019.12.05 20:02:11 5: myProxmox: GetCookies is looking for Cookies
2019.12.05 20:02:11 5: myProxmox: ExtractSid called, context reading, num
2019.12.05 20:02:11 5: myProxmox: CheckAuth decided no authentication required
2019.12.05 20:02:11 3: myProxmox: no parsed JSON structure available
2019.12.05 20:02:11 5: myProxmox: UpdateReadingList created list of reading.* nums to parse during getUpdate as
2019.12.05 20:02:11 5: myProxmox: Read starts parsing response to update with defined readings:
2019.12.05 20:02:11 4: myProxmox: Read response to update didn't match any Reading
2019.12.05 20:02:11 5: myProxmox: HandleSendQueue called, qlen = 0
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

amenomade

Wie gesagt, zuerst reAuthRegex setzen. Zum Beispiel auf
401.No.ticketdamit er überhaupt eine Chance hat, sid1xxxx zu benutzen.

sid1IdJSON  muss wahrscheinlich eher ticket oder data_ticket statt token sein.
Dann sehen wir mal in der Log, was kommt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

carlos

#659
Ergibt folgendes im log:
2019.12.06 23:50:20 3: myProxmox: Defined with URL https://192.168.178.3:8006/api2/json/access/ticket and interval 300 featurelevel 5.9
2019.12.06 23:50:20 5: myProxmox: update timer modified: will call GetUpdate in 2.0 seconds at 2019-12-06 23:50:22
2019.12.06 23:50:20 5: myProxmox: UpdateHintList called
2019.12.06 23:50:20 5: myProxmox: UpdateHintList: setlist = interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
2019.12.06 23:50:20 5: myProxmox: UpdateHintList: getlist =
2019.12.06 23:50:23 5: myProxmox: GetUpdate called (update)
2019.12.06 23:50:23 5: myProxmox: update timer modified: will call GetUpdate in 300.0 seconds at 2019-12-06 23:55:23
2019.12.06 23:50:23 5: myProxmox: AddToQueue adds type update to URL https://192.168.178.3:8006/api2/json/access/ticket, no data, no headers, retry 0, initial queue len: 0
2019.12.06 23:50:23 5: myProxmox: HandleSendQueue called, qlen = 1
2019.12.06 23:50:23 4: myProxmox: HandleSendQueue sends update with timeout 60 to https://192.168.178.3:8006/api2/json/access/ticket, No Data, No Header
2019.12.06 23:50:23 5: HttpUtils url=https://192.168.178.3:8006/api2/json/access/ticket
2019.12.06 23:50:23 4: IP: 192.168.178.3 -> 192.168.178.3
2019.12.06 23:50:23 5: HttpUtils request header:
GET /api2/json/access/ticket HTTP/1.0
Host: 192.168.178.3:8006
User-Agent: fhem
Accept-Encoding: gzip,deflate

2019.12.06 23:50:24 4: https://192.168.178.3:8006/api2/json/access/ticket: HTTP response code 200
2019.12.06 23:50:24 5: HttpUtils https://192.168.178.3:8006/api2/json/access/ticket: Got data, length: 13
2019.12.06 23:50:24 5: HttpUtils response header:
HTTP/1.0 200 OK
Cache-Control: max-age=0
Connection: close
Date: Fri, 06 Dec 2019 22:50:23 GMT
Pragma: no-cache
Server: pve-api-daemon/3.0
Content-Length: 13
Content-Type: application/json;charset=UTF-8
Expires: Fri, 06 Dec 2019 22:50:23 GMT
2019.12.06 23:50:24 4: myProxmox: Read callback: request type was update retry 0,
header: HTTP/1.0 200 OK
Cache-Control: max-age=0
Connection: close
Date: Fri, 06 Dec 2019 22:50:23 GMT
Pragma: no-cache
Server: pve-api-daemon/3.0
Content-Length: 13
Content-Type: application/json;charset=UTF-8
Expires: Fri, 06 Dec 2019 22:50:23 GMT, body length 13
2019.12.06 23:50:24 5: myProxmox: Read callback: body
{"data":null}
2019.12.06 23:50:24 5: myProxmox: JSON Flatter called : prefix , ref is HASH(0x55d580d6d098)
2019.12.06 23:50:24 4: myProxmox: extracted JSON values to internal
2019.12.06 23:50:24 5: myProxmox: GetCookies is looking for Cookies
2019.12.06 23:50:24 5: myProxmox: ExtractSid called, context reading, num
2019.12.06 23:50:24 5: myProxmox: GetRegex found precompiled reAuthRegex for  as (?^:401.No.ticket)
2019.12.06 23:50:24 5: myProxmox: CheckAuth is checking buffer with ReAuthRegex (?^:401.No.ticket)
2019.12.06 23:50:24 5: myProxmox: CheckAuth decided no authentication required
2019.12.06 23:50:24 3: myProxmox: no parsed JSON structure available
2019.12.06 23:50:24 5: myProxmox: UpdateReadingList created list of reading.* nums to parse during getUpdate as
2019.12.06 23:50:24 5: myProxmox: Read starts parsing response to update with defined readings:
2019.12.06 23:50:24 4: myProxmox: Read response to update didn't match any Reading
2019.12.06 23:50:24 5: myProxmox: HandleSendQueue called, qlen = 0
2019.12.06 23:50:24 3: myKVPUDP: Received 57 bytes from '192.168.178.80'


Ich hänge mal das log vom curl Aufruf mit an, vieleicht hilft das:
root@fhem2:/opt/fhem/FHEM# curl -v -k -d "username=root@pam&password=XXX"  https://192.168.178.3:8006/api2/json/access/ticket
* Expire in 0 ms for 6 (transfer 0x557eacafbdf0)
*   Trying 192.168.178.3...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x557eacafbdf0)
* Connected to 192.168.178.3 (192.168.178.3) port 8006 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: OU=PVE Cluster Node; O=Proxmox Virtual Environment; CN=proxmox.fritz.box
*  start date: Sep  3 08:33:47 2019 GMT
*  expire date: Aug 31 08:33:47 2029 GMT
*  issuer: CN=Proxmox Virtual Environment; OU=edd1a80b-c5f6-4401-b4ea-53140bedf703; O=PVE Cluster Manager CA
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> POST /api2/json/access/ticket HTTP/1.1
> Host: 192.168.178.3:8006
> User-Agent: curl/7.64.0
> Accept: */*
> Content-Length: 36
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 36 out of 36 bytes
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
< HTTP/1.1 200 OK
< Cache-Control: max-age=0
< Connection: close
< Connection: Keep-Alive
< Date: Fri, 06 Dec 2019 22:53:56 GMT
< Pragma: no-cache
< Server: pve-api-daemon/3.0
< Content-Length: 1167
< Content-Type: application/json;charset=UTF-8
< Expires: Fri, 06 Dec 2019 22:53:56 GMT
<
{"data":{"cap":{"dc":{"Sys.Audit":1},"storage":{"Datastore.AllocateSpace":1,"Datastore.AllocateTemplate":1,"Datastore.Audit":1,"Permissions.Modify":1,"Datastore.Allocate":1},"vms":{"VM.Snapshot":1,"VM.Backup":1,"VM.Config.Options":1,"VM.Snapshot.Rollback":1,"VM.Audit":1,"VM.Config.Disk":1,"VM.Migrate":1,"VM.Console":1,"VM.Config.CDROM":1,"VM.Config.Memory":1,"VM.PowerMgmt":1,"VM.Config.CPU":1,"VM.Monitor":1,"VM.Clone":1,"VM.Config.HWType":1,"VM.Allocate":1,"VM.Config.Network":1,"Permissions.Modify":1},"access":{"Group.Allocate":1,"Permissions.Modify":1,"User.Modify":1},"nodes":{"Sys.Audit":1,"Permissions.Modify":1,"Sys.Syslog":1,"Sys.Modify":1,"Sys.PowerMgmt":1,"Sys.Console":1}},"ticket":"PVE:root@pam:5DEADC04::hTdB/7hf226qXLMbkfZPzy0K38evFP4uMN3/EMzVpozftL/tWiDULj8fcotXu6KUdmcAZRsb1YuFn+RZKLZGH2zYy1KsvnpEOpXNtbPVfMnfMk/UkKj4W/0mweju3IBh1axpH4DJ9uO6Gbhf1d+gmt6x0yYZjvZqYZrpzhp5WDL5kcMhTtCVuEtj4LmkZoBYBFLs7jxqj+YumUsw58cv9THwzZoinStvGO3Oczz0PqJsq9SKugKuorHiYwlzJCxMH7dZIEqqyA1OUeIhvPnoR8TAuopCANJZPNrswBM7PI3QdaE* Closing connection 0
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly