Howto: Write Tellstick sensor values directly to HA

http://karpero.mine.nu/ha

Moderators: tom_rosenback, Daniel, Telldus

aryan
Posts: 84
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by aryan » Thu Jan 18, 2018 11:08 am

Jag får ungefär samma fel om jag försöker köra skriptet så:

Code: Select all

pi@asporasp /usr/local/share/telldus/scripts/sensorevent $ sudo sh ./event.sh
./event.sh: 3: ./event.sh: declare: not found
./event.sh: 4: ./event.sh: whitelist[1]=fineoffset-temperature-203: not found
./event.sh: 5: ./event.sh: whitelist[2]=mandolyn-temperaturehumidity-31: not found
./event.sh: 6: ./event.sh: whitelist[3]=mandolyn-temperaturehumidity-31-humidity: not found
./event.sh: 22: ./event.sh: Bad substitution
Så det verkar helt i sin ordning

Däremot fick jag också ändra jag if satsen från

Code: Select all

if [[ ${whitelist["$haid"]} ]] ; then
till

Code: Select all

if [[ " ${whitelist[@]} " =~ " ${haid} " ]]; then
Om du vill kolla om det är ifsatsen som inte funkar kan du logga innan if satsen ( mellan asec och if)

Code: Select all

echo "${timestamp} - ${haid} -> ${VALUE} " >> /tmp/tdlog.log
Då borde du se nått i tdlog.log om du t ex kör tail /tmp/tdlog.log ?

Men man måste också starta om telldusd om det är ett nytt sensor skript ( sudo service telldusd restart )

Mvh Aryan

Ps Stämmer sökvägen till api http://localhost/ha/api.php… i dit fall?

aryan
Posts: 84
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by aryan » Thu Jan 18, 2018 11:08 am

Kom just på en sak till.

Jag har min whitelist array så här:

Code: Select all

whitelist[1]='fineoffset-temperature-203'
whitelist[2]='mandolyn-temperaturehumidity-31'
whitelist[3]='mandolyn-temperaturehumidity-31-humidity'
Trodde att det skulle kunna funka att få en ndex automatiskt så här

Code: Select all

whitelist[]='fineoffset-temperature-203'
whitelist[]='mandolyn-temperaturehumidity-31'
whitelist[]='mandolyn-temperaturehumidity-31-humidity'
Men det verkar inte gå ändå, så det kan du också behöva ändra på om du inte får nått i loggen.

/Aryan

Ps du kan även ta bort några rader i case för sensorer du ändå inte använder men det ska inte spela någon roll

hylsan
Posts: 158
Joined: Thu Jan 18, 2018 11:08 am
Location: skåne, sweden

Re: Howto: Write Tellstick sensor values directly to HA

Post by hylsan » Thu Jan 18, 2018 11:08 am

Händer tyvärr inte ett jekla smack...ingen logg eller något. Min Duo blinkar blått med jämna mellanrum och tdtool -l visar att jag har mätresultat som är aktuella.
Alla script som ligger i sensor event triggas väl när tdtool får ett värde till sig?
Testade ett enkelt script men det hjälpte inte heller, trots omstarter av servicen. ska testa starta om hela hallonet :(

Code: Select all

#!/bin/bash
timetamp=$(date +"%d %b %T")
echo "${timestamp} - ${haid} -> ${value}  " >> /tmp/tdsensor.log
Ska tilläggas att kör jag scriptet manuellt så funkar ovanstående.
mitt andra script ser ut så här nu med dina förslag på ändringar...

Code: Select all

#!/bin/bash

declare -a whitelist
whitelist[1]='fineoffset-temperaturehumidity-151'
whitelist[2]='fineoffset-temperaturehumidity-151-humidity'
whitelist[3]='fineoffset-temperaturehumidity-135'
whitelist[4]='fineoffset-temperaturehumidity-135-humidity'
whitelist[5]='fineoffset-temperature-152'

timestamp=$(date +"%d %b %T")

extraarguments=""

case ${DATATYPE} in
    1)
        haid="${PROTOCOL}-${MODEL}-${SENSORID}"
        ;;
    2)
        haid="${PROTOCOL}-${MODEL}-${SENSORID}-humidity"
        ;;
    4)
        haid="${PROTOCOL}-${MODEL}-${SENSORID}-rainrate"
        ;;
    8)
        haid="${PROTOCOL}-${MODEL}-${SENSORID}-raintotal"
        extraarguments="&calculatevalues=true"
        ;;
    16)
        haid="${PROTOCOL}-${MODEL}-${SENSORID}-winddirection"
        ;;
    32)
        haid="${PROTOCOL}-${MODEL}-${SENSORID}-windaverage"
        ;;
    64)
        haid="${PROTOCOL}-${MODEL}-${SENSORID}-windgust"
        ;;
esac

echo "${timestamp} - ${haid} -> ${VALUE} " >> /tmp/tdlog.log

if [[ " ${whitelist[@]} " =~ " ${haid} " ]]; then

    echo "${timestamp} - ${haid} -> ${VALUE} " >> /tmp/tdsensor.log

    url="http://localhost/ha/api.php?do=sensors/setValue&serial=${haid}&name=${haid}&value=${VALUE}${extraarguments}"

    wget --header='Accept-Language: sv' -qO- "${url}" &> /dev/null

fi
ps.vet inte om localhost funkar eller inte, men det märker vi om jag får liv i scriptet överhuvudtaget.

aryan
Posts: 84
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by aryan » Thu Jan 18, 2018 11:08 am

Är dins script i sensorevent körbara?
Hur ser det ut när du gör:

Code: Select all

ls -al /usr/local/share/telldus/scripts/sensorevent/

hylsan
Posts: 158
Joined: Thu Jan 18, 2018 11:08 am
Location: skåne, sweden

Re: Howto: Write Tellstick sensor values directly to HA

Post by hylsan » Thu Jan 18, 2018 11:08 am

argh, mitt pucko...nej det är de ju inte :banghead: :banghead:

verkar inte hända så mycket dock...körde t.o.m. en 777:a för att vara säker. (det är read2.sh som är den skarpa)

Code: Select all

pi@raspberrypi:/usr/local/share/telldus/scripts/sensorevent $ ls -al /usr/local/share/telldus/scripts/sensorevent/
totalt 16
drwxr-sr-x 2 root staff 4096 jan 28 17:08 .
drwxr-sr-x 5 root staff 4096 nov 18 15:48 ..
-rwxrwxrwx 1 root staff 1319 jan 29 17:35 read2.sh
-rwxr-xr-x 1 root staff  101 jan 29 18:07 read.sh

aryan
Posts: 84
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by aryan » Thu Jan 18, 2018 11:08 am

:-)

Har du startat om telldusd om efter chmod ?

sudo chmod 755 /usr/local/share/telldus/scripts/*
sudo service telldusd restart

hylsan
Posts: 158
Joined: Thu Jan 18, 2018 11:08 am
Location: skåne, sweden

Re: Howto: Write Tellstick sensor values directly to HA

Post by hylsan » Thu Jan 18, 2018 11:08 am

ja tyvärr :(

Stendött...får kanske sparka liv i parsen i alla fall.
Kan ge Daniel morgondagen på sig också o se ifall han har något klokt att tillföra innan jag gör något.

Daniel
Posts: 312
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by Daniel » Thu Jan 18, 2018 11:08 am

hylsan wrote:argh, mitt pucko...nej det är de ju inte :banghead: :banghead:

verkar inte hända så mycket dock...körde t.o.m. en 777:a för att vara säker. (det är read2.sh som är den skarpa)

Code: Select all

pi@raspberrypi:/usr/local/share/telldus/scripts/sensorevent $ ls -al /usr/local/share/telldus/scripts/sensorevent/
totalt 16
drwxr-sr-x 2 root staff 4096 jan 28 17:08 .
drwxr-sr-x 5 root staff 4096 nov 18 15:48 ..
-rwxrwxrwx 1 root staff 1319 jan 29 17:35 read2.sh
-rwxr-xr-x 1 root staff  101 jan 29 18:07 read.sh
Läst igenom tråden nu. Om jag förstår det rätt så funkar scripten om du kör dem manuellt, men när sensorvärden ändras så händer ingenting alls, som att de inte över huvud taget verkar köras? Mycket skumt. Har nog tyvärr inga fler bra idéer då :-(

Angående det här med declare så kollade jag upp det lite. -A är att man deklarerar en "associative array" medan -a är att man deklarerar en "indexed array". Vete tusan exakt vad skillnaden är. Hos mig funkar ju -A bra, vet inte om det är skillnad på olika distros...

/Daniel
Senaste info och release om/av HomeAutomation hittas här http://karpero.mine.nu/ha
Latest info and release of HomeAutomation can be found here http://karpero.mine.nu/ha

aryan
Posts: 84
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by aryan » Thu Jan 18, 2018 11:08 am

hylsan wrote:

Code: Select all

#!/bin/bash
timetamp=$(date +"%d %b %T")
echo "${timestamp} - ${haid} -> ${value}  " >> /tmp/tdsensor.log
$[haid] är väll inte definierat i detta testscript?

Du skulle t ex kunna testa med ett “lograwdevice.sh" script i
/usr/local/share/telldus/scripts/rawdeviceevent/
med

Code: Select all

#!/bin/bash

echo "--------------------------------------" >> /tmp/tdlog.log
date +"%d %b %T" >> /tmp/tdlog.log
echo "Rawdata: ${RAWDATA}" >> /tmp/tdlog.log
Sedan gör du skripten körbara med

Code: Select all

sudo chmod 755 /usr/local/share/telldus/scripts/*/*
(hade glömt en /* i tidigare inlägg)

och startar om telldusd

Code: Select all

sudo service telldusd restart
Om det då fortfarande inte kommer in något i /tmp/tdlog.log osv
skulle du kolla om det finns någonting i syslog som ger en förklaring med exempelvis

Code: Select all

grep sh /var/log/syslog | tail 
Typ:
telldusd: Could not execute /usr/local/share/telldus/scripts/sensorevent/event.sh (13): Åtkomst nekas eller (2): Filen eller katalogen finns inte
osv.

Vid något tillfälle har jag lagt till user www-data i gruppen plugdev så när jag kör

Code: Select all

grep plugdev /etc/group
får jag: plugdev:x:46:pi,www-data
men tror inte att det är nödvändigt för att detta ska fungera, logfilerna från scripten som jag har i /tmp ägs av user nobody group plugdev.

hylsan
Posts: 158
Joined: Thu Jan 18, 2018 11:08 am
Location: skåne, sweden

Re: Howto: Write Tellstick sensor values directly to HA

Post by hylsan » Thu Jan 18, 2018 11:08 am

Tack för all hjälp!

Vet dock inte exakt vad problemet var, men troligtvis behörigheten. I går natt började den logga i alla fall.

Men som du sa Aryan så funkade det inte med localhost men det går med 127.0.0.1.

Så nu fungerar nog allt..tills jag börjar kludda med något nytt :)

Återigen, tack så mycket för hjälpen!

/Tomas

aryan
Posts: 84
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by aryan » Thu Jan 18, 2018 11:08 am

Vad bra! Själv håller jag nu på med att försöka göra en smartare termostat med hjälp av sensorevents. Om dit problem med localhost också beror på ipv6 finns en lösning på det längre upp i tråden.

hylsan
Posts: 158
Joined: Thu Jan 18, 2018 11:08 am
Location: skåne, sweden

Re: Howto: Write Tellstick sensor values directly to HA

Post by hylsan » Thu Jan 18, 2018 11:08 am

Hum, en fråga till måste jag fråga.
Hur ändrar man så den inte fyller databasen med värden? Innan tog jag bara värden 1ggn/h, nu tar den ju flera gånger i minuten... eller ja...Med några minuters mellanrum.

Eller ska jag lägga ett jobb som rensar i databasen istället?

aryan
Posts: 84
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by aryan » Thu Jan 18, 2018 11:08 am

Ja när det är ändrade värden sedan förre mätning blir det (många) nya rader…

Jag testade med en ändring i api/sensors/setValue.php så att decimal (temperatur) värden rundas av till femtedels grader (0,2 isf 0,1 osv) för att det ska bli färre nya rader i databasen.
efter raden med $value = getFormVariable("value", -1);

Code: Select all

if (substr($value, -2, 1) == '.') {
	$value = (round(5*$value))/5;
	}
Det hjälper redan mycket och kan man naturligtvis även göra lite grövre t ex en fjärdedels eller en halv grad. Det borde också gå att göra ett filter PHP eller en MySql trigger så att tabellen inte får en ny rad om det inte gått x tid till förra raden om man vill.

Jag rensar i tabellen med ett php script som tar bort bland snarlika värden som är äldre än en vecka gamla och efter avrundning till hela grader (lufttryck och luftfuktiget på avrundat till 0 och 5) är oförändrat jmfd de värden som kommer före och efter. Denna rens funktion/sida kör jag med cron en gång varje natt och gör att jag blir av med jätte många rader i tabellen eftersom det ofta finns bara små förändringar mellan mätningar.

hylsan
Posts: 158
Joined: Thu Jan 18, 2018 11:08 am
Location: skåne, sweden

Re: Howto: Write Tellstick sensor values directly to HA

Post by hylsan » Thu Jan 18, 2018 11:08 am

funderade på en fullösning så länge tills jag får tid o sitta med det vore kanske att göra två script som ändrar behörigheten på filen...men det kanske man inte kan göra? (tänker då på att man inte kan scripta "sudo chmod 755 /bla/bla/fil.sh")

Annars får det väl vara tills jag tar mig tiden helt enkelt.

aryan
Posts: 84
Joined: Thu Jan 18, 2018 11:08 am

Re: Howto: Write Tellstick sensor values directly to HA

Post by aryan » Thu Jan 18, 2018 11:08 am

Isf kan du väll bara byta namn på skriptet när du inte vill att det ska kunna köras / hittas?

Det är väll bara de script som fanns när telldusd startades som den kommer att försöka köra.

/Aryan

Post Reply