A library for the SML (Smart Message Language) protocol
Project description
SmlLib
A SML (Smart Message Language) library
About
This library can be used to parse SML byte streams. It does not read from external devices.
Usage
The sml2mqtt program makes use of this library.
Example:
from smllib import SmlStreamReader
stream = SmlStreamReader()
stream.add(b'BytesFromSerialPort')
sml_frame = stream.get_frame()
if sml_frame is None:
print('Bytes missing')
# Add more bytes, once it's a complete frame the SmlStreamReader will
# return the frame instead of None
stream.add(b'BytesFromSerialPort')
sml_frame = stream.get_frame()
# A quick Shortcut to extract all values without parsing the whole frame
# It's faster but in rare cases this might raise an exception (e.g. InvalidBufferPos).
# In that case you have to use sml_frame.parse_frame() which is guaranteed to work
obis_values = sml_frame.get_obis()
# return all values but slower
parsed_msgs = sml_frame.parse_frame()
for msg in parsed_msgs:
# prints a nice overview over the received values
print(msg.format_msg())
# In the parsed message the obis values are typically found like this
obis_values = parsed_msgs[1].message_body.val_list
# The obis attribute of the SmlListEntry carries different obis representations as attributes
list_entry = obis_values[0]
print(list_entry.obis) # 0100010800ff
print(list_entry.obis.obis_code) # 1-0:1.8.0*255
print(list_entry.obis.obis_short) # 1.8.0
SmlMessage
transaction_id: 17c77d6b
group_no : 0
abort_on_error: 0
message_body <SmlOpenResponse>
codepage : None
client_id : None
req_file_id: 07ed29cd
server_id : 11111111111111111111
ref_time : None
sml_version: None
crc16 : 25375
SmlMessage
transaction_id: 17c77d6c
group_no : 0
abort_on_error: 0
message_body <SmlGetListResponse>
client_id : None
sever_id : 11111111111111111111
list_name : 0100620affff
act_sensor_time : 226361515
val_list: list
<SmlListEntry>
obis : 8181c78203ff (129-129:199.130.3*255)
status : None
val_time : None
unit : None
scaler : None
value : ISK
value_signature: None
-> (Hersteller-Identifikation)
<SmlListEntry>
obis : 0100000009ff (1-0:0.0.9*255)
status : None
val_time : None
unit : None
scaler : None
value : 11111111111111111111
value_signature: None
-> (Geräteeinzelidentifikation)
<SmlListEntry>
obis : 0100010800ff (1-0:1.8.0*255)
status : 386
val_time : None
unit : 30
scaler : -1
value : 123456789
value_signature: None
-> 12345678.9Wh (Zählerstand Total)
<SmlListEntry>
obis : 0100010801ff (1-0:1.8.1*255)
status : None
val_time : None
unit : 30
scaler : -1
value : 123456789
value_signature: None
-> 12345678.9Wh (Zählerstand Tarif 1)
<SmlListEntry>
obis : 0100010802ff (1-0:1.8.2*255)
status : None
val_time : None
unit : 30
scaler : -1
value : 0
value_signature: None
-> 0.0Wh (Zählerstand Tarif 2)
<SmlListEntry>
obis : 0100100700ff (1-0:16.7.0*255)
status : None
val_time : None
unit : 27
scaler : 0
value : 555
value_signature: None
-> 555W (aktuelle Wirkleistung)
<SmlListEntry>
obis : 8181c78205ff (129-129:199.130.5*255)
status : None
val_time : None
unit : None
scaler : None
value : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
value_signature: None
-> (Öffentlicher Schlüssel)
list_signature : None
act_gateway_time: None
crc16 : 22117
SmlMessage
transaction_id: 17c77d6d
group_no : 0
abort_on_error: 0
message_body <SmlCloseResponse>
global_signature: None
crc16 : 56696
Different CRC functions
Some meters e.g. the Holley DTZ541 via RS485 require a different crc function. You can set the crc function when creating the StreamReader.
Example:
from smllib import SmlStreamReader
stream = SmlStreamReader(crc='kermit') # <-- use kermit for Holley DTZ541
stream.add(b'BytesFromSerialPort')
sml_frame = stream.get_frame()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smllib-1.7.tar.gz.
File metadata
- Download URL: smllib-1.7.tar.gz
- Upload date:
- Size: 33.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
672c1c5bc576f16f2d67e48e496722a7786fee424c37a455e12a26a7ec208153
|
|
| MD5 |
8989050a001f8f66df779c79989a5601
|
|
| BLAKE2b-256 |
a8f65ef1760432950c71cedbe5dc7100d54bce619730b199e562f690857a4a5c
|
Provenance
The following attestation bundles were made for smllib-1.7.tar.gz:
Publisher:
publish-pypi.yml on spacemanspiff2007/SmlLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
smllib-1.7.tar.gz -
Subject digest:
672c1c5bc576f16f2d67e48e496722a7786fee424c37a455e12a26a7ec208153 - Sigstore transparency entry: 194935537
- Sigstore integration time:
-
Permalink:
spacemanspiff2007/SmlLib@e7de6f33ab1c7e6a52880aefa38291ab98687a04 -
Branch / Tag:
refs/tags/1.7 - Owner: https://github.com/spacemanspiff2007
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@e7de6f33ab1c7e6a52880aefa38291ab98687a04 -
Trigger Event:
release
-
Statement type:
File details
Details for the file smllib-1.7-py3-none-any.whl.
File metadata
- Download URL: smllib-1.7-py3-none-any.whl
- Upload date:
- Size: 33.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
757af4c705cf3fc1982fed6d970d191dfc961ee72c1828812c072851cfc93bd2
|
|
| MD5 |
f223afe7349e1d1ee9073337c9aae445
|
|
| BLAKE2b-256 |
455f7315250be9765d6a2aeb8fc4e2740660ba37538f30b8e515de6ce503a17f
|
Provenance
The following attestation bundles were made for smllib-1.7-py3-none-any.whl:
Publisher:
publish-pypi.yml on spacemanspiff2007/SmlLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
smllib-1.7-py3-none-any.whl -
Subject digest:
757af4c705cf3fc1982fed6d970d191dfc961ee72c1828812c072851cfc93bd2 - Sigstore transparency entry: 194935538
- Sigstore integration time:
-
Permalink:
spacemanspiff2007/SmlLib@e7de6f33ab1c7e6a52880aefa38291ab98687a04 -
Branch / Tag:
refs/tags/1.7 - Owner: https://github.com/spacemanspiff2007
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@e7de6f33ab1c7e6a52880aefa38291ab98687a04 -
Trigger Event:
release
-
Statement type: