CaSSAndRA API

EinEinfach

Well-known member
Hallo zusammen,

ich habe eine Möglichkeit eingebaut über MQTT Befehle an CaSSAndRA zu schicken. Aktuell ist die Anzahl der Möglichkeiten relativ überschaubar, ist aber bei Bedarf erweiterbar. Da ich nicht weiß, wer was alles damit so vor hat, habe ich erstmal nur ein paar Sachen eingebaut, was ich so denke notwendig wäre. In der Theorie könnte man ntürlich die API so aufbohren, dass jeder Befehl möglich wäre, so dass man jedes beliebiges Frontend draufsetzen könnte, wenn der Dash nicht mehr einem gefällt.

Wechselt in Settings und geht zu API, dort klickt MQTT und gibt eure Daten ein, danach speichern und lässt den Backendserver neustarten
photo1697447325.jpeg

Wenn alles richtig eingegeben wurde, müsstet Ihr folgende Nachrichten sehen:
- status
- robot
- maps
- tasks
- mow parameters
- map
Die Befehle werden auf den api_cmd Topic gesendet. Erwartet wird ein JSON-String:
1. Karte wechseln:
Code:
{"maps": {"command": "load", "value": ["map name"]}}
2. Task auswählen:
Code:
{"tasks": {"command": "select", "value": ["task name"]}}
jeweils Verfügbare Namen seht ihr in dem maps bzw. tasks topic.
3. Mähen (alles):
Code:
{"robot":{"command": "mow", "value": ["all"]}}
Mähen (task):
Code:
{"robot":{"command": "mow", "value": ["task"]}}
Mähen (selection):
Code:
{"robot":{"command": "mow", "value": ["selection"]}}
4. Stopp:
Code:
{"robot":{"command": "stop"}}
5. Dock:
Code:
{"robot":{"command": "dock"}}
6. Ändern der Mähparametern:
Code:
{"mow parameters":{"pattern": "squares", "width": "0.20", "angle": 160, "distancetoborder": 5, "mowarea": true, "mowborder": 3, "mowexclusion": false, "mowborderccw": true}}
auch einzeln möglich
7. Selection setzen:
Code:
{"map":{"command":"set selection", "value":{"x": [0, 1, 1], "y": [0, 1, 0]}}}

Viel Spaß beim Testen, Wünsche gerne hier oder auf GitHub posten
---------------------------------------------------------------------------------------------------------

Hello everyone,
I've added a feature to send commands to CaSSAndRA via MQTT. Currently, the number of available options is relatively limited, but it can be expanded if needed. Since I don't know what everyone plans to do with it, I've initially incorporated a few things that I believe are necessary. In theory, the API could be expanded to support any command, allowing you to use any frontend you prefer if you no longer like the Dash.
To set it up, go to Settings, then select API, click on MQTT, enter your data, save, and restart the backend server.
If everything is entered correctly, you should see the following messages:
  • status
  • robot
  • maps
  • tasks
  • mow parameters
  • map
The commands are sent to the "api_cmd" topic. Expect a JSON string for the following commands:
You can find available names in the "maps" and "tasks" topics.
1. Switch map:
Code:
{"maps": {"command": "load", "value": ["map name"]}}
2. Select task:
Code:
{"tasks": {"command": "select", "value": ["task name"]}}
3. Mow (all):
Code:
{"robot":{"command": "mow", "value": ["all"]}}
Mow (task):
Code:
{"robot":{"command": "mow", "value": ["task"9}}
Mow (selection):
Code:
{"robot":{"command": "mow", "value": ["selection"]}}
4. Stop:
Code:
{"robot":{"command": "stop"}}
5. Dock:
Code:
{"robot":{"command": "dock"}}
6. Change mow parameters:
Code:
{"mow parameters":{"pattern": "squares", "width": "0.20", "angle": 160, "distancetoborder": 5, "mowarea": true, "mowborder": 3, "mowexclusion": false, "mowborderccw": true}}
auch einzeln möglich
7. Set selection:
Code:
{"map":{"command":"set selection", "value":{"x": [0, 1, 1], "y": [0, 1, 0]}}}

Enjoy testing, and feel free to share your feedback and wishes here or on GitHub.
 
Zuletzt bearbeitet:
Erst einmal danke für deine Arbeit. CaSSAndRA gefällt mir schon deutlich besser als der Standard.

Zwei kurze Ideen:
1. Die Möglichkeit bei einem Task zu einer bestimmten Prozentzahl zu springen, wäre schön, wenn man einmal unterbricht.
2. Start, Stop, Dock sollten unabhängig vom Task Start sein. Ich lasse mich immer wieder dazu verleiten auf den Play Pfeil zu drücken, um den Rover anzustoßen, wenn er im Dock steht, aber dann lädt er den gesamten Task neu.

Nun aber zum Feedback zur MQTT API:
Nach dem ersten Update heute Morgen war alles gut und ich konnte die API konfigurieren. Nach dem Update heute Mittag bekomme ich keine Verbindung mehr zum Rover. Wenn ich diese neu speichern will, bekomme ich auch nicht die Abfrage, ob ich mir sicher bin und dass der Server neu gestartet wird.

Hier ein Log Ausschnitt:
2023-10-16 20:23:35 INFO Performing get state http-request
2023-10-16 20:23:35 INFO TX: l VW[D\^
2023-10-16 20:23:35 INFO RX:
2023-10-16 20:23:35 WARNING HTTP request for state delivered implausible string
2023-10-16 20:23:39 INFO Connecting...
2023-10-16 20:23:39 INFO TX: AT+V,0x16
2023-10-16 20:23:39 INFO RX:
2023-10-16 20:23:39 WARNING Http request for props delivered implausible string
2023-10-16 20:23:43 INFO Connecting...
2023-10-16 20:23:43 INFO TX: AT+V,0x16
2023-10-16 20:23:43 INFO RX:
2023-10-16 20:23:43 WARNING Http request for props delivered implausible string
2023-10-16 20:23:47 INFO Connecting...
2023-10-16 20:23:47 INFO TX: AT+V,0x16
2023-10-16 20:23:47 INFO RX:
2023-10-16 20:23:47 WARNING Http request for props delivered implausible string
2023-10-16 20:23:51 INFO Connecting...
2023-10-16 20:23:51 INFO TX: AT+V,0x16
2023-10-16 20:23:52 INFO RX: V,Sunray,1.0.317,1,167,Linux,SR,RM18,1.1.15,96:d0:79:2d:9b:88,0xa2
 
Kannst du mal ein größeren Ausschnitt posten. Sieht zwar komisch aus, aber muss nicht an Cassandra liegen… irgendwie ist die Verbindung da, aber auch nicht wirklich
 
Das läuft gut (habe bisher nur lesen probiert, steuern kommt noch). Vielen Dank.

Das hier ist gar nicht genug zu würdigen, denn es hebt GPS basiertes Mähen auf eine ganz neue Ebene, da es unendlich viele Möglichkeiten bietet, das Mähen zu optimieren(!) und lässt die ganzen schlimmen Unzulänglichkeiten des Alfred halbwegs vergessen!!
 
Mir ist gerade aufgefallen., dass unter available_X sowohl Kartennamen, als auch Tasknamen und sie überschreiben sich immer wieder. Ist das so gedacht?
 
Nein, so ist das nicht gedacht:
Unter map available stehen alle deine Karten und es ändert sich nur wenn du eine Karte löscht, hinzufügst...
Unter tasks available stehen deine tasks, die zu der Karte gehören und diese ändern sich nur wenn du einen Tasks löscht, hinzufügst oder die Map umschaltest
 
Ah. Sorry. Mein System für automatische Generierung der Readings in der HA hat hier nicht zwischen den Pfaden unterschieden. Sorry. Mein Fehler.
 
Kannst du mal ein größeren Ausschnitt posten. Sieht zwar komisch aus, aber muss nicht an Cassandra liegen… irgendwie ist die Verbindung da, aber auch nicht wirklich
Ich hatte gestern leider keine Zeit für Alfred, aber habe mich heute noch einmal an das Problem gemacht. Ich kann nicht sagen was geackt hat, aber nun geht es. Ich könnte mir vorstellen es lag daran das ich eth0 und wlan0 gleichzeitig betreibe. Über den Winter wird der BananaPi einfach verschwinden müssen...

Nach folgenden Schritten lief es:

- CaSSAndRA update
- Raspberry "apt update" + "apt upgrade"
- Prioritäten für Netzwerkschnittstellen angelegt

Ich kann mich skippa1978 nur anschließen. Das ist so gut wie Alfred damit funktioniert und die neuen Möglichkeiten. Ich freue mich wie ein kleines Kind über jede neu Funktion. :)
 
@EinEinfach Ein paar Fragen:

  1. Ist es schon möglich, mehrere Tasks aneinanderzureihen und diese dann zu starten?
  2. was planst du unter "map". Der Pfad ist aktuell leer?
  3. Wäre es möglich auch die aktuelle Position, den nächsten Punkt bzw. alle Parameter unter Info zu übertragen?
 
Ist es schon möglich, mehrere Tasks aneinanderzureihen und diese dann zu starten?
Ja das geht.
Code:
{"tasks": {"command": "select", "value": ["task1", "task2", "task3"]}}
was planst du unter "map". Der Pfad ist aktuell leer?
Dort kannst du aktuell selection sehen, wenn du eine mit:
Code:
{"map":{"command":"set selection", "value":{"x": [0, 1, 1], "y": [0, 1, 0]}}
gesetzt hast. In Zukunft würde man dort auch den "go to" Punkt sehen und sonstiges was irgendwie zu der Karte gehört
Wäre es möglich auch die aktuelle Position, den nächsten Punkt bzw. alle Parameter unter Info zu übertragen?
Das kann ich relativ einfach machen. Ich habe eigentlich bewusst auf alle Statis was vom Roboter kommt verzichtet, da diese direkt vom Roboter abgerufen werden können. Ich weiß nicht, ob es sinnvoll ist. Ist das sinnvoll, soll ich die statis vom Roboter doppeln?
 
Aus meiner Sicht schon, da man alles an einem Ort hat und diese Infos dann auch einfacher wiederverwenden kann. Ich höre mir dazu aber gerne andere Meinungen an.
 
Ja das geht.
Code:
{"tasks": {"command": "select", "value": ["task1", "task2", "task3"]}}
Folgendes habe ich probiert:

Code:
{"tasks": {"command": "select", "value": ["03_Gewaechshaus_52", "13_Grillhuette_125"]}}

Das bringt MQTT in Cassandra zum Absturz (ohne Log). Jedenfalls nimmt es danach gar keine Befehle mehr an und es kommen auch keine Daten mehr. Erst ein Neustart hilft hier.

Mache ich noch was falsch?

Ich hatte schon ein issue eröffnet, zur Problematik, dass Cassandras API wortlos den Dienst quittiert, wenn es Kommandos bekommt, die es nicht kennt. Das gilt offenbar nicht nur für falsch formatiertes JSON.
 
Ich habe noch eine weitere Frage (die dann wichtig wird, wenn das aus dem vorherigen Beitrag funktioniert):

Muss, um eine Auswahl von Tasks zu wählen (mehrere Tasks) mow selection geschickt werden oder mow task?
 
So habe was eingecheckt bzgl. API. Kannst testen.
Bitte aufpassen der value muss immer eine Liste sein. Anstatt "value": "task1" muss es "value": ["task1"] sein. Und das für jedes value, egal ob robot, maps oder tasks
 
Danke. Das mit der Liste ist gut so, so lässt es sich besser automatisieren und man muss nicht zwischen EInzel- und Mehrfach auswahl unterscheiden. Ich teste...
 
Und läuft. Sehr schön. Danke.

Nochmal: Was du hier auf die Beine stellst, ist aus meiner Sicht genau das, was dem GPS basierten Mähen bisher gefehlt hat. Genau das, wo die Reise hingehen sollte. Und das ist keine Schleimerei...:) Danke!

Bei mir dauert es nun noch eine Weile, bis ich das automatisierte Mähsystem für unseren komplexen Garten auf die Beine gestellt habe. Leider macht mir Alfed selbst mit seinen Unzulänglichkeiten da auch oft einen Strich durch die Rechnung aber wenn ich das fertig habe, muss ich nur noch wenig selbst machen. :) Da fließen demnächst Wetterdaten, Stundenpläne der Kinder, Feuchtewerte, Regensensor und mehr ein.
 
Hat es schon einer von euch in node Red und könnte den Code exportieren? Ich bin im ersten Anlauf noch nicht so ganz fertig geworden. Ich konnte alles abfragen, aber das ausklammern einzelner statis hat nicht geklappt. Ich habe also bsw. nur Robot im ganzen abfragen können und konnte keine Entität mit Robot status anlegen.
 
Soweit bin ich noch nicht und ich werde wohl wie alle meine Scripte Blockly nutzen. Aufgrund dessen das der Winter aber vor der Tür steht wohl erst im Frühjahr schauen wie das super Projekt dann alles kann.
 
Oben