• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
sensori web semplice interfaccia i cloud ed altro per

[Guida] Interfaccia Web Cloud semplice per i sensori ed altro
#31
non so se può aiutare ma io estraggo il valore del mio ds18b20 così:
Codice:
from w1thermsensor import W1ThermSensor

tempSensor = W1ThermSensor()
sensorUnits = W1ThermSensor.DEGREES_C
rawTemp = tempSensor.get_temperature( sensorUnits )
currentTemp = round( rawTemp, 1 )

print currentTemp



Coltiva linux, che windows si pianta da solo! (cit.)
Risposta
#32
Python questo sconosciuto! 
Quel file che tu hai, senza le modifiche da te apportate, puoi considerarlo una "libreria".
Tu devi crearti un tuo script dove fai il lavoro che ti serve.
Qualcosa tipo:
Codice:
import dweepy

Import filelibreriasensore # il file che tu hai modificato ma senza modifiche


dweepy.dweet_for('TemperaturaSuolo', {'DS18B20': str(filelibreriasensore.read_temp())})

Ovviamente sostituirai filelibreriasensore con il nome della "libreria",che in pythonico si dice modulo, senza estensione e che deve trovarsi nella stessa cartella.
Dopo gli import chiami il metodo read_temp() che ti ritorna un float e che convertiamo in stringa

Spero di essere stato chiaro
PS: salvi il file con "nomefile.py" e lo esegui con "python nomrefile.py" scusa ho dato per scontato.

Mandi

Barbezuan
Risposta
#33
(25/01/2017, 07:31)barbezuan Ha scritto: Python questo sconosciuto! 
Quel file che tu hai, senza le modifiche da te apportate, puoi considerarlo una "libreria".
Tu devi crearti un tuo script dove fai il lavoro che ti serve.
Qualcosa tipo:
Codice:
import dweepy

Import filelibreriasensore # il file che tu hai modificato ma senza modifiche


dweepy.dweet_for('TemperaturaSuolo', {'DS18B20': str(filelibreriasensore.read_temp())})

Ovviamente sostituirai filelibreriasensore con il nome della "libreria",che in pythonico si dice modulo, senza estensione e che deve trovarsi nella stessa cartella.
Dopo gli import chiami il metodo read_temp() che ti ritorna un float e che convertiamo in stringa

Spero di essere stato chiaro
PS: salvi il file con "nomefile.py" e lo esegui con "python nomrefile.py" scusa ho dato per scontato.

innanzitutto grazie per la risposta, so poco ma sto imparando molto.

Ho impostato questo file e purtroppo non funziona. Non mi dà errore e restituisce in locale le temperature, purtroppo non le manda su freeboard.

ci deve essere qualche errorino di sintassi da qualche parte.


Il file di Python per la lettura del sensore si chiama tempsensor.py e sta nella stessa cartella del file che ho chiamato TempSuoloDweepy.py, nel file ho scritto questo


Codice:
import tempsensor

import dweepy
dweepy.dweet_for('NomelungoCasuale',{'TemperaturaSuolo':str(tempsensor.read_temp())})

ho capito che freeboard identifica chi manda i dati dal nome lungo scelto a caso, è bene pertanto sceglierlo in modo che nessuno ne scelga un altro uguale


tuttavia sono riuscito a mandare i valori rilevati dal sensore su freeboard

inserendo nello script.py del sensore di temperatura  


Codice:
import dweepy
dweepy.dweet_for('NomelungoCasuale',{'TemperaturaSuolo':read_temp()})

Rispetto ai tentativi fatti ieri ho scritto read_temp() senza apici.


Saluti LaPa

(25/01/2017, 06:58)Painbrain Ha scritto: non so se può aiutare ma io estraggo il valore del mio ds18b20 così:
Codice:
from w1thermsensor import W1ThermSensor

