
Мазмұны:
- 1 -қадам: Бөлшектерді жинау
- 2 -қадам: Raspberry Pi -ді мониторсыз немесе пернетақтасыз орнату
- 3 -қадам: Wiring Pi, Apache және PHP орнатыңыз
- 4 -қадам: веб -сайт
- 5 -қадам: веб -сайттың суреті
- 6 -қадам: Веб -серверді қашықтан басқару
- 7 -қадам: Raspberry Pi -ге схеманы қосыңыз
- 8 -қадам: Іске қосу қызметін жасаңыз
- 9 -қадам: Raspberry Pi -ді гаражға бекітіңіз
- 10-қадам: Raspberry Pi-ді SECO-LARM-ге бекітіңіз
- 11 -қадам: Есік жабық болғанда ашық болса, ескерту жіберіңіз
- 12 -қадам: Raspberry Pi -ді құпия кітапқа салыңыз
- 13 -қадам: Қосымша: Әдебиеттер
- 14 -қадам: Қосымша: Жаңартулар
- 15 -қадам: Қосымша: Ақаулықтарды жою
2025 Автор: John Day | [email protected]. Соңғы өзгертілген: 2025-06-01 06:09

Мен бұл нұсқаулықты 2014 жылы жасадым. Содан бері көп нәрсе өзгерді. 2021 жылы мен мұнда ақылды гараж есігін аштым.
Гараж есігін ашу, жабу және бақылау үшін Raspberry Pi мен смартфонды пайдаланыңыз. Есікті ашу мен жабу отбасының ұялы телефондарына орнатылған қол қойылған куәліктерді қолдану арқылы қамтамасыз етіледі. Егер гараж есігі ашылмайтын кезде ашық болса, ұялы телефонға мәтіндік хабарлама (SMS) жіберіңіз.
Гараж есігі 2014 жылдың аяғынан бастап үздіксіз қолданылып келеді. Осы жылдар ішінде мен өзгерістерді жаңартуға тырыстым. Нұсқаулыққа енгізілген өзгерістерді сипаттайтын қосымша бар.
Бұл жобаның мақсаттары:
- Менің бірінші нұсқаулығымды жасаңыз - мен бұны жариялауды жоспарламадым, бірақ маған көптеген өтініштер келді
- Стандартты пульті бар гараж есігін ашыңыз
- Гараждың есігін қабырғаға орнатылған есік қоңырауымен ашыңыз
- SmartPhone көмегімен гараж есігін ашыңыз
- Гараж есігінің күйін ұялы телефон немесе ноутбук арқылы қашықтан бақылаңыз (ол ашық немесе жабық па?)
- Есік жабық кезде ашық болса, ұялы телефоныма мәтіндік хабарлама жіберіңіз
- Гараж есігін қауіпсіз ұстаңыз (мысалы, қуат жоғалған кезде есік ашылмауы керек)
- Ешкімге есікті ашуға рұқсат бермеңіз (екі жақты SSL сертификаты)
- Сымды қосылудың орнына WiFi пайдаланыңыз
- Raspberry Pi 3 пайдаланыңыз
Бұл гараж есігін ашудың негізі квартариандық нұсқаулықтан: Raspberry Pi гараж есігін ашудан алынды. Бастапқыда мен B+ Raspberry Pi моделін қолдандым, содан кейін Raspberry Pi 2 B моделіне көштім, енді ол Raspberry Pi 3 қолданады.
Мен Raspberry Pi -мен сөйлесу үшін MacBook қолдандым, бірақ кез келген компьютерді қолдануға болады.
Бұл құрылғыны жасауға ешқандай себеп жоқ, бірақ бұл қызықты болды. Біреуін сатып алу тиімдірек. Ұқсас құрылғыны шамамен 130 долларға сатып алуға болады.
- Көтеру шебері 828 лм
- Чемберлен MyQ $ 129
- GoGo Gate 179 доллар
- Шебер 100 доллар
Ескертулер:
- Күректермен жабылған мәтін, мысалы, ауыстыру-бұл нақты мәнмен ауыстырылуы керек
- Ардуино асты сызылған көк мәтін - сілтеме. Бұл жағдайда бұл гараж есігін ашудың arduino нұсқасына сілтеме.
- Мен қолданылған барлық дереккөздерді несиеге алуға тырыстым. Кез келген кемшіліктер үшін кешірім сұраймын. Бұл құжаттың көпшілігі басқа адамдардың жұмысына негізделген.
- $ MacBook -те терминал терезесінде орындалатын және әдетте Raspberry Pi -де орындалатын команданы көрсетеді
1 -қадам: Бөлшектерді жинау
Бөлшектер мен құралдарды сатып алыңыз немесе жинаңыз (бағасы АҚШ долларында).
- Raspberry Pi 3 Model B Newark Element14 $ 35
- Amazon -дан 5.2V 2.5A USB қуат адаптері $ 9.99
- Micro USB -ден USB кабеліне 6 фут Amazon -дан 7.99 доллар
- Амазонкадан 6,99 доллар
- SanDisk Ultra 16 ГБ microSDHC 10-адаптері бар адаптері бар (SDSQUAN-016G-G4A) Amazon-дан 8.99 доллар
- SunFounder 2 арналы 5V 5D релелік қалқан модулі Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - $ 6.79
- 3x әйелдер мен әйелдердің секіргіш сымдары. Fry's -те 4,95 долларға сатып алынды.
- Динамикалық DNS 30 $ үшін жылына $ 40 (dyn.com)
- 1-топ 18 куб. in. Ескі жұмыс ауыр қабырға қосқышы мен розетка, $ 3.12
- Ultra Pro бір щеткалы ақ қабырға плитасы, $ 7.88
- SECO-LARM SM 226L, гараж есігінің сенсоры, бағасы әр түрлі, Amazon-да $ 9.99 тегін жеткізіліммен.
- 50 фут қатты термостат сымы, Home Depot немесе Lowe's, ~ 20 доллар
Менің жалпы сомам: ~ $ 172.00
Менде келесі бөліктер, құралдар мен қызметтер болды:
- CAT5 Ethernet кабелі
- Ұзындығы 6 фут болатын шағын сым
- Филлипс бас бұрағыш
- Мұрын инелері
- Қорап кескіштер
- Зергерлер реледегі бұрандаларды босату үшін қажет тегіс бұрағыш
- MacBook (компьютерді қолдануға болады)
- AT&T GigaPower (кез келген интернет -провайдерді қолдануға болады)
2 -қадам: Raspberry Pi -ді мониторсыз немесе пернетақтасыз орнату

