GithubHelp home page GithubHelp logo

sarnau / inside-the-loxone-miniserver Goto Github PK

View Code? Open in Web Editor NEW
191.0 191.0 53.0 23.5 MB

Inside The Loxone Miniserver – various documentation about the Loxone Link/Tree protocol and hardware

Python 100.00%

inside-the-loxone-miniserver's People

Contributors

croghostrider avatar mschlenstedt avatar sarnau avatar svethi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

inside-the-loxone-miniserver's Issues

Include sample response from Loxone Weather Server

I note the sadly now outdated script here to simulate Loxone Weather Server: https://github.com/sarnau/Inside-The-Loxone-Miniserver/blob/master/Code/LoxoneWeather.py

Reverse engineering this script I can almost get weather data into my Miniserver but must have missed something in translation as my Miniserver doesn't quite see the data correctly. If I had a good response from the genuine Loxone service to compare to that would be super useful and hopefully would be able to see the error. It would also be very useful to document the format here.

Does anyone have a valid response from Loxone's weather service they could please share? Doesn't matter what location, etc. just so long as it the format is valid.

TIA

Version compatibility

Thank you for this great collection, it is really helpful.
I would like to implement the loxlink for AVR and I am curious about the supported Miniserver Firmare-Versions.
My Miniserver runs 9.1.10.30, I could report issues/changes in Protocol if I find some.

Which (max) version did you test?

Best regards

Cannot format SD card with Loxone Config: Error 12

Hi,
I cannot format the SD card with Loxone Config; the error displayed is:
Fehler - 12 beim Formatieren

loxmini_format

I have tried to format the SD card with several card readers w/o success.
Then I started to format the SD card with Windows tools, and this worked. Now the card is totally empty.

Can you advise how to fix this?

THX

Simulation eines Miniservers

Hallo,

vielen Dank für deine Mühen, uns tiefere Einblicke in die Hardware von Loxone zu gewähren.
Nach dem Lesen deiner Beiträge frage ich mich, ob es nicht möglich wäre, zu Testzwecken einen Miniserver zu simulieren. Dieser hätte zwar zunächst keinerlei Ein- und Ausgänge, könnte aber ein Projekt ausführen.

Wenn man beispielsweise ein Modul wie "Rock64" nimmt, hat man die CPU des Miniservers Gen.2 sowie einen SD-Kartenslot und Ethernet. Du hast einen Flash-Speicher beschrieben, der eine Art Bootloader beinhaltet, der den Inhalt der SD-Karte ausliest und in den RAM legt.
Meinst du, den Flash könnte man auslesen und somit einen Miniserver zum Testen emulieren?

Grüße
Daniel

Emulate Tree Device on real tree extension

Hello Markus,
sorry for asking again, but i'm still trying to get your code running.
Is it possible to emulate an single tree device (eg. tree motion sensor) and connect SM32 CAN to tree bus to get the emulated sensor running with real tree extension. In your example, the emulated tree device is running together with emulated tree extension.

Thanks, BR Fabian

Loxone NAT - CAN Id

Good day,

thanks for the perfect study material.
I've studied loxone NAT, but I still can't find out what device the packet is for.

Could you please give me little advice?

Recording communication
The packet is sent when the window opens: miniserver status

Loxone Monitor

00000042 192.168.1.77 15:38:55.609 15:40:02.506 LNK send poll packet to 14111118
00000043 192.168.1.77 15:38:55.609 15:40:02.506 LNK send standard packet: extension NAT: 5, device NAT: 0, Cmd: 0x05, sCommmandArg: 0x00, nData: 0x00000000
00000044 192.168.1.77 15:38:55.810 15:40:02.707 LNK send poll packet to 14111118
00000045 192.168.1.77 15:38:55.810 15:40:02.707 LNK send standard packet: extension NAT: 5, device NAT: 0, Cmd: 0x05, sCommmandArg: 0x00, nData: 0x00000000
00000046 192.168.1.77 15:38:56.010 15:40:02.908 LNK send poll packet to 14111118
00000047 192.168.1.77 15:38:56.011 15:40:02.908 LNK send standard packet: extension NAT: 5, device NAT: 0, Cmd: 0x05, sCommmandArg: 0x00, nData: 0x00000000

My solutions - arduino + MCP2515

RxID: 2422235141, RxID HEX: 90606005, Len: 8 Data: 00 00 00 00 00 00 00 00
RxID: 2422235141, RxID HEX: 90606005, Len: 8 Data: 00 00 00 00 00 00 00 00
RxID: 2422235141, RxID HEX: 90606005, Len: 8 Data: 00 00 00 00 00 00 00 00

My device serial
0x14111118

I cannot find out by RxId for which extension the message is sent. In arduino I create 5 DI extension.

Arduino is connected to 100 Papouch Quido inputs and processes the spinel protocol.
https://papouch.com/quido-eth-100-3-100-vstupu-3-vystupy-a-teplomer-p4641/?cid=145

