-
-
Notifications
You must be signed in to change notification settings - Fork 225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Limit setzen über API klappt nicht mehr seit 0.8.70 #1415
Comments
ich hab's auch mit v0.8.77 noch nicht geschafft 🫤 auch liefert nur die älteren versionen funktionieren auch bei mir wie gewohnt. |
ich bin dabei und habe auch schon eine bessere Version parat. Aktuell habe ich nur das Problem, das der ESP durch API Anfragen neu startet. Ich weiß noch nicht warum und was der Auslöser ist, das wollte ich heute noch herausfinden. |
ab Version Das Passwort muss nur einmalig in Klartext übertragen werden. Nach 20 Minuten erlischt ein generierter Token, sofern in der Zwischenzeit nicht ein weiteres Kommando gesendet wurde. Jedes Kommando setzt das Timeout der 20 Minuten wieder zurück. Zur weiteren Absicherung wird die IP-Adresse der API ausgewertet. Das heißt, wenn im Netzwerk der Token mitgelesen werden sollte, kann trotzdem nicht auf die API zugegriffen werden, da beim Authenifizieren die IP-Adresse im ESP gespeichert wird. Jede Authentifizierung führt zu einem neuen Token. Theoretisch wäre auch ein zugriff von zwei versch. Clients möglich, diese müssten sich aber für jedes Kommando neu authentifizieren. Dafür müsste jedes mal das Passwort im Klartext übertragen werden was nicht zu empfehlen ist. Ich bin sehr gespannt, wie ihr meine Umsetzung findet und wie ihr damit zurecht kommt. 😊 Python Test Script (Limit auf 100% setzen)Die IP-Adresse muss geändert werden. Passwort ist hier `admin`. Man kann den Token beliebig oft wiederverwenden - man muss nur innerhalb des Timeouts von 20 Minuten bleiben.import requests
import json
url = 'http://192.168.0.81/api/ctrl'
myobj = {'cmd': 'limit_nonpersistent_relative', 'val': '1000', 'id': 0}
x = requests.post(url, json = myobj)
print(x.text)
myobj = {'cmd': 'auth', 'val': 'admin'}
x = requests.post(url, json = myobj)
print(x.text)
y = json.loads(x.text)
myobj = {'cmd': 'limit_nonpersistent_relative', 'val': '1000', 'id': 0, 'token': y["token"]}
x = requests.post(url, json = myobj)
print(x.text)
myobj = {'cmd': 'limit_nonpersistent_relative', 'val': '1000', 'id': 0, 'token': y["token"]}
x = requests.post(url, json = myobj)
print(x.text) Python Test Script - Output{"success":false,"error":"not logged in, command not possible!"}
{"success":true,"token":"I6NWJ91ITOU39CTW"}
{"success":true,"id":0}
{"success":true,"id":0} |
fragen:
thx |
@lumapu : hier bin ich grad beim implementieren drübergestolpert: bei mir geht das mit jedem "ausgedachten" Token, dann kommt immer successful = true zurück und das Limit wird eingestellt. Auch ohne abgerufenem token. edit: irgendwie komisch, ich kann es nicht mehr nachstellen. Es war aber definitiv so, da ich mich wunderte wieso es funktioniert obwohl ich den Token noch gar nicht implementiert hatte... |
## V1.73 ### script * Support of AHOY-DTU Authentication, #132 and lumapu/ahoy#1415 ### Config * added `AHOY_PASSWORD =` to `AHOY_DTU`
Danke für euer Feedback. Folgendes habe ich angepasst:
Python Test Script (Limit auf 100% setzen)Die IP-Adresse muss geändert werden. Passwort ist hier `admin`. Man kann den Token beliebig oft wiederverwenden - man muss nur innerhalb des Timeouts von 20 Minuten bleiben. Zuerst eine Anfrage, die mit gesetztem Passwort fehlschlägt. Dann kommt eine Anfrage mit eingebetteter Authentifizierung. Die nächsten beiden Anfragen nutzen den zurückgegebenen Token. Die letzten Beiden Zeilen zeigen eine Option, die Authentifizierung gesondert zu machen.import requests
import json
url = 'http://192.168.0.81/api/ctrl'
myobj = {'cmd': 'limit_nonpersistent_relative', 'val': '100.0', 'id': 0}
x = requests.post(url, json = myobj)
print(x.text)
myobj = {'auth': 'admin', 'cmd': 'limit_nonpersistent_relative', 'val': '1000', 'id': 0}
x = requests.post(url, json = myobj)
print(x.text)
y = json.loads(x.text)
myobj = {'cmd': 'limit_nonpersistent_relative', 'val': '100.0', 'id': 0, 'token': y["token"]}
x = requests.post(url, json = myobj)
print(x.text)
myobj = {'cmd': 'limit_nonpersistent_relative', 'val': '99.9', 'id': 0, 'token': y["token"]}
x = requests.post(url, json = myobj)
print(x.text)
myobj = {'auth': 'admin'}
x = requests.post(url, json = myobj)
print(x.text)
y = json.loads(x.text)
myobj = {'cmd': 'limit_nonpersistent_relative', 'val': '99.8', 'id': 0, 'token': y["token"]}
x = requests.post(url, json = myobj)
print(x.text) Python Test Script - Output{"success":false,"error":"ERR_PROTECTED"}
{"success":true,"token":"5OH37BUUQP1SWOT3","id":0}
{"success":true,"id":0}
{"success":true,"id":0}
{"success":true,"token":"U8BFVP2UYKDO6N8X"}
{"success":true,"id":0} edit: mögliche Fehler:
|
thx, bereits geflasht und wir beginnen zu testen 👍
thx & greetings 👍🙏 |
wie sieht's bei dir aus ? ps, weil cross projects: (die non localized error message auswertung bei auth fehlern ist optional, solange man die englische ahoy firmware verwendet. |
ne passt noch nicht von der DTU (ich konnte nur in der Pause schnell schauen, werde das nachher implementieren), wenn das Passwort im AHOY vergeben wird und die DTU neu gestartet wird, dann akzeptiert die DTU auch ohne auth das Kommando. wurde ein mal ein Token abgerufen, dann gehen die cmd-befehle auf error. (wie gewünscht) @lumapu kannst du das nachstellen? |
## V1.75 ### script * refactoring, all DTU commands moved into DTU class * support newest version of openDTU (API changed, see https://github.com/tbnobody/OpenDTU/releases/tag/v24.2.12) * set min Version of openDTU to v24.2.12 * support newest version of AhoyDTU (Authentication, removed Factor, see lumapu/ahoy#1415) * set min Version of AhoyDTU to 0.8.80 ### Config * renamed `AHOY_PASSWORD =` to `AHOY_PASS` (like openDTU)
@reserve85 tatsächlich, leerer Token geht bei mir auch, echt komisch. Utnersuche ich gleich. |
Platform
ESP32
Assembly
I did the assebly by myself
nRF24L01+ Module
nRF24L01+ plus
Antenna
external antenna
Power Stabilization
Elko (~100uF)
Connection picture
Version
0.8.76
Github Hash
7c532ca
Build & Flash Method
AhoyDTU Webinstaller
Setup
none
Debug Serial Log output
Error description
Seit der Ahoy Version 0.8.70 klappt das Limit senden über die API nicht mehr, wenn in Ahoy ein Passwort vergeben ist. Wenn das Passwort gelöscht wird klappt es wieder. http://AhoyIP/api/ ist aber erreichbar, ob mit oder ohne Passwort.
Das Limit setze ich hiermit:
https://github.com/reserve85/HoymilesZeroExport
Gibt auch dort ein Issue: reserve85/HoymilesZeroExport#132
The text was updated successfully, but these errors were encountered: