Aktionen bei bestimmten Wetterbedingungen

Guten Abend…

hab das Script Wetterbedingung am Wickel und möchte Aktionen wie z.b. HOME- oder AUTO Button bei bestimmten Bedingungen automatisch drücken. siehe Code…

--[[
%% properties
3 ConditionCode
%% globals
--]]

local weather_code = fibaro:getValue(3, 'ConditionCode')
local previous_weather_code = fibaro:getValue(3, 'PreviousConditionCode')

if (weather_code == previous_weather_code) then
  --fibaro:debug('weather_code hat sich nicht geändert.')
else
  fibaro:debug('Wettervorhersage v0.01 gestartet.')
  fibaro:debug('ConditionCode: ' ..weather_code.. ' / Prüfe Wetterbedingung')
  if (weather_code == '6' or weather_code == '9' or weather_code == '11' or weather_code == '12' or weather_code == '40') then
    fibaro:debug('Wettervorhersage: Regen')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '31' or weather_code == '32' or weather_code == '33' or weather_code == '34') then
    fibaro:debug('Wettervorhersage: klar')
    fibaro:call(94, "pressButton", "2");
    fibaro:debug('AutomowerModus AUTO aktiviert')
  elseif (weather_code == '17' or weather_code == '29' or weather_code == '30' or weather_code == '44') then
    fibaro:debug('Wettervorhersage: leicht bewölkt')
    fibaro:call(94, "pressButton", "2");
    fibaro:debug('AutomowerModus AUTO aktiviert')
  elseif (weather_code == '26' or weather_code == '35') then
    fibaro:debug('Wettervorhersage: bewölkt')
    fibaro:call(94, "pressButton", "2");
    fibaro:debug('AutomowerModus AUTO aktiviert')
  elseif (weather_code == '27' or weather_code == '28') then
    fibaro:debug('Wettervorhersage: stark bewölkt')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '19' or weather_code == '20' or weather_code == '21' or weather_code == '22') then
    fibaro:debug('Wettervorhersage: Nebel')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '3' or weather_code == '4' or weather_code == '37' or weather_code == '38' or weather_code == '39' or weather_code == '45' or weather_code == '46') then
    fibaro:debug('ACHTUNG: Gewitter')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '5' or weather_code == '7' or weather_code == '14' or weather_code == '19' or weather_code == '42' or weather_code == '46') then
    fibaro:debug('Wettervorhersage: Möglicherweise Schnee/Schneeregen')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '13' or weather_code == '15' or weather_code == '16' or weather_code == '41' or weather_code == '42' or weather_code == '43') then
    fibaro:debug('Wettervorhersage: Schnee')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '17' or weather_code == '35') then
    fibaro:debug('ACHTUNG: Hagel')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '8' or weather_code == '10') then
    fibaro:debug('Wettervorhersage: Überfrierende Nässe')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '0' or weather_code == '1' or weather_code == '2' or weather_code == '23' or weather_code == '23') then
    fibaro:debug('Wettervorhersage: Stürmisch')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  elseif (weather_code == '25') then
    fibaro:debug('Wettervorhersage: Kalt (Was immer das heißt...)')
    fibaro:call(94, "pressButton", "2");
    fibaro:debug('AutomowerModus AUTO aktiviert')
  elseif (weather_code == '36') then
    fibaro:debug('Wettervorhersage: Heiß (Was immer das heißt...)')
    fibaro:call(94, "pressButton", "2");
    fibaro:debug('AutomowerModus AUTO aktiviert')
  else
    fibaro:debug('Code 3200. Nicht bekannt.')
    fibaro:call(94, "pressButton", "4");
    fibaro:debug('AutomowerModus HOME aktiviert')
  end

end


Da aber das Script alle 10 Minuten aktualisiert, wird demzufolge auch der jeweilige Button dementsprechend alle 10 Minuten gedrückt.
Ich möchte aber , das der Button nur gedrückt wird wenn die Wetterbedingung sich sozusagen von schlechtem Wetter auf gutem Wetter oder andersrum ändert . Ist das verständlich geschrieben ? :slight_smile:
Wie kann ich das anstellen ?

Gruss und schönen Rest Sonntag
xn8

Hi,

du kannst bei dem ersten Drücken des Knopfes eine Variable füllen, welche dann zum Beispiel auf 1 steht. Wenn diese Variable auf 1 steht, dann wird der Knopf nicht erneut gedrückt. Diese Variable kannst du dann zu einer bestimmten Zeit wieder auf 0 setzen, wodurch dann der Knopf wieder gedrückt wird. :slight_smile:

Gruß

hi boomx

