Hauptmenü

DOIF und sprintf

Begonnen von tomster, 18 April 2015, 18:06:02

Vorheriges Thema - Nächstes Thema

tomster

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])

Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

tomster

Sorry, war mir eigentlich sicher, dass ich in Automatisierung gepostet hatte. War wohl ned so...

Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

flurin

#4
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])

Icinger

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?
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Puschel74

Auch ne blöde Frage: Wozu ein UserReading  ???
Direkt im Device sollte sich das doch per stateFormat lösen lassen.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

tomster

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!

Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

inesa394

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?

flurin

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

inesa394

#11
Danke so gehts   :) :)  Punkt-vor-Strich-Regel

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

balki

#13
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 :-(
Cubietruck
2*Raspi  Rev B
Cubietruck,
Max Thermostate , 6*Fensterkontakt ,Wandthermostat
2*Jeelink , Cul 433 , 2*Cul 868 , Fhemduino,nanoCUL