Eba-M / E3DC-Control

77 stars 20 forks source link

E3DC Control als Docker #4

Open merlin2539 opened 5 years ago

merlin2539 commented 5 years ago

Dieses Minitool E3DC als Docker bereitstellen, so ist ein einfaches Update aber auch Wartung möglich. Jenkins kann dies sehr einfach mit einem Mini Linux Alpine erstellen. Dann kann man es sehr einfach auf einem Raspi laufen lassen

merlin2539 commented 5 years ago

Dockerfile wurde entsprechend in neuem Branch hinzugefügt und ist in Dockerhub Verfügbar für Raspi (Hypriot Image)

stevie77 commented 4 years ago

Und ganz Faule können sich hier auch ein fertiges (hoffentlich meist aktuelles) Image herunterladen. ;-) https://hub.docker.com/r/stehada/e3dc-control

ChrisKuBa commented 2 years ago

@stevie77 Gibt es dazu eine Dockerfile? Auch die Infos vor dem Squash? Ich versuche ein Image für Homeassistant mit Alpine zu bauen und wollte deine Dockerfile adaptieren. Hassio Add On Btw: Stößt du den Bau der Images noch manuell an oder wie läuft das bei dir?

stevie77 commented 2 years ago

@chrkulbe Persönliche Nachrichten kann man sich hier nicht schreiben, oder? Wollte das jetzt nicht hier posten... Ich baue alle paar Monate (bewusst) ein manuell angestoßenes Image mit einer bestimmten Versionsnummer, nämlich dann, wenn eba im Photovoltaikforum in seinem Thread schreibt, dass er eine größere Neuerung eingebaut hat (für die er auch eine Versionsnummer vergeben hat). Da das nicht soo oft vorkommt, lohnt sich (für mich) der Aufwand nicht. Hatte das ursprünglich auch nur mal für mich selbst gebaut und dann eben mal hochgeladen, weil ich wissen wollte, wie das mit dem Docker-Hub funktioniert...scheinbar fanden es dann aber doch ein paar Leute nützlich...

ChrisKuBa commented 2 years ago

Ich hänge mich mal wieder hier etwas rein.

Da ich Purist bin, wollte ich wie stevie77 ebenfalls auf Alpine aufsetzen. stevie77 DockerImage basiert aktuell aber auf Debian.

@Eba-M Zwei Dinge hindern mich:

  1. Ich möchte so wenig wie notwendig auf dem Alpine installieren. Dh kein gcc sondern rein das vorhandene g++. g++ mag kein memcpy(&vecDynamicBuffer[0], &vecDynamicBuffer[0] + auf einem überlappenden, hier den selben, Bereich. https://en.cppreference.com/w/cpp/string/byte/memcpy Daher ist es besser memmove zu verwenden. https://en.cppreference.com/w/cpp/string/byte/memmove Ich weiß, das ist Originalcode von E3DC, aber vielleicht hat hier jemand mehr Expertise als ich und kann zusichern, dass diese Anpassung neutral ist. gcc scheint mit dem überlappenden memcpy keine Probleme zu haben.

  2. Ich hatte den Pfad für die Log Datei falsch angegeben und das Programm brach immer ab. Das liegt daran, dass du überall auf ein exsitierendes Handle zur Logdatei prüfst, bis auf eine Stelle: https://github.com/Eba-M/E3DC-Control/blob/1cc835cfe264cfc15186c7ae32ed5bf635e260cd/RscpExampleMain.cpp#L93-L94 Zusätzlich hier noch geschweifte Klammern (beide { } ) tun ebenfalls Wunder: https://github.com/Eba-M/E3DC-Control/blob/1cc835cfe264cfc15186c7ae32ed5bf635e260cd/RscpExampleMain.cpp#L100-L102

Ich stelle dir gerne einen PullRequest zur Verfügung wenn du magst.

ChrisKuBa commented 2 years ago

Offtopic: @Eba-M: Wie sieht es mit CodeFormatern/Lintern aus? Ist teilweise schwierig den Codeblöcken zu folgen. Kann dabei auch gerne unterstützen, bzw. einen separaten Issue/Branch dafür aufmachen, wenn dir das Recht wäre.

ChrisKuBa commented 2 years ago

Kleiner Nachtrag: Hat jemand eine Ahnung, warum ich diesen Fehler bekomme? Mit "%u" klappt es.

RscpExampleMain.cpp:2304:56: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'std::vector<unsigned char>::size_type' {aka 'unsigned in
t'} [-Wformat=]
 2304 |                 printf("Maximum buffer size exceeded %lu\n", vecDynamicBuffer.size());
      |                                                      ~~^     ~~~~~~~~~~~~~~~~~~~~~~~
      |                                                        |                          |
      |                                                        long unsigned int          std::vector<unsigned char>::size_type {aka unsigned int}
      |                                                      %u

Nachtrag: Habs jetzt mit einem plattformübergreifenden Casting gelöst: (unsigned long) vecDynamicBuffer.size() Von int nach long geht ja nichts verloren und damit can size sowohl int als auch long sein, je nach Systemarchitektur.

ChrisKuBa commented 2 years ago

Für Minimalisten und Freunde von Alpine https://hub.docker.com/r/chriskuba/e3dc-control

Bonus: Falls Screen versehentlich mit CTRL+C beendet wird, wird eine neue Screen Session innerhalb von 10 Sekunden aufgemacht.