tempSensor = W1ThermSensor()
sensorUnits = W1ThermSensor.DEGREES_C
rawTemp = tempSensor.get_temperature( sensorUnits )
currentTemp = round( rawTemp, 1 )

print currentTemp

Proverò anche con questo script, magari è più semplice

grazie
With a little/big help from my friends Rolleyes
Risposta
#34
Allora, se vuoi proviamo a fare un po di debug a mano.

Al posto di:
Codice:
import tempsensor

import dweepy
dweepy.dweet_for('NomelungoCasuale',{'TemperaturaSuolo':str(tempsensor.read_temp())})

Prova cosi e vedi cosa ti esce a terminale:

Codice:
import tempsensor

import dweepy
a = str(tempsensor.read_temp())
print a
dweepy.dweet_for('NomelungoCasuale',{'TemperaturaSuolo':a})

Per python2 ovviamente, se usi python3 il 'print a' diventa 'print(a)'.
Così capiamo se leggi il sensore e cosa leggi.
Dagli esempi in questa guida:
https://github.com/paddycarey/dweepy
sembra che il dato nel dizionario debba essere una stringa essendo all'interno di apici.
Puoi anche provare a passare direttamente il float eliminando str()

Mandi

Barbezuan
Risposta
#35
(26/01/2017, 11:49)barbezuan Ha scritto: Allora, se vuoi proviamo a fare un po di debug a mano.

Al posto di:
Codice:
import tempsensor

import dweepy
dweepy.dweet_for('NomelungoCasuale',{'TemperaturaSuolo':str(tempsensor.read_temp())})

Prova cosi e vedi cosa ti esce a terminale:

Codice:
import tempsensor

import dweepy
a = str(tempsensor.read_temp())
print a
dweepy.dweet_for('NomelungoCasuale',{'TemperaturaSuolo':a})

Per python2 ovviamente, se usi python3 il 'print a' diventa 'print(a)'.
Così capiamo se leggi il sensore e cosa leggi.
Dagli esempi in questa guida:
https://github.com/paddycarey/dweepy
sembra che il dato nel dizionario debba essere una stringa essendo all'interno di apici.
Puoi anche provare a passare direttamente il float eliminando str()

Grazie per il suggerimento, ho provato, neanche questo funziona, l'unico che manda su freeboard è lo script originario .py su cui ho attaccato prima del print


Codice:
import dweepy
dweepy.dweet_for('NomeCasualeLungo', {'TemperaturaSuolo':read_temp())})

Mi piacerebbe che arrivassimo a fare funzionare un file che importa la libreria. Penso che mi possa essere utile anche per gli altri sensori che voglio inserire.
Al momento inserisco il comando per lanciare il modulo in crontab. Poi se si riesce a fare qualcosa di migliore .....

in effetti la cosa migliore sarebbe modificare lo script della temperatura in modo che rilevi la temperatura istantanea (non ogni tot) ma mostri anche la data e l'ora del rilievo. Poi metterei tutto su crontab

GRazie ciao
With a little/big help from my friends Rolleyes
Risposta
#36
Ma a terminale cosa ti usciva?

Mandi

Barbezuan
Risposta
#37
[quote='barbezuan' pid='10337' dateline='1485632192']
Ma a terminale cosa ti usciva?


Codice:
import tempsensor

import dweepy
a = str(tempsensor.read_temp())
print a
dweepy.dweet_for('nomelungocasuale',{'TemperaturaSuolo':a})

FUNZioNA!!! Smile Big Grin Lo manda su freeboard, metto il comando su crontab.

Ho riprovato oggi. Idea mi piacerebbe che come output venisse fuori anche la data e l'ora in modo da poter compilare una tabella


Grazie

LaPa
With a little/big help from my friends Rolleyes
Risposta
#38
Se funziona quello deve funzionare anche questo:


import tempsensor

import dweepy
dweepy.dweet_for('nomelungocasuale',{'TemperaturaSuolo': str(tempsensor.read_temp())})

