Mein Projekt CaSSAndRA zur Steuerung des Ardumowers

Wo speichert das Tool die Settings bzw. was macht es genau
Cassandra schreibt dann die Einstellungen in die JSON Files unter /sec/data
Was bedeutet dieser Reboot?
Der Backendserver wird neugestartet Frontend läuft weiter. Hat mit dem Service nichts zutun
dann findet offenbar weder das Speichern, noch der "Reboot" statt.
Doch, man sieht die Änderungen im Frontend nicht, da es nur einmal beim Hochfahren des Frontends gerendert wird. Ist ein Problem, was ich noch beheben muss
Wenn ich im Vorhinein bestimme (direkt im JSON), dass die Settings sein sollen: HTTP, IP: 10.x.x.x, Passwort: yyyyyyyy, übernimmt er davon beim Start nur die IP im Frontend, nicht die Einstellung HTTP und auch nicht das PW.
Doch macht CaSSAndRA trotzdem. Radiobuttons bleiben immer ausgeblendet und das PW wollte ich nicht anzeigen lassen, das gleiche ist es auch bei den Feldern MQTT username und MQTT password.

Zeig mal bitte deine commcfg.json
 
{
"USE": "HTTP",
"MQTT": [
{
"CLIENT_ID": "Ardumower"
},
{
"USERNAME": null
},
{
"PASSWORD": null
},
{
"MQTT_SERVER": "10.x.xx.xx"
},
{
"PORT": 1883
},
{
"MOWER_NAME": "ardumower/Ardumower"
}
],
"HTTP": [
{
"IP": "http://10.x.x.xxx"
},
{
"PASSWORD": "xxxxxx"
}
],
"UART": [
{
"SERPORT": "/dev/ttyACM0"
},
{
"BAUDRATE": 115200
}
]
}
 
Warum ist der Password für http ein String?
Wenn du nichts in der config.h von der Sunray FW geändert hast dann ist es einfach 123456
 
Guten Morgen,

ich bin gestern mit der App auf einen RPi 4 gewechselt und der Unterschied ist deutlich spürbar.
Die Berechnung einer Lasso-Auswahl läuft flüssig und das Ergebnis steht selbst bei komplexen Karten schnell zur Verfügung.
Auf dem RPi 2 Zero stellte ich mir oft die Frage ob da überhaupt noch was passiert und die Berechnung lief gefühlt Minuten statt Sekunden.

Ein Problem habe ich gefunden. Ich habe eine Sunray.json mit 9 Karten importiert. Absteigend habe ich mit der ersten begonnen und die Karten nach und nach übertragen. Die erste Karte nennt sich in Sunray "Hauptkarte" und ist mit Abstand die komplexeste.
Der Import scheint fehlerfrei und die Karte kann mit Mapping ausgewählt und dargestellt werden. Die Nutzung der Perimeter funktioniert jedoch nicht, die Karte kann nicht verwendet werden. Alle anderen sind kein Problem.

Hier ein Auszug aus dem Logging:

Code:
2023-05-24 08:08:06 ERROR Exception on /_dash-update-component [POST]
Traceback (most recent call last):
  File "shapely/speedups/_speedups.pyx", line 252, in shapely.speedups._speedups.geos_linearring_from_py
