Pass2PHP

Moderator: leecollings

User avatar
Egregius
Posts: 2582
Joined: Thursday 09 April 2015 12:19
Target OS: Linux
Domoticz version: v2024.7
Location: Beitem, BE
Contact:

Re: Pass2PHP

Post by Egregius »

poudeness wrote:
Trigun wrote:
sincze wrote:
For the love of my scroll wheel, please use quotes as they are intented. Quote a specific part of a post, don't double quote and don't quote at all when responding to the last message. It makes posts almost unreadable.
Trigun
Posts: 390
Joined: Wednesday 30 November 2016 11:58
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.10717
Contact:

Re: Pass2PHP

Post by Trigun »

You are right, Will take it into account.
I was wondering how the scripts are working if, for example, you have configured the hardware settings of the pir. Will it override?
As I have a few of the NEO coolcam PIRs where the auto off setting is pre configured.




Sent from my iPhone using Tapatalk
poudenes
Posts: 667
Joined: Wednesday 08 March 2017 9:42
Target OS: Linux
Domoticz version: 3.8993
Location: Amsterdam
Contact:

Re: Pass2PHP

Post by poudenes »

Little other question. Is this way faster then for example dzvents?
I was testing and for me it seems slower in action then using dzvents.

Maybe pass2php there are more complex scripting possible?
RPi3 B+, Debain Stretch, Domoticz, Homebridge, Dashticz, RFLink, Milight, Z-Wave, Fibaro, Nanoleaf, Nest, Harmony Hub, Now try to understand pass2php
User avatar
Egregius
Posts: 2582
Joined: Thursday 09 April 2015 12:19
Target OS: Linux
Domoticz version: v2024.7
Location: Beitem, BE
Contact:

Re: Pass2PHP

Post by Egregius »

Trigun wrote: Monday 06 May 2019 10:22 I was wondering how the scripts are working if, for example, you have configured the hardware settings of the pir. Will it override?
As I have a few of the NEO coolcam PIRs where the auto off setting is pre configured.
pass2php will only do what you say it must do. If you don't script anything to set the pir to off it won't. If you don't do anything in your pir script when status is off nothing will be done. Normally you shouldn't have to override pir stuff. As long as there is motion they should remain on.
poudenes wrote: Monday 06 May 2019 10:59 Is this way faster then for example dzvents?
I was testing and for me it seems slower in action then using dzvents.
Good question where I also like to know the answer to.

I do know that domoticz handles scripts in a certain order. From testing I learned that file based lua scripts are handled before the database lua scripts. And that those 2 are before the switch on/off actions. Where dzvents comes in I don't know. Never used it and probably never will.

I do know that a switch on/off action takes about 1200msec. That was my first way of pushing statusses to php. Then I did something different and the response time went down to 800msec.
Sometime later the lua script was born and the response times went down to 80-120msec.
Now, with the latest pass2php version on a i3 Intel Nuc I'm down to 1 msec. Is that fast? Yes it is. How fast? Lets do a litle calculation when you walk at a speed of 5km/h and you trigger a PIR. At 1200msec you would be 1,66m far. At 1msec only 0,1cm.

Depending on the above mentioned order it could be that dzvents is faster if you use a mixed scripting environment. It should and can be tested of course.
In my system I only have 1 script in Domoticz and that is the lua pass2php script. Nothing else, dzvents deactived.
poudenes wrote: Monday 06 May 2019 10:59 Maybe pass2php there are more complex scripting possible?
I always say: "Only your imagination is the limit" ;)
You can do everything you like in PHP.
User avatar
sincze
Posts: 1300
Joined: Monday 02 June 2014 22:46
Target OS: Raspberry Pi / ODroid
Domoticz version: 2024.4
Location: Netherlands / Breda Area
Contact:

Re: Pass2PHP

Post by sincze »

Don't forget the php examples and classes available on the web that you can integrate easily.

I am do deep into this pass2php everything is working like a charm. Unable to rewrite code in lua again. Hahaha

Sent from my ONEPLUS A6003 using Tapatalk

Pass2php
LAN: RFLink, P1, OTGW, MySensors
USB: RFXCom, ZWave, Sonoff 3
MQTT: ZIgbee2MQTT,
ZWAVE: Zwave-JS-UI
WIFI: Mi-light, Tasmota, Xiaomi Shelly
Solar: Omnik, PVOutput
Video: Kodi, Harmony HUB, Chromecast
Sensors: You name it I got 1.
Trigun
Posts: 390
Joined: Wednesday 30 November 2016 11:58
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.10717
Contact:

Re: Pass2PHP

Post by Trigun »

He Guys,

when I do a tail(yes this is my new best friend :)) I can see that th "on" script is working. I see the following line:

Code: Select all

2019-05-06 15:06:33.040  (SWITCH) |  => Bijkeuken => On check=false
I was wondering what the "Check=false" line does?

also, How can I check that the _cron60 is working?


Damn guys, you guys did a very nice job with Pass2php. the more I work with it, the more things I see are possible.
for me, getting to know PHP better is key but I gues this is partly experience :)

thanks!
User avatar
sincze
Posts: 1300
Joined: Monday 02 June 2014 22:46
Target OS: Raspberry Pi / ODroid
Domoticz version: 2024.4
Location: Netherlands / Breda Area
Contact:

Re: Pass2PHP

Post by sincze »

If you add a lg line to _cron60 you should see that fly by every 60 sec in your tail.

Regarding check false.. look at the specific function.
In sw for example it means I believe "just switch on/off. Do not check current state."

If check is true ... It checks if current state is different to requested state.. if different.. then switch.

Learning curve is a big one indeed. Takes some time but now you can build anything as long as you understand the php part. Hahaha
Pass2php
LAN: RFLink, P1, OTGW, MySensors
USB: RFXCom, ZWave, Sonoff 3
MQTT: ZIgbee2MQTT,
ZWAVE: Zwave-JS-UI
WIFI: Mi-light, Tasmota, Xiaomi Shelly
Solar: Omnik, PVOutput
Video: Kodi, Harmony HUB, Chromecast
Sensors: You name it I got 1.
Trigun
Posts: 390
Joined: Wednesday 30 November 2016 11:58
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.10717
Contact:

Re: Pass2PHP

Post by Trigun »

sincze wrote: Monday 06 May 2019 16:47 Learning curve is a big one indeed. Takes some time but now you can build anything as long as you understand the php part. Hahaha
I have to admit all you guys have been a great learningcurve so thanks for your patience to all my noob questions!
but in the end I am able to help others out as well. if you have tips for me to learn it quicker please let me know!
User avatar
Egregius
Posts: 2582
Joined: Thursday 09 April 2015 12:19
Target OS: Linux
Domoticz version: v2024.7
Location: Beitem, BE
Contact:

Re: Pass2PHP

Post by Egregius »

Take a look at the sw function in functions.php.
The arguments are:
function sw($name,$action='Toggle',$check=false,$msg='',$usleep=0)

you can call the function by:

Code: Select all

