Closed bambby closed 1 year ago
Hi Achim :-)
Um Daten von Sensoren via HTTP Request von meinem Gateway abzufragen (das auf einem anderen Raspi läuft und Gerätedaten kontinuierlich in eine SQL Datenbank speichert), benutze ich den sepia-mesh-nodes Server
Coole Idee 🙂👍
Ist in den Settings noch irgendwas zu berücksichtigen? [...] Gibt es irgendwas in SEPIA, das das Senden von Requests verhindert?
Ich bin gerade nicht sicher, ob die security sandbox auch HTTP requests beeinflusst 🤔, aber versuch mal in Settings/node.custom.properties
den Wert zu setzen: use_sandbox_security_policy=false
.
Ich prüfe währenddessen noch mal die Mesh-Node Einstellungen, ist ne Weile her, dass ich da rein geguckt habe ^^.
Es gibt übrigens in dem sepia.server.core.tools
package auch die Klasse Connectors
mit jede Menge nützlichen HTTP request Methoden wie z.B. apacheHttpGET, die das Plugin eventuell noch einfacher machen. Basic authentication kann in der Apache Methode z.B. über den Header gemacht werden.
Ich habe mir den Code noch mal angeguckt und es kann sein dass die Klasse PasswordAuthentication
durch den SecurityManager
(und somit 'use_sandbox_security_policy') geblockt wird. Falls das tatsächlich der Fall ist sollte die Einstellung funktionieren, falls nicht versuch bitte mal die Authentifizierung über den Header:
String userpasswd = username + ":" + password;
String authData = Base64.getEncoder().encodeToString(userpasswd.getBytes());
Map<String, String> headers = Connectors.addAuthHeader(null, "Basic", authData);
headers.put("Accept", "application/json");
HttpClientResult res = Connectors.apacheHttpGET(myUrl, headers);
if (res.statusCode == 200){
JSONObject myJson = JSON.parseStringOrFail(result.content);
}else{
throw new RuntimeException("Failed to GET '" + myUrl + "' - response code: " + res.statusCode + " - Error: " + res.statusLine);
}
Ich hoffe der Code stimmt so, ich konnte es nicht live testen.
Hallo Florian, die Einstellung der Security Policy hat das Problem gelöst! Vielen Dank! Sind irgendwelche gravierenden Security Auswirkungen zu befürchten mit der neuen Einstellung?
Solange du alle Plugins selbst verwaltest, sollte es keine Probleme geben. Die Sandbox soll eigentlich nur verhindern, dass in den Plugins kein Unfug getrieben wird :-)
Issue solved
Hallo Florian, erstmal alle Hochachtung für dieses sehr komplexe Open-Source Projekt. Ich hab's auf einem Raspi installiert und es läuft. Ich würde gerne den Sprachassistenten benutzen, um meine SmartHome Automation damit zu steuern und Geräte abzufragen. Das Steuern von Aktoren funktioniert ohne Probleme. Über den Teach Server habe ich einen Link "gelehrt", um damit direkt ein Smart Device anzusteuern, z.B. http://192.168.178.131/light/0?turn=on. Um Daten von Sensoren via HTTP Request von meinem Gateway abzufragen (das auf einem anderen Raspi läuft und Gerätedaten kontinuierlich in eine SQL Datenbank speichert), benutze ich den sepia-mesh-nodes Server. Dazu habe ich ein Plugin erstellt, das einen entsprechenden Request an das Gateway schicken soll. Jedoch schickt das Plugin den Request nicht raus. Logausgabe ist:
Der Code ist:
Ist in den Settings noch irgendwas zu berücksichtigen? Generell funktioniert das Senden des Requests. Ich hab das Plugin nachgebaut und aus einem Tomcat Server heraus geschickt und es kommt an und wird beantwortet. Gibt es irgendwas in SEPIA, das das Senden von Requests verhindert?
Viele Grüße Achim