Raspberry Pi -дің барлық жобалары белгілі бір баптауды қажет етеді. Мен бір нұсқаулықтар жиынтығын қолданғанды ұнатамын және қажет болған жағдайда сол нұсқауларды жаңартатын бір орын бар.
Raspberry Pi -ді келесі нұсқаулықпен орнатыңыз:
Мониторсыз немесе пернетақтасыз Raspberry Pi орнатыңыз
Жоғарыдағы нұсқаулық қосымшадағы қосымша қадамдарды қамтиды. Қадамды міндетті түрде орындаңыз:
Веб-серверлерге клиенттік сертификаттарды қосыңыз
Raspberry Pi жабу
$ sudo өшіру -h 0
Өшіргеннен кейін алып тастаңыз
- Ethernet кабелі
- USB сериялық кабелі
Бұларға бұдан былай қажет болмайды. Raspberry Pi -де пәрмендерді іске қосу үшін wifi, ssh және Mac Book -тағы терминал терезесін пайдаланыңыз.
Қуат көзін ажыратып, қуатты қайта қосыңыз, содан кейін таңқурай pi қайта жүктелуі керек.
3 -қадам: Wiring Pi, Apache және PHP орнатыңыз
Wiring Pi орнатыңыз
Mac Book -та терминал терезесін ашыңыз. Raspberry Pi -ге кіріңіз, содан кейін Wiring Pi -ді жүктеңіз, құрастырыңыз және орнатыңыз. Бұл бағдарлама GPIO түйреуіштерін басқаруға мүмкіндік береді. Міне, қадамдық нұсқаулық:
wiringpi.com/download-and-install/
Міне нұсқаулықтың қысқартылған нұсқасы:
$ ssh pi@♣ таңқурай-pi-ip ♣
пароль: ♣ $ sudo apt-get install git-core $ git clone git: //git.drogon.net/wiringPi $ cd wiringPi $ git pull $./build
Орнатуды тексеру үшін gpio пәрменін іске қосыңыз:
$ gpio -v
gpio нұсқасы: 2.29 Copyright (c) 2012-2015 Гордон Хендерсон Бұл мүлде КЕПІЛДІК жоқ ақысыз бағдарламалық қамтамасыз ету. Мәліметтер түрі үшін: gpio -кепілдік Raspberry Pi Толығырақ: Түрі: Модель 2, Нұсқасы: 1.1, Жад: 1024МБ, Жасаушы: Sony [OV] Құрылғы ағашы қосылған. Бұл Raspberry Pi пайдаланушы деңгейіндегі GPIO қатынасын қолдайды. -> Толығырақ ақпарат алу үшін адам бетін қараңыз $ gpio readall+-----+-----+---------+------+---+--- Pi 2 ---+---+------+---------+-----+-----+| BCM | wPi | Аты | Режим | V | Физикалық | V | Режим | Аты | wPi | BCM | +-----+-----+---------+------+---+---- ++ ----+---+- -----+---------+-----+-----+| | | 3.3в | | | 1 || 2 | | | 5в | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5В | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | ШЫҒУ | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 1 | IN | GPIO. 4 | 4 | 23 | | | | 3.3в | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 | +-----+-----+---------+------+---+---- ++ ----+---+- -----+---------+-----+-----+| BCM | wPi | Аты | Режим | V | Физикалық | V | Режим | Аты | wPi | BCM | +-----+-----+---------+------+---+--- Pi 2 ---+---+--- ---+---------+-----+-----+
Жоғарыдағы командалар сізге wiringPi дұрыс жұмыс істейтініне сенімділік береді.
Apache және PHP орнатыңыз
Келесі пәрмендерді іске қосыңыз:
$ cd..
$ sudo apt-get update $ sudo apt-get install apache2 php5 libapache2-mod-php5
Веб -сервердің жұмыс істейтінін тексеру үшін шолғышты ашыңыз және URL жолағына мынаны енгізіңіз:
(Таңқурай-pi-ip)
Apache әдепкі веб -сайты «Бұл жұмыс істейді!» Деп жауап береді.
4 -қадам: веб -сайт
Mac Book -та терминал терезесін ашыңыз. Raspberry Pi -ге кіріңіз, содан кейін әдепкі index.html файлын жойыңыз, веб -сайт каталогындағы рұқсаттарды өзгертіңіз және index.php деп аталатын файлды өңдеңіз.
$ ssh pi@♣ таңқурай-pi-ip ♣
пароль: ♣ құпия сөз ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root/var/www $ sudo nano /var/www/index.php
Және келесі кодты енгізіңіз:
Гараж ашатын
Үй автоматикасы |
---|
Гараж есігін ашатын құрал | Гараж есігін ашуға арналған нұсқаулық | жабық 1 | ашық 0 |
Файлды жазу үшін CTRL-o және ENTER, ал редактордан шығу үшін CTRL-x.
Файлдағы рұқсаттарды өзгертіңіз
$ sudo chmod 664 /var/www/index.php
5 -қадам: веб -сайттың суреті


Интернеттен жоғары ажыратымдылықтағы гараж есігін ашыңыз. Mac бояу щеткасын пайдаланып суретті өзгертіңіз. Жоғарыдағы суретте жоғары ажыратымдылықтағы Genie Garage Opener қолданылды, таңқурай pi логотипі қосылды және светодиод алынып тасталды.
Бір сурет-фон (remote-background.jpg), ал екіншісі-белсенді сурет (remote-press.jpg).
Жоспар - бұл түймені басқанда, светодиодты жыпылықтаудың орнына таңқурай жыпылықтайды. Мен сайтты жеңілдеттім.
Таңқурайға суреттерді көшіріңіз:
$ scp *-j.webp
пароль: пароль ♣
Веб -сайтта бір ғана түйме бар. Тексеру үшін браузерді ашып, asp raspberry-pi-ip enter енгізіңіз. Apache әдепкі веб -сайтында «Бұл жұмыс істейді!» Деп жазылған орнына, түйме пайда болуы керек. Оны басыңыз.
6 -қадам: Веб -серверді қашықтан басқару
Гараж есігін ашуға қашықтан кіруді жеңілдету үшін мен динамикалық DNS атауын қолданамын. Мен IP -адрестерді есте сақтауды ұнатпаймын.
Бұл мүмкіндіктің арқасында мен шолғыштың URL өрісіне ♣ динамикалық хост атауы ♣.getmyip.com енгіземін. Ескерту: Үй маршрутизаторларындағы IP ескертусіз өзгеруі мүмкін, бірақ бұл сирек кездеседі. Мен DynDNS қолдануды таңдадым. Маршрутизатордың жалпыға ортақ IP мекенжайын білу қажет.
U-Verse маршрутизаторы IP: verse uverse-public-ip ♣
Сіз хост атауларын және DynDNS Pro есептік жазбасының мәліметтерін көре аласыз. Міне, бастау үшін бірнеше кеңестер:
-
Динамикалық DNS хост атауын жасаңыз (1 /30):
- (Динамикалық хост атауы)
- Жаңартқыш кілті: динамикалық-ip-жаңартушы-кілт
-
Сіздің хост атыңыз әрқашан дұрыс IP мекенжайы көрсетілгеніне көз жеткізу үшін жаңарту клиентін орнатыңыз.
- MacBook -қа жүктеңіз және орнатыңыз
- AT&T U-аятындағы IP мекен-жайлары сирек өзгереді, сондықтан жаңартқышты ол өзгерген сайын іске қосуға болады
-
Нұсқауларды орындаңыз:
- Аккаунт қосу
- Пайдаланушы аты мен құпия сөзді енгізіңіз: ♣ динамикалық-ip-пайдаланушы аты ♣ ♣ динамикалық-ip-пароль ♣
- Хост атауын таңдаңыз
- Таңдалған хосттарды конфигурациялау түймешігін басыңыз
- Хост белсенді болуы керек
-
Құрылғыңызға Интернеттен кіруге рұқсат беру үшін желіні конфигурациялаңыз. Сіз мұны қалай жасауға болатыны туралы жалпы нұсқаулар алу үшін біздің Dyn Wizard бағдарламасын қолдана аласыз, PortForward.com сияқты ресурстарды қолдана аласыз немесе көмек алу үшін құрылғы өндірушісімен хабарласа аласыз.
- AT&T U-аяты
- 2-Wire 3801HGV үшін порт жіберу-бұл менде бар AT&T U-Verse маршрутизаторы. AT&T U-аят 5268ac маршрутизаторында қалай жіберу керектігін Қосымшадағы Жаңартуларды қараңыз.
- Браузерді ашып, asp raspberry-pi-ip to өтіңіз
- Құпия сөз: құпия сөз ♣
- Параметрлер
-
Брандмауэр
- ♣ raspberry-pi-hostname Choose таңдаңыз
-
Серверлер
- Веб -сервер порты 80
- HTTPS сервері - 443 порт
- Қосу
- Сақтау
Бұл орындалғаннан кейін веб -сервер интернеттен жұмыс істейді. Тексеру үшін ♣ dynamic-hostname enter енгізіңіз, сіз гараж есігін ашу түймесін көресіз.
7 -қадам: Raspberry Pi -ге схеманы қосыңыз

Берілген код үшін (4 және 6 -қадам) мен GPIO -пин 7 -ді қолдандым. Бұл кездейсоқтық, GPIO 7 сымның 7 -ші PIN кодымен сәйкес келеді. PHP кодында сымның PIN -сандарының нөмірлері қолданылады, ал GPIO -ның PIN -сандары емес. Сіз қалағанның бірін қолдана аласыз, бірақ кодты өзгертіңіз.
Мен бұралған сымды қолдануға тырыстым, бірақ реле бұралған сымды жақсы ұстамайды. Қатты сым жақсы.
Бірінші әрекетте мен үш қосқыш кабель жасадым (әйелден еркекке).
- Үш аналықтан әйелге секіргіш кабельдерді қолданыңыз
-
Қатты сымның үш бөлігін шамамен 1 дюймге дейін кесіңіз.
Қатты сымның екі ұшына 1/4ин жолағын салыңыз
- Бір тұтас сымды бір әйел секіргіш кабеліне салыңыз.
Байланыстырушы кабельдерді құрудың жақсы әдісі (әйелден еркекке):
- Тек қатты сымды қолданыңыз
- Қатты сымның 4 дана үш бөлігін кесіңіз
- Қатты сымның екі ұшына 1/4ин жолағын салыңыз
-
Әйелдерге арналған түйреуіштерді қолданыңыз
-
Қатты сым мен қысқыштың бір ұшына бір әйел байланыстырушы түйреуішті салыңыз
Аналық түйреуіш бос болмауы керек, қажет болса дәнекерлеу
- Аналық байланыстырушы түйреуішке немесе электрик таспасы бар қапсырма түйреуішке кернеуді төмендету
-
Эстафетаны диаграммада көрсетілгендей pi -ге қосыңыз:
- Кабельдің аналық ұшын Raspberry Pi түйреуішіне қосыңыз.
- Реледегі қатты сымды салыңыз.
8 -қадам: Іске қосу қызметін жасаңыз
Реленің көпшілігі, соның ішінде сатып алынған, келесідей жұмыс істейді:
- Сигнал қосулы кезде тізбек өшеді.
- Сигнал ӨШІРІЛСЕ, тізбек қосылады.
Егер Raspberry Pi қуатын жоғалтса, реледе қорғаныс механизмі бар, ол тізбекті ӨШІРІП тұрады.
Rapberry Pi мен реле қуатты қалпына келтіргенде мәселе туындауы мүмкін, бірақ Raspberry Pi жүктеуді аяқтамай тұрып, сигналды қосу үшін, бұл тізбекті өшіру үшін қажет. Сіз таңертең гаражыңыз ашық және бірнеше жаңа достарыңызбен ояна аласыз!
Дегенмен, реле GPIO pin режимі осы пәрмен арқылы орнатылмайынша іске қосылмайды: gpio 7 режимі. Сонымен қатар, егер сіз GPIO режимін орнатпас бұрын GPIO PIN кодын ON (gpio write 7 1) күйіне қойсаңыз, инициализацияланған кезде реле өшеді.
Бұл инициализацияны жүктеу кезінде іске қосу және жаңа достармен оянбау үшін келесі іске қосу сценарийін қолданыңыз.
$ ssh pi@♣ таңқурай-pi-ip ♣
$ sudo nano /etc/init.d/garagerelay
Содан кейін мына сценарийді қойыңыз:
#! /bin/bash
# /etc/init.d/garagerelay # «$ 1» жүйелік корпусы сұраған кезде белгілі бір функцияларды орындаңыз) эхо «Іске қосу релесі» # 7 қосу, ол релені өшіреді/usr/local/bin/gpio write 7 1 #Start Gpio/usr/local/bin/gpio mode 7 out;; тоқтату) жаңғырық «Stoping gpio»;; *) жаңғырық «Қолдану: /etc/init.d/garagerelay {бастау | тоқтату}» шығу 1;; esac шығу 0
Сақтау үшін: CTRL-o, ENTER
Нанодан шығу үшін CTRL-x
Файлды орындалатын етіп жасаңыз:
$ sudo chmod +x /etc/init.d/garagerelay
Енді pi -ге бұл сценарийді жүктеу кезінде іске қосуды айтыңыз:
$ sudo update -rc.d -f garagerelay start 4
(Ескерту: «LSB тегтері жоқ» ескертуін қауіпсіз түрде елемеуге болады.)
Іске қосу сценарийі жұмыс істейтініне көз жеткізіңіз
$ sudo қайта жүктеу
Браузерді ашып, ашқышты басыңыз. Реле шертуі керек.
9 -қадам: Raspberry Pi -ді гаражға бекітіңіз