sw('test');//Toggle switch
sw('test', 'On');//Switch On
sw('test', 'On', true);//Switch On only if it's not on.
sw('test', 'On', false, 'Just because you need to');//Toggle On, always and add 'Just because you need to' to the logline.
sw('test', 'On', false, null, 500000);//Switch On, always and wait half a second before continuing. Handy when switching an array.
sw(array('switch1', 'switch2', 'switch3'), 'Off');//Switch these 3 switches off, always.
sw(array('switch1', 'switch2', 'switch3'), 'Off', false);//Switch these 3 switches off if they aren't off
sw(array('switch1', 'switch2', 'switch3'), 'Off', false, 'because we\'re out');//Switch these 3 switches off if they aren't off and add a message to the logline
sw(array('switch1', 'switch2', 'switch3'), 'Off', false, 'because we\'re out', 500000);//Switch these 3 switches off if they aren't off and add a message to the logline and wait half a second between commands
Learning PHP is a nice hobby and there's lots of documentation and examples available.
Pass2php is the result of several years of finetuning. Main thing is that you can start simple and add more and more as you learn it.
Use a good text editor like BBEdit, Notepad++ etc. One that has syntax highlighting and preferably like BBEdit where you can double click a ( or { to see where it ends.
I often have two SSH windows open. One with a tail of the domoticz log, one with a tail of the apache errorlog. With those 2 you see instantly what happens.

Besides all that. Create a versioned backup system. That is a backup where you can go back to versions of yesterday, last week, ... If you screw things up you can easily revert.
Trigun
Posts: 390
Joined: Wednesday 30 November 2016 11:58
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.10717
Contact:

Re: Pass2PHP

Post by Trigun »

Great @Egregius! this is really helpfull, thnx!

Now I still have one issue to tackle before i can go crazy :), I can't seem to turn the light off automatically.

I have Cron.sh placed in /home/pi/scripts/pass2php
I have cron.php, _cron60.php and functions placed in /var/www/html/secure

I didn't change any of the original files(cron.sh and cron.php)
_cron60 looks like this:

Code: Select all

<?php
if ($d['Bijkeuken']['s']=='On'
&& past('Bijkeuken')>60
) {
sw('Bijkeuken', 'Off');
lg('_cron60test');
}
If I run cron.sh manually I do get a few errors in the CLI:

Code: Select all

pi@raspberrypi:~/domoticz/scripts/pass2php $ ./cron.sh
./cron.sh: line 3: jq: command not found
./cron.sh: line 40: jq: command not found
./cron.sh: line 46: jq: command not found
Failed to set wall message, ignoring: Interactive authentication required.
Failed to reboot system via logind: Interactive authentication required.
Failed to open /dev/initctl: Permission denied
Failed to talk to init daemon.
I wanted it to run with the following crontab:
2019-05-06 21_07_05-Domoticz NEW.png
2019-05-06 21_07_05-Domoticz NEW.png (42.49 KiB) Viewed 850 times
where am I going wrong?
User avatar
sincze
Posts: 1300
Joined: Monday 02 June 2014 22:46
Target OS: Raspberry Pi / ODroid
Domoticz version: 2024.4
Location: Netherlands / Breda Area
Contact:

Re: Pass2PHP

Post by sincze »

Mmm Please install jq to remove the error :)
Saves yourself some time.
Pass2php
LAN: RFLink, P1, OTGW, MySensors
USB: RFXCom, ZWave, Sonoff 3
MQTT: ZIgbee2MQTT,
ZWAVE: Zwave-JS-UI
WIFI: Mi-light, Tasmota, Xiaomi Shelly
Solar: Omnik, PVOutput
Video: Kodi, Harmony HUB, Chromecast
Sensors: You name it I got 1.
Trigun
Posts: 390
Joined: Wednesday 30 November 2016 11:58
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.10717
Contact:

Re: Pass2PHP

Post by Trigun »

sincze wrote: Monday 06 May 2019 21:14 Mmm Please install jq to remove the error :)
Saves yourself some time.
Really thats it? :oops:
Trigun
Posts: 390
Joined: Wednesday 30 November 2016 11:58
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.10717
Contact:

Re: Pass2PHP

Post by Trigun »

sincze wrote: Monday 06 May 2019 21:14 Mmm Please install jq to remove the error :)
Saves yourself some time.
whaha sorry about that! now when I start cron.sh the light goes out.
this means that only the cronjob is left. I havent seen a crontab looking like this, so there must be something wrong?
User avatar
Egregius
Posts: 2582
Joined: Thursday 09 April 2015 12:19
Target OS: Linux
Domoticz version: v2024.7
Location: Beitem, BE
Contact:

Re: Pass2PHP

Post by Egregius »

What's in your crontab?
sudo crontab -e

I always restart the service after a change.
sudo service cron restart

Also, you must edit the cron.sh file to your own needs.
Trigun
Posts: 390
Joined: Wednesday 30 November 2016 11:58
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.10717
Contact:

Re: Pass2PHP

Post by Trigun »

When I start the cron.sh file everything works. But nothing happens after 60 seconds which means the crontab is not working. The crontab looks as followingImage


Sent from my iPhone using Tapatalk
User avatar
Egregius
Posts: 2582
Joined: Thursday 09 April 2015 12:19
Target OS: Linux
Domoticz version: v2024.7
Location: Beitem, BE
Contact:

Re: Pass2PHP

Post by Egregius »

Did you see my crontab?

Code: Select all

