Jump to content

WIFI Extension Möglichkeit Werte einfach auf Website anzeigen


Unexpected

Recommended Posts

Hallo zusammen,

 

da die WIFI Extension noch kein WebSocket kann, frage ich mich wie ich am einfachen Temperatur-und Humudity-Werte auf meiner kleinen Intranetseite anzeigen lassen kann. Ich habe jeweils zwei Pis im LAN die jeweils einen Master angeschlossen haben mit diversen Sensoren.

Auf den Balkon wollte ich die WIFI Extension einsetzten und irgendwie die Werte mit in die Seite einbinden... Ohne Datenbank etc.. Jemand eine einfache schöne Lösung?

 

Grüße

Unex

Link to comment
Share on other sites

Hallo ihr beiden,

 

vielen Dank für die schnellen Antworten.

Derzeit läuft noch ein Apache auf einem von den beiden Pi's.

 

die Shellbindungs verstehe ich grundlegend, aber wie kann ich die in eine html seite einbauen?

 

Kann mir jemand ein kleines Beispiel eindes Scrips geben?

 

Evtl. stehe ich hier auch gerade einfach aufm schlauch.

 

Javascript verwende ich derzeit schon, um die Temp und Hum Werte von den Mastern von den Pis anzuzeigen, werden dann in ein Textfeld eingetragen, wie die js Beispiele.

 

Grüße

Unex

Link to comment
Share on other sites

 

Ich habe den "umgekehrten" Weg gewaehlt. Ich sammel alle x Minuten die Werte per Cron und baue eine Webseite auf.

 

Diese kann man dann per Browser abrufen. D.h., dass beim Abruf der Webseite nichts aktives mehr passiert, da die Daten schon vorliegen.

 

Ich habe das seinerzeit sogar ohne Shellbindungs, sondern einfach per Shell, gemacht, da es die Bindings noch nicht gab.

 

 

Der Loetkolben.

Link to comment
Share on other sites

Ich habe leider gleich noch eine Frage:

 

Ich habe die Datei von dir runtergeladen und testen wollen. Beim aufrufen des "./temperatur-get.sh x" oder auch nur "./temperatur-get.sh" kommt folgendes:

 

No Packet machted

20150120_21:55:02;1421787302;

 

Ich habe auch gecheckt ob alle Pakete installiert sind. Sind sie. und ich habe auch zwei verschiedene IP Adressen und verschiedene Temp Bricklets ausprobiert.

 

Hast du eine Idee?

Link to comment
Share on other sites

Ich denke das bekommen wir hin.

 

- Hast du auch die UID angepasst?

- "No Packet machted" bedeutet, dass in der Antwort vom Stack keine passenden Informationen drin sind.

- Hast die den Brickv aus? Wenn der auf dem Stack aktiv ist, kommt es evtl. zu "Daten-" Problemen.

 

Bitte mal um Info.

 

Ich kloeppel das mal die aktuelle Version des Scriptes ins Posting fuer Copy&Paste oder zum Vergleich. Hauptsaechlich kann man mehr Parameter uebergeben wie IP, etc und unten ist ein Puffer groesser geworden. Auch kann man die Daten die kommen automatisch abspeichern lassen.

 

#!/bin/bash

# 23.04.2013: Abfangen von langen Paketen. size 16384 und maching of receivepattern
#    02.2014: -w auf 1MByte erweitert
# 27.02.2014: "head -1" eingefuegt, da es mehrere Matches geben kann

HOST=192.168.1.1
PORT=4223
tUID=XXX

#echo "echo \$0             : $0"
#echo "echo \$(which \$0)    : $(which $0)"
#echo "echo \$(dirname \$0)  : $(dirname $0)"
#echo "echo \$(basename \$0) : $(basename $0)"
#echo "."

LOGFILEOUTOUTFORMAT=0
RECEIVEPACKETSTORE=0
RECEIVEPACKETPATH=$(dirname $0)

# -x -h host -p port -u uid -r -R receivepacketpath

