FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: harway2007 am 22 September 2015, 21:45:36

Titel: Schleifen und Variablen in Fhem
Beitrag von: harway2007 am 22 September 2015, 21:45:36
Wie erzeugt man eine Schleife mit Zähler und Varibalen Übergabe
an ein Fhem Objekt bzw. an den Gong und wie erzeugt man vorher
globale Variablen die im ganzen Fhem gelten?
A=5
B=10
C=1
gelernt in alten Zeiten :
For I = A to B Step C
Print I
SchalterNr = String "Schalter" + "VAL(I)"
set SchalterNr on
Next I

der Hintergrund ist der Gong soll den Stundenschlag
abhängig von der aktuellen Stunde wiederholen ..
um 7 Uhr also 7 mal...um beim obigen Beispiel zu bleiben
in etwa so:
For I = 1 to $hour
set Gong3 playTone 45
Next I

Beispiele aus dem Codeschnispel Wanduhr mit DOELSEIF hab ich versucht ...
bin daran aber gescheitert ...

MFG Harway
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: Bennemannc am 22 September 2015, 22:16:27
Hallo,

ich würde das auslagern in die 99_myUtils. Als nächstes würde ich mich mal in perl einlesen. Die Logik hast Du ja schon - also einfach die Funktion in 99_myUtils aufrufen und die Stundenzahl übergeben.
Dann hilft googlen - Perl Schleifen und Du findest:
http://www.hs-kl.de/~peter.liell/html_Referenz/tgce.htm oder Ähnliches.
Dazu die commandref lesen, damit man aus Perl fhem befehle ausgeben kann.
Daraus kannst Du dann die Schleife bauen und bei jedem Durchlauf mit Zähler++ den Zähler raufsetzen bis die Stundenzahl erreicht ist.

Gruß Christoph
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: harway2007 am 22 September 2015, 23:05:05
erste Tip war gut:
den Teil in perl hab ich wahrscheinlich verstanden

#!/usr/bin/perl
#Stundenschlag

sub Stundenschlag()
{
$i = $hour;
while($i <= $hour)
{
fhem("set Gong3 playTone 45")   
  $i++;
}
}
# Ende Stundenschlag

Frage wie erfolgt dann der Aufruf aus Fhem und wie kommt die sub an den Fhem Wert
$hour - oder ist das ein perl wert ?
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: franky08 am 22 September 2015, 23:40:32
Der Aufruf aus fhem erfolgt, indem du die sub über{name sub} aufrufst. Die $hour Geschichte geht in Perl über localtime.

P.S. Hier ein Beispiel von mir, Zeit und Datum:
sub date_time()

{

my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
    $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat += 1;
$Jahrestag += 1;
$Jahr += 1900;

my @Wochentage = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my @Monatsnamen = qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember);



my $datum_2 = sprintf("%s der %2d..%s %04d",
   $Wochentage[$Wochentag],
   $Monatstag,
   $Monatsnamen[$Monat-1],
   $Jahr,
);

my $zeit_1 = sprintf("Es ist %02d:%02d Uhr",
   $Stunden,
   $Minuten,
);


Siehe: http://wiki.selfhtml.org/wiki/Perl/Funktionen_für_Datum_und_Uhrzeit

VG
Frank
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: harway2007 am 23 September 2015, 22:17:54
mmh
CUL_HM_HM_PBI_4_FM_1EF508_Btn_03:Short.* set MyTTS tts sage {date_time( )};
sagt leider date unterstrich time ...

Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: franky08 am 23 September 2015, 22:21:23
Sieh mal hier, da hatte ich mal so etwas für Android gebaut, dass funktioniert prinzipiell auch mit TTS.

http://forum.fhem.de/index.php/topic,25621.0.html

VG
Frank
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: Puschel74 am 23 September 2015, 22:27:22
Zitat von: harway2007 am 22 September 2015, 21:45:36

Beispiele aus dem Codeschnispel Wanduhr mit DOELSEIF hab ich versucht ...
bin daran aber gescheitert ...

