FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Solero am 05 Januar 2016, 01:20:04

Titel: (gelöst)99_myUtils.pm bei Hinzufügen von script mit "<" oder ">" Operator defekt
Beitrag von: Solero am 05 Januar 2016, 01:20:04
Hallo,

meine über das Template frisch angelegt 99_myUtils.pm sieht folgend aus:

##############################################
# $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) = @_;
}

# Enter you functions below _this_ line.

1;


Nun erweitere ich das ganze um Code, damit es folgend aussehen soll:

##############################################
# $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) = @_;
}

# Enter you functions below _this_ line.

sub weckerheizung($$$$$$$$$) {
  my ($timeToAlarm, $nameAT, $nameHeizung, $nameRoom, $namePos, $heizprogramm, $offsetToHeizung, $we, $month) = @_;
  my $secToHeizung;
  my $minToAlarm = int($timeToAlarm);
  if ( Value($namePos) ) {
     if ( ( $minToAlarm < 480 ) && ( $minToAlarm > 0 ) ) {
        if ( $month < 3 || $month > 9 ) {
           if ( ($we) || (Value("NRW_Feiertag")) ) {
              $secToHeizung = $minToAlarm * 60
           } else {
              $secToHeizung = ($minToAlarm - $offsetToHeizung) * 60
           }
           if ( $secToHeizung < 1 ) {
              $secToHeizung = 1
           }
           my $hoursToHeizung = int($secToHeizung/3600);
           my $minutesToHeizung = int(($secToHeizung - $hoursToHeizung * 3600) / 60);
           my $gapHours = "";
           my $gapMinutes = "";
           if ( $hoursToHeizung < 10 ) { $gapHours = "0" };
           if ( $minutesToHeizung < 10 ) { $gapMinutes = "0" };
           if (!exists($defs{"$nameAT"})) {
              fhem("define $nameAT at +$gapHours$hoursToHeizung:$gapMinutes$minutesToHeizung:00 set $nameHeizung $heizprogramm");
              fhem("attr $nameAT room $nameRoom")
           }
        }
     }
  }
}

1;


soweit so gut. Beim Speichern kommt weder ein Fehler oder Warning und es steht auch nichts im log. Öffne ich nun aber wieder die 99_myUtils.pm, dann sieht sie so aus:

##############################################
# $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) = @_;
}

# Enter you functions below _this_ line.

sub weckerheizung($$$$$$$$$) {
  my ($timeToAlarm, $nameAT, $nameHeizung, $nameRoom, $namePos, $heizprogramm, $offsetToHeizung, $we, $month) = @_;
  my $secToHeizung;
  my $minToAlarm = int($timeToAlarm);
  if ( Value($namePos) ) {
     if ( ( $minToAlarm  0 ) ) {
        if ( $month  9 ) {
           if ( ($we) || (Value("NRW_Feiertag")) ) {
              $secToHeizung = $minToAlarm * 60
           } else {
              $secToHeizung = ($minToAlarm - $offsetToHeizung) * 60
           }
           if ( $secToHeizung


Anscheinend geht es an den "<" und ">" Zeichen kaputt.
Ersetze ich testweise die "<" durch "lt" und ">" durch "gt", dann wird das script beim Speichern nicht beschädigt, nur würde es natürlich so nicht wie gewünscht funktionieren.
Das script ist sicherlich noch zu verbessern, darum geht es mir aber gar nicht. Ich möchte nur verstehen, wie ich den "<" und ">" Operator zu escapen habe, damit er funktioniert. Habe ich das script direkt in einem notify und ersetze die ";" durch ";;", dann läuft es einwandfrei.

(Zum Verständnis: Das script startet unter der Woche in den Wintermonaten, wenn ich zu Hause bin die Heizung offsetToHeizung Minuten bevor mein Wecker klingelt.)

Gruß und ein frohes Neues
Solero
Titel: Antw:99_myUtils.pm wird beim Hinzufügen von script mit "<" oder ">" Operator defekt
Beitrag von: viegener am 05 Januar 2016, 01:32:40
Du musst eigentlich nichts escapen und ich habe gerade auch mal den Ablauf bei mir durchprobiert. Bei mir wird Dein Skript (Firefox/Windows - FHEM auf Pi2) beim Speichern nicht beschädigt. Ich vermute Du hast die Schritte im Browser durchgefuhrt und auch darüber gespeichert?

Kannst Du etwas zu den beteiligten Plattformen Client und FHEm-Server sagen und auch zum Stand Deiner FHEM-Installation sagen (insbesondere FHEMWeb-Stand)?

Meine FHEMWeb-Stand ist:
$Id: 01_FHEMWEB.pm 10311 2015-12-30 15:44:10Z rudolfkoenig $
Titel: Antw:99_myUtils.pm wird beim Hinzufügen von script mit "<" oder ">" Operator defekt
Beitrag von: Solero am 05 Januar 2016, 01:45:38
Das habe wohl ich mit meiner Apache config verbockt. Gehe ich direkt über den fhem webserver, dann läuft es.
Normalerweise lasse ich fhem nur über localhost die server anbieten und gebe sie per Proxy über einen auch lokal laufenden apachen wieder, damit ich mich mit systemuser accounts anmelden kann und nicht mehrere Userdatenbanken pflegen musst. Hierbei war ich wohl etwas übereifrig mit ProxyHTMLLinks. Da sollte ich mal suchen, woran das liegt.

Vielen Dank für die superschnelle Antwort.

Gruß
Solero
Titel: Antw:(gelöst)99_myUtils.pm bei Hinzufügen von script mit "<" oder ">" Operator defekt
Beitrag von: viegener am 05 Januar 2016, 01:49:04
Gern geschehen aber gelöst hast Du es ja  ;)