
मैं क्या चाहता था:
- जब कार्य जेनकिंस में पूरा हो जाता है, तो कंप्यूटर पर एक अधिसूचना प्रदर्शित करें और, इसके अलावा, इसे arduino से जुड़े भौतिक प्रदर्शन पर प्रदर्शित करें;
- एक कंप्यूटर और रास्पबेरी पाई पर एक वीडियो प्लेयर पर एक संगीत खिलाड़ी को नियंत्रित करने के लिए एक फोन या टैबलेट पर खोला जा सकने वाला इंटरफ़ेस;
- Arduino पर स्थापित सेंसर से मूल्यों को आउटपुट करने के लिए स्थानीय नेटवर्क के बाहर से सुलभ एक इंटरफ़ेस।
क्या हुआ:
- अजगर में एक विधि घोषणा के साथ एक उपकरण पर चल रहे एक ग्राहक;
- "तरीकों" को लॉन्च करने के लिए Restful api (दाईं ओर की तस्वीर इसके माध्यम से प्रदर्शित होती है);
- वेब इंटरफ़ेस के साथ "कंट्रोल पैनल";
- उपकरणों, विधियों और पैनलों के प्रबंधन के लिए सेवा।
संदर्भ
सेवा -
rdevic.esसर्वर स्रोत कोड -
rdevices- सर्वरक्लाइंट स्रोत कोड -
rdevices- क्लाइंटअंदर क्या है
rdclient - उपयोगकर्ता के डिवाइस पर चलता है, विधियों की घोषणा करता है, उन्हें सर्वर से अनुरोध पर निष्पादित करता है, और परिणाम वापस भेजता है। यह अजगर में लिखा है। प्रारंभ में, मैं सर्वर के साथ संवाद करने के लिए QMQ का उपयोग करना चाहता था, लेकिन इसे स्थापित करने के लिए, उपयोगकर्ता को एक मॉड्यूल बनाने की आवश्यकता होगी। इसलिए, साधारण सॉकेट्स का उपयोग किया जाता है।
कनेक्टर - डेमॉन एपीआई से अनुरोध प्राप्त करता है, उन्हें क्लाइंट डिवाइस पर भेजता है, परिणाम प्राप्त करता है, इसे डेटाबेस में लिखता है और अधिसूचना नीम भेजता है। अजगर और बवंडर में लिखा है। Redis का उपयोग API और सूचना सेवा के साथ संवाद करने के लिए किया जाता है।
Restfull API - उपयोगकर्ताओं से या "कंट्रोल पैनल" के माध्यम से सीधे अनुरोध प्राप्त करता है और उन्हें कनेक्टर में भेजता है। अजगर, django और tastypie में लिखा है।
पुश सूचनाएँ - डेमॉन कनेक्टर से विधियों के पूरा होने की सूचना प्राप्त करता है और उन्हें "नियंत्रण कक्ष" में भेजता है। एपीआई अनुरोधों की संख्या को कम करने के लिए बनाया गया है। अजगर, बवंडर और sockjs में लिखा है।
डैशबोर्ड - उपकरणों के प्रबंधन के लिए एक वेब-आधारित इंटरफ़ेस उपयोगकर्ता द्वारा बनाया गया है और सर्वर पर संग्रहीत है। मार्कअप के लिए, स्क्रिप्ट के लिए HTML का उपयोग किया जाता है - जावास्क्रिप्ट, कॉफीस्क्रिप्ट या IcedCfishScript।
डिवाइस कैसे बनाएं
इसे बनाने के लिए, आपको पाइप और गिट स्थापित करने की आवश्यकता होगी यदि आपने उन्हें स्थापित नहीं किया है।
और rdclient स्थापित करें:
pip install -e git://github.com/nvbn/rdevices-client.git

अब आपको साइट के माध्यम से
डिवाइस बनाने और इसे
uuid
कॉपी करने की आवश्यकता है।
एक उपकरण घोषित करने के लिए, आपको एक अजगर फ़ाइल बनाने की आवश्यकता है, उदाहरण के लिए,
device.py
,
Device
वर्ग से इनहेरिट करना,
method(result, [arg1], [arg2], ..)
साथ तरीकों को सजाने
method(result, [arg1], [arg2], ..)
और
Meta
में
uuid
निर्दिष्ट करें।
मापदंडों का एक सार और विधि का परिणाम आवश्यक है, लेकिन इसका उपयोग केवल जानकारीपूर्ण उद्देश्यों के लिए किया जाता है।
एक साधारण उपकरण का एक उदाहरण:
from rdclient import Device, method class MyDevice(Device): class Meta: uuid = 'DEVICE_UUID' @method('None') def print_123(self): print 123 @method('int', a='int', b='int') def sum_a_and_b(self, a, b): return a + b
अब आप ग्राहक शुरू कर सकते हैं:
rdclient device.py
उसके बाद, डिवाइस के लिए एक संक्षिप्त दस्तावेज डिवाइस पेज पर दिखाई देगा।
कुछ अनुप्रयोगों के लिए, तैयार मिश्रण हैं:

एपीआई का उपयोग
पहला कदम
एपीआई का उपयोग करने के लिए एक
कुंजी बनाना है।
सभी अनुरोधों को json या xml में होना चाहिए और इसे हेडर में स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए, उदाहरण के लिए:
Accept: application/json Content-type: application/json
एक विधि को कॉल करने के लिए, आपको एक POST अनुरोध भेजने की आवश्यकता है
rdevic.es/api/v1/device_method_call?username=USERNAME&api_key=API_KEY
rdevic.es/api/v1/device_method_call?username=USERNAME&api_key=API_KEY
ऑब्जेक्ट (json या xml में) वाले शरीर के साथ:
{ method: METHOD_NAME, device: DEVICE_UUID, request: { arg1: 'arg1Value', arg2: 'arg2Value' } }
जवाब आएगा:
{ method_id: METHOD_ID, request: { arg1: 'arg1Value', arg2: 'arg2Value' }, response: {}, state: 0, text_state: 'started', id: CALL_ID, resource_uri: '/api/v1/device_method_call/CALL_ID/', }
अपडेट किया गया संस्करण
resource_uri?username=USERNAME&api_key=API_KEY
पर GET अनुरोध प्राप्त करके प्राप्त किया जा सकता है
resource_uri?username=USERNAME&api_key=API_KEY
।
response
फ़ील्ड में विधि कॉल का परिणाम है।
state
में विधि की निष्पादन स्थिति। संभावित मूल्य:
STATE_CREATED = 0 STATE_FINISHED = 1 STATE_ERROR = 2
अनुरोध
curl
साथ किया जा सकता है:
curl "http://rdevic.es/api/v1/device_method_call/?username=nvbn&api_key=45932208bfb91d5ba8c9ab82137026c76ece69a8" -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "{\"method\":\"arduino_write\",\"device\":\"bcc97caa-a09b-11e2-a15d-009c02975edf\",\"request\":{\"data\": \"clear\nwrite:Hello habr\!\n\"}}"
इसके निष्पादन का परिणाम पहली तस्वीर में नहीं दिखाया गया है।

डैशबोर्ड निर्माण
सबसे पहले आपको
इसे साइट पर बनाने और कोड संपादन खोलने की आवश्यकता है।
लिपियों को जावास्क्रिप्ट में लिखा जा सकता है (
type="javascript"
),
type="coffeescript"
(
type="coffeescript"
) और आईसेकॉफ़स्क्रिप्ट (
type="iced-coffeescript"
)।
आप उनमें डैशबोर्ड एपी का उपयोग कर सकते हैं, यह प्रदान करता है:
dashboard.ready(callback)
- डैशबोर्ड आरंभीकरण;dashboard.getDevice(deviceId, callback)
- एक कॉलबैक में डिवाइस प्राप्त करें;device.method(args, [callback])
- विधि को कॉल करें और कॉलबैक में परिणाम प्राप्त करें। args
:
युक्त ऑब्जेक्ट :
।
एक पैनल के उदाहरण के रूप में - रिदमबॉक्स (
rdclient.mixins.RhythmboxMixin
) के लिए एक कंसोल:
<script type='text/javascript'> dashboard.ready(function(){ dashboard.getDevice(DEVICE_ID, function(device){ $('#prev').click(function(){ device.rhythmbox_previous({}); }); $('#next').click(function(){ device.rhythmbox_next({}); }); $('#play-pause').click(function(){ device.rhythmbox_play_pause({}); }); }); }); </script> <button class='btn' id='prev'>Prev</button> <button class='btn' id='play-pause'>Play/pause</button> <button class='btn' id='next'>Next</button>
सीढ़ियों से बचने के लिए आप IcedCfishScript का उपयोग कर सकते हैं। इसके साथ, स्क्रिप्ट भाग इस तरह दिखेगा:
<script type='text/iced-coffeescript'> await dashboard.ready await dashboard.getDevice DEVICE_ID, defer device $('#prev').click => device.rhythmbox_previous {} $('#next').click => device.rhythmbox_next {} $('#play-pause').click => device.rhythmbox_play_pause {} </script>
भविष्य की योजना
अब परियोजना केवल बुनियादी सुविधाओं को लागू करती है। अभी भी योजना बनाई है:
- डिवाइस की तरफ की घटनाएं;
- कस्टम "पैनल" के साथ गिट रिपॉजिटरी;
- उपकरणों और विधि तक सीमित पहुंच के साथ एपीआई कुंजी।
PS सभी कुंजी और लेख में uuid कोई नहीं है।