# m h  dom mon dow   command
* * * * * /usr/bin/nice -n20 /var/www/html/secure/cron.sh >/dev/null 2>&1
*/2 * * * * /usr/bin/nice -n20 curl -s "http://127.0.0.1/secure/cron.php?cron120" >/dev/null 2>&1
0 * * * * /usr/bin/nice -n20 curl -s "http://127.0.0.1/secure/cron.php?cron3600" >/dev/null 2>&1
0 0 * * * /usr/bin/nice -n20 curl -s "http://127.0.0.1/secure/cleandomoticzdb.php" >/dev/null 2>&1
1 0 * * * /usr/bin/nice -n20 /var/www/_SQLBackup/sqldaily.sh >dev/null 2>&1
Remove the cron_60 -x from the line.
And if you're on a Pi add >dev/null 2>&1 to have the output killed and save your SD card. The less writes you have the better.
User avatar
Egregius
Posts: 2582
Joined: Thursday 09 April 2015 12:19
Target OS: Linux
Domoticz version: v2024.7
Location: Beitem, BE
Contact:

Re: Pass2PHP

Post by Egregius »

Another small tip to have commands in ssh faster:
Edit .profile in your users root folder and add aliasses for stuff you use frequently:

Code: Select all

alias q="exit"
alias ll="ls -lsha"
alias upd="apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y"
alias reload_profile=". ~/.profile"
alias xxa="service apache2 restart && service php7.3-fpm restart"
alias error="tail -f -s 0.5 -n 50 /var/log/apache2/error.log"
alias domo="tail -f -s 0.5 -n 50 /var/log/domoticz.log"
With that in place you only need to type q to logout, domo to tail the domoticz log file, error to tail the apache error log. etc
User avatar
sincze
Posts: 1300
Joined: Monday 02 June 2014 22:46
Target OS: Raspberry Pi / ODroid
Domoticz version: 2024.4
Location: Netherlands / Breda Area
Contact:

Re: Pass2PHP

Post by sincze »

Tnx for the tips. I can work with that. :D
Pass2php
LAN: RFLink, P1, OTGW, MySensors
USB: RFXCom, ZWave, Sonoff 3
MQTT: ZIgbee2MQTT,
ZWAVE: Zwave-JS-UI
WIFI: Mi-light, Tasmota, Xiaomi Shelly
Solar: Omnik, PVOutput
Video: Kodi, Harmony HUB, Chromecast
Sensors: You name it I got 1.
Trigun
Posts: 390
Joined: Wednesday 30 November 2016 11:58
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.10717
Contact:

Re: Pass2PHP

Post by Trigun »

Egregius wrote: Tuesday 07 May 2019 6:34 Did you see my crontab?

Code: Select all

# m h  dom mon dow   command
* * * * * /usr/bin/nice -n20 /var/www/html/secure/cron.sh >/dev/null 2>&1
*/2 * * * * /usr/bin/nice -n20 curl -s "http://127.0.0.1/secure/cron.php?cron120" >/dev/null 2>&1
0 * * * * /usr/bin/nice -n20 curl -s "http://127.0.0.1/secure/cron.php?cron3600" >/dev/null 2>&1
0 0 * * * /usr/bin/nice -n20 curl -s "http://127.0.0.1/secure/cleandomoticzdb.php" >/dev/null 2>&1
1 0 * * * /usr/bin/nice -n20 /var/www/_SQLBackup/sqldaily.sh >dev/null 2>&1
Remove the cron_60 -x from the line.
And if you're on a Pi add >dev/null 2>&1 to have the output killed and save your SD card. The less writes you have the better.
Ok, I did so. the line now looks like this:
2019-05-07 12_20_19-Domoticz NEW.png
2019-05-07 12_20_19-Domoticz NEW.png (31.41 KiB) Viewed 830 times
I don't get it, normally it should work but maybe it work different.
I tried sudo crontab -e and entered the same line and this seems to work.
strange! is there a difference between the two different crontabs?
also, does the crontab still work after a reboot?

thnx again!
User avatar
sincze
Posts: 1300
Joined: Monday 02 June 2014 22:46
Target OS: Raspberry Pi / ODroid
Domoticz version: 2024.4
Location: Netherlands / Breda Area
Contact:

Re: Pass2PHP

Post by sincze »

also, does the crontab still work after a reboot?

Yes it will work after a reboot :D
Pass2php
LAN: RFLink, P1, OTGW, MySensors
USB: RFXCom, ZWave, Sonoff 3
MQTT: ZIgbee2MQTT,
ZWAVE: Zwave-JS-UI
WIFI: Mi-light, Tasmota, Xiaomi Shelly
Solar: Omnik, PVOutput
Video: Kodi, Harmony HUB, Chromecast
Sensors: You name it I got 1.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest