Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Geschrieben

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

Geschrieben

Hallo Unexpected,

 

nimm doch einfach die Shellbindings. Per Script aufrufen und dann in die Webseite einbauen?

 

 

Der Loetkolben

Geschrieben
  • Autor

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

Geschrieben

 

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.

Geschrieben
  • Autor

WOW Loetkolben!

 

Cool! Danke dir! Das sieht klasse aus! Werde ich mich mal einlesen! :-)

 

Grüße

Unex

Geschrieben
  • Autor

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?

Geschrieben

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

 

Geschrieben
  • Autor

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"

Geschrieben

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

Join the conversation

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

Gast
Reply to this topic...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.