AttributeError: 'list' object has no attribute '__array_interface__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/pi/.local/lib/python3.9/site-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/pi/.local/lib/python3.9/site-packages/flask/app.py", line 1486, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/pi/.local/lib/python3.9/site-packages/flask/app.py", line 1484, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/pi/.local/lib/python3.9/site-packages/flask/app.py", line 1469, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/pi/.local/lib/python3.9/site-packages/dash/dash.py", line 1283, in dispatch
    ctx.run(
  File "/home/pi/.local/lib/python3.9/site-packages/dash/_callback.py", line 450, in add_context
    output_value = func(*func_args, **func_kwargs)  # %% callback invoked %%
  File "/home/pi/CaSSAndRA/CaSSAndRA/src/components/mapping/modal.py", line 129, in selected_perimeter
    current_map.create(selected_perimeter)
  File "/home/pi/CaSSAndRA/CaSSAndRA/src/backend/data/mapdata.py", line 97, in create
    self.create_perimeter_polygon()
  File "/home/pi/CaSSAndRA/CaSSAndRA/src/backend/data/mapdata.py", line 46, in create_perimeter_polygon
    exclusions = Polygon(exclusion_coords.values.tolist())
  File "/home/pi/.local/lib/python3.9/site-packages/shapely/geometry/polygon.py", line 261, in __init__
    ret = geos_polygon_from_py(shell, holes)
  File "/home/pi/.local/lib/python3.9/site-packages/shapely/geometry/polygon.py", line 539, in geos_polygon_from_py
    ret = geos_linearring_from_py(shell)
  File "shapely/speedups/_speedups.pyx", line 346, in shapely.speedups._speedups.geos_linearring_from_py
ValueError: A LinearRing must have at least 3 coordinate tuples

Ich stelle auch gerne die JSON zur Verfügung.

Viele Grüße
Oliver
 
Jetzt wäre interessant zu wissen was Cassandra im Terminal beim Starten ausgibt
Ich habe mir das Log gerade mal etwas genauer angesehen. Es gibt einen Code 200 aber der String, der zurück kommt, scheint nicht zu passen bzw. leer zu sein.

Kann es sein, dass Alfred hier andere Strings zurücksendet, als Ardumower? Kann ich mir nicht vorstellen. HTTP sollte funktionieren.

2023-05-24 06:27:28 WARNING Backend: HTTP request for state delivered implausible string
2023-05-24 06:27:30 INFO Backend: Performing get state http-request
2023-05-24 06:27:30 DEBUG Calced checksumme: 0x13
2023-05-24 06:27:30 DEBUG encryption true

2023-05-24 06:21:39 DEBUG Starting new HTTP connection (1): 10.x.x.xxx:80
2023-05-24 06:21:39 DEBUG http://10.x.x.xxx:80 "POST / HTTP/1.1" 200 0
2023-05-24 06:21:39 DEBUG Status code: 200
2023-05-24 06:21:39 DEBUG Content:
2023-05-24 06:21:39 WARNING Backend: HTTP request for state delivered implausible string
 
Zuletzt bearbeitet:
Hier noch ein Fehler beim Start:

2023-05-24 06:18:38 INFO Dash is running on http://0.0.0.0:8050/
* Serving Flask app 'app'
* Debug mode: off
2023-05-24 06:18:39 ERROR Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/dash/dash.py", line 1230, in dispatch
cb = self.callback_map[output]
KeyError: 'modal-info-body.children'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/usr/local/lib/python3.10/site-packages/dash/dash.py", line 1279, in dispatch
raise KeyError(msg) from missing_callback_function
KeyError: "Callback function not found for output 'modal-info-body.children', perhaps you forgot to prepend the '@'?"
2023-05-24 06:18:39 ERROR Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/dash/dash.py", line 1230, in dispatch
cb = self.callback_map[output]
KeyError: '..button-home.disabled...button-mow-all.disabled...button-zone-select.disabled...button-goto.disabled...button-cancel.disabled..'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/usr/local/lib/python3.10/site-packages/dash/dash.py", line 1279, in dispatch
raise KeyError(msg) from missing_callback_function
KeyError: "Callback function not found for output '..button-home.disabled...button-mow-all.disabled...button-zone-select.disabled...button-goto.disabled...button-cancel.disabled..', perhaps you forgot to prepend the '@'?"
2023-05-24 06:18:39 ERROR Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/dash/dash.py", line 1230, in dispatch
cb = self.callback_map[output]
KeyError: '..button-go.active...button-stop.active..'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/usr/local/lib/python3.10/site-packages/dash/dash.py", line 1279, in dispatch
raise KeyError(msg) from missing_callback_function
KeyError: "Callback function not found for output '..button-go.active...button-stop.active..', perhaps you forgot to prepend the '@'?"
2023-05-24 06:18:39 ERROR Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/dash/dash.py", line 1230, in dispatch
cb = self.callback_map[output]
KeyError: 'state-map.figure'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/usr/local/lib/python3.10/site-packages/dash/dash.py", line 1279, in dispatch
raise KeyError(msg) from missing_callback_function
KeyError: "Callback function not found for output 'state-map.figure', perhaps you forgot to prepend the '@'?"
2023-05-24 06:18:40 WARNING Backend: HTTP-Connection to the rover lost or not possible. Trying to reconnect
2023-05-24 06:18:40 INFO Backend: Try initial HTTP request
 
Ich habe mir das Log gerade mal etwas genauer angesehen. Es gibt einen Code 200 aber der String, der zurück kommt, scheint nicht zu passen bzw. leer zu sein.

Kann es sein, dass Alfred hier andere Strings zurücksendet, als Ardumower? Kann ich mir nicht vorstellen. HTTP sollte funktionieren.
Ok, jetzt ist gekommen was ich befürchtet habe. Generell ist bei http Connection ein Wurm drin. Der Header und der Content stimmen nicht überein und deswegen antwortet Rover mit leerem String. So richtig das Problem habe ich nicht verstanden sondern mit try and error für den ESP32 hinbekommen. Ich muss mal late Threads raussuchen, wo teilweise das Problem angesprochen wurde bzw. über die mögliche Lösungen diskutiert wurde.

Du kannst folgendes probieren:
In der Datei src/backend/comm/httpcomm.py nach Zeilen mit res=requests.post suchen. Müssten 5 sein. Dort bei data=data+‘/n‘ das +‘/n‘ rauslöschen. Dann müsste die content Länge für reparierten Verbindungen (nicht wie bei ESP32) passen

Das zweite Fehler kannst du ignorieren, kommt manchmal beim Starten, habe ich noch nicht verstanden warum
 
Ok, jetzt ist gekommen was ich befürchtet habe. Generell ist bei http Connection ein Wurm drin. Der Header und der Content stimmen nicht überein und deswegen antwortet Rover mit leerem String. So richtig das Problem habe ich nicht verstanden sondern mit try and error für den ESP32 hinbekommen. Ich muss mal late Threads raussuchen, wo teilweise das Problem angesprochen wurde bzw. über die mögliche Lösungen diskutiert wurde.

Du kannst folgendes probieren:
In der Datei src/backend/comm/httpcomm.py nach Zeilen mit res=requests.post suchen. Müssten 5 sein. Dort bei data=data+‘/n‘ das +‘/n‘ rauslöschen. Dann müsste die content Länge für reparierten Verbindungen (nicht wie bei ESP32) passen

Das zweite Fehler kannst du ignorieren, kommt manchmal beim Starten, habe ich noch nicht verstanden warum
Ich probiere das und melde mich. Danke.
 
Ok, jetzt ist gekommen was ich befürchtet habe. Generell ist bei http Connection ein Wurm drin. Der Header und der Content stimmen nicht überein und deswegen antwortet Rover mit leerem String. So richtig das Problem habe ich nicht verstanden sondern mit try and error für den ESP32 hinbekommen. Ich muss mal late Threads raussuchen, wo teilweise das Problem angesprochen wurde bzw. über die mögliche Lösungen diskutiert wurde.

Du kannst folgendes probieren:
In der Datei src/backend/comm/httpcomm.py nach Zeilen mit res=requests.post suchen. Müssten 5 sein. Dort bei data=data+‘/n‘ das +‘/n‘ rauslöschen. Dann müsste die content Länge für reparierten Verbindungen (nicht wie bei ESP32) passen

Das zweite Fehler kannst du ignorieren, kommt manchmal beim Starten, habe ich noch nicht verstanden warum
Habe ich ausprobiert. Leider ergibt sich keine Änderung. Danke für den Support bisher.
 
Kannst du ab Zeile 118 von httpcomm.py das hinzufügen
logger.debug(res.text)
Und dann die Ausgabe mal hier posten
 
Zeile 118 gab keinen Effekt. Nachdem ich mir den Code angesehen habe (ich stehe mit Python auf Kriegsfuß, kenne aber grundsätzliche Strukturen der Programmierung), habe ich es dann nochmal in Zeile 112 hinzugefügt, weil es da auch sinnvoll erschien. Aber dann erscheint im Log, wie erwartet nur eine leere DEBUG Zeile. Es sieht also so aus, als wäre der String wirklich leer.

2023-05-24 08:14:13 INFO Backend: Performing get state http-request
2023-05-24 08:14:13 DEBUG Calced checksumme: 0x13
2023-05-24 08:14:13 DEBUG encryption true
2023-05-24 08:14:13 DEBUG Starting new HTTP connection (1): 10.x.x.xxx:80
2023-05-24 08:14:14 DEBUG http://10.x.x.xxx:80 "POST / HTTP/1.1" 200 0
2023-05-24 08:14:14 DEBUG Status code: 200
2023-05-24 08:14:14 DEBUG Content:
2023-05-24 08:14:14 DEBUG
2023-05-24 08:14:14 WARNING Backend: HTTP request for state delivered implausible string
 
Zuletzt bearbeitet:
Ja ok, kannst die Zeile wieder rausnehmen, ich habe gesehen dass ich das sowieso schon ausgebe.

Ich brauche ein Beispiel Frage Antwort auf AT+S Anfrage vom Alfred. Am besten mit Wireshark mitgeschnitten. Sonst wird es hier try and error bis unendlich

Evtl. passt meine Berechnung des Encryption nicht. Wenn du kannst, mal die Verschlüsselung in der Alfred config rausnehmen.
 
Tatsächlich habe ich keine Idee, wie man das in der config ausschaltet. Einfach das Passwort ausschalten?

Mir fehlt aktuell noch die Phantasie, wie ich das mit Wireshark mitschneiden könnte...

Ich muss das alles wohl doch noch auf später verschieben.

Wenn ich das allerdings richtig sehe, dann kommt ja genau bei der AT+S Anfrage dieser leere String. Was soll Wireshark da anderes indizieren?
 
Oben