Iam ने Python स्क्रिप्ट बनाई है जो मेरी BLE RGB स्ट्रिप को नियंत्रित कर सकती है, साथ ही मैंने php के साथ वेब पेज भी बनाया है जो ssh के माध्यम से Pi से जुड़ता है और पायथन स्क्रिप्ट चलाता है। मेरा प्रश्न है, क्या कोई बेहतर तरीका है ?

मैं कुछ दिनों में अपना पसंदीदा उत्तर चिह्नित करूंगा। मुझे उम्मीद है कि कोई इसे देखेगा और मेरी तरह ही प्रेरणा प्राप्त करेगा।

सभी टिप्पणियों के लिए धन्यवाद।

मेरा PHP कोड।

?php

$mode = htmlspecialchars($_GET["mode"]);
$color = htmlspecialchars($_GET["color"]);

function color_name_to_hex($color_name)
{
    // standard 147 HTML color names
    $colors  =  array(
        'aliceblue'=>'F0F8FF',
        'antiquewhite'=>'FAEBD7'
         ...;

    $color_name = strtolower($color_name);
    if (isset($colors[$color_name]))
    {
        return ('#' . $colors[$color_name]);
    }
    else
    {
        return ($color_name);
    }
}
$connection = ssh2_connect('*ip*', 22);
ssh2_auth_password($connection, '*login*', '*passsword*');

switch ($mode) {
  case 'on':
      $stream = ssh2_exec($connection, 'python on.py');
    break;
  case 'off':
      $stream = ssh2_exec($connection, 'python off.py');
    break;
  case 'color':

        $stream = ssh2_exec($connection, 'python color.py \''.color_name_to_hex($color).'\'');

    break;
  default:
      ssh2_disconnect ($connection);
    break;
}


ssh2_disconnect ($connection);
-1
PsyChonek 24 जिंदा 2021, 21:42
2
सभी निर्भर करते हैं कि आपको क्या चाहिए। मैं इसके बजाय वेब पेज बनाने के लिए पायथन/फ्लास्क का उपयोग करूंगा और मैं इसे सीधे रास्पबेरी पाई पर चलाऊंगा। इस तरह मुझे PHP की आवश्यकता नहीं है और न ही ssh का उपयोग करना है और न ही login/password को रास्पबेरी पाई की आवश्यकता है। और वेब सर्वर में दो यूआरएल हो सकते हैं - एक चालू करने के लिए और दूसरा चालू करने के लिए। अंततः इसे url (form का उपयोग किए बिना) में विकल्प मिल सकता है, इसलिए मैं इसे अन्य प्रोग्राम में उपयोग कर सकता हूं - डेस्कटॉप पर GUI, या मोबाइल पर ऐप। वेब पेज RestAPI के रूप में कार्य करेगा
 – 
furas
25 जिंदा 2021, 00:18
सुझाव के लिए धन्यवाद, मैं इसे देख लूंगा।
 – 
PsyChonek
25 जिंदा 2021, 12:04

1 उत्तर

सबसे बढ़िया उत्तर

मैं इस वेब पेज को चलाने के लिए Python/Flask का उपयोग करूंगा। और मैं इसे सीधे पाई पर चलाऊंगा इसलिए मुझे login/password का उपयोग करने की आवश्यकता नहीं होगी

यह (अधिक या कम) PHP को सीधे PI (SSH के बिना) पर चलाने के लिए Flask में परिवर्तित किया जाता है

मैंने पोर्ट 8080 का उपयोग किया क्योंकि मानक पोर्ट 80 को रूट विशेषाधिकारों की आवश्यकता होगी।

from flask import Flask, request
import subprocess

app = Flask(__name__)

def color_name_to_hex(color_name):
    # standard 147 HTML color names
    colors = {
        'aliceblue': '#F0F8FF',
        'antiquewhite': '#FAEBD7',
        # ...
    }
    
    color_name = color_name.lower()
    
    # get `colors[color_name]` (first `color_name` in get()) or use `color_name` (second `color_name` in get())
    color_hex = colors.get(color_name, color_name)
    
    return color_hex

@app.route('/')
def index():
    mode = request.args.get('mode')
    color = request.args.get('color')

    if mode == 'on':
        subprocess.run('python on.py')
    elif mode == 'off':
        subprocess.run('python off.py')
    elif mode == 'color':
        color_hex = color_name_to_hex(color)
        subprocess.run(f"python color.py '{color_hex}'")

    return 'OK'

if __name__ == '__main__':
    app.run('0.0.0.0', port=8080, debug=True)

आखिर में मैं प्रत्येक आदेश के लिए अलग यूआरएल बनाउंगा

http://ip_of_raspberry:8080/turn/on
http://ip_of_raspberry:8080/turn/off
http://ip_of_raspberry:8080/color/red

और बाद में मैं डेस्कटॉप GUI (tkinter, PyQt, PyGTK, wxPython) या मोबाइल ऐप (कीवी)।


from flask import Flask, request
import subprocess

app = Flask(__name__)

def color_name_to_hex(color_name):
    # standard 147 HTML color names
    colors = {
        'aliceblue': '#F0F8FF',
        'antiquewhite': '#FAEBD7',
        # ...
    }
    
    color_name = color_name.lower()
    
    # get `colors[color_name]` (first `color_name` in get()) or use `color_name` (second `color_name` in get())
    color_hex = colors.get(color_name, color_name)
    
    return color_hex

@app.route('/')
def index():
    return 'HELLO WORLD'
    
@app.route('/turn/on')
def turn_on():
    subprocess.run('python on.py')
    return 'OK turn on'
    
@app.route('/turn/off')
def turn_off():
    subprocess.run('python off.py')
    return 'OK turn off'

@app.route('/color/<color_name>')
def color(color_name):
    color_hex = color_name_to_hex(color_name)
    subprocess.run(f"python color.py '{color_hex}'")
    return f'OK color {color_name}'


if __name__ == '__main__':
    app.run('0.0.0.0', port=8080, debug=True)

मैं आपके on.py, off.py, color.py को चलाने के लिए subprocess का उपयोग करता हूं, लेकिन मैं इसके बजाय import on, import off, import color और आयातित मॉड्यूल से फ़ंक्शन निष्पादित करें लेकिन इसे on.py, off.py, color.py में फ़ंक्शन में कोड डालना होगा (जो शायद आपने नहीं किया था)


BTW: इस तरह आप होम असिस्टेंट जैसा कुछ बनाएंगे, जिसमें Python कोड

1
furas 25 जिंदा 2021, 15:01
नमस्ते, उत्तर के लिए धन्यवाद। मैं किवी के बारे में कभी नहीं सुनता और अच्छा लगता है। लेकिन मैं शायद भविष्य में पीआई से कुछ सस्ता जैसे पाइबोर्ड या अरुडिनो पर स्विच करूंगा। मुझे आपका दृष्टिकोण पढ़ने और कुछ सीखने में मज़ा आया।
 – 
PsyChonek
25 जिंदा 2021, 19:19
वेब सर्वर से आप वेब ब्राउज़र या पायथन मॉड्यूल reuqests या urllib का उपयोग करके भी रंग बदल सकते हैं। मुझे नहीं पता कि Arduino वेब सर्वर चला सकता है या नहीं, लेकिन हो सकता है कि यह कुछ छोटा चला सकता है - जैसे message queue - यानी। MQTT - और फिर आप अजगर मॉड्यूल paho-mqtt या कंसोल प्रोग्राम sub pub मच्छर। मैं आरपीआई से मुख्य कंप्यूटर पर तापमान भेजने के लिए MQTT का उपयोग करता हूं और अन्य उपयोगकर्ता मुख्य कंप्यूटर से तापमान प्राप्त करने के लिए MQTT का उपयोग कर सकते हैं।
 – 
furas
25 जिंदा 2021, 19:46