es sind aber ja 2 knöpfe…also bei gutem Wetter soll auto gedrückt werden und bei wechsel zu schlechtem Wetter home und das ja nur wenn sich das Wetter dementsprechend ändert…
geht das dann trotzdem so ?

danke dir

gruss

Hi,

da würd ich dann den Status abfragen. Du musst den Button “Home” ja nur drücken, wenn das Gerät unterwegs ist.

Gruß

ok ich probier mich daran mal…
danke boomx

gruss xn8

Hallöchen

mag mal jemand über den Code schauen? Im Debug kommt folgende Meldung und ich komm da nicht weiter…
[DEBUG] 19:09:14: line 12: ‘)’ expected (to close ‘(’ at line 9) near ‘if’

--[[
%% properties
3 ConditionCode
%% globals
--]]

local weather_code = fibaro:getValue(3, 'ConditionCode')
local previous_weather_code = fibaro:getValue(3, 'PreviousConditionCode')
local AM_Status = (fibaro:getGlobal('AM_Status') 

if (weather_code == previous_weather_code) then
    --fibaro:debug('weather_code hat sich nicht geändert.')
else
  fibaro:debug('Wettervorhersage v0.01 gestartet.')
  fibaro:debug('ConditionCode: ' ..weather_code.. ' / Prüfe Wetterbedingung')
  if (weather_code == '6' or weather_code == '9' or weather_code == '11' or weather_code == '12' or weather_code == '40') then
    fibaro:debug('Wettervorhersage: Regen')
  elseif (weather_code == '31' or weather_code == '32' or weather_code == '33' or weather_code == '34') then
    fibaro:debug('Wettervorhersage: klar')
  elseif (weather_code == '17' or weather_code == '29' or weather_code == '30' or weather_code == '44') then
    fibaro:debug('Wettervorhersage: leicht bewölkt')
  elseif (weather_code == '26' or weather_code == '35') then
    fibaro:debug('Wettervorhersage: bewölkt')
  elseif (weather_code == '27' or weather_code == '28') then
    fibaro:debug('Wettervorhersage: stark bewölkt')
  elseif (weather_code == '19' or weather_code == '20' or weather_code == '21' or weather_code == '22') then
    fibaro:debug('Wettervorhersage: Nebel')
  elseif (weather_code == '3' or weather_code == '4' or weather_code == '37' or weather_code == '38' or weather_code == '39' or weather_code == '45' or weather_code == '46') then
    fibaro:debug('ACHTUNG: Gewitter')
  elseif (weather_code == '5' or weather_code == '7' or weather_code == '14' or weather_code == '19' or weather_code == '42' or weather_code == '46') then
    fibaro:debug('Wettervorhersage: Möglicherweise Schnee/Schneeregen')
  elseif (weather_code == '13' or weather_code == '15' or weather_code == '16' or weather_code == '41' or weather_code == '42' or weather_code == '43') then
    fibaro:debug('Wettervorhersage: Schnee')
  elseif (weather_code == '17' or weather_code == '35') then
    fibaro:debug('ACHTUNG: Hagel')
  elseif (weather_code == '8' or weather_code == '10') then
    fibaro:debug('Wettervorhersage: Überfrierende Nässe')
  elseif (weather_code == '0' or weather_code == '1' or weather_code == '2' or weather_code == '23' or weather_code == '23') then
    fibaro:debug('Wettervorhersage: Stürmisch')
  elseif (weather_code == '25') then
    fibaro:debug('Wettervorhersage: Kalt (Was immer das heißt...)')
  elseif (weather_code == '36') then
    fibaro:debug('Wettervorhersage: Heiß (Was immer das heißt...)')
  else
    fibaro:debug('Code 3200. Nicht bekannt.')

      
  end

  	if 
      (weather_code == '6' or weather_code == '9' or weather_code == '11' or weather_code == '12' or weather_code == '40' or 
       weather_code == '19' or weather_code == '20' or weather_code == '21' or weather_code == '22' or
       weather_code == '3' or weather_code == '4' or weather_code == '37' or weather_code == '38' or weather_code == '39' or weather_code == '45' or weather_code == '46' or
       weather_code == '5' or weather_code == '7' or weather_code == '14' or weather_code == '19' or weather_code == '42' or weather_code == '46' or
       weather_code == '13' or weather_code == '15' or weather_code == '16' or weather_code == '41' or weather_code == '42' or weather_code == '43' or
       weather_code == '17' or weather_code == '35' or
       weather_code == '8' or weather_code == '10' or
       weather_code == '0' or weather_code == '1' or weather_code == '2' or weather_code == '23' or weather_code == '23') 
    and
       AM_Status == 2
    
    
    then
       fibaro:call(94, "pressButton", "4")
       fibaro:debug('Automower Modus: HOME gesetzt')

  
    elseif 
       (weather_code == '31' or weather_code == '32' or weather_code == '33' or weather_code == '34' or
        weather_code == '17' or weather_code == '29' or weather_code == '30' or weather_code == '44' or
        weather_code == '26' or weather_code == '35' or
        weather_code == '36') 
    and
        AM_Status == 0 or AM_Status == 1
    
    then
       fibaro:call(94, "pressButton", "2")
       fibaro:debug('Automower Modus: AUTO gesetzt')
    end

  
 
end

      

danke euch

gruss xn8

Hi,

in Zeile 9 hast Du 2 x “(” und nur 1 x “)”

VG Hoggle

danke Hoggle…das hatte ich übersehen. Kannst du mir noch sagen warum von der ID 94 nicht die entsprechenden Button gedrückt werden wenn das Wetter
dementsprechend ist ? Eigentlich sollte das im Debug ja auch mit ausgegeben werden, aber es läuft quasi nur die Wetterbedingung durch…

gruss xn8

Hau doch mal vor dem vorletzten end ein else ein.
Dort lässt du im Debug den weather_code und den AM_Status ausgeben.

so, hab nochmal ein local vd_id = 94 eingetragen und das else was du meintest

--[[
%% properties
3 ConditionCode
%% globals
--]]

local weather_code = fibaro:getValue(3, 'ConditionCode')
local previous_weather_code = fibaro:getValue(3, 'PreviousConditionCode')
local AM_Status = fibaro:getGlobal('AM_Status') 
local vd_id = 94

if (weather_code == previous_weather_code) then
    --fibaro:debug('weather_code hat sich nicht geändert.')
else
  fibaro:debug('Wettervorhersage v0.01 gestartet.')
  fibaro:debug('ConditionCode: ' ..weather_code.. ' / Prüfe Wetterbedingung')
  if (weather_code == '6' or weather_code == '9' or weather_code == '11' or weather_code == '12' or weather_code == '40') then
    fibaro:debug('Wettervorhersage: Regen')
  elseif (weather_code == '31' or weather_code == '32' or weather_code == '33' or weather_code == '34') then
    fibaro:debug('Wettervorhersage: klar')
  elseif (weather_code == '17' or weather_code == '29' or weather_code == '30' or weather_code == '44') then
    fibaro:debug('Wettervorhersage: leicht bewölkt')
  elseif (weather_code == '26' or weather_code == '35') then
    fibaro:debug('Wettervorhersage: bewölkt')
  elseif (weather_code == '27' or weather_code == '28') then
    fibaro:debug('Wettervorhersage: stark bewölkt')
  elseif (weather_code == '19' or weather_code == '20' or weather_code == '21' or weather_code == '22') then
    fibaro:debug('Wettervorhersage: Nebel')
  elseif (weather_code == '3' or weather_code == '4' or weather_code == '37' or weather_code == '38' or weather_code == '39' or weather_code == '45' or weather_code == '46') then
    fibaro:debug('ACHTUNG: Gewitter')
  elseif (weather_code == '5' or weather_code == '7' or weather_code == '14' or weather_code == '19' or weather_code == '42' or weather_code == '46') then
    fibaro:debug('Wettervorhersage: Möglicherweise Schnee/Schneeregen')
  elseif (weather_code == '13' or weather_code == '15' or weather_code == '16' or weather_code == '41' or weather_code == '42' or weather_code == '43') then
    fibaro:debug('Wettervorhersage: Schnee')
  elseif (weather_code == '17' or weather_code == '35') then
    fibaro:debug('ACHTUNG: Hagel')
  elseif (weather_code == '8' or weather_code == '10') then
    fibaro:debug('Wettervorhersage: Überfrierende Nässe')
  elseif (weather_code == '0' or weather_code == '1' or weather_code == '2' or weather_code == '23' or weather_code == '23') then
    fibaro:debug('Wettervorhersage: Stürmisch')
  elseif (weather_code == '25') then
    fibaro:debug('Wettervorhersage: Kalt (Was immer das heißt...)')
  elseif (weather_code == '36') then
    fibaro:debug('Wettervorhersage: Heiß (Was immer das heißt...)')
  else
    fibaro:debug('Code 3200. Nicht bekannt.')

      
  

  	if 
      (weather_code == '6' or weather_code == '9' or weather_code == '11' or weather_code == '12' or weather_code == '40' or 
       weather_code == '19' or weather_code == '20' or weather_code == '21' or weather_code == '22' or
       weather_code == '3' or weather_code == '4' or weather_code == '37' or weather_code == '38' or weather_code == '39' or weather_code == '45' or weather_code == '46' or
       weather_code == '5' or weather_code == '7' or weather_code == '14' or weather_code == '19' or weather_code == '42' or weather_code == '46' or
       weather_code == '13' or weather_code == '15' or weather_code == '16' or weather_code == '41' or weather_code == '42' or weather_code == '43' or
       weather_code == '17' or weather_code == '35' or
       weather_code == '8' or weather_code == '10' or
       weather_code == '0' or weather_code == '1' or weather_code == '2' or weather_code == '23' or weather_code == '23') 
    and
       AM_Status == 2
    
    
    then
       fibaro:call(94, "pressButton", "4")
       fibaro:debug('Automower Modus: HOME gesetzt')

  
    elseif 
       (weather_code == '31' or weather_code == '32' or weather_code == '33' or weather_code == '34' or
        weather_code == '17' or weather_code == '29' or weather_code == '30' or weather_code == '44' or
        weather_code == '26' or weather_code == '35' or
        weather_code == '36') 
    and
        AM_Status == 0 or AM_Status == 1 or AM_Status == 3
    
    then
       fibaro:call(94, "pressButton", "2")
       fibaro:debug('Automower Modus: AUTO gesetzt')
    

    else
       fibaro:debug('weather_code')
       fibaro:debug('AM_Status')
  
    end
  end
 
end

      

es wird aber trotzdem nix anderes angezeigt

Am Handy sah man das nicht so gut…

Zeile 45 bzw 51:

mit dem letzten else sollte die if-Abfrage enden? dann fehlt ein end. Bzw in Zeile 89 ist eines zu viel.
Und ab 51 startet dann Deine neue if-Abfrage.

…so sieht das jetzt aus hoggle

--[[
%% properties
3 ConditionCode
%% globals
--]]

local weather_code = fibaro:getValue(3, 'ConditionCode')
local previous_weather_code = fibaro:getValue(3, 'PreviousConditionCode')
local AM_Status = fibaro:getGlobal('AM_Status') 
local vd_id = 94

if (weather_code == previous_weather_code) then
    --fibaro:debug('weather_code hat sich nicht geändert.')
else
  fibaro:debug('Wettervorhersage v0.01 gestartet.')
  fibaro:debug('ConditionCode: ' ..weather_code.. ' / Prüfe Wetterbedingung')
  if (weather_code == '6' or weather_code == '9' or weather_code == '11' or weather_code == '12' or weather_code == '40') then
    fibaro:debug('Wettervorhersage: Regen')
  elseif (weather_code == '31' or weather_code == '32' or weather_code == '33' or weather_code == '34') then
    fibaro:debug('Wettervorhersage: klar')
  elseif (weather_code == '17' or weather_code == '29' or weather_code == '30' or weather_code == '44') then
    fibaro:debug('Wettervorhersage: leicht bewölkt')
  elseif (weather_code == '26' or weather_code == '35') then
    fibaro:debug('Wettervorhersage: bewölkt')
  elseif (weather_code == '27' or weather_code == '28') then
    fibaro:debug('Wettervorhersage: stark bewölkt')
  elseif (weather_code == '19' or weather_code == '20' or weather_code == '21' or weather_code == '22') then
    fibaro:debug('Wettervorhersage: Nebel')
  elseif (weather_code == '3' or weather_code == '4' or weather_code == '37' or weather_code == '38' or weather_code == '39' or weather_code == '45' or weather_code == '46') then
    fibaro:debug('ACHTUNG: Gewitter')
  elseif (weather_code == '5' or weather_code == '7' or weather_code == '14' or weather_code == '19' or weather_code == '42' or weather_code == '46') then
    fibaro:debug('Wettervorhersage: Möglicherweise Schnee/Schneeregen')
  elseif (weather_code == '13' or weather_code == '15' or weather_code == '16' or weather_code == '41' or weather_code == '42' or weather_code == '43') then
    fibaro:debug('Wettervorhersage: Schnee')
  elseif (weather_code == '17' or weather_code == '35') then
    fibaro:debug('ACHTUNG: Hagel')
  elseif (weather_code == '8' or weather_code == '10') then
    fibaro:debug('Wettervorhersage: Überfrierende Nässe')
  elseif (weather_code == '0' or weather_code == '1' or weather_code == '2' or weather_code == '23' or weather_code == '23') then
    fibaro:debug('Wettervorhersage: Stürmisch')
  elseif (weather_code == '25') then
    fibaro:debug('Wettervorhersage: Kalt (Was immer das heißt...)')
  elseif (weather_code == '36') then
    fibaro:debug('Wettervorhersage: Heiß (Was immer das heißt...)')
  else
    fibaro:debug('Code 3200. Nicht bekannt.')

  end    

  	if 
      (weather_code == '6' or weather_code == '9' or weather_code == '11' or weather_code == '12' or weather_code == '40' or 
       weather_code == '19' or weather_code == '20' or weather_code == '21' or weather_code == '22' or
       weather_code == '3' or weather_code == '4' or weather_code == '37' or weather_code == '38' or weather_code == '39' or weather_code == '45' or weather_code == '46' or
       weather_code == '5' or weather_code == '7' or weather_code == '14' or weather_code == '19' or weather_code == '42' or weather_code == '46' or
       weather_code == '13' or weather_code == '15' or weather_code == '16' or weather_code == '41' or weather_code == '42' or weather_code == '43' or
       weather_code == '17' or weather_code == '35' or
       weather_code == '8' or weather_code == '10' or
       weather_code == '0' or weather_code == '1' or weather_code == '2' or weather_code == '23' or weather_code == '23') 
    and
       AM_Status == 2
    
    
    then
       fibaro:call(94, "pressButton", "4");
       fibaro:debug('Automower Modus: HOME gesetzt')

  
    elseif 
       (weather_code == '31' or weather_code == '32' or weather_code == '33' or weather_code == '34' or
        weather_code == '17' or weather_code == '29' or weather_code == '30' or weather_code == '44' or
        weather_code == '26' or weather_code == '35' or
        weather_code == '36') 
    and
        AM_Status == 0 or AM_Status == 1 or AM_Status == 3
    
    then
       fibaro:call(94, "pressButton", "2");
       fibaro:debug('Automower Modus: AUTO gesetzt')
    

    else
       fibaro:debug('weather_code : ')
       fibaro:debug('AM_Status : ')
  
    end
  end
 

      

…das Debug dazu so

[DEBUG] 21:16:13: Wettervorhersage v0.01 gestartet.
[DEBUG] 21:16:13: ConditionCode: 12 / Prüfe Wetterbedingung
[DEBUG] 21:16:13: Wettervorhersage: Regen
[DEBUG] 21:16:13: weather_code :
[DEBUG] 21:16:13: AM_Status :
[DEBUG] 21:26:13: Wettervorhersage v0.01 gestartet.
[DEBUG] 21:26:13: ConditionCode: 12 / Prüfe Wetterbedingung
[DEBUG] 21:26:13: Wettervorhersage: Regen
[DEBUG] 21:26:13: weather_code :
[DEBUG] 21:26:13: AM_Status :

ich bekomme es zum einen nicht hin, das der Button der ID94 gedrückt wird und zum anderen zeigt er keinen weathercode oder am_status an.

gruss xn8


fibaro:debug('weather_code: '..weather_code)
fibaro:debug('AM_Status: '..AM_Status)

ok…wie auch immer wird im Debug nun was angezeigt. hatte es aber auch schon so drin zu stehen und nix passierte. aber dank an dich hoggle.

jetzt muß ich es nur noch schaffen, das der button der id 94 gedrückt wird. kannst du da auch nochmal genauer drüber schauen hoggle ?

gruss xn8

Werden im Debug für die beiden Variablen “vernünftige” Werte angezeigt?
Erkennt man daran, ob die Bedingungen erfüllt sind?

ja es werden vernünftige werte angezeigt…

[DEBUG] 22:46:13: Wettervorhersage v0.01 gestartet.
[DEBUG] 22:46:13: ConditionCode: 3200 / Prüfe Wetterbedingung
[DEBUG] 22:46:13: Code 3200. Nicht bekannt.
[DEBUG] 22:46:13: weather_code : 3200
[DEBUG] 22:46:13: AM_Status : 0

Hier wird der Code 3200 angegeben.
War der in den Bedingungen enthalten?

…nur als

else
fibaro:debug(‘Code 3200. Nicht bekannt.’)

hatte ihn deshalb in meiner if-abfrage auch nicht drin. soll ich ihn mit rein nehmen ?

nochmals vielen dank an dich hoggle und auch an boomx, so langsam fällt bei mir der groschen mit dem lua programmieren,auch wenns oft nicht einfach zu
verstehen ist.

Kein Ding. :slight_smile:

Nimm ihn mal mit rein. Möglicherweise passiert deshalb nichts… :confused:

Gruß

Genau, Du hast die 3200 weder in deiner if, noch in der elsif-Schleife.
Deswegen geht er gleich auf else