2017-07-09 109 views
0

我正在嘗試編寫Python代碼以從本地Arduino服務器讀取簡單的溫度值。從Arduino網絡服務器讀取值

這是我的源頁面:

<font color=black size=7>Senzorji DS18B20<font color=black size=7><br /> 
<font color=black size=7>Kurnica: [26.00] &#176; 
C 
<font color=green size=7><font color=black size=7><br /> 
<font color=black size=7>Zunaj: [33.13] &#176; 
C 
<font color=green size=7><font color=black size=7><br /> 
<font color=black size=7>Garaza: [27.62] &#176; 
C 
<font color=black size=7><br /> 
<br /> 
Senzor DHT11 - Garaza<font color=black size=7><br /> 
<font color=black size=7>Temperatura v garazi: [24.00] &#176; 
C 
<font color=green size=7><font color=black size=7><br /> 
<font color=black size=7>Vlaga v garazi: [17.00] % 
<br /> 
<br /> 
Senzor DHT11 - Stara kurilnica<font color=black size=7><br /> 
<font color=black size=7>Temperatura v stari kurilnici: [23.00] &#176; 
C 
<font color=green size=7><font color=black size=7><br /> 
<font color=black size=7>Vlaga v stari kurilnici: [14.00] % 
<font color=green size=7> 

我想讀在方括號與美麗的湯,但沒有運氣的價值。我找不到我的情況。所有的例子都比較複雜;我很簡單,但我不知道。

我正在使用樹莓派。

使用PHP,我寫了簡單的代碼。它改變了我,它的工作。 這是我的PHP代碼:

function get_string_between($string, $start, $end){ 
     $string = " ".$string; 
     $ini = strpos($string,$start); 
     if ($ini == 0) return ""; 
     $ini += strlen($start); 
     $len = strpos($string,$end,$ini) - $ini; 
     return substr($string,$ini,$len); 
} 

$arduino91 = file_get_contents("http://192.168.5.91/"); 
$radiator = get_string_between($arduino91, "(povratek): [", "]"); 
$garaza = get_string_between($arduino91, "Garaza: [", "]"); 
$garazadht = get_string_between($arduino91, "Temperatura v garazi: [", "]"); 
$garazavl = get_string_between($arduino91, "Vlaga v garazi: [", "]"); 
$kurnica = get_string_between($arduino91, "Kurnica: [", "]"); 

echo "Temperatura v kurilnici: $kuriltemp"."<br>"; 
echo "Pec: $pec1"."<br>"; 

我該如何在Python中編寫這樣的代碼?

回答

0

您可以使用正則表達式直接從html/text提取[..]之間的所有值,即re.findall()

假設你已經獲取該網頁的Arduino的服務器,也許使用requests庫:

import re 
values = re.findall('\[([\d.]+)\]', html) 

對於html從你的榜樣,values變量:

import requests 
html = requests.get("http://127.0.0.1/").text 
# now in html is something like: "<font color=black size=7>...." 

您可以提取這些值將包含:

['26.00', '33.13', '27.62', '24.00', '17.00', '23.00', '14.00'] 

現在,你可以說:

kurnica = values[0] 
garaza = values[2] 
... 

或者,如果你想一次提取所有的值,你可以用解構賦值,就像這樣:

kurnica, zunaj, garaza, t_garaza, h_garaza, t_kuril, h_kuril = values 
+0

你會寫整個代碼? – CBox

+0

這裏你去(見更新的答案)。 – randomir

+0

@CBox,你設法使它工作?還有什麼不清楚嗎? – randomir

0

現在我用這個代碼和工作.. 。

import urllib 
f = urllib.urlopen("http://192.168.5.91") 
s = f.read() 
f.close() 

def find_between(s, first, last): 
    try: 
     start = s.index(first) + len(first) 
     end = s.index(last, start) 
     return s[start:end] 
    except ValueError: 
     return "" 

print find_between(s, "Zunaj: [", "]") 

現在有問題find_between如何declarated漂浮 「測試1」

我必須寫詩e爲每個集合,這部分與def ???

def find_between1(s, first, last): 
    try: 
     start = s.index(first) + len(first) 
     end = s.index(last, start) 
     return s[start:end] 
    except ValueError: 
     return "" 

print find_between1(s, "Zunaj1: [", "]") 

我認爲像它在我的PHP

$arduino91 = file_get_contents("http://192.168.5.91/"); 
$radiator = get_string_between($arduino91, "(povratek): [", "]"); 
$garaza = get_string_between($arduino91, "Garaza: [", "]"); 
$garazadht = get_string_between($arduino91, "Temperatura v garazi: [", "]"); 
$garazavl = get_string_between($arduino91, "Vlaga v garazi: [", "]"); 
$kurnica = get_string_between($arduino91, "Kurnica: [", "]");