 okay at least you get a little tour of flow hub so that's not the button I want and we are not on locust yes but I can do this first that's a good point okay now I have that and now where is the shit okay we are connected so that's a good start she's here look all right am I is mine some okay yes so about the setup and since I'm doing demo there is some my OT devices here just dev board ESP 8266 not the one know the MCU so same chip they're just connected to battery and they're all on Wi-Fi it's using my phone as a hotspot kind of bridging it because this is actually a nice portable way then you don't have to like reconfigure devices just it works for a kind of personal work and we're using MQTT to communicate the broker in MQTT which those things are talking to is running on my laptop normally that would be your IOT gateway could be a Raspberry Pi could be a router whatever and then on my kind of developer machine in this case is this one which is very familiar to me with a certain keyword and stuff we have kind of our development environment so this is actually a little bit good that we had to do this switcheroo because it's showing now that I'm on a different device doing the UI parts than the actual runtime this is a normal case when in the deployment you're not gonna have a full IDE and this kind of stuff when you Raspberry Pi whatever you might not have a screen and so on so I'm connected over WebSocket to that stuff okay so I hope we will have some devices yes we have I have two two devices and they just have a couple of different things I have one attached to the relay on it that's the red board right here and it actually has a LED also in the UV light so that's it's called LED the input and because we're communicating over MQTT I need to configure this to have a known name relay and this one is buttons like that and right now the devices are not doing anything they're just sitting there they're publishing I can see here and I can see that they are saying hello I'm here and this kind of stuff and yes so what should be possible now is I can for instance take the button here and connected to the relay itself so now that I'm clicking the button this thing is actually kind of talking to itself over MQTT okay that's something you maybe need maybe you have a light which is actually hard hard wire you know okay however moving not the most generally useful thing so maybe our device is somewhere else you know so now and I just have LED to show now it's connected to do this thing so we can live rewire the system to in order to to change connections this could be like setting up the initial thing or it could be like just changing how you like things like I don't really like that I have to go to that device to trigger that thing or this kind of things so that's changing connections we can also add the work components so the classical stuff that happens now at the all-time is incompatibility of devices and then you need like okay take this Jason thing and take us messages and make it work or you you want to have some functionality a lot of the ideas which I will go through is about like avoid fixed functionality in your system build devices that are do something sensors and actuators and then build the system together in a flexible way for instance using a tool like this using forever because this has a lot of benefits so for instance I think we have a really simple component actually let's add it from from from okay I'm not gonna live code I had a sample code but it's on that machine so it's really but I actually have the component so normally you could go here create a new component and write your code I can show you if I even if I'm not using that one invert we'll just call it to we support a bunch of different languages and it's really easy to add more with message flow coffee skipping JavaScript are good also C++ Python anything like that so it's nice to that's the wrong key and then you get a nice little editor where you can do that and means when you create that component actually we live we can instantiate it so I have done this before and I have okay it's not showing here I hope it still works so for instance I have this invert component just plug it in between here and now the light is on when it's I'm pressing it and and off when I am pressing it so this is just super simple I mean of course you can have as complicated stuff as you want you have a full program in language or many programs Python JavaScript and so on so this is also nice because it always happens even if you have the this system that's kind of designed to work together there's always a little doesn't really and that's all I can it's a very pragmatic solution to this in like this in totally we don't try to make a universal way of doing things like just okay that stuff they work this way this stuff work this way build something to plug it together and we have some testing tools also automated testing that uses the message queue so you can kind of you have can have good faith that the test we will work see for time okay I do a little bit more demo let's add I have this timer component we have a toggle component and in general in message flow you the participant shouldn't do much when they are so not now nothing happens but if I specify an interval 100 milliseconds now we have this blinking light whatever so that's actually stateful component you know is remembers okay we were off before now we need to go on and so on and you can do this as well so this could be it could be complicated stuff like talking to a database finding what this message should mean and doing it live talking to the internet and some service and so on but yeah and also this shows that we can change the configuration data right so for some working with user experience it's sometimes hard to predict what's the right values of things you know like maybe one you know this is kind of one second showing activity but not stressing people so you can kind of explore your way to find out maybe 1200 is the right way so showing that you can do live things there and yes that's it for demo and since I've been so demo focused my slides are not even up yes and we are as I said we're talking it's all empty tt I will oh I'm on the wrong network wrong internet happens all the time I try you on and so this is where you find the source code for message flow we also have a new website now message flow dot org I put my slides here because that's nice I hope there is a pdf reader promise my pdf reader okay so yes so the typical way you do and ptt communication you you you're sending on some topics and they have names and depending on the like both in the center receive and then you your system can't do anything else so instead what we do so you have a system that can can only do basically one thing and it's it's you can't see these these what how is it working where is it sending stuff it's all digged into the code using throw up you can see it easily and how it works we send so we for instance we send the button sends on button something not directly to the motor or the light because this way it kind of has its own namespace and then something else like flow up or you can use a hard-core list of queue mappings or whatever connects them together and this gives you the flexibility to reorganize it and with message flow you can do it live which is nice and in addition we send a discovery message so we send information each device send information how and describing itself like what is the component this is kind of like so I can have many of the same components each they are each in a different role so one can be a light button one there is a motor button one is it so this is reflecting their their purpose but it's not hard-coded so you can still like rewire and then it says something about its ports so like this is a kind of data flow flow-based programming model for how to do the queues so the mktq is actually this thing here so that's how it on the wire it's communicating and then yeah you can use this little fbp dsl to connect things together here i'm connecting the pressed state of a imaginary button to a start of a motor and the motor could say when it's running there's a say to another lamp that makes it red warning so you know that's potentially dangerous and so on you can use this tool to set it up so that's kind of how you would like that's without the live the live and visual programming part and but what about devices that don't talk message flow as long as you talk mqtt or amqp which we also support you can have you can kind of declare this information about how it how it works separately in a yaml file and then you can have this tool send it on behalf of the device so this is a way to have your existing mqtt things appear and be connectable in this way of course sometimes they are hard-coded then there is not much you can do then it's an incentive to maybe change a code and make it as i said we can do live programming as i demonstrated then you run message flow with your initial graph so like what's the basic stuff you open your browser as i said you hide this computer i've never touched before if you just load the browser and connect to the right ip address then you can do it and i think it's all the connection information is in a url in the url so we're saying okay please open the ide app for a while and please ide connect on web socket to this address so you can actually have a qr code or nfc token where you go and it comes up directly on your tablet your laptop or whatever so that's it of course you just need to send this discovery message to make stuff work with message flow or and talk mqtt but there are also these convenience libraries which you can use which make it nice and easy we have javascript and nojazz noflow it's another visual programming environment i really probably run time but phob can use c++ python arduino i'm using the arduino here i use python in the example and one other example was javascript we have a rust one which currently only supports mqp so that's yes so for the current status is that the programming model we've actually been using this a lot like how this is set up together in on back end services for core cloud systems and they were using mqp and that's really well tested we're running millions of jobs every week through the system and it works really well we're primarily using the javascript and noflow libraries that's really battle testing works well mqtt we haven't used so much yet so it's a little bit rougher we have some small deployments in hackers business so of mqtt with message flow in cbase in berlin and bitref in oslo so like you know it you can you can use it for stuff live programming like a demo now it's not so much tested but it's also not part of the you know the the core production system we stay out of the the as much as we can so it's not maybe have the developer doesn't have the best experience but the system works mqtt ssl support the message flow is actually not tested this is one thing that might cause you to want to wait a little bit to do a real deployment because you need ssl to securely do authentication on mosquito for instance yes future so right now on mqtt mosquito which is the most common broker and in the protocol it's not no routing is specified so when we use rabbit and mqp we actually ask rabbit to say okay connect this thing to that thing so we are staying out of the the kind of core communication path however on mqtt there is no standard for this so we have our own it's actually running in our own process and we would like to to kind of get rid of that so we want to support in rebutton q routing also mqtt because they support that and then the code that we currently have will probably separate out as a as its own kind of battle like really well tested the router for mqtt so that if you run mosquito which doesn't have this functionality you can plug this in and you can you can you can work um yeah there are some changes we want to do more with how we visualize data and flow so you can kind of see the data flowing through there's a pr for this open right now which would give you like at least the text stream of messages coming through which is very nice because a lot of times you know documentation is slightly wrong it says it sends on this format but you know actually it's not and it's really nice to to be able to see that directly and then but one of the big things we want to do is we want to take this programming model which we which which works now for connecting stuff together we actually have a microcontroller runtime which you can program live like the the logic internally on the device and we like to expose this so you can have this big network of this device to that device basically like oh how does that device actually work or has a bug whatever you go in to that node and then you see the network inside and you can change it so that's the big big things and also we have a couple of tiny changes we would like to do to the protocol before we call it message for 1.0 because that's would be a would be a stability point so we would like to get some minor fix it actually just renaming the queue and some small conventions uh so yes that's it questions just what's the front end of flow out there that's uh what's the front end that's flow up it's a open source uh it's running completely in the browser so uh that's why it works when i'm not on the internet and and it's also often capable so uh you find that uh that's under flow up slash no flow ui it's actually called should be renamed but um you find that there and you can use that to target other things microcontrollers uh you can just down programming with it visual uh image processing with it and stuff like this so that's uh yeah go no uh well we it's like if so if you would send that discovery message that little jason thing sorry if we support micro python on the esp uh we don't but if you would use the existing mqtt support in micro python and just send that jason it will work yes you said the that encryption has not been tested as the cell has not been tested yes has it been implemented and not tested or is it yeah the question was uh as the cell has not been tested is it implemented and not tested or like nothing started we are using existing libraries for mqtt support so they have as a cell support both in no js in python and so on so we're using paho on python and so so like based off is there but it could be that we yeah our small conventions trip something later so i think so it's literally like a couple of hours on each place making sure it works and documenting thanks are there questions again have you looked at uh on the ssn topic have you looked at curve uh curve 25519 which is way slower way lighter than uh the ssn i mean on the esp there is no support for uh htps as far as i tried and but there are libraries for curve 25519 which can provide encryption in a lighter way especially for those like cq devices so on zero mq for example they use curve and tiny tweet an assail body code which makes uh yeah tweet an assail for the libraries i've seen some if you want encryption i don't i think uh either you try to get the job done by external libraries or you might look at uh curve yeah so the the comment as uh have you looked at curve as an alternative to ssl encryption uh for communication mqtt we're kind of relying on what the broker supports unless they can't talk together and as far as i know mosquito only supports uh tls 1.0 uh so probably that will be limitation there's also the end to end encryption which is also i think quite interesting it's a separate topic uh that is very nice because then you can send through an untested network so it's not about making your network secure it's about sending securely over unsecure network uh and there definitely is something like curve and these uh designed for embedded uh encryption is very very interesting and message flow actually doesn't care about the the the payload that you send between because we we have a slight preference for jason but you can send buffers of the object stuff so that means you can you can do this without changing any of the code you did so okay let's take other questions outside yes thanks a lot for the presentation yeah big hand