1 394 läst ·
19 svar
1k läst
19 svar
Hjälp med enklare Google Home-script (automatisering)
Hej!
Det här är absolut första gången jag ger mig på något liknande, så är jag fullständigt ute och cyklar blir jag inte förvånad.
Jag ska absolut läsa på mer på egen hand, men just nu håller jag på och blir tokig.
Min sambo bestämde sig för att skaffa vaktlar i somras. De gillar inte när det blir för kallt, så i voljären finns det två små hus med värmekällor (rör respektive lampa). Jag vill dock inte att värmen är på hela tiden.
I voljären (ute) finns en termometer (Sonoff SNZB-02P), och jag försöker nu skriva ett script som vid en temperatur lägre än 2 grader C sätter på värmen, och vid 2 grader C eller högre stänger av värmen.
Jag har knåpat ihop följande:
metadata:
name: Vaktelvärmaren av och på
description: When the temperature is less than 2 degrees - turn the quail heater on, turn the heather off when warmer
automations:
- starters:
- type: device.state.TemperatureControl
device: Vakteltermometer Ute - Vaktelgården
state: temperatureSetpoint
lessThan: 2C
actions:
- type: device.command.OnOff
devices:
- Vaktelvärmelampa - Vaktelgården
on: true
- starters:
- type: device.state.TemperatureControl
device: Vakteltermometer Ute - Vaktelgården
state: temperatureSetpoint
greaterThanOrEqualTo: 2C
actions:
- type: device.command.OnOff
devices:
- Vaktelvärmelampa - Vaktelgården
on: false
Det verkar funka vid en validering, men jag har ingen stort förtroende för att det ska funka i verkligheten.
Och tyvärr verkar det inte fungera som det är tänkt.
När jag startar rutinen, då stängs värmaren av.
Någon som har lust att förklara varför?
Tack på förhand!
Det här är absolut första gången jag ger mig på något liknande, så är jag fullständigt ute och cyklar blir jag inte förvånad.
Jag ska absolut läsa på mer på egen hand, men just nu håller jag på och blir tokig.
Min sambo bestämde sig för att skaffa vaktlar i somras. De gillar inte när det blir för kallt, så i voljären finns det två små hus med värmekällor (rör respektive lampa). Jag vill dock inte att värmen är på hela tiden.
I voljären (ute) finns en termometer (Sonoff SNZB-02P), och jag försöker nu skriva ett script som vid en temperatur lägre än 2 grader C sätter på värmen, och vid 2 grader C eller högre stänger av värmen.
Jag har knåpat ihop följande:
metadata:
name: Vaktelvärmaren av och på
description: When the temperature is less than 2 degrees - turn the quail heater on, turn the heather off when warmer
automations:
- starters:
- type: device.state.TemperatureControl
device: Vakteltermometer Ute - Vaktelgården
state: temperatureSetpoint
lessThan: 2C
actions:
- type: device.command.OnOff
devices:
- Vaktelvärmelampa - Vaktelgården
on: true
- starters:
- type: device.state.TemperatureControl
device: Vakteltermometer Ute - Vaktelgården
state: temperatureSetpoint
greaterThanOrEqualTo: 2C
actions:
- type: device.command.OnOff
devices:
- Vaktelvärmelampa - Vaktelgården
on: false
Det verkar funka vid en validering, men jag har ingen stort förtroende för att det ska funka i verkligheten.
Och tyvärr verkar det inte fungera som det är tänkt.
När jag startar rutinen, då stängs värmaren av.
Någon som har lust att förklara varför?
Tack på förhand!
Redigerat:
Har scriptat och programmerat en hel del under min tid som Unix/Linux sysadmin. Har dock ingen koll på programering i google home (YAML scriptspråk)
En grundläggande regel är att ALDRIG använda ÅÄÖ/åäö i programmen, så det är det första jag skulle ändra på. Använd endast engelska i programmet. Säger inte att det är det som är problemet här dock, men värt att ändra på.
Även indrag och tabbar måste vara korrekta och det spelar roll i ett program, det kan vara helt avgörande för att programmer ska fungera. Såg lite om vad som gäller för YAML det på den här sidan:
https://support.google.com/googlenest/answer/13460475
Verkar vara en ganska bra beskrivning av syntax och hur YAML ska skrivas, ta en koll på den
Är temperaturgivaren OK, ger den korrekt indata till ditt program?
En grundläggande regel är att ALDRIG använda ÅÄÖ/åäö i programmen, så det är det första jag skulle ändra på. Använd endast engelska i programmet. Säger inte att det är det som är problemet här dock, men värt att ändra på.
Även indrag och tabbar måste vara korrekta och det spelar roll i ett program, det kan vara helt avgörande för att programmer ska fungera. Såg lite om vad som gäller för YAML det på den här sidan:
https://support.google.com/googlenest/answer/13460475
Verkar vara en ganska bra beskrivning av syntax och hur YAML ska skrivas, ta en koll på den
Är temperaturgivaren OK, ger den korrekt indata till ditt program?
Redigerat:
"Å" och "Ä" förekommer till följd av hur jag döpt enheten (inte i Google Home).Mats-S skrev:
Har scriptat och programmerat en hel del under min tid som Unix/Linux sysadmin. Har dock ingen koll på programering i google home (YAML scriptspråk)
En grundläggande regel är att ALDRIG använda ÅÄÖ/åäö i programmen, så det är det första jag skulle ändra på. Använd endast engelska i programmet. Säger inte att det är det som är problemet här dock, men värt att ändra på.
Även indrag och tabbar måste vara korrekta och det spelar roll i ett program, det kan vara helt avgörande för att programmer ska fungera. Såg lite om vad som gäller för YAML det på den här sidan:
[länk]
Verkar vara en ganska bra beskrivning av syntax och hur YAML ska skrivas, ta en koll på den
Är temperaturgivaren OK, ger den korrekt indata till ditt program?
Bevisligen lyckas scriptet stänga av enheten trots användningen av de bokstäverna (istället för tvärtom). 😆
Jag ska dock döpa om enheterna.
Vad gäller indrag och tabbar så löser Google den biten. Man får mycket hjälp.
Om det skulle ha varit fel på något sånt hade jag fått reda på det.
Jag tror mig ha läst att andra använt samma termometer som jag, och då har fått det att fungera.
Jag kan inget om detta men jag la in ditt script i chatGPT, svaret nedan kanske kan hjälpa
____________________________________________________________________________
Det verkar som om ditt script är på rätt väg men har vissa problem som kan förklara varför det inte fungerar som du tänkt dig. Jag ska hjälpa dig att analysera och förbättra det!
____________________________________________________________________________
Det verkar som om ditt script är på rätt väg men har vissa problem som kan förklara varför det inte fungerar som du tänkt dig. Jag ska hjälpa dig att analysera och förbättra det!
Möjliga problem i ditt script:
- State och starters-konflikter
Det ser ut som om din automationslogik kan triggas direkt när den laddas in, oavsett temperatur, eftersom startvillkoren (starters) kanske inte korrekt matchar det aktuella värdet på termometern. Detta kan leda till att värmaren stängs av när automationsflödet initieras. - Felaktig användning av state och thresholds
Du verkar använda temperatureSetpoint för att läsa temperaturvärdet, men detta attribut är ofta avsett för att ange måltemperatur snarare än aktuell temperatur. Istället ska du använda termometerns aktuella temperaturvärde (vanligtvis temperature). - Dubbla starters
Du har två separata starters som hanterar samma temperaturvärde, vilket kan orsaka oönskade konflikter. Det är bättre att konsolidera dessa till en tydlig automationsregel. - On/off-kommandon för lampan
Det kan vara så att kommandot för att stänga av (on: false) inte korrekt hanteras av din enhet. Dubbelkolla att du använder rätt kommando för att styra värmaren.
Förbättrat script
Här är en förbättrad version av ditt script, med sammanslagna logikflöden och ett tydligare temperaturvillkor:metadata: name: Vaktelvärmaren av och på description: Styr värmaren beroende på temperaturen i voljärenautomations: - starters: - type: device.state device: Vakteltermometer Ute - Vaktelgården state: temperature actions: - type: conditional conditions: - type: numeric operand: device.state device: Vakteltermometer Ute - Vaktelgården state: temperature operator: lessThan value: 2 actions: - type: device.command.OnOff devices: - Vaktelvärmelampa - Vaktelgården on: true - type: conditional conditions: - type: numeric operand: device.state device: Vakteltermometer Ute - Vaktelgården state: temperature operator: greaterThanOrEqualTo value: 2 actions: - type: device.command.OnOff devices: - Vaktelvärmelampa - Vaktelgården on: falseFörklaringar till förändringarna
- Sammanför starters
Scriptet lyssnar nu hela tiden på förändringar i temperaturen och gör en uppdatering vid behov. - Korrekt state-värde
Jag har ändrat temperatureSetpoint till temperature, som sannolikt är det korrekta attributet för att läsa aktuell temperatur. - Villkorsblock
Automationen använder nu conditional-handlingar som gör att du undviker redundanta triggers. Scriptet utför endast kommandon om villkoret är uppfyllt. - Tydligare logik
Endast ett block sköter hela logiken, vilket minimerar potentiella konflikter.
Felsökningstips
- Validera state-attribut
Kontrollera i Home Assistant (eller motsvarande system) att rätt attribut används för temperaturen. Titta i enhetens detaljer för att säkerställa att det är temperature och inte något annat. - Testa scriptet steg för steg
Simulera temperaturförändringar för att säkerställa att automationen fungerar korrekt. - Loggar
Aktivera loggning för automationsflödet så att du kan se exakt vad som händer vid varje steg.
Redigerat:
TACK!SSSS skrev:
Jag kan inget om detta men jag la in ditt script i chatGPT, svaret nedan kanske kan hjälpa
____________________________________________________________________________
Det verkar som om ditt script är på rätt väg men har vissa problem som kan förklara varför det inte fungerar som du tänkt dig. Jag ska hjälpa dig att analysera och förbättra det!
Möjliga problem i ditt script:
- State och starters-konflikter
Det ser ut som om din automationslogik kan triggas direkt när den laddas in, oavsett temperatur, eftersom startvillkoren (starters) kanske inte korrekt matchar det aktuella värdet på termometern. Detta kan leda till att värmaren stängs av när automationsflödet initieras.- Felaktig användning av state och thresholds
Du verkar använda temperatureSetpoint för att läsa temperaturvärdet, men detta attribut är ofta avsett för att ange måltemperatur snarare än aktuell temperatur. Istället ska du använda termometerns aktuella temperaturvärde (vanligtvis temperature).- Dubbla starters
Du har två separata starters som hanterar samma temperaturvärde, vilket kan orsaka oönskade konflikter. Det är bättre att konsolidera dessa till en tydlig automationsregel.- On/off-kommandon för lampan
Det kan vara så att kommandot för att stänga av (on: false) inte korrekt hanteras av din enhet. Dubbelkolla att du använder rätt kommando för att styra värmaren.Förbättrat script
Här är en förbättrad version av ditt script, med sammanslagna logikflöden och ett tydligare temperaturvillkor:
metadata:
name: Vaktelvärmaren av och på
description: Styr värmaren beroende på temperaturen i voljären
automations:
- starters:
- type: device.state
device: Vakteltermometer Ute - Vaktelgården
state: temperature
actions:
- type: conditional
conditions:
- type: numeric
operand: device.state
device: Vakteltermometer Ute - Vaktelgården
state: temperature
operator: lessThan
value: 2
actions:
- type: device.command.OnOff
devices:
- Vaktelvärmelampa - Vaktelgården
on: true
- type: conditional
conditions:
- type: numeric
operand: device.state
device: Vakteltermometer Ute - Vaktelgården
state: temperature
operator: greaterThanOrEqualTo
value: 2
actions:
- type: device.command.OnOff
devices:
- Vaktelvärmelampa - Vaktelgården
on: false
Förklaringar till förändringarna
- Sammanför starters
Scriptet lyssnar nu hela tiden på förändringar i temperaturen och gör en uppdatering vid behov.- Korrekt state-värde
Jag har ändrat temperatureSetpoint till temperature, som sannolikt är det korrekta attributet för att läsa aktuell temperatur.- Villkorsblock
Automationen använder nu conditional-handlingar som gör att du undviker redundanta triggers. Scriptet utför endast kommandon om villkoret är uppfyllt.- Tydligare logik
Endast ett block sköter hela logiken, vilket minimerar potentiella konflikter.Felsökningstips
- Validera state-attribut
Kontrollera i Home Assistant (eller motsvarande system) att rätt attribut används för temperaturen. Titta i enhetens detaljer för att säkerställa att det är temperature och inte något annat.- Testa scriptet steg för steg
Simulera temperaturförändringar för att säkerställa att automationen fungerar korrekt.- Loggar
Aktivera loggning för automationsflödet så att du kan se exakt vad som händer vid varje steg.
ska prova!!!
Renoverare
· Stockholm
· 20 169 inlägg
I din screenshot har du squiggles på rad 11
Renoverare
· Stockholm
· 20 169 inlägg
Bara så att du inte kämpar på fel front här:
Ger temperaturgivaren korrekta värden?
Det faktumet är ju totalt avgörande om scriptet ska fungera, varningar i all ära men dom betyder inte med automatik att scriptet inte fungerar. Som du säger så terminerar det inte mitt i körningen, utan går hela vägen till slutet.
Har noll koll på hårdvaran som du använder som ska ge scriptet ingångsvärden på tempen, men har du något sätt att mera "fysiskt" verifiera vad givaren ger för värden så gör det ... väldigt ofta i felsökningens värld inom IT har man en tendens att skippa basic felsökning och gå på djupet direkt ... tro mig ... jag har gått i den fällan måååååååååååååånga gånger 🤦♂️ 😳
Ger temperaturgivaren korrekta värden?
Det faktumet är ju totalt avgörande om scriptet ska fungera, varningar i all ära men dom betyder inte med automatik att scriptet inte fungerar. Som du säger så terminerar det inte mitt i körningen, utan går hela vägen till slutet.
Har noll koll på hårdvaran som du använder som ska ge scriptet ingångsvärden på tempen, men har du något sätt att mera "fysiskt" verifiera vad givaren ger för värden så gör det ... väldigt ofta i felsökningens värld inom IT har man en tendens att skippa basic felsökning och gå på djupet direkt ... tro mig ... jag har gått i den fällan måååååååååååååånga gånger 🤦♂️ 😳
Ursäkta dum fråga, men kontrollerar jag det?Mats-S skrev:
Bara så att du inte kämpar på fel front här:
Ger temperaturgivaren korrekta värden?
Det faktumet är ju totalt avgörande om scriptet ska fungera, varningar i all ära men dom betyder inte med automatik att scriptet inte fungerar. Som du säger så terminerar det inte mitt i körningen, utan går hela vägen till slutet.
Har noll koll på hårdvaran som du använder som ska ge scriptet ingångsvärden på tempen, men har du något sätt att mera "fysiskt" verifiera vad givaren ger för värden så gör det ... väldigt ofta i felsökningens värld inom IT har man en tendens att skippa basic felsökning och gå på djupet direkt ... tro mig ... jag har gått i den fällan måååååååååååååånga gånger 🤦♂️ 😳
Jag ser ju i smartthings att den där angivna temperaturen är rimlig...
Om det är "smartthings" som föder scriptet med data så får man nog som du gör anta att termometern är korrekt.K Kardan79 skrev:
I dom programspråk som jag jobbat med finns det vanligtvis en debugger, där man kan köra programmet rad för rad, och för varje rad få en output vad värdena är satta till så att man kan felsöka vart det blir fel.
Verkar finnas en del för YAML också, googlade på "yaml debugger" och det gav en del svar som kanske kan hjälpa dig.
Du säger att det alltid stängs av oavsett temp. Känns ju som att villkoren inte fungerar och scriptet defaultar till sista raden "off"
Din bild på temperaturgivaren visar tempen med en decimal. Kan det vara så att du måste ange en decimal i scriptet också så att värdena kan matcha exakt mot smartthings?
Vild chansning från min sida, men värt att testa med 1 decimal i scriptet, och testa med både komma "," och punkt. "."


