K
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!
 
Redigerat:
Mats-S
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?
 
Redigerat:
K
Mats-S 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?
"Å" och "Ä" förekommer till följd av hur jag döpt enheten (inte i Google Home).
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.
Kodsnutt i ett scriptredigeringsprogram för automatisering av temperaturstyrning av en vaktelvärmelampa baserat på en termometer, med kommentarer på engelska.

Jag tror mig ha läst att andra använt samma termometer som jag, och då har fått det att fungera.
 
Fundera även på (kanske du redan gjort?) Att lägga en tolerans mellan av/på. Risk annars att den bara startar stoppar hela tiden. Typ, vid + 1 värm till 3 och stäng av.
 
  • Gilla
Alfredo och 1 till
  • Laddar…
SSSS
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:​

  1. 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.
  2. 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).
  3. 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.
  4. 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​

  1. Sammanför starters
    Scriptet lyssnar nu hela tiden på förändringar i temperaturen och gör en uppdatering vid behov.
  2. Korrekt state-värde
    Jag har ändrat temperatureSetpoint till temperature, som sannolikt är det korrekta attributet för att läsa aktuell temperatur.
  3. Villkorsblock
    Automationen använder nu conditional-handlingar som gör att du undviker redundanta triggers. Scriptet utför endast kommandon om villkoret är uppfyllt.
  4. Tydligare logik
    Endast ett block sköter hela logiken, vilket minimerar potentiella konflikter.

Felsökningstips​

  1. 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.
  2. Testa scriptet steg för steg
    Simulera temperaturförändringar för att säkerställa att automationen fungerar korrekt.
  3. Loggar
    Aktivera loggning för automationsflödet så att du kan se exakt vad som händer vid varje steg.
 
Redigerat:
  • Gilla
Kardan79
  • Laddar…
K
SSSS 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:​

  1. 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.
  2. 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).
  3. 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.
  4. 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​

  1. Sammanför starters
    Scriptet lyssnar nu hela tiden på förändringar i temperaturen och gör en uppdatering vid behov.
  2. Korrekt state-värde
    Jag har ändrat temperatureSetpoint till temperature, som sannolikt är det korrekta attributet för att läsa aktuell temperatur.
  3. Villkorsblock
    Automationen använder nu conditional-handlingar som gör att du undviker redundanta triggers. Scriptet utför endast kommandon om villkoret är uppfyllt.
  4. Tydligare logik
    Endast ett block sköter hela logiken, vilket minimerar potentiella konflikter.

Felsökningstips​

  1. 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.
  2. Testa scriptet steg för steg
    Simulera temperaturförändringar för att säkerställa att automationen fungerar korrekt.
  3. Loggar
    Aktivera loggning för automationsflödet så att du kan se exakt vad som händer vid varje steg.
TACK!
ska prova!!!
 
SSSS
K Kardan79 skrev:
TACK!
ska prova!!!
Återkoppla gärna om det funkade. 😀
 
K
SSSS SSSS skrev:
Återkoppla gärna om det funkade. 😀
Det funkade sådär.
Vid validering fick jag 4 fel.
Laddade upp koden och bilder av felbeskrivningarna, och bad ChatGPT om hjälp att avhjälpa felen.
Fick en ny kod. Försökte validera den. Fick 11 fel... 😂
 
I din screenshot har du squiggles på rad 11
 
K
AndersMalmgren AndersMalmgren skrev:
I din screenshot har du squiggles på rad 11
Vad betyder det?
Jag fick en varning, men inte ett fel.
 
K Kardan79 skrev:
Vad betyder det?
Jag fick en varning, men inte ett fel.
Vad säger varningen?
 
K
AndersMalmgren AndersMalmgren skrev:
Vad säger varningen?
Kändes inte så allvarligt. 😅
 
  • Text på skärm som varnar för säkerhets- och integritetspåverkan vid användning av teknik i hem.
Mats-S
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 🤦‍♂️ 😳
 
  • Gilla
Kardan79
  • Laddar…
K
Mats-S 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 🤦‍♂️ 😳
Ursäkta dum fråga, men kontrollerar jag det?
Jag ser ju i smartthings att den där angivna temperaturen är rimlig...
 
  • SmartThings skärmdump av temperatur 2,0°C och luftfuktighet 97% för "Vaktelrastgården" över 24 timmar.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
Mats-S
K Kardan79 skrev:
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.

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. "."
 
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.