MFG Harway
D.h. du scheiterst an einer Anleitung zum Fahrrad fahren willst dir aber dann doch ein Fahrrad bauen um das Fahrrad fahren zu lernen.
Nun ja, es finden sich sicher genug Freiwillige die dir helfen werden  8)
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: franky08 am 23 September 2015, 22:35:30
Hab ich gerade erst gesehen, der Aufruf der sub erfolgt über {sub_name} und nicht {sub_name()}

VG
Frank

P.S. jedenfalls rufe ich alle meine Subroutinen ohne runde Klammern auf  8)
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: harway2007 am 23 September 2015, 22:51:29
schon gemerkt .. DANKE .. ich bin schon recht gut  :)..
wenn man so alleine vor den Problemen sitzt ohne mal reden zu können ist das schon
verdammt schwer.. jetzt redet mein Fhem ohne Ende mit mir  8) Dank deiner Hilfe
noch Lust auf ein weiteres Problem ?


Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: franky08 am 23 September 2015, 22:53:24
Frag mal  ;)

VG
Frank
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: harway2007 am 23 September 2015, 23:11:11
mein Readingsval ergibt bei der Gradzahl zum Beispiel 15.7 Grad ..
die Ausgabe sagt 15 macht ne mini Pause .. ohne punkt .. und sagt 7 ..
also 15 7
mein Versuch nur den INT Anteil zu bekommen führt zu einer riesigen Zahl:

my $temp = ReadingsVal('CUL_HM_HM_CC_RT_DN_2E1ED7_Weather','measured-temp','Fehler');
my $Gradzahl =  int{$temp};
fhem "set MyTTS tts im Dachgeschoß ist es  $Gradzahl Grad";

 
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: franky08 am 23 September 2015, 23:18:56
Das Problem hatte ich mit TTS auch, bei mir läuft sämtliche Sprachausgabe auf einem Android Tablet über WVC. M.W. arbeiten beide Sprachausgaben mit der gleichen Google Engine, warum das bei WVC funktioniert und mit TTS say nicht, ist mir bis jetzt ein Rätsel. Du könntest aber das Komma einfach als "Komma" ansagen lassen  :)
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: Starkstrombastler am 23 September 2015, 23:32:12
Nicht aufgeben, sondern weiter in Perl einlesen.
Zitat von: harway2007 am 23 September 2015, 23:11:11
my $Gradzahl =  int{$temp};
sollte mit int($temp) zum Ziel führen
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: franky08 am 23 September 2015, 23:40:15
Da hat er aber immer noch kein Komma, auf dem tablet übersieht man geschweifte und runde Klammer schnell mal  :o
Wenn man nur den integer der Temperatur braucht, sollte das aber so funktionieren.

P.S. Über die passende regex kann man auch einfach vor dem Komma abschneiden und genauso nach dem Komma und zum Schluss bei TTS tts alles wieder zusammensetzen und das Komma als "Komma" mit ansagen lassen

VG
Frank
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: harway2007 am 24 September 2015, 00:08:40
int($temp) tuts nicht sagt dann "int 15 7"
der int Befehl in perl soll so etwas machen:
Die int()-Funktion dient zum Einen dazu, den ganzzahligen Teil einer Zahl zu bestimmen. Nachkommastellen werden also abgeschnitten.
$zahl=1.23456;
print int($zahl);
1
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: franky08 am 24 September 2015, 07:42:08
Wenn du das Ganze (die Sprachausgabe) in einem notify o.ä. verwendest, dann erzeuge eine neue Variable und nimm die dann für die Sprachausgabe. So in der Art:

my $tempneu = int($temp);
und in der Ausgabe dann
fhem "set MyTTS tts Die Temperatur beträgt rund $tempneu";

VG
Frank
Titel: Antw:Schleifen und Variablen in Fhem
Beitrag von: harway2007 am 04 Oktober 2015, 01:32:54
DANKE hat geklappt !