- This topic has 9 replies, 2 voices, and was last updated 3 years, 8 months ago by Aaron, N3MBH.
-
AuthorPosts
-
March 8, 2021 at 8:15 pm #3335Jason, KM6TMXUser
I want to change the courtesy tone to a “power down” tone when the rpi senses that the repeater is on battery power instead of AC mains.
i was going to do something like,
update settings set value=’_power_down.wav’ where keyID=’courtesy’
but that is insufficient for svxlink to take notice. What is the hook to rebuild the config and restart svxlink?
March 9, 2021 at 8:50 am #3336Aaron, N3MBHForum AdministratorHello Jason,
What you are trying to accomplish is a bit more complex. Even at the straight SVXLink level, you are unable to change settings in the svxlink.conf file and have those settings reflect in SVXLink without restarting the SVXLink process itself. The config file gets read at startup.ORP adds an extra level of complexity on top of this as it stores it’s settings in a database and used those to write to the config files. Any changes you make in config files anyways would be overwritten by the ORP UI anytime a rebuild is initiated from the Web UI.
The best way that I can think of to do this (besides rewriting/recompiling the SVXLink source code) would be to author a custom module to handle the task. On the SVXLink side this involves some TCL scripting and figuring out what procedure/function to hook into. On the ORP side with modules there is some extra wrapper code that you would need to add to make it “installable” and able to be initiated by ORP.
In the 19.x release of SVXLink I believe they added some extra courtesy/roger beep and CW id settings that didn’t exist before. ORP is still utilizing it’s means to implement these by writing out custom TCL overrides on some of the logic. You can try looking at /var/www/openrepeater/includes/classes/SVXLink_TCL.php which is the PHP class that handles this. This is invoked by /var/www/openrepeater/functions/svxlink_update.php upon a rebuild. You should have some understanding of PHP and object oriented programming to tackle this as the PHP classes are written in mostly OOP.
73,
Aaron – N3MBH / WRFV871OpenRepeater is offered free of charge. Find out how you can support us.
March 9, 2021 at 2:07 pm #3339Jason, KM6TMXUserOkay, I am cool restarting svxlink, for now. I see it as having to rarely restart it due to power outages. And I can put some hysteresis by waiting a few minutes before executing the change. If the power is not back within 20 minutes it is probably going to be out for hours.
What I am missing is some glue code. I can update openrepeater.db easily enough, as I previously mentioned. The question really is, how do I execute the rebuild process to transfer the settings from openrepeater.db to the config files?
The UI clearly does it at the push of a button. Can I execute the process some how with the scripts on hand? If not, which file(s) do this in the UI? Perhaps I can manipulate them to work from CLI.
thanks,
j.March 9, 2021 at 2:11 pm #3340Jason, KM6TMXUserOh, maybe you provided the answer already in /var/www/openrepeater/functions/svxlink_update.php
i will look at modifying that for CLI use.
March 9, 2021 at 3:23 pm #3341Jason, KM6TMXUserOkay, this seems to work…
sqlite> select * from settings where keyID=’courtesy’;
courtesy|_TelRing.wav
sqlite> update settings set value=’_power-down.wav’ where keyID=’courtesy’;
sqlite> select * from settings where keyID=’courtesy’;
courtesy|_power-down.wav
sqlite>
root@openrepeater:/var/www/openrepeater/functions# php svxlink_update_cli.phpForgive my crude patch. My last php effort was almost 20 years ago. Is there a process to contribute?
— cut here —
root@openrepeater:/var/www/openrepeater/functions# diff svxlink_update.php svxlink_update_cli.php 11,16d10 < /* SESSION CHECK TO SEE IF USER IS LOGGED IN. */ < session_start(); < if ((!isset($_SESSION['username'])) || (!isset($_SESSION['userID']))){ < header('location: login.php'); < } else { // If they are, show the page. < /* ---------------------------------------------------------- */ 27c21,28 < require_once(rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/includes/autoloadClasses.php'); --- > > putenv("DOCUMENT_ROOT=/var/www/openrepeater"); > require_once('/var/www/openrepeater/includes/autoloadClasses.php'); > require_once('/var/www/openrepeater/includes/classes/Database.php'); > require_once('/var/www/openrepeater/includes/classes/SVXLink.php'); > require_once('/var/www/openrepeater/includes/classes/SVXLink_TCL.php'); > require_once('/var/www/openrepeater/includes/classes/SVXLink_GPIO.php'); > 190,202d190 < /* WHAT PAGE TO GO BACK TO */ < if (isset($_POST["return_url"])) { < // Return to page that sent here < $url = strtok($_POST["return_url"], '?'); //Clean parameters from URL < header('location: '.$url); < } else if (isset($_SESSION["new_repeater_settings"])) { < // Wizard was run. Go ahead and destroy session and logout < session_destroy(); < header('location: ../login.php'); < } else { < // Otherwise just go to dashboard < header('location: ../dashboard.php'); < } 205,210d192 < <?php < /* ---------------------------------------------------------- */ < // SESSION CHECK TO SEE IF USER IS LOGGED IN. < } // close ELSE to end login check from top of page < /* ---------------------------------------------------------- */ < ?>
- This reply was modified 3 years, 9 months ago by Jason, KM6TMX.
March 9, 2021 at 6:54 pm #3345Jason, KM6TMXUseranyone following my foot steps should locate that cli script outside of the document root of the server otherwise someone might DoS your svxlink process by calling it over and over again.
below is an a wrapper that handles the database updates and calls update_svxlink_cli.php
I have been running it as root, but any user that can write openrepeater.db and restart processes with systemctl should be sufficient.
here is the code for my wrapper
— cut here —
#!/bin/bash # # jason at broken.net # kid tested, and mother approved exitcode=1 if [ $# -ne 1 ]; then if [ $# -gt 1 ]; then echo -e "too many arguments. $# is not 1. Please try again" fi echo -e "ie. $0 name_of_tone\n" echo -e "ie. $0 TelRing.wav\n" echo -e "valid tones are located in /var/lib/openrepeater/sounds/courtesy_tones. Take a look\n" exit $exitcode fi tone=$1 if [ ! -e "/var/lib/openrepeater/sounds/courtesy_tones/$tone" ]; then exitcode=$((Sum=$exitcode+1)) echo "A courtesy tone by this name does not exist. Please check /var/lib/openrepeater/sounds/courtesy_tones for available tones." exit $exitcode fi echo update settings set value=\"$tone\" where keyID=\"courtesy\" | sqlite3 /var/lib/openrepeater/db/openrepeater.db php ./svxlink_update_cli.php if [ $? -eq 0 ]; then echo Successfully updated. else echo php returned an error. I did my best. fi
March 9, 2021 at 8:45 pm #3349Jason, KM6TMXUserI think the site must filter our URLs. I have added this to github
htt ps:// github.com/jm650/openrepeater
thanks,
j.March 10, 2021 at 2:33 pm #3350Aaron, N3MBHForum AdministratorJason,
I think you are on the correct path. Yes you would have to fire /var/www/openrepeater/functions/svxlink_update.php or a copy of it to update the config files. That is what the button triggers. While you should be able to run PHP from the cli or a bash script, note that the svxlink_update.php does have a session wrapper on it to check to see if the user is actively logged in. This might cause issues from the cli. You’d have to bypass it or make a copy with the bypass. That PHP fires off some PHP class files that do the majority of the work.73,
Aaron – N3MBH / WRFV871OpenRepeater is offered free of charge. Find out how you can support us.
March 11, 2021 at 10:28 am #3348Jason, KM6TMXUserI suppose hipsters use github. Look ma, my first git.
March 11, 2021 at 10:31 am #3347Jason, KM6TMXUserI suppose the hipster use github.
-
AuthorPosts
- You must be logged in to reply to this topic.