Servus zusammen,
ich bin gerade schier am Verzweifeln. Ich versuche nun seit 3 Tagen eine DOIF-Definition zur Berechnung des Windchills einzurichten. Die Formel funktioniert auch prinzipiell einwandfrei. Nur erhalte ich dann einen Wert mit 10 Dezimalstellen. Also dachte ich zur Formatierung an sprintf. Allerdings scheint DOIF nicht mit sprintf zusammenarbeiten zu wollen. Ich habe inzwischen schon sämtliche Varianten zur Klammersetzung (und Tips aus Threads) durchprobiert, aber FHEM meckert immer "no right bracket".
Hat jemand einen Erleuchtungsstupser für mich?
([Wetterstation:temperature] < 5 and [Wetterstation:windSpeed] > 5) (set windchill ({(sprintf("%.1f",(13.12 + 0.6215 * [Wetterstation:temperature] - 11.37 * [Wetterstation:windSpeed]**0.16 + 0.3965 * [Wetterstation:temperature] *[Wetterstation:windSpeed]**0.16 )))})) DOELSE (set windchill [Wetterstation:temperature])
sprintf verwende ich in stateFormat und das klappt einwandfrei - da kann ich dir nicht helfen.
DOIF ist Damian und sollte unter Automatisierung gepostet werden.
Damian liest zwar auch hier mit aber
Zitat von: Wernieman am 18 April 2015, 17:46:49
Und da wir hier privat Support leisten, sollte man alles Probiern, um es für den Supporteistenden einfacher lesbar zu machen ;o)
der Satz bringt es eigentlich auf den Punkt.
Nicht nur einfacher lesbar sondern auch einfacher helfbar.
@Allgemein:
Achtet doch bitte drauf wo ihr Eure Fragen postet.
Es gibt die Forenbereiche ja nicht umsonst - sonst hätten wir ja auch bei der google-group bleiben können.
Danke.
Den Beitrag kannst du auch selbst verschieben - auch hier danke.
Sorry, war mir eigentlich sicher, dass ich in Automatisierung gepostet hatte. War wohl ned so...
Zitat von: tomster am 18 April 2015, 19:20:13
Sorry, war mir eigentlich sicher, dass ich in Automatisierung gepostet hatte. War wohl ned so...
Kein Problem - kann ja mal passieren.
Ich würd ja gern helfen da ich aber DOIF nicht verwende kann ich dir beim Syntax nicht unter die Arme greifen.
Zitat von: tomster am 18 April 2015, 18:06:02
Servus zusammen,
ich bin gerade schier am Verzweifeln. Ich versuche nun seit 3 Tagen eine DOIF-Definition zur Berechnung des Windchills einzurichten. Die Formel funktioniert auch prinzipiell einwandfrei. Nur erhalte ich dann einen Wert mit 10 Dezimalstellen. Also dachte ich zur Formatierung an sprintf. Allerdings scheint DOIF nicht mit sprintf zusammenarbeiten zu wollen. Ich habe inzwischen schon sämtliche Varianten zur Klammersetzung (und Tips aus Threads) durchprobiert, aber FHEM meckert immer "no right bracket".
Hat jemand einen Erleuchtungsstupser für mich?
([Wetterstation:temperature] < 5 and [Wetterstation:windSpeed] > 5) (set windchill ({(sprintf("%.1f",(13.12 + 0.6215 * [Wetterstation:temperature] - 11.37 * [Wetterstation:windSpeed]**0.16 + 0.3965 * [Wetterstation:temperature] *[Wetterstation:windSpeed]**0.16 )))})) DOELSE (set windchill [Wetterstation:temperature])
Versuchs mal so:
([Wetterstation:temperature] < 5 and [Wetterstation:windSpeed] > 5)
({ my $var = sprintf("%.1f",13.12 + 0.6215 * [Wetterstation:temperature] - 11.37 * [Wetterstation:windSpeed]**0.16 + 0.3965 * [Wetterstation:temperature] *[Wetterstation:windSpeed]**0.16 );;
fhem("set windchill $var")})
DOELSE (set windchill [Wetterstation:temperature])
Gruss
flurin
Edit:
Vermutlich muss man noch [Wetterstation:temperature] mit ReadingsVal ersetzen:
ReadingsVal("Wetterstation","temperature","")
Dito für andere Readings.
=>
([Wetterstation:temperature] < 5 and [Wetterstation:windSpeed] > 5)
({ my $temp = ReadingsVal("Wetterstation","temperature","");;
my $speed = ReadingsVal("Wetterstation","windSpeed","");;
my $var = sprintf("%.1f",13.12 + 0.6215 * $temp - 11.37 * $speed**0.16 + 0.3965 * $temp *$speed**0.16 );;
fhem("set windchill $var")})
DOELSE (set windchill [Wetterstation:temperature])
Hmmm, mal ne blöde Frage: Wäre es in dem Fall nicht sinnvoller, das direkt im Wetterstations-Device mittels Userreading zu lösen?
Wozu brauchst da extra ein DOIF dafür?
Auch ne blöde Frage: Wozu ein UserReading ???
Direkt im Device sollte sich das doch per stateFormat lösen lassen.
Blöde Fragen hin oder her ;-) Das ist wohl wie mit den vielen Wegen, die angeblich nach Rom führen sollen...
Das Script von flurin formatiert nun nach Wunsch. Vielen Dank hierfür!
Zitat von: tomster am 18 April 2015, 20:30:39
Das Script von flurin formatiert nun nach Wunsch. Vielen Dank hierfür!
Das ist die Hauptsache.
Ich habe das bei mir mit sprintf so gelöst aber einfach zu viele Klammern
([17:00])( (set pushbullet_xxxx message Es sind [Feuchtesensor:temperature] Grad im Garten Die durchschnittliche Temperatur im Haus beträgt {(sprintf("%.0f",([sensor_bad:temperature]+[keller_sensor:temperature] + [schlafzimmer_sensor:temperature]) /3))} Grad ) )
Wenn ich aber versuche das hier nachzubauen rechnet er mir lediglich die Summe der 3 Temperaturen das /3 ignoiert er
([17:00]) ({ my $temp1 = ReadingsVal("Feuchtesensor","temperature","");;
my $temp2 = ReadingsVal("sensor_bad","temperature","");;
my $temp3 = ReadingsVal("keller_sensor","temperature","");;
my $haus = sprintf("%.1f", $temp * $temp2 * $temp3 /3 );;
fhem("set pushbullet_xxxx message Es sind [Feuchtesensor:temperature] Grad draußen Die Durchschnittstemperatur im Haus beträgt $haus")})
Wo liegt mein Fehler?
Zitat von: inesa394 am 23 April 2015, 13:13:18
Ich habe das bei mir mit sprintf so gelöst aber einfach zu viele Klammern
([17:00])( (set pushbullet_xxxx message Es sind [Feuchtesensor:temperature] Grad im Garten Die durchschnittliche Temperatur im Haus beträgt {(sprintf("%.0f",([sensor_bad:temperature]+[keller_sensor:temperature] + [schlafzimmer_sensor:temperature]) /3))} Grad ) )
Wenn ich aber versuche das hier nachzubauen rechnet er mir lediglich die Summe der 3 Temperaturen das /3 ignoiert er
([17:00]) ({ my $temp1 = ReadingsVal("Feuchtesensor","temperature","");;
my $temp2 = ReadingsVal("sensor_bad","temperature","");;
my $temp3 = ReadingsVal("keller_sensor","temperature","");;
my $haus = sprintf("%.1f", $temp * $temp2 * $temp3 /3 );;
fhem("set pushbullet_xxxx message Es sind [Feuchtesensor:temperature] Grad draußen Die Durchschnittstemperatur im Haus beträgt $haus")})
Wo liegt mein Fehler?
Versuchs mal so:
my $haus = sprintf("%.1f", ($temp + $temp2 + $temp3) / 3 );;
Gruss
flurin
Danke so gehts :) :) Punkt-vor-Strich-Regel
Zitat von: inesa394 am 23 April 2015, 13:13:18
Ich habe das bei mir mit sprintf so gelöst aber einfach zu viele Klammern
([17:00])( (set pushbullet_xxxx message Es sind [Feuchtesensor:temperature] Grad im Garten Die durchschnittliche Temperatur im Haus beträgt {(sprintf("%.0f",([sensor_bad:temperature]+[keller_sensor:temperature] + [schlafzimmer_sensor:temperature]) /3))} Grad ) )
Wenn ich aber versuche das hier nachzubauen rechnet er mir lediglich die Summe der 3 Temperaturen das /3 ignoiert er
([17:00]) ({ my $temp1 = ReadingsVal("Feuchtesensor","temperature","");;
my $temp2 = ReadingsVal("sensor_bad","temperature","");;
my $temp3 = ReadingsVal("keller_sensor","temperature","");;
my $haus = sprintf("%.1f", $temp * $temp2 * $temp3 /3 );;
fhem("set pushbullet_xxxx message Es sind [Feuchtesensor:temperature] Grad draußen Die Durchschnittstemperatur im Haus beträgt $haus")})
Wo liegt mein Fehler?
Oder mit der gleichen Anzahl von Klammern (als funktionierende Lösung), aber ein paar Zeilen kürzer:
([17:00]) ({ my $haus = sprintf("%.1f", ([Feuchtesensor:temperature]+[sensor:temperature]+[keller_sensor:temperature])/3);;
fhem("set pushbullet_xxxx message Es sind [Feuchtesensor:temperature] Grad draußen Die Durchschnittstemperatur im Haus beträgt $haus")})
Ich sehe dennoch keinen Vorteil (wegen zwei Klammern) gegenüber der ursprünglichen funktionierenden Lösung als Einzeiler.
Gruß
Damian
Nabend zusammen
Dann will ich mal zur allgemeinen Belustigun beitragen :-)
Fummel mir ja immer irgendwas zusammen und irgendwann klappt es ja auch . Nur dadurch lernt man
So habe das Problem das zum einen meine Gartenbeleuchtung per Twilight geschaltet wird klappt verzüglich ..
([08:00-23:00] and [myTL:twilight_weather] <50) (set Gartenlicht on) DOELSE (set Gartenlicht off)
Nun dachte ich mir wenn ich mal nach 23:00 Uhr nach hause komme mach ich es über nen Fensterkontakt am Gartentor ..
([test] eq "opened" and [myTL:twilight_weather] <50) (set Gartenlicht on) DOELSEIF ([test] ne "on")(set Gartenlicht off)
Ich denke mal das beisst sich . Brauch da mal nen wink mit dem Zaunphal.
Und nicht du kannst die Fensterkontakte nicht draussen betreiben .. der Sender ist im Schrumpfschlauch und hat externe 3 V und als Reedkontakt benutze ich welche von Schmersal
Gruss Markus
oha denke mal falscher thread bitte verschieben :-(