Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
API-Calls für Alpha Ess
Es gibt keine öffentliche Dokumentation zur aktuellen API von Alpha Ess. Ich habe den Netzwerkverkehr meines Browsers etwas unter die Lupe genommen und hier die entscheidenen Request nachgebaut.
Ich übernehme keinerlei Haftung für die Verwendung dieses Ruby-Modules. Das Modul ist selbstgebaut und ist nur rudimentär getestet. Also alles komplett auf eigenes Risiko.
gem install alpha_ess
Die verwendeten Umgebungsvariablen am besten in ein Textfile schreiben, wodrin die Variablen exportiert werden und dann das Textfile in der bash sourcen.
Vor der Ausführung des Ruby-Scriptes sollten folgende Umgebungsvariablen gesetzt werden:
ess_serial, ess_username und ess_password
Das Textfile mit dem Namen ess_env
könnte also wie folgt aussehen:
export ess_serial=ABC000123
export ess_username=meine@email.de
export ess_password=mein_password
dann source mit
. ./ess_env
po_user und po_token , beides über pushover Website einstellen. Pushover App gibt es für Smartphones und Tablets für einmalig 5 €.
Das Textfile mit dem Namen po_env
könnte also wie folgt aussehen:
export po_token=sdfisdfoiodisosdifs
export po_user=dflgkdlkjneofifslkdnv
dann source mit
. ./po_env
Vor dem Start des Scripts beide Env-Files sourcen und dann das Ruby-Script mit dem gewünschten Code ausführen.
. ./ess_env
. ./po_env
./a_ess_script.rb
Alternativ kann man die Variablen auch direkt im Rubyscript setzen und die Funktionen damit aufrufen:
ae = AlphaEss.new(ess_serial, ess_username, ess_password)
...
ae.send_pushover_alarm_by_soc("Nachrichtentext ...", po_user, po_token)
Wenn ihr wissen wollt, was die einzelnen Funktionen zurückgeben und wo ihr welche Daten findet, dann probiert es einfach aus. Ich werde sicherlich bald ein youtube Video dazu machen, wo ich das vorführe.
Folgende 4 Funktionen für das Abholen von Daten gibt es derzeit:
Hier wird es spannend. Die Funktion set_custom_use_ess_setting
erwartet einen Ruby-Hash. Wie die Schlüssel und Werte aussehen sollten, lassen sich aus der Ausgabe der Funktion get_custom_use_ess_setting
ableiten.
Am besten Ihr spielt in den Einstellungen auf der Website herum speichert sie und prüft mit get_custom_use_ess_setting
welche Schlüssel sich wie verändert haben. Dann habt ihr einen Idee wie ihr diese Werte per Script setzen
könnt. Viel Erfolg :-) .
Hinweis: Man kann über get_custom_use_ess_setting
die Einstellungen sichern. Einfach die Ausgabe in eine Datei schreiben.
Die Daten über /api/ESS/GetLastPowerDataBySN
werden alle 10 Sekunden von der API neu bereitgestellt.
require "alpha_ess"
ae = AlphaEss.new
data = ae.get_last_power_data()
netz = data["pmeter_l1"].to_f + data["pmeter_l2"].to_f + data["pmeter_l3"].to_f
puts "
Batteriestatus: #{data["soc"]}
PV-Leistung: #{data["ppv1"]}
Netzbezug / Einspeisung: #{netz}
Batteriebezug / Ladung: #{data["pbat"]}
Verbrauch: #{data["pbat"] + data["ppv1"].to_f + netz}
"
Hier die Ausgabe und der Vergleich zur Website:
require "alpha_ess"
ae = AlphaEss.new
ae_data = ae.get_last_power_data()
batterie_ladung_erwartet = 15
if (ae_data["soc"].to_f < batterie_ladung_erwartet)
ae.send_pushover_alarm_by_soc "Die Batterie hat aktuell eine Ladung von #{ae_data["soc"]} %, erwartet sind #{batterie_ladung_erwartet} %!"
else
puts "OK, die Ladung beträgt derzeit #{ae_data["soc"]} %."
end
# ae.set_min_soc(((ae_data["soc"].to_f)+0.9).to_i)
# sleep 10
min_netzbezug_erwartet = 50 # Watt
aktueller_netzbezug = ae_data["pmeter_l1"].to_f + ae_data["pmeter_l2"].to_f + ae_data["pmeter_l3"].to_f
if (aktueller_netzbezug < min_netzbezug_erwartet)
ae.send_pushover_alarm_by_soc "Stromausfall ???"
end
require "alpha_ess"
ae = AlphaEss.new
bat_min = ae.get_custom_use_ess_setting()["bat_use_cap"]
puts "Batterie-Minimum: #{bat_min}"
ae.set_custom_use_ess_setting({"bat_use_cap" => 15})
bat_min = ae.get_custom_use_ess_setting()["bat_use_cap"]
puts "Batterie-Minimum neu: #{bat_min}"
require "alpha_ess"
ae = AlphaEss.new
# aktueller Tag
ae.get_stics_by_period()
# letzte 3 Tage, ohne den aktuellen Tag
ae.get_stics_by_period( (Time.now-86400*3).strftime("%Y-%m-%d"), (Time.now-86400).strftime("%Y-%m-%d"))
FAQs
Unknown package
We found that alpha_ess demonstrated a not healthy version release cadence and project activity because the last version was released 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
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.