Thank you very much for any advice.

John

Adding iButtons to Users

Hi Markus,

we've been trying hard to figure out a way on how to add iButtons to a User through the loxone API.
Officially it's not supported, altough Keycodes and NFC Tags are.
We tried to reverse engineer their Miniserver API by sniffing to the network traffic without any success.
Do you have an idea how this can be made possible?

Thanks!
Best, Alex

Minimal Loxone Setup

I am currently searching for a wired smart home system for light switches and motion/presence detectors. As I already have a zigbee system with Node Red and Home Assistant, I only need the devices, not the server.
So is it possible with this software and a CAN adapter to use the Loxone devices? Or do I need the Tree Extension?

I also noticed the topic "Authorization of Extensions and Tree devices". Do I need this if I do not use a Miniserver?

downloadLoxoneAESKeys.py trouble

Hey @sarnau nice work you're doing here.

I am currently playing with your code, but still without a concrete goal, maybe it should become a RS232 station. Now I wanted to read the AES keys with your Python script downloadLoxoneAESKeys.py. Unfortunately I always get errors here.

I assume that these scripts are based on Python 2.7.xxx, because StringIO from 3 on is no longer used.
Unfortunately I have problems with the ftplib. And since I have never written anything in Python before, I am a bit overwhelmed here.
I entered the version number manually. My server is currently running on 10031125.

My Errors:
`Traceback (most recent call last):
File "C:\Users\Benjamin\Documents\Loxone\Planung\Inside-The-Loxone-Miniserver-master\Code\downloadLoxoneAESKeys.py", line 63, in
ftp.retrbinary("RETR 10031125_VmVyc3VjaE5yMQ0K.upd", callback=handle_binary)

File "D:\Programme_Games\Python 27\lib\ftplib.py", line 416, in retrbinary
conn = self.transfercmd(cmd, rest)

File "D:\Programme_Games\Python 27\lib\ftplib.py", line 378, in transfercmd
return self.ntransfercmd(cmd, rest)[0]

File "D:\Programme_Games\Python 27\lib\ftplib.py", line 341, in ntransfercmd
resp = self.sendcmd(cmd)

File "D:\Programme_Games\Python 27\lib\ftplib.py", line 251, in sendcmd
return self.getresp()

File "D:\Programme_Games\Python 27\lib\ftplib.py", line 226, in getresp
raise error_perm, resp

error_perm: 550 Can't open 10031125_VmVyc3VjaE5yMQ0K.upd: No such file or directory
`

analyzeLoxoneExtensionUpdates.py not working

I used unpackLoxoneMiniserverFirmwareUpdate.py on 10031127_F2DE2A42CBBE36993AAF9BB8C2582498.upd to extract the data and got a folder named update_10031127 with all the extension updates like 10031127_1WireExtension_V2.upd.

After that I tried analyzeLoxoneExtensionUpdates.py to unpack the extensions. But there is no 10031111_Miniserver.upd file. The only one I can find is a 10031127_Miniserver.bin but in a diffrent folder.
So i altered the code like this:
os.chdir("./update_10031127/") analyzeUpdatefile('10031127_Miniserver.bin') #analyzeUpdatefile('./update_10031127/10031127_Miniserver.bin') #analyzeUpdatefile('10031111_Miniserver.upd') os.chdir("./update") for filename in sorted(glob.glob("*.upd")): analyzeUpdatefile(filename)
But then I am getting the following error:
analyzeLoxoneExtensionUpdates.py", line 230, in productByFilename encryptedBlock = binascii.unhexlify(product) TypeError: Odd-length string
Is this script working for someone on the latest miniserver version?

Loxone SD Cards specialities

In LoxoneSDCards.md you say that you have not found anything special about the SD Cards provided by Loxone. Have you checked the CID of the SD card? Maybe it is some industrial-grade one that promises longevity due to being used in SLC mode/doing something fancy in its firmware?

Loxone MiniServer Analog Input/Output circuit

First of all: Compliments for all the work done!

Could you elaborate a more on the analog input and analog output circuitry?
Purpose is to 'learn' from a well-proven-circuit to design my own circuit.
Especially on e.g. low-pass filters or in/out-put protection.

Analog Input:

On the front-side just below the TVS1544, there is an 8-lead package. Could you share the chip-marking? Is it related to the analog-output stage?
On the back, there are 4 packages which look like SOT23-3. Can you tell what these are?
Maybe draw a circuit diagram?
Photo

Maybe a close-up on the PCB of an AI-extension also gives some good hints?

If you upload some high-resolution photo of the area, I'd like to draw and share the schematic in svg-format.
Therefore the individual traces must be distinguishable, and ideally the package marking readable.

Analog Output:

Same issue here, could you supply some high-res photo?
Maybe a close-up on the PCB of an AO-extension also gives some good hints?

Does the Modbus extension use read/write multiple registers

The Modbus protocol caters for reading or writing of a contiguous range of registers or coils in a single command... do you know if Loxone actually uses this feature or always reads/writes a single register or coil multiple times, even when address ranges are contiguous and have same polling frequency?

Ie:

Say I have a sensor device with 2 inputs on holding registers 1 & 2 which are both configured to be polled every 10 seconds.

Making full use of the Modbus protocol a single command (read multiple holding registers) could be sent every 10s which would cause the sensor device to report values of both registers in a single response.

I am assuming the answer is 'No, Loxone always reads/writes registers or coils individually'. If that is the case, and has been confirmed, it would be a nice thing to note on the relevant document here.

Side note: Why do I think this is important? Well, I have built a Modbus environmental sensor which has different hardware modules to measure various environmental values. If one of these hardware modules fails I want to respond to a Modbus read register request with an error because the value isn't available due to hardware failure.

If Loxone reads multiple registers in a contiguous range, then to report an error on one register would actually be done by responding to the entire 'read multiple registers' request with an error. This would cause Loxone to not be able to read values from other sensor hardware that is still working.

If Loxone only reads single registers then the error would only be reported for the specific register that was unavailable (corresponding to the failed hardware sensor) and the rest would still work.

0 Ohm resistor?

Hello,
Your description for an external antenna on your Miniserver Go documentation mentions: "move the 0Ω resistor connecting pin 31". I'm not a great electronician, but I assume this is a typo?

I assume you mean to basically turn the brownish resitor 90 degrees counterclockwise (on your picture), then connect the antenna to the two holes on the right?
Thank you,

Antenna resistor

LoxoneWeather.py as deamon

hey! this LoxoneWeather.py is awesome and it works like a charm! How have you set this up on your raspberry pi so that it restarts if it crashes or that the python webserver restarts when the raspberry pi reboots?

Verification problem - 0x9C

Good day,

I have one more question for you. According to the discussions I found on the Internet. Your connection to the Loxone server for DI Extension worked.

I do not know if it is any change (I have a miniserver version 2), after adding an extension to the miniserver, the next packet will be sent.

Rx: 2423267568:907020F0, Command: F0, Data: 00 9C 10 00 1A 4A 88 E9 
Rx: 2423267569:907020F1, Command: F1, Data: 00 C4 DD 71 3B CE 8C 7C 
Rx: 2423267569:907020F1, Command: F1, Data: 00 36 3F AA E8 D2 37 E7 
Rx: 2423267569:907020F1, Command: F1, Data: 00 96 81 AA E8 D2 37 E7 

I assume that this is some kind of authentication packet 0x9C ... Because I do not respond to it, the Extension - (Authentication failed) will be blocked. In the previous version, this tot did not exist. Or did you figure it out?

Thank you

John

Loxcc / Python3 UTF8-Problem

Hallo Markus,

Für unser aktuelles Projekt habe ich deinen LoxCC Parser angepasst (https://github.com/mschlenstedt/LoxBerry-Plugin-Stats4Lox-NG/blob/main/bin/libs/Loxone/unpack_loxcc.py).

Unglücklicherweise funktioniert er mit Python3 nicht:
Wird das File mit open('r') geöffnet, schlägt Python3 beim ersten Read auf, weil es implizit UTF-decoded und mit den Binarydaten nicht zurecht kommt.
Öffne ich es 'rb', funktioniert das Zusammenbauen der Strings nicht mehr, weil die gelesenen Daten nun Datatype Bytes und nicht mehr String sind. Leider hab ich das Umcasten dann nicht mehr richtig hinbekommen.

Wenn du mal eine "freie Minute" hast, würden wir uns sehr freuen, wenn du deinen LoxCC Code auf Py3 umstellen könntest.

LG, Christian

Problems using LoxoneMonitorServer.py

Hi,
can you help me to get the Monitor Server Running?

loxberry@loxberrydev:~ $ python LoxoneMonitorServer.py
  File "LoxoneMonitorServer.py", line 31
    print('CPU  stats: Usage %3.1f%%' % (100-taskDeltaTime*100.0/cycleDeltaTime), end=' ')
                                                                                     ^
SyntaxError: invalid syntax

BR
Wörsty

Password hash

Hi sanau,
amazing work!!!
do you know which hash algorithm Loxone use for saving the passwords?
thanks
regards

Loxone Weather

Because darksky will close its doors for api users, do you already planned to migrate the python script?

I started to migrate your script to openweathermap. But there are not always all values available ( e.g. rain ) Is this a problem for the miniserver when requesting the data?
Within csv I am reporting 0 on those values, on the XML I removed the tags.

Loxone Air

Hi,
it's not an issue but more a question about Loxone Air.

Are there any plans to reverse engineer the Air technology as well?
Would be interesting, if the modules used by Loxone can also be used to create a DIY Air product ;-)

Thx

NAT firmware upgrade verify CRC

What is the 32-bit CRC that is referred to in this statement?

0x80 from Device Confirm success of the verify, Page is 0 and "the actual 32-bit CRC" in the optional data area

Loxone Nano DI Tree protocol

Amazing write-up, thanks so much for all the effort!

Do you happen to have documentation about the nano DI tree communication?

MS2

Are there plans to do this work with Miniserver Gen2?

Miniserver Gen1 Hardware-Version

Hallo sarnau,

Du schreibst, dass es mehrere Hardware-Versionen des Miniserver Gen. 1 gibt.

Wie kann ich herausfinden, welche Version ich habe?

Viele Grüße,
Christian

info about Cloud Service Caller still up to date?

I'm currently working on my own implementation of the cloud caller. i redirect the dns queries from caller.loxone.com to my own web server.
To the request <http: //caller.loxone.com: 80/cgi-bin/loxlive/call.pl? ......> I answer according to the given example. In addition, information on the cloud caller says that the miniserver ignores the answer.

I think that is not correct (anymore). Immediately after the request is sent to the caller, an error message appears in the Loxone Monitor and a push message is issued that the caller is not active.
See this example from Loxone Monitor:
2021-11-23 22: 57: 22.658; Critical 509 QUITTED, MINISERVER_NAME - Error Loxone Caller Service, all, Miniserver (Uuid 1111111111-0000-2222-ffff141234567890)

I think the miniserver is expecting (maybe in newer firmware) an answer.

IndexError: index out of range


root@loxberrydev:/opt/loxberry# python3 LoxoneMonitorServer.py
Starting Monitor Server Proxy...
Starting Monitor Server Logger...
2020-04-18 12:25:52.770 PRG cycle duration 1655us 50cycles/s Contextswitches:0 Contextswitches from Int:0 (250715624/21319317) IO time:261us
2020-04-18 12:25:52.970 HTTPCL: Add Command from Wetterstation
2020-04-18 12:25:53.034 PRG send special state event Betriebszeitzähler KWL Filter aktuell+gesamt 0d92bb4f-00c7-bffc-ffffeee000000000 0d92bb4f-00c7-bff1-ffffd18721cf449b 1
2020-04-18 12:25:53.036 PRG send special state event Poolwasser  (Nutzungsdauer) 0c94b791-031f-52f9-ffffeee000000000 0d5b677f-0206-a71c-ffffeee000000000 1
2020-04-18 12:25:53.512 HTC Connect to Host wetterstation.woersty.com, Port: 80
2020-04-18 12:25:54.034 PRG send special state event Betriebszeitzähler KWL Filter aktuell+gesamt 0d92bb4f-00c7-bffc-ffffeee000000000 0d92bb4f-00c7-bff1-ffffd18721cf449b 1
2020-04-18 12:25:54.036 PRG send special state event Poolwasser  (Nutzungsdauer) 0c94b791-031f-52f9-ffffeee000000000 0d5b677f-0206-a71c-ffffeee000000000 1
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.7/threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "LoxoneMonitorServer.py", line 195, in monitorserver_logger
    data = parsePackage(data)
  File "LoxoneMonitorServer.py", line 180, in parsePackage
    parsePackageContent(pkg)
  File "LoxoneMonitorServer.py", line 162, in parsePackageContent
    parsePackageLogging(pkg,strType,parameterCount)
  File "LoxoneMonitorServer.py", line 108, in parsePackageLogging
    while pkg[offset]:
IndexError: index out of range

^C2020-04-18 12:25:54.072 Traceback (most recent call last):
  File "LoxoneMonitorServer.py", line 231, in <module>
    x.join()
  File "/usr/lib/python3.7/threading.py", line 1032, in join
    self._wait_for_tstate_lock()
  File "/usr/lib/python3.7/threading.py", line 1048, in _wait_for_tstate_lock
    elif lock.acquire(block, timeout):
KeyboardInterrupt

Kontakt

Hallo Markus, erst einmal vielen Dank für deine Arbeit. Das ist alles sehr hilfreich.

Leider ist mir ausser per Issue kein Weg bekannt per Guthub Kontakt aufzunehmen.
Kannst du eventuell noch zusätzliche Ressourcen zur Verfügung stellen?

MfG Benamin (uC.net)

loadMiniserverConfigurationFile.py has problems with Logos

It seems the loadMiniserverConfigurationFile.py has problems with some Logos.

Example Logo: mschlenstedt/LoxBerry-Plugin-Stats4Lox-NG#64 (comment) (copied from the .loxone Project file)

It results in invalid xml after the parsing like this and other strange stuff:
Logo="89504E470D0A1A0A0000000D49484452000000D2000000780806000000871EACCA000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA86400001`51149444154785EED9D79705455BEC7032220041208100C0112202C41E0C13C1C75D4D1575A4F105CFE70667C3265E9F3B961890F9711049FE286C8328E58F3906795A5E5E894BBD6302AE30CE21BDFE01650645FB292A4FB7677964E4267E1F7CEF7E49EE4A673FAE676BA3BE99BFCBE55DF4AD2B9F7DC73EF399FB3DDD3E7A4503F54D38F07EDB3F33E6C56A7726DF19233313FEFFEB1F1FBEA055217E7B1813FEACC3DE9547B5Er p42F4A0A00000DFE82BCE963C9373E9B0273E69B2099167F1B99D9E4CBCEA5C61FF69B67B058D1A9CF8354BFF9B7E4199E46FE693329709EA885F2E77604097F8BCFFDB9D3C948CBA0FA6DDBCD33592CE7EAD3B9F7DCF2EFE44D19487E00A4A0B142A46CF9BCF2ECA154B36E9D19028BE54C7D12A496DA2019E78AE6DAB8ACCE4DB9AE8CA65E7A06F966E4538BDF6F122062D9ABCF81D4F0F63BE41D355636D564534E078B9DDB9A7A79E43927954EFFF9CF66C8BE55D4F529906AEE5D214E58FC3366EB217B3F33A9E7CF9F479E21A9145CF35FE615582CBDFA04482DB954749BFFCF64A48DE95E2D6467119E374D34F55DF4A696AA6AF38ABE5547B91EA4D05F7791317112F972A6B54214694021168B707D93A79231368B425FFCDDBC328BD52E578354F7FC0BE449398BFC33CF6BCDF0898020627F5E3E19A2E918DCB8C58C018BD52A5782D4525545FEF90BC918369202731768337DC23C67017905BCD5BF5C66C686C5722148A1FFFD3B19991344732EB775683BC1B55027E37A18221F9F4DC1DFAC3663C5EAEF721548C1D56BC9337818F9A7E749FEEAF08CDE5316D7F6A5659077FA4C3376ACFE2CD78014F8F9BF90913AAAFD052B0000B72593C7C76678BA70DB3E9B4715C38653E8CB2FCD98B2FAA3921EA4E61327657FC837613205E6FDA4B54FA4B36AE6C118BDD31D13ADE528A00524DD31B0B8A6317A1CD5FD6EAB196B56E676528354FBD000002225853CC25E1BB7FEFFEC56D044E637C64F949FC56A5FB680175FB71010C9990EE233753D9DCB85FD0B7F4A4DFB0F9877C0EA2F4A5A904ED7D551DD7BEF53C38103D470F060EBCF086E3C74587E55C2481F47FEC95329B8F6516A2A2A263A7182A8BC5CB0222A37EFDD4B4D478F52F5AF96913F6F969C395E7DC522AA2F2BA586FDFB89F6EDA3A682026AFCEEBB8EDEBB8F4296795A8D7BBE36EF82D55F949420B5B4B450E9A9535414F05391CFD7A50BAB02541F0890312455D61EDE71E36538FF76FBED943525977266CC70ECA16969F25CA8F6CEE4749F325DBA66F1B5D4203E2B320C3D4D1646A75B0F61B1A4920EA4C6C6462A2E2E962E1319B6ACB4B44B977A2AA941D424BEA123445F4934ED32CEA5A63FBE45350D0D94229A5BD1FAF1C71F9771A9BDFD6E13A419145CBC943CE2B31211AF5302F213A2B60B0878592C286940422D6488D2FEinfo43545858287DF2E4C988C6FF015AA902A9C20449F491FCD36753F0CA4574CAEBD582D2956FBAE92619271D48278E1F6FBBFEB163C7E4EF809FD57B3A2ED2E453D1A4DEB56B177DFEF9E7F2E78A152BE876D122B9E38E3B6C8D63EEBAEB2EAAAE8E6D1E65D28084D2BDBEBE5E66CA5028646B1C8363254C3A90449FA6FE97CB575A0053074A57BEF9E69B659CDA409A3A83AAAFBA9A9AC58E58716910B5DEE9D3DCD0EB4DAD59B3469B8E4E3D70E040F28A42371625ED6043576A6A6A92B54159A9A895B420DD145790AAFE7589FC8C957C7AE28927B4E9E8D49FB38EA4AAAA2A33B4EEC9D520B5D6480C527F17831483182496523C408A75E08841D2984172975E79E5156D3A3AF5D8B163CD90BA2F4720BDF3CE3BB47CF9727AECB1C7B41000B491B1376EDC48478F1E35634472940543D072E4AE0741C2488FEE1CA77EF5D5576538D0A64D9B283F3F5F7B5CB4CECCCC1104EEBB8FDE78E38D6E3753BEF9E61BBAEDB6DBE8DE7BEFD55E23D15EB66C99CC67E8FB46D2AC59B3B4E7F6862FB9E41233565D80F4E8A38F527A7ABA3690DEF24B2FBD2447ECCE9C3943E4D155F27D534F828421FAfo43876ACF73E2B3CE3A4B8673D1451769FF1F0F237EFBF6ED93D771A2AD5BB7D2F8F1E3B561F596EFBEFB60CE2EE14AE4738BD6D75D779D192B1B90962E5DAA3D3919BC70E1423396244BAF624D414F36ED1E7EF861ED794E7DE185176A3F8FB73FFAE82333C691F5EEBBEF6ACF4D1687EBD24B2FD51ED71BBEFEFAEBCD58450069CB962DDA1393C9A8E2950A45C9D59320BDFCF2CBDAF392D178D91849DBB76FD79E934C1E3D7A7487F7743D550839312A1BA53690D0548276ECD8A13D291A0F1A3488264F9E4CD9D9D941549C38312E4D8FB29F7F5FC63900005250F4957A0A24342F75E745EB8C8C0C9A346952C4673461C204ED79D11A4DB770EDDDBB577B6CB49E3A75AA36FECAB9B9B9DAF3A2F1534F3D65C69A68D1A245727040858F7C865137DD79D118CF1BB6C65D67A4090CC06FB9E5163356613512660C60AAFC61424E8DCC81D13427BAF3CE3BB5613835A67740A74521102C2923C3e" WDD78E38D6668F6FAE1871FB4E747E3D5AB3B7E25BEAEAE4E36FB74C73A3532EFDB6FBF6D8668AF5887A731C003459A41F2E28B2F6ACF736AE4D9582541C23C374CC43C72E488EC0CEB2EE6D4B82908236AE8BF4472494909D5D6D6C9705DA566D1B43386B80724BFDF2FEFDFEE39151515C9819578F463D4E003D219D21D138DAFBCF24A190E4652757157C9704428D69A494D620E7F5E7886CF3CF38CF61CA74E4B4B239FCF27C34325600DDF6ACCEB8C24991391A91149043262C408EDC59C7AEDDAB53260640239A1D462399BDB3412143F75614463D4D67277818467DDDCDCDC9640BA67046394F0B5D75ED386E1D428AC0E1E3C286B225C0FD21D178DD5D02FD211F927D23DE07F28A86369A60E1F3E9C2A0B1889E7D5F6AD00615C0B05CDB3CF3EAB3DCFA9EC300A36EB3D841BF751595929EF59A71454973elekF048EB5BD8921730819253C22284DF013C6677818BA30A2B1921B4142E65019024626C14C66F56C60949478F7A40BC3A901D2E1C3876544674107E98E8BC6183D835023A9F8C3485BC0AAD219D78B15A461C386C9B86362A90A37DE20A9B0ADF76235D206FF8FA414548D3848D5178082F4FCF3CF9B41EB8552050F1642098999B7BA709C5AC96D20A99A215C98B1612D75E30512BE9E826930F102E98A2BAE90E14412D25919C2A0802E1C270648C89F1006C5F07C54069EE448C8F34E5E62AB01399D5214D978F985871C6BD30E0F189DDBFBEFBFBF931F78E470DAE8A187E1F7AD5A45B292A40F0D1830401B8E532BF5159020948E0AA67883847021DD71D118A38D687DE8D2F9C1071F6C4B67185F948C255F5941424163AD39EA7722C2A4FD000F124CCD1288B5464A692BF5259082C1A02CD49219A49E744F8014F3EC6F74B2103106A9DDBD0D926A6E3348AD7605488814D7481DCD202597316AA7E6DD252D48482C06A9A319A4E4B37A1FD56F40C2AC5D0CB5EA77E0B29F7F1F777FFBEDB7B467CF1EFAEAABAFE422174A00526427071103CF3F5F0EE117141468D32956630A13D25919EB6340FD06A4A796795A068C9127F4BF9011E265BC9C8CB4620F8314D98900E9B2CB2E93E1A0EF12EF748631E0A253BF0149CD6C4058EA66E3658C64D51144C8F0C3C52045762240522F64711F88A72EBDBA6B801269559F44818467138BDA40C25B76B443637D41BA61C3061930DED0E321C7D308535772A0D2AF2F3BE5AA49ABB89F48720348975F7EB90C07F333D1C40B4FAB588C19301E0F5611EC2C1D48EBD7AFD7C6D1A9478D1A25C389456D20C1A84ED7AD5BA7BD9853DF70C30D66D09DD7808B87959078070EB42E561F100F21582A321D83A4B51524643ED4EACF3DF79CF658A79E313F76DBAC055D3AC582EB2C6F341D01AB523848981D136B8D3464C8103917B1BBFAE4934FDA4142A470032FBCF082F662D178E6CCC46DBE8537E78B172F96D7C19A0750514579FB92C500522787838466D3EBAFBFAE3D361AA34984053213A127967C527E2911D7C100969215243C1F80863860883C3C7ED1180583936F145B85991D3939397265DE0E20A1338FEF23C5DABCEB296374072AA9ACD48014879556EFE89B20A1D984854E74C7269B515B7CFCF1C7E6936905493D1B1850A102B8F5D65BB5E7F7843FF8E083F617B20A2634EFB06A90EE846432BE9909A1CFD4E9ABE679B3A673C9B5541E2348D5BFBE59420998AC20C59AB161F5A65E272B48C8F46FBDF596360CA71E3C78B000EF0525D218C6353EFCF043EDF1C9E4BCBCBC0E934531E1197956E55BDC0B6686A38F3366CC186D1889F69B6FBE49298844384C109676D29D942CC6244848CE4B0B03C977EE446ADCB4994E8A7BD19DDB95553FAF5E347F7C19599D6AA45897E482B15E42242990902ED092254BB4614463C08F4CA80055617FF6D967DAE393C5A9A9A99D16B85783262ACFE25ED057423F471746228D810ABC924901C96A82A4B26A76ECDEBD5B7E25BAB748B7B32AD131D2D861392EEC8F34F81CF9BFFFF9C31FE8C90D1B68F3D6ADB449F4FD9C78FDE6CDB463E74E793EE41D964AFEDCF61A091D5F5D7CA23596CC8AA43A51381C292CA432718FA84574E7476BD56F553512D21999119900A3642B5DAE8CDB1A11F1F44E4B5A288583045B5F8D6020E5820B2ED086176F631DE448CEB101D1EAE15A238692000F1A2FDCF6EFDF2F9B1958E76ECA94293D6E7C55191D3B7CAF051D4B55A22213947A154823C937791A051F5B47CD65A26645ED8A6154015A5416E7612A4F84117C7A3D1919E3A9EAAA5690B08062565696368E7646FC1177652C9EF1DE7BEFC930ADC237B530405D5F5020FF5EFDC823346EDC386D987656CF4A19E986D125149CD64C887446FAA2EF81DA1D23A19849306700D419862EEC445BC51DA5FDB66DDBE47308972C40C3F22CEE0BEF43D167427310F782CFD0824021A1BB56B4B6E643E4838B2FBE58C6478284A6046A216BA460645618A53F4A46BBAFDAF6B450FAA77EB21010CE21AD469ABB808C71595439680879CE8ECD95830693em="9A76A2CF552340C2E07B438CEF1BBA52D33FBEA2A080B5529476CD057B29F257C9BA27BC2F0C6F812043AAC254CD4849760116598886C184BF010F5E8FA0E0875148245AEDB33E85D44B5444441741F5B3378C78A11DAC847718127ECDDADFF136061BB0D1188A9162910975F1EBCA7876EABD4BB89A8E1CA5E0AAB5E41D318ABC2903E4e" L3162349D3974987C667F49176624030A94CC98100890D608D79AC6BDCE2ECAD6265A57C2F3C4BDAA250CC2EF25DEF763F75C3B8084CE28322B0EC60D29E3812390DE32E2103ECA855206A58E1624B59D7F9CAC76ECC3A49522714D511CBB3276FA0B5A0A8296AA2AAA7BF1F714F8D92564A48F11355F36F967CCA6C09CF9F21E8CD4746A119D676F4DB95C4F5D98918CF482F1723392D0C453D3C292259D717DDC6BB4421704D058EF2511F78330711DDD57CE3B806415AA4E3C6CFC4409D65B4662A3A9810EA6F5067A1AA4DA454B09939300B42E9EB616F107848670F3D7DF5060C9B5648C194F465A06F973F33AC7D904A9F1C7035429328936CC2E8C66389E5957421F18E98C979A68BEE379EBC2EB09A319863874572ACFE25EF7E45F779813F8CF0571C3EB96A8404A76F5284872F8FB6AF3CAD1ABE5E831AAFFCF95543522833C0303DDDF671A05F2E7B6C715BF5BAF6982D474E047330456B28B4172E0F0F7484ED52C9A0155D75C479EF40C32B226B536DD9CC44F81246A24963BC4203970B42035FEF56F14409F6A781AF9B2735A79649A7023DA04A99941728D18240776025268F7175473E3AFC97B4E2A795306CA21F3B6B88437DDBA3283E43A31480E1CA98F2487AD376E211F86AB4767926F8268BECD9AD35E03450B903283E43A31480E2C27AD5ED5BE174EE3CEBF90EF6717B7BEF7491B433ED43ED673BA0B903283E43A31480E8C17E1F5D75C4FF55B7E4BDE9119E41930487C6E5E2701D76390DC2706C9A1D1E7313227907F7ABE9C861473AD636706C9756290BAE34442043348AE1383948C66905C27062919CD20B94E0052329A41729D18A4643483E43A3148C96806C975629092D10C92EBC42025A31924D789414A463348AE1383948C66905C2706A9BBE629422C8B18A468AD004AE4751824D789418AC6087BCE7CF2E54E27E3DC8989AB951824D789418AE43048F0853D63C428B99959CDD5D750ED830FCB2FF425042606C9756290745670CCFB09F9C66793em9149819C3C6AD8B0000A4A4A08BB9B860AF6926F622E83C4926290600583E55CDFE4A9549192420FAE6E0735EFFC0B613BAD0A3A43457E0B1D2B2DA5D097FF20FFA4290C124BAAFF826405409C83A5B2B06638960AF64FCDA3FA358F10F64FC732C5C70C2F9D14D72A296E5DE2B7B0A29C1A192496189D13A47C611C77DE7CF2E54C2363A480670A74AA5FB192427FDB45C1EA6A2AAEADA5E35807BDA88802FEi6EDEFB16CAD04A99C41627554FF0109195EFE4FD43E33CF934B067B44D3AD66C14FA9F98D3F12F62BF0B634D3098F870E1D3D2A97BBB5EE8F8F33E1903A83C4D2A91FD548227362BDEDD451543D77019D7E6A3D616F08ACE77D4CD44047043C80047B04E984F59F19245624F55D90C4EF72D85A00E4CB9E4875CBEFA1C65DBBA92614226CCE715C34DBB02588CF30E44E000062905876EA3B2089CCED3B67A47C612A070E322790316438F944F32DF4DA0B72C3AEB2C6463D2EFA3BC7043CE8FB38DD870762905876EA0320950A903C724B0FAF8006A36E8119F9145AF50885BE2B00EC4854286A9C83B38E4810AA0281881B7ED9894162D9C9FD20898C5DE2F550CDEFB751CD82F3A9E94F3B2884CDD2F0FFCA4AB9D728F60AC2A65BBA7D6D9C8A4162D9A96F80247CFAC449397070B2AA8A0E1F3F2E6B2A34DD6281C72A06896527D78384CC8D2D0E0F8B9AE7A40008BBD4753570D01D31482C3BB91A246C288C7D3DB12D21F6BE8D4FDDA31783C4B2936B41C24C03BC24EDCEC04177C420B1ECE45A90E2D5F7712A06896527D782D4D36290587662901C8A4162D9894172280689652706C9A11824969D1824876290587662901C8A4162D9894172280689652706C9A11824969D1824876290587662901C8A4162D9894172280689652706C9A11824969D1824876290587662901C8A4162D9894172280689652706C9A11824969D1824876290587662901C8A4162D9894172280689652706C9A11824969D1824870A07093BF661EB4B2CD21F0F07F26101A509A6312C8D417291182487EA0052453935EDDA4D819119E4CFCE89D90161DF84C96464999E90439E9401D4F4FD4FB7EAAC641783E450569081549D22FFFFEDA1C09EAFA9A6EC14559794C4E8526A292EA633274E52F3F113D24D070FD19950C8BC3A2BD9C52039941524AC2B5EECF5525165251589DFE3E163858554DF847D03596E1483E4501D4032619256E6C768AC636EDD6A93E52E31480ED509A4381A9B3C23EC9E5A7E99156F11FD3F0B20CE97E2F729D48445200049454E44AE426082"

