MajorDoMo is an open-source DIY smarthome automation platform aimed to be used in multi-protocol and multi-services environment.

Overview

MajorDoMo

What is MajorDoMo

MajorDoMo (Major Domestic Module) is an open-source DIY smarthome automation platform aimed to be used in multi-protocol and multi-services environment. It is based on web-technologies stack and ready to be delivered to any modern device. It is very flexible in configuration with OOP paradigm used to set up automation rules and scripts. This platform can be installed on almost any personal computer running Windows or Linux OS.

Web-sites

English: majordomohome.com + forum

Russian: majordomo.smartliving.ru + forum

Our mission

Our goal is to create most flexible but still easy to use platform for all kind of automation projects involving hardware and software interaction.

Our plans

More hardware to integrate, make everything much more user-friendly, get the code in order, add more languages (translations)... And much more :)

Community

One of the things we really proud of is supportive and friendly world-wide community. Map

Contribution

Feel free to join our team! Join discussions on forums below or mail us directly at [email protected] Any help is much appreciated.

Comments
  • Проблема с 1-wire

    Проблема с 1-wire

    При сканировании устройств получаем (DS18B20 3 штуки)

    Fatal error: Call to undefined function bccomp() in /var/www/modules/onewire/ownet.php on line 516

    После в списке устройств есть только одно обнаруженное устройство.

    28.6164123C64EE (28.6164123C64EE, Online)
    Next check: 2018-01-20 22:56:30 
    

    Остальных два в списке нет.

    28.6164123C64EE | 28.6164123C64EE | 
    28.616412266DFD | 28.616412266DFD | 
    28.6164123FF5E5 | 28.6164123FF5E5 | 
    
    opened by lyovav 7
  • Add Coding Standards for project

    Add Coding Standards for project

    I wanted to add new method and discovered that code has different styles inside single class. Some methods use 1 space identation, other methods 2 spaces. Would be nice to have some definition of php coding standards. All contributors will be able to configure favorite IDE and provide new well-formatted code. Legacy code will be formated during various refactorings in future. DoD:

    • [ ] Add php coding standards on wiki or link to readme
    • [ ] Prepare continuous integration server somewhere (for example travis-ci.org)
    • [ ] Configure PHP_CodeSniffer according to coding standards
    • [ ] Set trigger to fail build if number of violations are increased
    opened by dimitrystd 7
  • Зачем переделывать update на параметры?

    Зачем переделывать update на параметры?

    https://github.com/sergejey/majordomo/blob/5271bad4d73fb20afd1097b325b5e46a22350564/lib/mysqli.class.php#L268

    Что передача только изменившихся полей, что всей записи обрабатывается mysql одинаково, причем If you set a column to the value it currently has, MySQL notices this and does not update it. https://dev.mysql.com/doc/refman/8.0/en/update.html В чём выигрыш? того же самого можно добиться, передавая только нужные поля+id $jobs['ID'] = $jobs[$i]['ID']; $jobs['PROCESSED'] = 1; $jobs['STARTED'] = date('Y-m-d H:i:s'); SQLUpdate('jobs', $jobs); и, по-прежнему, можно свой индекс выбрать, а не зашитый хардкодом теперь ID

    opened by xor2016 6
  • Использование таблицы кеширования

    Использование таблицы кеширования

    При использовании кеша - все значения берутся из таблицы кеша , если же там они отсутствую то из пвалуе таблицы. Уменьшает нагрузку на накопители что очень полезно для систем НЕ держащих всю базу данных в памяти... Включение-выключение кеширования свойств обьектов производится в общих настройках - система.

    opened by tarasfrompir 6
  • Переделка работы с классом mysql

    Переделка работы с классом mysql

    Хочется подготовить плацдарм, для того, чтобы можно было использовать какую нибудь другую базу данных (Кроме MySQL). Поэтому нужно вынести всю работу с базой данных в отдельные места. Я попробую потихонечку заняться этим.

    opened by AKEB 6
  • Небезопасный файл php.php

    Небезопасный файл php.php

    В корневой папке проекта лежит небезопасный файл php.php. Он сообщает всю информацию о сервере любому, у кого есть доступ к сайту Majordomo, т.е. фактически систему выставлять в интернет опасно.

    opened by fsa 6
  • Для этого есть BASE_URL

    Для этого есть BASE_URL

    Удалена SERVER_URL Вместо нее есть BASE_URL И она в конфиге описана Вот оно if (isset($_ENV["S2G_BASE_URL"]) && $_ENV["S2G_BASE_URL"]) { Define('BASE_URL', $_ENV["S2G_BASE_URL"]); } else { // Your base URL:port (!!!) Define('BASE_URL', 'http://127.0.0.1:80');
    }

    opened by tarasfrompir 5
  • Исправление работы системы из подкаталога

    Исправление работы системы из подкаталога

    Исправления, связанные с работой из подкаталога.

    И, Сергей, такой вопрос, константа BASE_URL в файле config.php подразумевает только адрес и порт, или ещё и подкаталог, в котором располагается Мажордомо? Просто, я столкнулся с тем, что в некоторых местах системы к BASE_URL добавляется ROOTHTML, а в некоторых нет. Какова изначальная идея переменной? В какую сторону идеологически правильно будет править код?

    opened by kvazimoda24 5
  • Хардкод в адресе при запуске startWebSockets

    Хардкод в адресе при запуске startWebSockets

    Некорректный урл вебсокета т.к. порт и часть адреса прописаны не в настройках, а в коде. Выявилось при попытке открыть список городов в приложении OpenWeather. Список так и не открылся.

    MajorDoMo установлен из исходников gitgub'a. Система: Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02) x86_64 GNU/Linux

    \templates\websockets.html

     function startWebSockets() {
                var loc = window.location, new_uri;
                var serverUrl='';
                if (loc.protocol === "https:") {
                        serverUrl = "wss:";
                } else {
                        serverUrl = "ws:";
                }
                serverUrl += "//" + loc.host + ':<#WEBSOCKETS_PORT#>/majordomo';
    ...
    

    \load_settings.php

    if (!defined('WEBSOCKETS_PORT'))
       Define('WEBSOCKETS_PORT', 8001);
    

    Как результат получаем это: default

    Вариант решения: Вынести в config.php порт web-сокета и его адрес.

    opened by palacex 5
  • Ошибка в выключателе  методе в меню управления

    Ошибка в выключателе методе в меню управления

    При нажатии выключателя в меню в связанный метод не передаются парметр VALUE в xray видится так

    .switch {" VALUE" :" " ," OLD_VALUE" :" 0" ," ORIGINAL_OBJECT_TITLE" :" lamp1" }

    в отладчике в браузере запрос выглядит так http://192.168.1.208/ajax/commands.html?op=value_changed&item_id=118&new_value=

    opened by andrei-trybukhouski 4
  • timenow без обращения к базе

    timenow без обращения к базе

    Храниить текущее время в базе ради удобства доступа - расточительно) Поэтому просто отдаем его сразу по запросу. Возможно лучше его вообще убрать, мало где используется (но тем неменее создает хоть и небольшую, но бессмысленную нагрузку на базу)

    opened by andrei-trybukhouski 3
  • Регулярка не работает для Винды(

    Регулярка не работает для Винды(

    https://github.com/sergejey/majordomo/blob/fe0ac29059437457d6ca0272db5ab8c72bead689/lib/messages.class.php#L149

    пришлось добавить ещё : и слеш if (preg_match('/image:([\w\d\:\\\_\/\-\.]+)/is',$ph,$m)) {

    opened by xor2016 0
  • Лишняя и неверная запись в бд поля TITLE

    Лишняя и неверная запись в бд поля TITLE

    https://github.com/sergejey/majordomo/blob/c772b18d1ddb0579820031a0b8f6d6161a333683/modules/devices/devices.class.php#L1475

    <#LANG_DEVICES_MODULE_TITLE#> https://github.com/sergejey/majordomo/blob/c772b18d1ddb0579820031a0b8f6d6161a333683/modules/devices/devices.class.php#L23

    opened by Alexandr-logrus 2
  • Упрощение нагруженной функции getObject

    Упрощение нагруженной функции getObject

    https://github.com/sergejey/majordomo/blob/c772b18d1ddb0579820031a0b8f6d6161a333683/lib/objects.class.php#L389

    Опираясь на постулат, что имя объекта в системе уникально, можно упростить весьма часто используемую функцию

    
    function getObject($name)
    {
        if (trim($name)=='') return 0;
        if (preg_match('/^(.+?)\.(.+?)$/', $name, $m)) { //уберём класс спереди
            $name = $m[2];
        }
        $rec = SQLSelectOne("SELECT ID FROM objects WHERE TITLE = '".DBSafe($name)."'");
        if ($rec['ID']) {
            include_once(DIR_MODULES . 'objects/objects.class.php');
            $obj = new objects();
            $obj->id = $rec['ID'];
            $obj->loadObject($rec['ID']);
            return $obj;
        }
    
        return 0;
    }
    
    
    opened by xor2016 7
  • Упрощение loadObject

    Упрощение loadObject

    https://github.com/sergejey/majordomo/blob/c772b18d1ddb0579820031a0b8f6d6161a333683/modules/objects/objects.class.php#L322 Основываясь на предположении, что объект ДОЛЖЕН принадлежать к какому-нибудь классу избавляемся от лишнего запроса

     
    function loadObject($id)
        {
            $rec = SQLSelectOne("SELECT  objects.*,classes.TITLE CL_TITLE  FROM objects join classes ON objects.CLASS_ID = classes.ID WHERE objects.ID=" . (int)$id);
            if (IsSet($rec['ID'])) {
                $this->id = $rec['ID'];
                $this->object_title = $rec['TITLE'];
                $this->class_id = $rec['CLASS_ID'];
                $this->class_title = $rec['CL_TITLE'];
                $this->description = $rec['DESCRIPTION'];
                $this->location_id = $rec['LOCATION_ID'];
                if (preg_match('/^sdevice(.+?)/', $rec['SYSTEM'], $m)) {
                    $this->device_id = $m[1];
                }
            } else {
                return false;
            }
        }
    
    
    
    opened by xor2016 0
  • задержка запуска джобов

    задержка запуска джобов

    https://github.com/sergejey/majordomo/blob/e453668e32c17bf4c3d751ea2efcd8494bc3b11a/lib/common.class.php#L314

    При ожидании Ок от getURL возможна задержка до 45 с. При долгой задаче выдается ошибка, которой нет + задерживается выполнение следующей задачи, если ее время запуска то же( Предлагается не ждать ответа и использовать getURLBackground. Проверено на себе)

            if ($jobs[$i]['COMMANDS'] != '') {
                $url = BASE_URL . '/objects/?system_call=1&job=' . $jobs[$i]['ID'];
                getURLBackground($url);
                /*
                $result = trim(getURL($url, 0));
                $result = preg_replace('/<!--.+-->/is', '', $result);
                if (!preg_match('/OK$/', $result)) {
                    DebMes(sprintf('Error executing job %s (%s): %s', $jobs[$i]['TITLE'], $jobs[$i]['ID'], $result) . ' (' . __FILE__ . ')');
                }
                */
            }
    
    opened by xor2016 1
Owner
Sergei Jeihala
Self-employed: IoT, web, mobile
Sergei Jeihala
TiDB is an open source distributed HTAP database compatible with the MySQL protocol

What is TiDB? TiDB ("Ti" stands for Titanium) is an open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) wo

PingCAP 33.1k Jan 9, 2023
Tars is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented hosting-service via flexible schedule.

TARS - A Linux Foundation Project TARS Foundation Official Website TARS Project Official Website WeChat Group: TARS01 WeChat Offical Account: TarsClou

THE TARS FOUNDATION PROJECTS 9.6k Jan 1, 2023
Zephir is a compiled high level language aimed to the creation of C-extensions for PHP.

Zephir - is a high level programming language that eases the creation and maintainability of extensions for PHP. Zephir extensions are exported to C c

Zephir Language 3.2k Jan 2, 2023
This package is aimed to be a simplistic PHP workflow package that works in a similar fashion to GitHub Actions.

Workflow This package is aimed to be a simplistic PHP workflow package that works in a similar fashion to GitHub Actions. Installation To install this

Steve McDougall 4 Sep 26, 2022
Some Joomla! 4.x Web Services Api Examples and Experiments to raise the level of awareness of the huge potiental of Joomla! 4.x Web Services.

j4x-api-examples WHY? If you are a Joomla! developer or want to become a Joomla! developer there is a new resource for you The Official New Joomla! Ma

Mr Alexandre ELISÉ 11 Nov 29, 2022
A pure PHP implementation of the open Language Server Protocol. Provides static code analysis for PHP for any IDE.

A pure PHP implementation of the open Language Server Protocol. Provides static code analysis for PHP for any IDE.

Felix Becker 1.1k Jan 4, 2023
Skosmos is a web-based tool providing services for accessing controlled vocabularies, which are used by indexers describing documents and searchers looking for suitable keywords.

Skosmos is a web-based tool providing services for accessing controlled vocabularies, which are used by indexers describing documents and searchers looking for suitable keywords.

National Library of Finland 195 Dec 24, 2022
MailChimp for Magento 2. Syncs all data (subscriber, customers, orders, products) and enables marketing automation with email campaigns, automations, ads, postcards and more.

MailChimp for Magento 2. Syncs all data (subscriber, customers, orders, products) and enables marketing automation with email campaigns, automations, ads, postcards and more.

Mailchimp 139 Sep 9, 2022
Open-source library used in Gigadrive projects with common PHP utilities

PHP Commons This library provides PHP utilities used in Gigadrive projects, provided for the open-source community. Functions are registered globally

Gigadrive UG 3 Nov 10, 2021
Iran decoration platform is an open source Php web application where you can find your job as a freelancer working in people home in decoration positions and others.

Iran-Decoration Platform Iran decoration platform is an open source Php web application where you can find your job as a freelancer working in people

AmirHossein Mohammadi 8 Dec 14, 2022
Nuber is an open source container management platform it provides a front end to manage your own cloud infrastructure, using Linux Containers virtualization technology

Nuber is an open source container management platform it provides a front end to manage your own cloud infrastructure, using Linux Containers virtualization technology

null 33 Dec 14, 2022
Apache OpenWhisk is an open source serverless cloud platform

OpenWhisk OpenWhisk is a serverless functions platform for building cloud applications. OpenWhisk offers a rich programming model for creating serverl

The Apache Software Foundation 5.9k Jan 8, 2023
Moodle - the world's open source learning platform

.-..-. _____ | || | /____/-.---_ .---. .---. .-.| || | .---. | | _ _ |/ _ \/ _ \/ _ || |/ __ \ * | | |

Moodle Development 4.5k Jan 1, 2023
Open Source Data & Experience Management Platform (PIM, MDM, CDP, DAM, DXP/CMS & Digital Commerce)

Pimcore - Open Source Data & Experience Management Platform: PIM, MDM, CDP, DAM, DXP/CMS & Digital Commerce

Pimcore 2.7k Jan 4, 2023
WHMCS Automation Module For AWS EC2 Instances.

使用方法 把AWSEC2目录直接扔到 WHMCS/modules/servers 下即可 自定义字段 cloudinit (文本框 textarea 在订单页面显示) pem (文本框 textarea 仅管理员可见) data (文本框 textarea 仅管理员可见) 特性 动态IP (关机再开

CoiaPrant 9 Jan 28, 2022
Plugin allowing to integrate marketing automation made by ActiveCampaign in Sylius.

The SyliusActiveCampaignPlugin takes care of creating and updating contacts, connections, orders, and abandoned carts on ActiveCampaign.

Webgriffe® 3 Apr 1, 2022
Extends the Debug Bar plugin for the Sophi.io Site Automation service.

Debug Bar for Sophi Extends the Debug Bar plugin for the Sophi.io Site Automation service. Requirements PHP 7.4+ WordPress 5.6+ Sophi 1.1.0+ Debug Bar

10up 2 Jun 22, 2022
Talkino allows you to integrate multi social messengers and contact into your website and enable your users to contact you using multi social messengers' accounts.

Talkino Welcome to our GitHub Repository Talkino is a click to chat plugin to show your agents’ multiple social messengers, phone and emails on the ch

Traxconn 2 Sep 21, 2022
This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform

This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform. It allows you to hear the sound

Thành Nhân 10 Sep 27, 2022