PS: Niente da fare, questo forum non ne vuole sapere dei "code" manca solo lo spazio fra ":" e "str"


dweepy.dweet_for('nomelungocasuale',{'TemperaturaSuolo': str(tempsensor.read_temp())})

Mandi

Barbezuan
Risposta
#39
Sì funziona anche l'ultima versione dello script.py, grazie

Direi che per quanto riguarda la temperatura del sensore DS18B20 potrebbe andare bene anche se se si lancia da terminale non fornisce un valore singolo ma un valore della temperatura ogni tot secondi.

1) sapreste dirmi che valore dovrei inserire in while (__) dello script per far apparire il valore una solo volta?

2) sono passato al tentativo di lanciare il valore del sensore DHT22 della temperatura e dell'umidità.
Ovviamente non ci sono riuscito e avvrei bisogno anche qui del vostro aiuto.

il sensore DHT22 funziona con uno script di python che si deve lanciare da terminale indicando dopo il nome del file il modello del sensore DHT e il pin del GPIO relativo ai dati. Ad esempio se il file python si chiama scriptDHT.py nel terminale bisogna scrivere:

Codice:
Sudo python /path/scriptDHT.py 22 26

E restituisce a video il valori della temperatura e dell'umidità in questo modo

Temperature 19.8 Humidity 57%

Sono riuscito al momento a modificare lo script in modo tale che restituisca solo la temperatura in modo da inviarla su freeboard separatamente dall'umidità.

Lo script modificato infatti restituisce nel terminale la temperatura.

Ho incollato nello script il solito

 
Codice:
import dweepy
   dweepy.dweet_for('NomeLungoCasuale', {'TemperaturaAria': ('Temp={0:0.1f}%'.format(temperature))})

il dato viene inviato su freeboard ma come testo e non come valore per cui sull'indicatore appare invece del valore "NaN".

Dove è l'errore?

Riporto di seguito lo script









Codice:
import sys

import Adafruit_DHT


# Parse command line parameters.
sensor_args = { '11': Adafruit_DHT.DHT11,
               '22': Adafruit_DHT.DHT22,
               '2302': Adafruit_DHT.AM2302 }
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
   sensor = sensor_args[sys.argv[1]]
   pin = sys.argv[2]
else:
   print('usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#')
   print('example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4')
   sys.exit(1)

# Try to grab a sensor reading.  Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

# Un-comment the line below to convert the temperature to Fahrenheit.
# temperature = temperature * 9/5.0 + 32

# Note that sometimes you won't get a reading and
# the results will be null (because Linux can't
# guarantee the timing of calls to read the sensor).
# If this happens try again!
if humidity is not None and temperature is not None:
   #print('Temp={0:0.1f}*  Humidity={1:0.1f}%'.format(temperature, humidity))



   print('Temp={0:0.1f}%'.format(temperature))
   


   import dweepy
   dweepy.dweet_for('NomeLungoCasuale', {'TemperaturaAria': ('Temp={0:0.1f}%'.format(temperature))})






else:
   print('Failed to get reading. Try again!')
   sys.exit(1)



Una considerazione generale su freeboard. Probabilmente è abbastanza semplice, una volta capito il meccanismo, però almeno la versione gratuita permette delle rappresentazioni dei dati molto scarne. https://freeboard.io/board/jxGjiD


grazie

Saluti


LaPa
With a little/big help from my friends Rolleyes
Risposta
#40
Citazione:Una considerazione generale su freeboard. Probabilmente è abbastanza semplice, una volta capito il meccanismo, però almeno la versione gratuita permette delle rappresentazioni dei dati molto scarne
il suo punto di forza è la semplicita estrema rispetto agli altri sistemi, il top sarebbe installarsi un server web locale
Heart Libro  | Blog EnricoSartori.it | Idea YouTube
Se un utente ti è stato utile, aumenta la sua reputazione! premi il Pollicione! 
Risposta
  


Vai al forum:


Navigazione: 2 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect