Real-Distributed RTC System by pure Go and Flutter

Overview
Comments
  • Demo PC/JS doesn't work correctly in FireFox

    Demo PC/JS doesn't work correctly in FireFox

    Linux "Ubuntu 16.04.6 LTS" 75.0 (64-bit) Mozilla Firefox for Ubuntu canonical-1.0

    I create room with more than one members I expect watching all members streams

    In Google Chrome all is Ok. But firefox shows me only LocalStream

    There are some errors in developer's console: Warning: This page uses the non standard property “zoom”. Consider using calc() in the relevant property values, or using “transform” along with “transform-origin: 0 0” Warning: onaddstream is deprecated! Use peerConnection.ontrack instead. Error: InvalidAccessError: Answer tried to set recv when offer did not set send

    I'am not javascript ninja... I can't explain this behavior

    opened by schors 14
  • User authentication

    User authentication

    Summary

    User authentication, internally and/or externally would be great, as meetings are often confidential.

    • [ ] Internal Users
    • [ ] LDAP
    • [ ] Oauth2
    • [ ] Kerberos
    • [ ] JWT
    • [ ] Others?
    enhancement 
    opened by maxnoe 12
  • RTCPeerConnection addTransceiver method not found

    RTCPeerConnection addTransceiver method not found

    Your environment.

    • Version: iOS
    • Browser: Safari
    • Other Information - error: The method 'addTransceiver' isn't defined for the class 'RTCPeerConnection'. (undefined_method at [brodacaster] lib/src/client.dart:216)

    What did you do?

    I just cloned the repo and tried running example on iOS simulator

    What did you expect?

    I expect it to at least build successfully

    What happened?

    It gives me error on building and i am unable to install

    opened by Faiyyaz 11
  • Not found any node for islb

    Not found any node for islb

    DEBUG: Recivied data: {"response":true,"id":2462221,"ok":false,"errorCode":500,"errorReason":"Not found any node for islb."}
    [VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: {code: 500, error: Not found any node for islb.}
    

    I am getting the above error after 2 or 3 days of the server running. To fix this again I have to do docker-compose up.

    opened by rajababu3 9
  • Docker hosting updates

    Docker hosting updates

    Expose Biz websocket under a path on web, not a separate port. Switch to standard web ports for http/https. This simplifies prod hosting as only the two common ports must be exposed for the web service.

    For local dev the 8443 websocket port is routed directly to the biz container. This port should not be exposed in production / external hosting.

    This required some minor client updates. The changes made here will use the host:port combination that the page is currently served on to request the /ws path. A better long term solution would be to provide these as defaults but allow the clients to specify an override url for the biz ws location.

    The web dockerfile was reworked to use multistage builds. I grabbed the code from the previous version, before space reduction, and simply updated to use pre-built docker images for node and caddy server. Overall the image size should be similar, but with the benefit of docker layer caching for node builds.

    Additionally the Caddyfile was update to version 2.0 to support the versions available from dockerhub. The Caddy files have been split into a local and remote version with http port 8080 for localhost. The docker-compose file has both with remote currently commented out. For prod, port 8080 should not be exposed publicly.

    This should fit most cases, but could use some feedback on how people are hosting remote and locally for dev.

    Fixes #75

    opened by jbrady42 8
  • Ion nodes die without logs

    Ion nodes die without logs

    It seems that after an extended period of time sitting idle, the nodes go down. This is the logs i see

    biz_1    | 2020-04-03 02:39:23.533 INF handleSFUBroadCast: method=stream-remove, data=map[mid:f6e16f25-1756-450b-83d0-017030fe68ef#BEPCHN]
    redis_1  | 1:M 03 Apr 2020 12:41:52.438 * 1 changes in 3600 seconds. Saving...
    redis_1  | 1:M 03 Apr 2020 12:41:52.690 * Background saving started by pid 22
    redis_1  | 22:C 03 Apr 2020 12:41:52.857 * DB saved on disk
    redis_1  | 22:C 03 Apr 2020 12:41:52.864 * RDB: 0 MB of memory used by copy-on-write
    redis_1  | 1:M 03 Apr 2020 12:41:52.918 * Background saving terminated with success
    biz_1    | 2020-04-03 12:41:52.932 INF DELETE "/dc1/node/islb-EeZD7mgaPPsR":""
    islb_1   | 2020-04-03 12:41:53 INF DELETE "/dc1/node/islb-EeZD7mgaPPsR":""
    islb_1   | 2020-04-03 12:41:53.011 INF Node [/dc1/node/islb-EeZD7mgaPPsR] Down
    islb_1   | 2020-04-03 12:41:53.027 INF DELETE "/dc1/node/sfu-sAWekEXhrOXb":""
    islb_1   | 2020-04-03 12:41:53.038 INF Node [/dc1/node/sfu-sAWekEXhrOXb] Down
    islb_1   | 2020-04-03 12:41:53.043 INF DELETE "/dc1/node/biz-bV3fgNOqiN7l":""
    islb_1   | 2020-04-03 12:41:53.044 INF Node [/dc1/node/biz-bV3fgNOqiN7l] Down
    islb_1   | 2020-04-03 12:41:53.044 INF removeStreamsByNode: node => sfu-sAWekEXhrOXb
    biz_1    | 2020-04-03 12:41:52.953 INF Node [/dc1/node/islb-EeZD7mgaPPsR] Down
    

    Any ideas why this might be?

    opened by tarrencev 8
  • User pub dies but is still subscribed

    User pub dies but is still subscribed

    I'm seeing an intermittent issue when a users pub seems to die, they stop streaming video/audio, but their subs are still active, so they can see everyone else in the room. When this happens, their stream freezes for everyone else but they can still hear everyone else. It seems to happen more frequently with bad internet (lossy/slow).

    I've seen this issue brought up a bit is slack too.

    bug 
    opened by tarrencev 7
  • Docker updates

    Docker updates

    Re-opening this so we can move hosting forward. I have seen a few users having trouble hosting, and had quite a time getting it set up myself the first time. These changes represent a fairly standard way of web hosting and I think they are very beneficial to new users.

    As I mentioned in the last PR the port change on the clients is intentional in order to use standard web ports (443 in prod) for hosting. If you are having issues with your hosting I would be glad to go through it and work out changes to support it.

    I have been hosting using this docker setup for weeks now and have had zero issue. Please update with what issues you are running into so we can get this merged and out to the community.

    opened by jbrady42 7
  • Add Python script to stress test the Ion web stack

    Add Python script to stress test the Ion web stack

    Description

    Simple Python script that uses Selenium and Chromedriver to generate multiple user sessions and stress test the Ion JS Demo code and underlying Docker containers.

    Useful to diagnose #135.

    opened by barronbud 7
  • Update golang.org/x/crypto commit hash to 75b2880 - reopen

    Update golang.org/x/crypto commit hash to 75b2880 - reopen

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/crypto | require | digest | 279210d -> 75b2880 |


    Renovate configuration

    :date: Schedule: "on the first day of the month" (UTC).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 6
  • sfu panic when a second user joins via the demo app

    sfu panic when a second user joins via the demo app

    Your environment.

    • Version: e936c2a
    • Browser: Chrome 80.0.3987.149 macOS
    • Other Information:
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.GetOrNewRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.GetRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.AddRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF NewRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.872 INF subscribe tracks=map[eI5U01z2tJlCU1ikLuNVeAFZMp18njodeUMJ 066a306c-c5f5-4b93
    -ad09-766dd9383657:[map[id:066a306c-c5f5-4b93-ad09-766dd9383657 pt:111 ssrc:4.273608241e+09 type:audio]] eI5U01z2tJ
    lCU1ikLuNVeAFZMp18njodeUMJ e02b1007-9974-4d61-859b-b4d52a39e2ed:[map[id:e02b1007-9974-4d61-859b-b4d52a39e2ed pt:96 
    ssrc:1.143603203e+09 type:video]]]
    sfu_1    | panic: interface conversion: interface {} is nil, not string
    sfu_1    | 
    sfu_1    | goroutine 32 [running]:
    sfu_1    | github.com/pion/ion/pkg/node/sfu.subscribe(0xc0003b92f0, 0x9, 0xf2a2c2)
    sfu_1    |      /go/src/github.com/pion/ion/pkg/node/sfu/internal.go:205 +0x1630
    sfu_1    | github.com/pion/ion/pkg/node/sfu.handleRequest.func1(0xc0003b92c0, 0xc0003b93e0, 0xc0003b9410)
    sfu_1    |      /go/src/github.com/pion/ion/pkg/node/sfu/internal.go:35 +0x2d8
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).handleRequest(0xc000173e60, 0xc0003b92c0, 0xc0003ccbc0, 0x14, 0xc0003ccbe0, 0x19)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:150 +0x1d4
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).handleMessage(0xc000173e60, 0xc0003ce000, 0x16db, 0x16db, 0xc0003ccbc0, 0x14, 0xc0003ccbe0, 0x19)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:105 +0x156
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).onRequest(0xc000173e60, 0xc0003cac30)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:96 +0x198
    sfu_1    | github.com/nats-io/nats%2ego.(*Conn).waitForMsgs(0xc0000b7b80, 0xc00016a240)
    sfu_1    |      /go/pkg/mod/github.com/nats-io/[email protected]/nats.go:2147 +0x330
    sfu_1    | created by github.com/nats-io/nats%2ego.(*Conn).subscribe
    

    Seems like it's panicking here because the msg didn't contain a codec in the tracks map, line with timestamp 2020-04-07 02:18:30.872 in the stacktrace.

    What did you do?

    1. docker-compose up on a GCP compute engine node.
    2. Accessed ion at https://mydomain:8080 created a room 'test' with a display name.
    3. From another tab (or incognito mode) accessed ion at https://mydomain:8080 joined room 'test' with a different display name.

    What did you expect?

    Seeing both users' video tracks.

    What happened?

    sfu crashed.

    opened by alexferl 6
  • panic: (*logrus.Entry) Error

    panic: (*logrus.Entry) Error

    I am trying to bind '0.0.0.0' with my domain name within ion->config->docker->signal.toml file. once I add my domain name or IP address in host="domain_name" I am getting this errors. ion-signal-1 | panic: (*logrus.Entry) 0xc000384230 ion-signal-1 | ion-signal-1 | goroutine 1 [running]: ion-signal-1 | github.com/sirupsen/logrus.(*Entry).log(0xc000384000, 0x0, 0xc000398240, 0x5a) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/entry.go:259 +0x2ba ion-signal-1 | github.com/sirupsen/logrus.(*Entry).Log(0xc000384000, 0x0, 0xc000217950, 0x1, 0x1) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/entry.go:293 +0x86 ion-signal-1 | github.com/sirupsen/logrus.(*Entry).Logf(0xc000384000, 0xc000000000, 0xc1e51c, 0x18, 0xc000217bb8, 0x1, 0x1) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/entry.go:338 +0xe5 ion-signal-1 | github.com/sirupsen/logrus.(*Logger).Logf(0xc0000f5960, 0x0, 0xc1e51c, 0x18, 0xc000217bb8, 0x1, 0x1) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/logger.go:151 +0x95 ion-signal-1 | github.com/sirupsen/logrus.(*Logger).Panicf(...) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/logger.go:192 ion-signal-1 | github.com/pion/ion-log.Panicf(...) ion-signal-1 | /go/pkg/mod/github.com/pion/[email protected]/log.go:72 ion-signal-1 | github.com/pion/ion/pkg/util.(*WrapperedGRPCWebServer).Serve(0xc000366f00, 0xc000366f00, 0x2) ion-signal-1 | /ion/pkg/util/wrapped.go:177 +0xc8d ion-signal-1 | main.main() ion-signal-1 | /ion/cmd/signal/main.go:124 +0x6e8 ion-signal-1 exited with code 2

    opened by sajib0028 0
  • open does not work on linux

    open does not work on linux

    In the documentation, you use the open command has it was universal, it's not.

    Not a big deal, but just wanted to point that it does not work in Linux base distributions and may confuse beginners.

    opened by kantum 0
  • The 'ontrackevent' event is called regardless of the session

    The 'ontrackevent' event is called regardless of the session

    The 'ontrackevent' event is called regardless of the session. Even if users in another session then for all sessions will be called. Is it not sopposed to be called according to session?

    rtc.ontrackevent

    opened by flyingdove 0
  • ERROR: for redis  Cannot start service redis

    ERROR: for redis Cannot start service redis

    Your environment.

    • Version: I am using docker so I assume it's the recent. I would love to learn how to use different versions!

    What did you do?

    git clone https://github.com/pion/ion
    cd ion
    sudo make docker-start-services
    
    /bin/sh: 1: go: not found
    docker-compose pull
    Pulling nats     ... done
    Pulling redis    ... done
    Pulling islb     ... done
    Pulling app-room ... done
    Pulling signal   ... done
    Pulling sfu      ... done
    docker network create ionnet
    8a6f31d3b875c2a53772b023567d90f66cd2bea939707aa436d867ac553a3fcc
    docker-compose -f docker-compose.yml up
    Starting ion_redis_1 ... error
    Starting ion_nats_1  ...
    
    Starting ion_nats_1  ... done
    
    ERROR: for redis  Cannot start service redis: network e3256c5fed9f7e7017135563e5037117082af044028b722ac8c15a451204a831 not found
    ERROR: Encountered errors while bringing up the project.
    make: *** [Makefile:34: docker-start-services] Error 1
    

    What did you expect?

    not to see an error

    What happened?

    i see error in the terminal:

    ERROR: for redis  Cannot start service redis: network e3256c5fed9f7e7017135563e5037117082af044028b722ac8c15a451204a831 not found
    
    opened by oren 7
  • 使用nginx代理5551端口流量,默认一分钟关闭连接,是否有心跳 api?

    使用nginx代理5551端口流量,默认一分钟关闭连接,是否有心跳 api?

    1、/rtc.RTC/ 这个ws接口是否有心跳接口? 2、/room.RoomSignal/ 这个ws是否有心跳接口?

    demo 使用的是 examples\ion-pubsub

    nginx.config

        location ^~ /room.RoomSignal/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
    
            proxy_redirect off;
            proxy_pass http://172.25.158.83:5551/room.RoomSignal/;      # 转发
            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
         }
    
    
        #截取url开头匹配/rtc.RTC/,然后转发到http://172.25.158.83:5551/rtc.RTC/
        location ^~ /rtc.RTC/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
    
            proxy_redirect off;
            proxy_pass http://172.25.158.83:5551/rtc.RTC/;      # 转发
            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
         }
    
        location /ion-pubsub/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
           # proxy_pass http://172.16.99.219:8080;
           # proxy_set_header   Host             $host;
           # proxy_set_header   X-Real-IP        $remote_addr;
           # proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
    
            #项目添加到容器,这是容器的路径
            root /usr/local/docker/ion/ion/examples/;
            index index.html;
         }
    
    opened by luo199393 0
Releases(v1.10.0)
  • v1.10.0(Nov 9, 2021)

  • v1.9.2(Nov 2, 2021)

  • v1.9.1(Jun 18, 2021)

    • Adjust the architecture of ion
    • Add signal node for JWT and signaling reverse proxy
    • Move biz node to the /apps directory and separate it into independent business logic nodes
    Source code(tar.gz)
    Source code(zip)
  • v1.9.0(Apr 10, 2021)

  • v1.5.3(Dec 5, 2020)

    chore(deps): update ion-sdk-js to v1.5.3 fix: improve a few code feat: add example for signing/validating token feat(biz): improve room managing fix(biz): delete peer when joining failed. fix(islb): check that redis be created feat: islb load balancing fix: async handling messages fix(log): correct logs feat: sfu send message to biz/avp chore(deps): update helm chart etcd to v5.3.0 (#443) … feat: modularize fix(ci): remove travis

    Source code(tar.gz)
    Source code(zip)
  • v1.5.2(Dec 2, 2020)

    feat: peer leave when ice connection failed/closed fix(biz): send peer-list to client when joining fix(biz): watch running islb nodes fix(sfu): improve logs chore(deps): update ion-sdk-js to v1.5.1 chore(docker): rename image ci(workflow): rename docker name, fix docker push denied.

    Source code(tar.gz)
    Source code(zip)
  • v1.5.1(Nov 30, 2020)

    chore(deps): update module pion/ion-avp to v1.5.1 (#438) chore(deps): update module pion/ion-sfu to v1.5.1 (#437) ci(workflow): add lint,build,docker jobs

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Nov 27, 2020)

Owner
Pion
The Open Source, Cross Platform Stack for Real-time Media and Data Communication.
Pion
Math rendering and editing in pure Flutter.

Flutter Math Math equation rendering in pure Dart & Flutter. This project aims to achieve maximum compatibility and fidelity with regard to the KaTeX

null 109 Dec 16, 2022
A discord bot, made with Dart, which lets you run your own pure Dart code snippets directly via a discord ping, and get the output in an instant.

A discord bot, made with Dart, which lets you run your own pure Dart code snippets directly via a discord ping, and get the output in an instant.

Anikate De 3 Oct 21, 2022
Real short video app with firebase and pixels API.Where you can create a short video with pixels' stock videos and also merge your audio.

Flutter Short Videos Platform Short videos platform with Flutter and Firebase. About Real short video app with firebase and pixels API.Where you can c

Ansh rathod 55 Dec 26, 2022
Figma API client written in pure Dart

figma A library for interacting with Figma APIs. Created from templates made available by Stagehand under a BSD-style license. Usage A simple usage ex

Arne Molland 14 Oct 19, 2022
‎‎‎‎‎Create a serverless Discord bot in pure dart using Discord Interactions webhooks

Create a serverless Discord bot in pure dart using Discord Interactions webhooks Features Feature Status Manage Application Commands Full support (uni

null 4 Sep 28, 2022
Simple Chat Application using pure Firebase.

chat_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this

null 0 Dec 29, 2021
Real-world movie database mobile application with the Flutter SDK and DDD clean architecture.

Moving Pictures Moving Pictures is a mobile application built with the Flutter SDK for Android and iOS. It’s an application that gets the information

Nifemi 57 Jan 7, 2023
Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks from an easy to navigate UX

Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks from an easy to navigate UX

Harsh Joshi 38 Dec 16, 2022
A set of real world timelines to showcase the use of timeline_tile package, built with Flutter.

beatiful_timelines Beautiful timelines built with Flutter and timeline_tile. Current examples: Timeline Showcase Football Timeline Activity Timeline S

null 233 Dec 21, 2022
Sistema de monitoramento de reservatório FLUTTER com banco de dados em tempo real (Firebase)

Internet das coisas Monitoramento de reservatório de água em tempo real Projeto Este aplicativo foi desenvolvido em Flutter. Telas do projeto ESP32 Pa

Rogerio Cezar Fertonani 3 Dec 5, 2021
This is a mobile app created using Flutter, corona.lmao.ninja (Real Time News about Covid 19).

Covid 19 News This is a mobile app created using Flutter, corona.lmao.ninja (Real Time News about Covid 19). There are some test files that needed to

Achintha Isuru 10 Jan 28, 2022
A Real-time Fps Tool for Android

fpsviewer A Real-time Fps Tool for Android, 一个能实时显示fps,一段时间的平均帧率,以及帧率范围占比,并能获取卡顿堆栈的可视化工具。侵入性低,通过在异步线程采样获取堆栈,无代码侵入,性能消耗可忽略,对性能监控项的异常数据进行采集和分析,整理输出展示相应的

null 318 Dec 27, 2022
App de estudo para treino de layout e requisição de APIs. Faz conversão de real para 5 tipos de criptomoedas, exibe gráfico de evolução e as últimas notícias do mercado. Em construção.

cryptonight A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

Ana Carol Cortez 1 Sep 25, 2022
Real estate listing app

Dufuna Real estate listing app Run Locally Clone the project

Stanley Akpama 8 Oct 31, 2022
Clima ☁ A real-time weather app using OpenWeatherMap API

A real-time weather app Demo What I learned from this project How to use Dart to perform asynchronous tasks. Understand async and await.

Mansi Jain 0 Feb 21, 2022
A Flutter package that makes it easy to customize and work with your Flutter desktop app's system tray.

system_tray A Flutter package that that enables support for system tray menu for desktop flutter apps. on Windows, macOS and Linux. Features: - Modify

AnTler 140 Dec 30, 2022
A Music Recommendation System made using Flutter and backed by FastAPI.

ProjectX Music A Music Recommendation System made using Flutter and backed by FastAPI. Introduction ProjectX Music is an online mobile application tha

ProjectX Music App 11 Dec 27, 2022
Plant-monitor - Plant monitoring system using IoT, MongoDB, and Flutter

Plant Monitor IoT based plant monitoring system which is connected to MongoDB. T

Souvik Biswas 15 Dec 1, 2022
Automated blinds system using Raspberry PI and Flutter

Sunrise An automated blinds system using Raspberry PI controlled by an UI-friendly mobile application. This product will help the user be more comfort

Zoghlami Khalil 0 May 14, 2022