Jump to content

[TCP/IP] Weil ich euch lieb hab. Auch ich stelle um - Temperaturabfragescript fuer Shell


Recommended Posts

Hallo zusammen,

 

ich bin ja nun wirklich kein Freund vom neuen Protokoll obwohl ich einsehe, dass Verbesserungen notwendig waren. Ich habe mich lange vor der Umstellung gedrueckt, weil mir zum einen die Zeit fehlte und zum anderen gab es keine passende Software zum abfragen. Diese Bitfummelei und dann auch noch diese Base58 rechnerei nervt absolut und war sonst nicht notwendig! - Nun habe ich es zum groessten Teil hinter mir. 8)  Wenn ich alle Scripte angepasst habe werde ich die Flashtour durch den Bekanntenkreis starten.

 

Ich habe mich heute hingesetzt und (das wichtigste) Scriptlet zuerst gemacht. Hiermit kann man per shell die Temperatur vom Temperaturbricket UNKOMPLIZIERT abfragen. Die ganzen Bindings halte ich fuer Overkill und muessen immer erst installiert werden.  ;)  In Protokollversion 1 reichten noch 3 Zeilen aus, jetzt ist es ein halbes Buch.  ;D

 

Kurzanleitung:

Nach dem Auspacken (oder wer will mit c&p): IP, Port und UID im Script und ggf. Ausfuehrungsrechte anpassen. Das war es schon.

Ich habe es auf Debian squeeze ausprobiert. Soviel ich weiss muss man bei Ubuntu das "nc -w1" gegen ein "nc -q1" austauschen.

 

Anpassungen an andere einfache Funktionen anderer Bricklets sind problemlos moeglich. Dazu nur die FunktionID im Bit und Bytekram finden (\x01) und ggf. den Payload der zurueckgesendetet wird anders behandeln ( Kommaschieberei, Division durch Hundert oder Tausend "/ 64" ). - Bei Fragen helfe ich auch gerne weiter.

 

#!/bin/bash
# Loetkolbenzauberkiste - Temperaturbricklet Protokoll Version 2

HOST=192.168.1.20
PORT=4223
tUID=abc

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"
TEMP1=`echo -n -e "$SENDPACKET" | nc -w1 $HOST $PORT | od -A n -t x2 | tr -d " " | cut -b 17- | tr "[:lower:]" "[:upper:]"`
TEMP2=`echo "scale=2 ; ibase=16; $TEMP1 / 64" | bc`

if [ "$1" = "x" ] ; 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

 

Edit, Nachtrag: Das ganze funktioniert nur bei Temperaturbricklets die an einem USB Stack angeschlossen sind. WLAN Stacks verhalten sich hier anders.

 

Viel Spass und vielleich liefert ja jemand ein Feedback.

 

Der Loetkolben

temperatur-get2_short.tar.gz

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.

 Share

×
×
  • Create New...