Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Python client package to communicate with the Electrolux Connectivity Platform (ECP) used by some home appliances, Electrolux owned brands, like: Electrolux, AEG, Frigidaire, Husqvarna.
Tested with AEG washer-dryer, but probably could be used with some internet connected ovens, diswashers, fridges, airconditioners.
It is general client, and all parameters (called HACL), that can be read or set, names and translations are dynamically generated, based on appliance profile file, downloaded from ECP servers.
This package is compatibile with home appliances registered with one of this ECP based mobile apps:
EMEA region:
APAC region:
LATAM region:
NA region:
Frigidaire:
This package is not compatibile with appliances controlled with this mobile apps:
To use this library, there's an account with Electrolux/AEG/Frigidaire app must be created. By default, library is using EMEA region apps credentials. If account is created in other region app, region
parameter must be set. If created account is not supported, You can manually set regionServer
, customApiKey
and customApiBrand
parameters (from sniffed traffic or extracted from mobile app).
import pyelectroluxconnect
ses = pyelectroluxconnect.Session(username, password, region="emea", tokenFileName = ".electrolux-token", country = "US", language = None, deviceId = "CustomDeviceId", verifySsl = True, regionServer=None, customApiKey=None, customApiBrand=None)
or minimal input set:
import pyelectroluxconnect
ses = pyelectroluxconnect.Session(username, password)
where:
username, password
- ECP (Electrolux site) credentials
tokenFileName
- file to store auth token (default: ~/.electrolux-token
)
region
- account region (defalt emea
. Tested with emea
, apac
, na
, latam
, frigidaire
)
country
- 2-char country code (default US
)
language
- 3-char language code for translations (All
- for all delivered languages, default: None
)
deviceId
- custom id of client used in ECP, should be unique for every client instance (default: CustomDeviceId
)
verifySsl
- verify ECP servers certs (default: True
)
regionServer
- region server URL (default is based on selected region)
customApiKey
- custom value of "x-ibm-client-id" and "x-api-key" HTTP headers (default is based on selected region)
customApiBrand
- custom "brand" value (default is based on selected region)
ses.login()
appllist = ses.getAppliances()
print(appllist)
for appliance in appllist:
print(ses.getApplianceConnectionState(appliance))
List of parameters (HACL's) with allowed values, translations, etc... Note, that not all parameters can be read, or set over ECP.
Each parameter is in "module:hacl" form. Module is internal appliance module symbol, hacl is parameter hex symbol, that can be read from or set to module.
print(ses.getApplianceProfile(appliance))
Get latest appliance state from ECP. When appliance is online, current state updates are available over Internet with MQTT protocol. To get credentials to connect any MQTT client to ECP MQTT broker, use registerMQTT()
method.
to get latest state from a platform:
print(ses.getApplianceState(appliance, paramName = None, rawOutput = False))
paramName
- comma separated list of patrameter names (None
(default) for all params)
rawOutput
- get list of parameters in received form. False
(default): parse output to more friendly form (with translations, etc)
Send value to appliance (list of supported appliance destinations (destination
) and parameters (hacl
) with allowed values (value
), You can get with getApplianceProfile()
method):
ses.setHacl(appliance, hacl, value, destination)
hacl
- hex number of param (HACL)
value
- value to set (it could be number or list of parameters (for container HACL type))
destination
- destination module name, from profile path (NIU
, WD1
, etc...)
washer-dryer examples:
ses.setHacl(appliance, "0x1C09", [{"50":"0x0000"},{"12":"128"},{"6.32":1},{"6.33":1}], "WD1")
ses.setHacl(appliance, "0x0403", 4, "WD1")
print(ses.registerMQTT())
returns parameters required to login to Electrolux MQTT broker with any MQTT client:
Url
- Host of MQTT broker (with port number)
OrgId
- Organization ID
ClientID
- MQTT Client ID
DeviceToken
- Token required to authentication (for IBM broker, use string use-token-auth
as username, DeviceToken as password)
List of MQTT topics (QoS = 0) to subscribe:
iot-2/cmd/live_stream/fmt/+
iot-2/cmd/feature_stream/fmt/+
ses.unregisterMQTT()
print(ses.getMqttState(mqttJsonPayload))
Parse message from MQTT broker, and return in getApplianceState(...) like form.
mqttJsonPayload
- MQTT message payload in JSON form.
Please Note: Electrolux moved MQTT broker from IBM servers. After that, this code is not valid.
import paho.mqtt.client as mqtt
import pyelectroluxconnect
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("iot-2/cmd/live_stream/fmt/json", 0)
def on_message(client, userdata, msg):
print(ses.getMqttState(msg.payload))
ses = pyelectroluxconnect.Session(login, passwd, language = "pol", region="emea", deviceId='MQTTHA2')
ses.login()
mqtt_params = ses.registerMQTT()
client = mqtt.Client(client_id = mqtt_params["ClientID"])
client.tls_set(ca_certs = ses.getSSLCert())
client.username_pw_set("use-token-auth", mqtt_params["DeviceToken"])
client.on_connect = on_connect
client.on_message = on_message
client.connect(mqtt_params["Url"].split(":")[0], int(mqtt_params["Url"].split(":")[1]), 60)
while True:
client.loop()
This library was not made by AB Electrolux. It is not official, not developed, and not supported by AB Electrolux.
FAQs
Interface for Electrolux Connectivity Platform API
We found that pyelectroluxconnect demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.