Raspberry Pi жылжытқанда, міндетті түрде жүгіріңіз:
$ өшіру -с 0
Сіз гараждың қуатын өшіргіңіз келуі мүмкін. Сонымен, есік қоңырауының ашқышы сізді электр тогына түсірмейді:). Нағыз себеп - сымдарды қысқартқан сайын есік жоғары -төмен түседі.
Есік қоңырауын қабырғаға бекітетін есік қоңырауы түріндегі ашғыштан қабырғадағы бұрандаларды шешіңіз.
Гараждан есік қоңырауының артындағы үйдің ішіне тесік жасаңыз. Техаста Raspberry Pi гаражда болмауы керек, гараждағы температураның ауытқуы Raspberry Pi жұмыс сипаттамаларына сәйкес келмейді.
Реле сымдарын тесік арқылы өткізіңіз (пальто ілгішті қолданыңыз).
Есік қоңырауының артындағы екі бұранданы босатыңыз.
Реле сымдарының екі ұшын алып тастаңыз: 1) реле жағының 1/8 дюймін, ал қоңырау жағында ½ дюйм шамасында. Сымның есік қоңырауын бүйірлік бұранданың айналасына сыйып тұратындай үлкен ілмекке бүгіңіз.
Есік қоңырауының артындағы әрбір бұрандаға бір релелік сымды жалғап, бұранданы қатайтыңыз. Қосылымдар суретте көрсетілгендей. Реле тізбекті оқшаулайтындықтан, бағыт қандай реле қай бұрандаға бекітілгені маңызды емес.
10-қадам: Raspberry Pi-ді SECO-LARM-ге бекітіңіз


