I'm new to Graphviz/Dot and tried to create my first Dot-Diagram. The Basics went very quick but Fixing the layout took me much time and I think I'm lost enough time now and better ask for help by more experienced People...
It's about the routing of an edge which I already tried to fix by telling where to locate the edge at the nodes as describe here: Strange edge placement in Graphviz Dot This worked but the Routing is the same strange Thing (should bi right instead of left through all content).
The second one is the node Placement of the three bottom nodes left. This could be placed much better so that the diagram would fit perfect on a Portrait A4 page...

digraph {
"PassSlave1" [label="Pass command to slave (2nd tier)"]
"PassSlave2" [label="Pass command to slave (2nd tier)"]
"Success1" [label="CMD_SIGNAL_SUCCESS", shape=box]
"Success2" [label="CMD_SIGNAL_SUCCESS", shape=box]
"PowerUp" [label="Power up / System reset", peripheries=2, color="red", fontcolor="red"]
"Acknowledge1" [label="CMD_SIGNAL_ACKNOWLEDGE", shape=box]
"Acknowledge2" [label="CMD_SIGNAL_ACKNOWLEDGE", shape=box]
subgraph bl {
"PowerUp" -> "Wait for \"Enter bootloader\" request"
"Wait for \"Enter bootloader\" request" -> "Enter bootloader" [label="\"Enter bootloader\" request received"]
"Wait for \"Enter bootloader\" request" -> "Start Firmware" [label="Timeout while awaiting \"Enter bootloader\" request"]
"Enter bootloader" -> "idle" // [constraint=false]
"idle" -> "idle" [label="No command received"]
"idle" -> "Check device ID" [label="SET_BOOTLOAD_TARGET (Device ID) received"]
}
subgraph {
rankdir=LR
subgraph match {
"Check device ID" -> "Acknowledge1" [label="Match"]
"Acknowledge1" -> "isTarget (flash mode)"
"isTarget (flash mode)" -> "Acknowledge2" [label="CMD_START_DOWNLOAD (Byte count) received"]
"Acknowledge2" -> "isTarget (flash mode)"
"isTarget (flash mode)" -> "isTarget (flash mode)" [label="No data / commands received"]
"isTarget (flash mode)" -> "Process data (Hex records)" [label="Data received"]
"Process data (Hex records)" -> "isTarget (flash mode)" [constraint=false]
"isTarget (flash mode)" -> "Success1" [label="CMD_END_DOWNLOAD received"]
"Success1" -> "idle" [constraint=false]
//"Process data (Hex records)" -> "isTarget (flash mode)" [label="No error occured"]
//"Process data (Hex records)" -> "isTarget (flash mode)" [label="Error occured"]
}
subgraph mismatch {
"Check device ID" -> "Pass command to slaves (2nd tier)" [label="Mismatch"]
"Pass command to slaves (2nd tier)" -> "awaitingSlaveBootloadTargetAcknowledge"
"awaitingSlaveBootloadTargetAcknowledge" -> "awaitingSlaveBootloadTargetAcknowledge" [label="No acknowledge received"]
"awaitingSlaveBootloadTargetAcknowledge" -> "hasTarget" [label="Acknowledge received"]
"hasTarget" -> "hasTarget" [label="No command received"]
"hasTarget" -> "PassSlave1" [label="CMD_START_DOWNLOAD (Byte count) received"]
"PassSlave1" -> "awaitingSlaveStartDownloadAcknowledge"
"awaitingSlaveStartDownloadAcknowledge" -> "awaitingSlaveStartDownloadAcknowledge" [label="No acknowledge received"]
"awaitingSlaveStartDownloadAcknowledge" -> "hasDownloadTarget" [label="Acknowledge received"]
"hasDownloadTarget" -> "hasDownloadTarget" [label="No data / commands received"]
"hasDownloadTarget" -> "Pass data (Hex records) to slave (2nd tier)" [label="Data received"]
"Pass data (Hex records) to slave (2nd tier)" -> "hasDownloadTarget"
//"hasDownloadTarget" -> "awaitingSlaveEndDownloadResponse" [label="CMD_END_DOWNLOAD received"]
"hasDownloadTarget" -> "PassSlave2" [label="CMD_END_DOWNLOAD received"]
"PassSlave2" -> "awaitingSlaveEndDownloadResponse"
"awaitingSlaveEndDownloadResponse" -> "awaitingSlaveEndDownloadResponse" [label="No command received"]
"awaitingSlaveEndDownloadResponse" -> "Success2"
"Success2":e -> "idle":n [constraint=false]
}
}
}