Unpack of LoxCC corruption with large base64 content

Hi Markus,

I've re-created a new issue for the Unpack LoxCC corruption issue (loadMiniserverConfigurationFile.py) as the unpack from Inside-The-Loxone-Miniserver is a base component of the LoxBerry Plugin Stats4Lox, that directly parses the Loxone XML on the LoxBerry to show the elements the user can collect for statistics.
We noticed problems with the unpack algo with users that have large base64 content in their LoxPlan file, like a company logo, or own SVG icons. In this case, the unpack generates a corrupt XML file.

I've reproduced the issue on my Test-Miniserver and have uploaded all the data I could fetch:

In this issue included:

  • s4l_loxplan_ms3.Loxone.unpacked_corrupt.zip --> This is the corrupt resulting XML
  • s4l_loxplan_ms3_downloaded_from_ms.zip --> This is the most current ZIP file from the Miniserver (original /dev/fsget/prog/sps_0203_20211113182248.zip)
  • sps0.LoxCC_in_MS_ZIP.zip --> This is the LoxCC file (out of the zip above) that should be unpacked
  • Test-Miniserver.loxplan_from_PC.zip --> This is the orginal LoxPlan file copied from the PC (--> the "should be" result of the unpack)
  • unpack_loxcc_py3.zip --> This is the unpack routine we use, an modified version of loadMiniserverConfigurationFile.py without file download, but only extracting a local LoxCC file

We and our users would be very pleased if you could figure out what the issue is with the LoxCC unpack routine.

For any tests I can support you, I am available for testing. Also my Test-Miniserver can be used for any testing purposes.

Thanks a lot!
Christian

s4l_loxplan_ms3.Loxone.unpacked_corrupt.zip
s4l_loxplan_ms3_downloaded_from_ms.zip
sps0.LoxCC_in_MS_ZIP.zip
Test-Miniserver.loxplan_from_PC.zip
unpack_loxcc_py3.zip

PS: The corruption issue is the same with the Python2 and Python3 variant of loadMiniserverConfigurationFile.py

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.