State aus verschieden Dummys berechnen

Begonnen von Bobsonbob, 26 März 2017, 10:53:16

Vorheriges Thema - Nächstes Thema

Bobsonbob

Bekomme da leider einen Fehler.

Wrong timespec : either HH:MM:SS or {perlcode}

CoolTux

list DEVICENAME

Und die Ausgabe hier in Codetags (oben Rautesymbol) posten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

franky08

Zitatdefine aufruf_at at +* 00:00:10 {name der sub}

da ist mir dummerweise ein Leerzeichen reingerutscht :o

+*00:00:10
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Bobsonbob

define aufruf_at at +*00:00:10 {99_myUtils}
habe ich geschrieben

syntax error at (eval 288) line 1, near "99_myUtils"
und das war das Ergibnis

franky08

Name der sub, nicht der utils, oh mann...
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Bobsonbob

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}


# Berechnung der Vorlauftemperatur nach der Aussentemperatur.

# Vorgaben

my $Aussentemp = ReadingsVal("Aussentemp","state","" );
my $Raumsoll = ReadingsVal("RaumSoll","state","" );
my $minVorlauf = ReadingsVal("minVorlauf","state","" );
my $maxVorlauf = ReadingsVal("maxVorlauf","state","" );
my $Steigung = ReadingsVal("Steigung","state","" );
my $Paralel = ReadingsVal("Paralel","state","" );

# Berechnung

my $VorlaufSoll = ($Raumsoll-$Aussentemp)*$Steigung**(1/1.3)+$Paralel;

if($VorlaufSoll > $maxVorlauf)
  { $VorlaufSoll = $maxVorlauf };
if($VorlaufSoll < $minVorlauf)
  { $VorlaufSoll = $minVorlauf };

$VorlaufSoll = int(100 * $VorlaufSoll + 0.5) / 100;

fhem "set VorlaufSoll $VorlaufSoll";

1;

Bobsonbob

Ich bin noch nicht so weit. Wo muß ich der Sub einen Namen geben?
Ich weiss, das das doof klingt. Aber es ist für einen Anfänger nicht selbstverständlich.


franky08

#22
Man nehme das Ganze:

sub Berechnung()

{

# Berechnung der Vorlauftemperatur nach der Aussentemperatur.

# Vorgaben

my $Aussentemp = ReadingsVal("Aussentemp","state","" );
my $Raumsoll = ReadingsVal("RaumSoll","state","" );
my $minVorlauf = ReadingsVal("minVorlauf","state","" );
my $maxVorlauf = ReadingsVal("maxVorlauf","state","" );
my $Steigung = ReadingsVal("Steigung","state","" );
my $Paralel = ReadingsVal("Paralel","state","" );

# Berechnung

my $VorlaufSoll = ($Raumsoll-$Aussentemp)*$Steigung**(1/1.3)+$Paralel;

if($VorlaufSoll > $maxVorlauf)
  { $VorlaufSoll = $maxVorlauf };
if($VorlaufSoll < $minVorlauf)
  { $VorlaufSoll = $minVorlauf };

$VorlaufSoll = int(100 * $VorlaufSoll + 0.5) / 100;

fhem "set VorlaufSoll $VorlaufSoll";
}


und gebe ihm einen Namen!


P.S. und spätestens das:
if($VorlaufSoll > $maxVorlauf)
  { $VorlaufSoll = $maxVorlauf };
if($VorlaufSoll < $minVorlauf)
  { $VorlaufSoll = $minVorlauf };


wird dir auch Fehler bringen
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Bobsonbob

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

sub
Vorlaufberechnung()
{
# Berechnung der Vorlauftemperatur nach der Aussentemperatur.

# Vorgaben

my $Aussentemp = ReadingsVal("Aussentemp","state","" );
my $Raumsoll = ReadingsVal("RaumSoll","state","" );
my $minVorlauf = ReadingsVal("minVorlauf","state","" );
my $maxVorlauf = ReadingsVal("maxVorlauf","state","" );
my $Steigung = ReadingsVal("Steigung","state","" );
my $Paralel = ReadingsVal("Paralel","state","" );

# Berechnung

my $VorlaufSoll = ($Raumsoll-$Aussentemp)*$Steigung**(1/1.3)+$Paralel;

if($VorlaufSoll > $maxVorlauf)
  { $VorlaufSoll = $maxVorlauf };
if($VorlaufSoll < $minVorlauf)
  { $VorlaufSoll = $minVorlauf };

$VorlaufSoll = int(100 * $VorlaufSoll + 0.5) / 100;

fhem "set VorlaufSoll $VorlaufSoll";

}
1;




Ist das so in Ordnung?

DeeSPe

Zitat von: Bobsonbob am 27 März 2017, 19:05:23
Ich bin noch nicht so weit. Wo muß ich der Sub einen Namen geben?
Ich weiss, das das doof klingt. Aber es ist für einen Anfänger nicht selbstverständlich.

Ich denke Du solltest Dich vor der Benutzung von FHEM mit den Perl Grundlagen vertraut machen, zumindest bevor Du irgendwelche wilden Konstrukte in die 99_myUtils schreibst.
Perl Grundlagen haben erst mal nichts mit FHEM zu tun, sie sind aber dringend nötig um FHEM zu programmieren/erweitern.
Zu FHEM werden Dir hier sicher viele helfen! Beim Erlernen der Grundlagen von Perl eher wenige, denn diese sind im Internet oder auch in altmodischen Büchern bestens erklärt/dokumentiert. ;)

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Bobsonbob


franky08

#26
ZitatIst das so in Ordnung?

Vom Aufbau her ja, von der Syntax her ehr nein...

Siehe DeeSPe

P.S. unbedingt mal ein Perl Buch besorgen, ohne Perl Grundlagen wirst du sonst nicht voran kommen...

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Bobsonbob

Es Funktioniert jetzt. Habt vielen lieben Dank. Lade euch gerne auf nen Kaffee oder Bier ein, wenn Ihr mal in der Nähe seid.
Ihr müsst Geduld mit mir haben. Ich weiß, leichter gesagt, als getan. hehe
Danke nochmal

MichlB

hallo, ich muß mich bei derfrage anschließen, ich bekomms nicht hin...
ich habe ein DOIF wo ich wenn die situation eintritt, die position meines Stellmotors auslese und dann möchte ich 10 steps abziehen und diesen wert dann als neue position übergeben... funkt nur irgendwie nicht.. kann mir bitte wer sagen so ich den fheler habe?


([WW9:temperature] >= 35) ({my $Wert = ReadingsVal("FBHMisch", "position", "");
    fhem("set FBHMisch $Wert ,
    set A1 on,
    set A0 off,
    set MMLC_HZGbot message FBH zu heiss [WW9:temperature]"),
    })

DOELSE ()
1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

rabehd

Zitatfunkt nur irgendwie nicht..
Das ist die Fehlermeldung?

Ich würde sowas als Funktion auslagern.

Hast Du das mal manuell ausprobiert. Ich vermute das geht nicht. Du list den Wert von Position aus um ihn dann als state zu setzen. Dann wird was ein und was anders aus geschaltet...
Wo werden dei 10 Stepsa abgezogen?
...
Auch funktionierende Lösungen kann man hinterfragen.