while [ $# -gt 0 ]       #Solange die Anzahl der Parameter ($#) größer 0
do
#  echo "Dollar1:$1"      #Ausgabe des ersten Parameters
  if [ "$1" = "-x" ] ; then LOGFILEOUTOUTFORMAT=1 ;fi
  if [ "$1" = "-h" ] ; then HOST=$2 ;fi
  if [ "$1" = "-p" ] ; then PORT=$2 ;fi
  if [ "$1" = "-u" ] ; then tUID=$2 ;fi
  if [ "$1" = "-r" ] ; then RECEIVEPACKETSTORE=1 ;fi # Wenn -r angegeben ist werden die Paket in -R abgelegt. Siehe weiter unten.
  if [ "$1" = "-R" ] ; then RECEIVEPACKETPATH=$2 ;fi
  shift
done

#----------------------------------------------------------------------------------
ALPHABET="123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
BASECOUNT=`expr length $ALPHABET`
DECODED=0
MULTI=1
for ((i=`expr length $tUID - 1` ; i > -1 ; i--))
  do
    VALUE=${tUID:$i:1}
    DECODEDVALUE=`expr index $ALPHABET $VALUE`
    DECODEDVALUE=`expr $DECODEDVALUE - 1`
    DECODED=`expr $DECODED + $MULTI \* $DECODEDVALUE`
    MULTI=`expr $MULTI \* $BASECOUNT`
  done
HEXDECODEDSTR=""
HEXDECODED=`printf "%08x" $DECODED`
for i in {6,4,2,0}
  do
    DIGIT=${HEXDECODED:$i:2}
    HEXDECODEDSTR=$HEXDECODEDSTR"\x"$DIGIT
  done
#----------------------------------------------------------------------------------
SENDPACKET=$HEXDECODEDSTR"\x08\x01\x18\x00"
RECEIVEPATTERN=`echo -n -e $HEXDECODEDSTR"\x0a\x01\x18\x00" | od -A n -t x1 | tr -d " "`
RECEIVEPACKET=`echo -n -e "$SENDPACKET" | nc -w1 $HOST $PORT | xxd -p`

if [ "$RECEIVEPACKETSTORE" = "1" ] ; then
   echo -n -e "$RECEIVEPACKET" | xxd -r -p > $RECEIVEPACKETPATH/receivepacket/RECEIVEPACKET.temperatur.`date "+%Y%m%d_%H%M%S"`
fi

FOUNDSTART=`echo -e -n $RECEIVEPACKET | xxd -r -p | od -w1048576 -A n -t x1 | tr -d " " | grep -o -F $RECEIVEPATTERN -b | head -1 | cut -f1 -d ":"`

if [[ "$FOUNDSTART" != "" ]] ; then

   FOUNDSTART=`expr $FOUNDSTART + 17`
   FOUNDEND=`expr $FOUNDSTART + 3`

   TEMP1=`echo -e -n $RECEIVEPACKET | xxd -r -p | od -w1048576 -A n -t x2 | tr -d " " | cut -b $FOUNDSTART-$FOUNDEND | tr "[:lower:]" "[:upper:]"`
   TEMP2=`echo "scale=2 ; ibase=16; $TEMP1 / 64" | bc`

   if [ "$LOGFILEOUTOUTFORMAT" = "1" ] ; then echo "`date +%Y%m%d_%H:%M:%S';'%s`;$TEMP2"
      else
        echo -e "\nDie Temperatur betraegt: $TEMP2 Grad.\nParameter -x gibt Logfileoutputformat.\n"
   fi
   else
     echo "No Packet machted" >&2
     echo "`date +%Y%m%d_%H:%M:%S';'%s`;"
fi


# DATAFORMAT: 20120514_08:42:02;1336977722;20.62

 

 

Aber: Du kannst auch die Shellbindings nutzen um dieses Logfile zu erzeugen.  ;)  Dem draw-script ist es ja egal womit die Daten gesammelt worden sind.  :)

 

 

Der Loetkolben

 

Link to comment
Share on other sites

Danke dir für den Support!

 

- Hast du auch die UID angepasst?

habe ich überprüft

 

- Hast die den Brickv aus? Wenn der auf dem Stack aktiv ist, kommt es evtl. zu "Daten-" Problemen.

Hatte ich gestern nicht, habe ich abern noch einmal mit getestet. geht weiterhin nicht.

Nun kommt

temperatur-get.sh: 40: temperatur-get.sh: Syntax error: Bad for loop variable

 

Ich habe jetzt mal die Shell API Bindings ausprobiert... nach leichten Startschwierigkeiten funktioniert ein einfach Exemplar nun.

 

Allerdings bekomme ich eine Fehlermeldung wenn ich auf einen Pi oder eine WLAN Ext. zugreifen möchte, die Authentication nutzt. kann ich das noch irgendwo mit angeben? oder gehen die Bindings nur ihne Auth.? Habe ich da etwas überlesen?

 

Edit.: noch einmal das Skript ausgeführt und nun bekomme ich wieder "No Packet machted"

Link to comment
Share on other sites

Hallo Unexpected,

 

die Tinkerforgeauthorisierung wird natuerlich nicht unterstuetzt. Das bitte abschalten.

 

Hast du mal die Pakete mitloggen lassen? (-r Schalter) Wie sehen die denn aus?

 

Die Fehlermeldung "40: ... Bad for loop variable" deutet auf ein Problem in der Berechnung der UID hin. "expr" ist aber installiert?

 

Der Loetkolben

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...