# BAMI: Bambu Advanced Monitoring Interface

**URL:** <https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253>\
**Category:** Projecten\
**Tags:** 3dprinting\
**Created:** [April 9, 2024, 7:42pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253 "2024-04-09T19:42:34Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Peetz0r](https://forum.revspace.nl/user_avatar/forum.revspace.nl/peetz0r/32/55_2.png) [@Peetz0r](https://forum.revspace.nl/u/Peetz0r)\
**Post date:** [April 9, 2024, 7:42pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/1 "2024-04-09T19:42:35Z")

</div>

![BAMI: Bambu Advanced Monitoring Interface](https://forum.revspace.nl/uploads/default/original/1X/a1225618e5c31ebe5c18735c04ed0779df867cd7.png)  
Een alternatief voor de Bambu Handy app. Hun app vereist dat je printer in _Cloud Mode_ staat, is er alleen voor Android en iOS, en is bovendien closed source.  
Ik ben bezig met een app met deels dezelfde functionaliteit, maar zonder de nadelen.

> **[GitHub - Peetz0r/bami: BAMI: Bambu Advanced Monitoring Interface](https://github.com/Peetz0r/bami/)**
>
> BAMI: Bambu Advanced Monitoring Interface

Geplande features:

- [x] Device discovery
  - [x] Device discovery op Apple’s platformen met alle moeilijke permissies

- [x] Voortgang van lopende prints zien
- [\_] Prints kunnen pauzeren en stoppen
- [x] Live video van de ingebouwde camera
  - [\_] betrouwbaarder dan Bambu’s eigen live view

- [\_] Notificaties bij starten/eindigen/falen van prints
- [\_] 3D gcode preview met de voortgang zichtbaar
- Passende UI voor alle platformen:
  - [\_] Desktop
  - [\_] Mobiel
  - [\_] TV

Supported devices

- Android telefoons en tablets
- ~~Android~~ Google TV (met een UI gefocust op live view)
- iPhone, iPad, iPod Touch
- Linux Desktop
- macOS Desktop
- Windows Desktop
- Linux Mobile (Pinephone, etc)

Ik denk aan verspreiding via Google Play, Fdroid, Flathub, en uiteraard ook gewoon via [github.com/Peetz0r/bami/releases](https://github.com/Peetz0r/bami/releases).

Beschikbaarheid op de Apple App Store is afhankelijk van hun implementatie van de [DMA](https://en.wikipedia.org/wiki/Digital_Markets_Act), met hun huidige voorstel gaat het em niet worden maar ik heb zo’n vermoeden dat de [EC](https://en.wikipedia.org/wiki/European_Commission) helemaal niet blij is met Apple’s huidige voorstel, dus daar zou nog wel eens wat aan kunnen veranderen:

- [DPG Media Privacy Gate](https://tweakers.net/nieuws/220666/apple-brengt-beta-ios-175-uit-die-toelaat-om-apps-vanaf-site-te-downloaden.html)
- [DPG Media Privacy Gate](https://tweakers.net/nieuws/220028/gerucht-europese-commissie-gaat-app-store-en-play-store-onderzoeken-vanwege-dma.html)

## Achtergrondinformatie

Voor het cross-platform maken van de app gebruik ik [Flutter](https://flutter.dev/), een framework gemaakt door Google. Nee, ik ben geen vriendjes van Google. Maar ditr is de makkelijkste manier om iets te bouwen voor mobiel en desktop zonder dubbel werk.

Mijn development omgeving bestaat uit:

- Framework Laptop met Linux (Fedora 39 of straks 40)
- VM met windows 11
- late 2013 Macbook Pro die voor veel te weinig geld op Marktplaats stond
- Moto G (1st gen) met LineageOS 14 (Android 7)
- Sony Xperia Compact X met Android 8
  - Fun fact: een deel van de onderdelen hiervan is ooit van @eloy geweest

- Google Pixel 6a met GrapheneOS (Android 14)
- iPod Touch 6th gen met iOS 12
- iPhone 8 met iOS 16
  - Fun fact: is ooit van @Bas geweest

- MiTV met Google TV (Android 10)

[![6 telefoons op een rij](https://forum.revspace.nl/uploads/default/original/1X/82200ce3a65808eb345636c52928bb3b3ad11429.jpeg)](https://revspace.nl/kiekjes/view/20240403/P1060124.JPG)

[![Linux Desktop, Windows in een VM, TV op de achtergrond](https://forum.revspace.nl/uploads/default/original/1X/819a1333fcd9b9edaf25b7b78e23d4523b5509d5.jpeg)](https://revspace.nl/kiekjes/view/20240403/P1060123.JPG)

(Ik zoek nog een device met de nieuwste iOS 17.4 en straks 17.5 om de DMA aanpassingen IRL te zien, maar voorlopig is het budget op.)

---

<div class="post-metadata">

**Author:** ![sting](https://forum.revspace.nl/letter_avatar_proxy/v4/letter/s/48db29/32.png) [@sting](https://forum.revspace.nl/u/sting)\
**Post date:** [April 9, 2024, 7:56pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/2 "2024-04-09T19:56:25Z")

</div>

Nice! Gaan de notificaties ook op Apple’s platform werken? En hoe zit het qua een printer bereikbaar buiten maken je netwerk, kan je een poortje openzetten (er zit authenticatie op, toch?) of is de beste optie om gewoon een VPN te gebruiken, en detect de app dit ook?

---

<div class="post-metadata">

**Author:** ![Peetz0r](https://forum.revspace.nl/user_avatar/forum.revspace.nl/peetz0r/32/55_2.png) [@Peetz0r](https://forum.revspace.nl/u/Peetz0r)\
**Post date:** [April 9, 2024, 8:06pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/3 "2024-04-09T20:06:46Z")

</div>

> [@sting](#):
>
> Nice!

Thanks 🙂

> [@](#):
>
> Werken de notificaties ook op Apple platformen?

Geen idee, ik ben nog niet begonnen met het bouwen daarvan

> [@](#):
>
> En hoe zit het qua een printer bereikbaar buiten maken je netwerk, kan je een poortje openzetten (er zit authenticatie op, toch?) of is de beste optie om gewoon een VPN te gebruiken, en detect de app dit ook?

Het is bedoeld om te werken over een lokaal netwerk, maar over een VPN zou het ook moeten werken. Op mijn interne todo-lijst staat ook handmatig printers toevoegen per IP adres. Maar als je een VPN-oplossing hebt die ook broadcast verkeer doorlaat dan zou device discovery ook over de VPN moeten werken.

Port forwarding zou ik niet aanraden, want de authenticatie is een 8-letter wachtwoord waarvan de tekens [0-9a-f] zijn. Daarnaast moet je een handvol poorten (mqtts/8883, ftps/990, rtsps/322) forwarden, het is er niet slechts eentje.

Noot: de documentatie op [Printer Network Ports | Bambu Lab Wiki](https://wiki.bambulab.com/en/general/printer-network-ports) is niet helemaal correct 😉

---

<div class="post-metadata">

**Author:** ![h3x4d3c1m4l](https://forum.revspace.nl/letter_avatar_proxy/v4/letter/h/46a35a/32.png) [@h3x4d3c1m4l](https://forum.revspace.nl/u/h3x4d3c1m4l)\
**Post date:** [April 9, 2024, 8:18pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/4 "2024-04-09T20:18:36Z")

</div>

@Peetz0r Mocht je assistentie willen voor push notificaties, ofwel Flutter ofwel Android/iOS-specifiek, let me know. Ik ben voor een eigen project binnenkort weer een betalende Apple App Store Connect-gebruiker, je zou de app dan ook via mij naar Apple kunnen releasen als er animo voor is…

---

<div class="post-metadata">

**Author:** ![Peetz0r](https://forum.revspace.nl/user_avatar/forum.revspace.nl/peetz0r/32/55_2.png) [@Peetz0r](https://forum.revspace.nl/u/Peetz0r)\
**Post date:** [April 9, 2024, 8:55pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/5 "2024-04-09T20:55:37Z")

</div>

Hey, ik kwam je naam vorige week nog tegen op [GitHub - bdlukaa/fluent\_ui: Implements Microsoft's WinUI3 in Flutter.](https://github.com/bdlukaa/fluent_ui) 🙂

Je aanbod om de app via jouw in de App Store te kunnen krijgen hou ik ook in het achterhoofd. Eerst maar eens richting een 1.0-ish release werken.

Maar, heb jij ervaring met “Multicast Networking Entitlement” in Apple’s ecosysteem? En met permissies op hun platformen in het algemeen?

Tot nu toe heb ik de device discovery werkend op

- De iPod Touch (want die heeft iOS 12 en pas sinds 14 zijn ze streng)
- In de simulator met iOS 17.4 (blijkbaar mag in de simulator gewoon alles?)
- Alle niet-apple dingen

Het werkt niet op

- macOS 14 desktop
- de iPhone met iOS 16

Op beide platformen faalt het op ongeveer dezelfde manier:

macOS 14:

```auto
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Send failed (OS Error: Operation not permitted, errno = 1), address = ::, port = 0
#0 _NativeSocket.send (dart:io-patch/socket_patch.dart:1269:34)
#1 _RawDatagramSocket.send (dart:io-patch/socket_patch.dart:2582:15)
#2 DeviceDiscoverer.search (package:upnp2/src/discovery.dart:170:16)
#3 DeviceDiscoverer.quickDiscoverClients (package:upnp2/src/discovery.dart:211:7)
<asynchronous suspension>
#4 DiscoveryPage.Discover.<anonymous closure> (package:bami/discovery.dart:34:27)
<asynchronous suspension>

```

iOS 16:

```auto
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Send failed (OS Error: No route to host, errno = 65), address = 0.0.0.0, port = 0
#0 _NativeSocket.send (dart:io-patch/socket_patch.dart:1269:34)
#1 _RawDatagramSocket.send (dart:io-patch/socket_patch.dart:2582:15)
#2 DeviceDiscoverer.search (package:upnp2/src/discovery.dart:166:16)
#3 DeviceDiscoverer.quickDiscoverClients (package:upnp2/src/discovery.dart:211:7)
<asynchronous suspension>
#4 DiscoveryPage.Discover.<anonymous closure> (package:bami/discovery.dart:34:27)
<asynchronous suspension>

```

Het faalt op net niet dezelfde plek met net niet dezelfde foutcode, maar het voelt toch als hetzelfde probleem.

---

<div class="post-metadata">

**Author:** ![h3x4d3c1m4l](https://forum.revspace.nl/letter_avatar_proxy/v4/letter/h/46a35a/32.png) [@h3x4d3c1m4l](https://forum.revspace.nl/u/h3x4d3c1m4l)\
**Post date:** [April 9, 2024, 9:33pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/6 "2024-04-09T21:33:52Z")

</div>

Niet met specifiek die Multicast Networking Entitlement, maar wel met entitlements in het algemeen. Ik heb bijvoorbeeld gewerkt aan een app met Bluetooth en aan apps met push notificaties. Komt er (als ik het me goed herinner) op neer dat je de app aanmaakt in je Apple Developer account, provisioning profiles aanmaakt, de entitlements daar instelt, lokaal ook instelt via Xcode of via de entitlements file en dan zou het toegestaan moeten zijn.

Op macOS kun je nog te maken hebben met de sandbox die dwarszit, daar loop ik met m’n project MomentoBooth ook tegenaan. Bijvoorbeeld `libusb` lijkt geheel niet bruikbaar als die aan is. Je zou die kunnen uitzetten via Xcode. Echter is de sandbox wel verplicht als je je app wil publiceren in de macOS App Store, maar met uitzetten kun je in ieder geval testen of dat het is.

Helpt [deze link](https://github.com/Baseflow/flutter-permission-handler/issues/656) misschien nog wat? Ik gokte erop dat de `permission_handler` library van dienst zou kunnen zijn. Maar dat lijkt niet zo te zijn, vond tijdens die tocht wel die GitHub-issue. Zie ook [hier](https://stackoverflow.com/questions/64308595/how-to-trigger-the-local-network-dialog-authorization-for-multicast-entitlement). Ik denk dat je iets moet goochelen om te triggeren dat hij permissie gaat vragen om lokale devices te detecteren…

---

<div class="post-metadata">

**Author:** ![h3x4d3c1m4l](https://forum.revspace.nl/letter_avatar_proxy/v4/letter/h/46a35a/32.png) [@h3x4d3c1m4l](https://forum.revspace.nl/u/h3x4d3c1m4l)\
**Post date:** [April 9, 2024, 9:34pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/7 "2024-04-09T21:34:46Z")

</div>

Ik ben heel stiekem inderdaad fan van die `fluent_ui` library, vind dat Microsoft net dat extra beetje contrast heeft toegevoegd in de design guidelines van die componenten wat ik in Material 3 een beetje mis… 😃

---

<div class="post-metadata">

**Author:** ![Peetz0r](https://forum.revspace.nl/user_avatar/forum.revspace.nl/peetz0r/32/55_2.png) [@Peetz0r](https://forum.revspace.nl/u/Peetz0r)\
**Post date:** [April 9, 2024, 11:44pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/8 "2024-04-09T23:44:24Z")

</div>

Fixed! Met dank aan @shiz 🙂

 ![PXL_20240409_233905794](https://forum.revspace.nl/uploads/default/original/1X/35a49cb30294da852f77b62f66454ae6b584d743.jpeg) ![PXL_20240409_234039497](https://forum.revspace.nl/uploads/default/original/1X/1b3cb7c82ce9dc9bdf5369ad5846024c66b29ba3.jpeg)

Het ging mis omdat de library die ik gebruik niet alleen luisterend maar ook schreeuwend probeert te zoeken. Op andere OS’en mag dat gewoon (en de Bambu negeert het) maar op Apple’s platformen zegt het “Foei Mag Niet”.

> <https://github.com/Peetz0r/bami/commit/d2314149ea36d4eb11139a0813a4fa7069f56a3a>
>
> Bambu doesn't respond to M-SEARCH requests anyway
> 
> However, due to very strict p…ermission stuff on macOS and iOS, this needs explicit disabling

Het lijkt erop dat ik de Multicast Networking Entitlement helemaal niet nodig heb. mDNS (aka Bonjour) is uitgezonderd van die entitlement-eis. Bambu’s protocol is nonstandaard en leeft op een andere poort, maar valt (zolang je enkel luistert) blijkbaar toch binnen de uitzondering. Dat scheelt weer 🙂

---

<div class="post-metadata">

**Author:** ![Peetz0r](https://forum.revspace.nl/user_avatar/forum.revspace.nl/peetz0r/32/55_2.png) [@Peetz0r](https://forum.revspace.nl/u/Peetz0r)\
**Post date:** [April 18, 2024, 11:04pm UTC](https://forum.revspace.nl/t/bami-bambu-advanced-monitoring-interface/253/9 "2024-04-18T23:04:58Z")

</div>

Na de nodige worstelingen met fruitmachines vorige week heb ik vandaag geworsteld met robots en pinguïns. Of nouja, die dingen werken gewoon mee 😛

We hebben nu:

- [Scriptje](https://github.com/Peetz0r/bami/blob/main/util/logger.py) dat alles van MQTT plukt en als plaintext json bestandjes logt
- De eerste [commando’s die verzonden worden](https://github.com/Peetz0r/bami/blob/233842e76f95e667511979ded0a8fd68dbb89ddf/lib/bambu.dart#L124), namelijk pause, resume en stop
- Nog wat meer werk aan de layout-kant (maar dat is nog lang niet af - een goed idee voor een desktop layout heb ik nog niet echt)

 ![Schermafdruk van 2024-04-18 23-41-40](https://forum.revspace.nl/uploads/default/original/1X/6294189a5db505869c88b4793fc7c744dc007db3.png)
