Fungerande script-exempel för På-Av och Tidur

http://karpero.mine.nu/ha

Moderators: Daniel, tom_rosenback, Telldus

Post Reply
Redg
Posts: 10
Joined: Fri Mar 17, 2023 9:45 am

Fungerande script-exempel för På-Av och Tidur

Post by Redg »

Med fungerande i ämnesraden menar jag att det fungerar för mig på min Raspberry Pi som kör Raspbian fullt uppdaterad 2014-11-20.

Har suttit o pillat med den här koden hela dagen, hoppas någon mer än jag har glädje av den.
Vågar inte lova att jag kan/kommer svara på eventuella frågor, jag är själv nybörjare.... :oops:

Hoppas att andra som har lite mer kunskap än mig kan hjälpa till.
Jag är duktig på klippa-o-klistra !!! :D

Code: Select all

#!/bin/bash
#
# Ett hopplock av andras script plus eget, för att få det att fungera som jag vill.
#
# telldusd måste vara >1.2.1
#
# Välj ett bra namn på scriptet och lägg det i /usr/local/share/telldus/scripts/deviceevent 
# Finns inte katalogerna så är det bara att tillverka egna.
#
# För att tidurs-delen av scriptet ska fungera måste at-allow/at-deny innehålla/inte innehålla den användare som
# telldusd körs under (nobody som standard). Jag känner inte till säkerhetsriskerna med att tillåta "nobody" att köra
# at, men det är så jag har gjort (tagit bort "nobody" från at-deny).
# Om du sätter tiduret till 1 minut så är den aktiva tiden <1 minut - kan bli 5 sekunder!
# Så vill du ha, låt säga en lampa, tänd en minut, sätt tiduret på 2 minuter. at är inget noggrant program. 
#
# Det nummer som ska anges för sändare resp. mottagare är det id-nummer dessa har i tellstick.conf.
#
# OBS! En del av koden som jag stulit/lånat innehåller <<!! och lite senare !! flytta inte
# de sista utropstecknen för att "snygga till koden", då slutar saker fungera! Vet inte varför, men efter att kliat mig
# i skallen ett bra tag och kollat på internet så hittade jag hur det skulle se ut.
#
# Kom ihåg att köra "sudo service telldusd restart" när det finns nya script i katalogen.
#
# Längst ner i scriptet finns ett försök att uppdatera statusen i HomeAutomation som inte verkar fungera för mig.
# Tips för att få det att fungera tas tacksamt emot!!
#
################ Ver. 0.1 2014-11-22
#
# Konfiguration ##########################
emitter=6       #${emitter} Sändare (Tryckknapp, Ir-sensor, Dörrkontakt eller dylikt)
reciver=3       #${reciver} Mottagare (Det som ska påverkas)
mode=2          #${mode} 1=På/Av 2=Tidur 3=Tidur som går att slå av manuellt
logg=1          #${logg} 1=Viss loggning i /tmp/tdlog.log 2=Ingen loggning
minuter=1       #${minuter} Antal minuter tills tiduret ska slå ifrån

# Kod #####################################
if [ "${DEVICEID}" -eq "${emitter}" ]; then
        case ${logg} in
                1)
                echo "--------------------------------------" >> /tmp/tdlog.log
                date +"%d %b %T" >> /tmp/tdlog.log
                echo "Device: ${DEVICEID}" >> /tmp/tdlog.log
                echo "Method: ${METHOD}" >> /tmp/tdlog.log
                echo "Emitter: ${emitter}" >> /tmp/tdlog.log
                echo "Mode: ${mode}" >> /tmp/tdlog.log
                echo "Reciver: ${reciver}" >> /tmp/tdlog.log
                echo "Minuter: ${minuter}" >> /tmp/tdlog.log
                ;;
                2)
                ;;
        esac
        case ${METHOD} in
                1)
                status=1
                onoff="on"
                ;;
                2)
                status=0
                onoff="off"
                ;;
        esac
        case ${logg} in
                1)
                echo "Status: ${status}" >> /tmp/tdlog.log
                echo "OnOff: ${onoff}" >> /tmp/tdlog.log
                ;;
                2)
                ;;
        esac
        case ${mode} in
                1)
                tdtool --${onoff} ${reciver}
                ;;
                2)
                if [ "${METHOD}" -eq 1 ]; then
                tdtool --on ${reciver}
                at now + ${minuter} minutes << !! >> /dev/null 2>&1
                tdtool --off ${reciver} >> /dev/null
!!
                fi
                ;;
                3)
                if [ "${METHOD}" -eq 1 ]; then
                tdtool --on ${reciver}
                at now + ${minuter} minutes << !! >> /dev/null 2>&1
                tdtool --off ${reciver} >> /dev/null
!!
                else
                tdtool --off ${reciver} >> /dev/null
                fi
                ;;
        esac
fi

#url1="http://<my_HA_url>/api.php?do=devices/updateStatus&status=${status}&systempluginname=tdtool&systemdeviceid=${emitter}"
#wget -qO- "${url1}" &> /dev/null
#url2="http://<my_HA_url>/api.php?do=devices/updateStatus&status=${status}&systempluginname=tdtool&systemdeviceid=${reciver}"
#wget -qO- "${url2}" &> /dev/null

Daniel
Posts: 317
Joined: Fri Mar 17, 2023 9:45 am

Re: Fungerande script-exempel för På-Av och Tidur

Post by Daniel »

Snyggt! Framför allt kul tycker jag att man numera med den nya script-körningen i telldus kan flytta ut ganska mycket intelligens "utanför" HomeAutomation och faktiskt trolla med saker själv. Det öppnar ju faktiskt helt nya dörrar. Ska fundera på fler användningsområden :D

Ett rent script-tips är att case är ju bara meningsfull om det är fler än typ två värden som ska jämföras. Dvs det här:

Code: Select all

            case ${some_variable} in
                    1)
                    do_something
                    ;;
                    2)
                    ;;
            esac
...kan ju egentligen lika gärna skrivas som

Code: Select all

if [ ${some_variable} -eq ${1} ]; then
     do_something
fi
/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
Snoopy
Posts: 253
Joined: Fri Mar 17, 2023 9:45 am
Location: Kalmar
Contact:

Re: Fungerande script-exempel för På-Av och Tidur

Post by Snoopy »

Det där var spännande.
Får bara inte timern att fungera men mode 3 går fint.
Allt loggas också.

Edit:
Jo, jag fick till timern också!! :P

Vad var det för problem du antyder? Om jag får det att snurra så borde
alla kunna det också :D
... världen är full av tappade sugar, några är mina....
HA 3.1.1 i en Raspberry Pi 2 + Tellstick Duo
owfs i annan Raspberry B+ + Tellstick och en Tellstick Net som backup
Post Reply