Мен кодты аяқтамай тұрып, отбасыммен демалыста болдық, мен браузерімді аштым. Менің шолғыштың соңғы көрінісі гараж есігін ашты - бет жаңартылды және гараж есігі ашылды. Бірнеше күннен кейін көршісі қоңырау шалып, гараждың есігі ашық болуы керек пе деп сұрады. Бақытымызға орай, мен оны 500 миль қашықтықта жаба аламын.
Бұл снафу мені бұлай болмас үшін кодты өзгертуге мәжбүр етті, сенсор мен гараж есігінің күйін веб -сайтқа қосуға мәжбүр етті.
Бұл сенсорды қосуға арналған нұсқаулыққа сілтеме. Дегенмен, аяқталғанның барлығын ескере отырып, сенсорды орнатуды едәуір жеңілдетуге болады және python пайдаланудың орнына index.php -ге бірнеше код жолын қосыңыз.
Fatal error: Uncaught Error: Call to undefined function exec() in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code:513 Stack trace: #0 W:\www\langs\.php-gen-lang\v3-core\macros.php(127): eval() #1 W:\www\langs\.php-gen-lang\v3-core\index-global.php(231): Macros->macros_parse('<!DOCTYPE html>...') #2 W:\www\langs\howwhatproduce.com\kk.howwhatproduce.com\index.php(9): require_once('W:\\www\\langs\\.p...') #3 {main} thrown in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code on line 513