Probleme mit 99_myUtils.pm

Begonnen von UdoG, 03 März 2013, 21:49:44

Vorheriges Thema - Nächstes Thema

UdoG

Hallo,

ich habe meine ersten Schritte mit FHEM jetzt getätigt. Leider gelingt es mir nicht eine eigene Datei 99_myUtils.pm funktionsfähig zu erstellen.
Ich bin wie in der WIKI beschrieben vorgegangen und habe eine Datei "99_myUtils.pm" im angelegt. Diese befindet sich auf meiner Fritzbox 7390 im Verzeichnis "FHEM" in welchen auch die anderen PM-Dateien liegen.
Der Inhalt besteht aus:

#####################
package main;
use strict;
use warnings;
use POSIX;

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

Beim abspeichern dieser kommt der Fehler:
Undefined subroutine &main::MyUtils_Initialize called at fhem.pl line 1591.

Im Log-File:
Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 8.

Was mache ich falsch, bzw. wo sollte ich nach Fehlern suchen?

Gruss Udo

Hardware/Software
Fritzbox 7390 Fhem info:
  Release  : 5.3
  Branch   : DEVELOPMENT
  OS       : linux
  Arch     : mips-linux
  Perl     : v5.12.2
 

Defined modules:
  CUL_HM     : 28
  FHEMWEB    : 7
  FileLog    : 29
  HMLAN      : 1
  autocreate : 1
  dummy      : 1
  notify     : 2
  telnet     : 1

Defined models per module:
  CUL_HM     : HM-CC-TC,HM-CC-VD,HM-LC-SW2-FM,HM-LC-SW4-DR
3x Raspi 2 / FHEM aktuelle Version (2x Echtsystem, 1x Testsystem)

HM-CFG-LAN, HM-CC-TC, HM-LC-Sw2-FM, HM-LC-Sw4-DR, HM-CC-VD

MisterEltako

Hi!

1. Lösche einfach zunächst deine selbst angelegte Datei.
2. Öffne die vorhandene 99_Utils.pm
3. Speichere sie mit "save as" mit 99_myUtils.pm
4. Öffne die Datei 99_myUtils wieder
5. Ändere in der Datei Utils_Initialize($$) in myUtils_Initialize($$)
6. Die dazwischen liegenden Subroutinen löschen (die "1;" belassen!!!) und durch eigene ergänzen Subroutinen ergänzen.

Klappt es dann?

MfG, MisterEltako.

HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

UdoG

Hallo,

Danke für die Antwort, aber ich komme jetzt erst gerade zum Probieren.

Ich bin nun nach obiger Anleitung vorgegangen

Bei dem folgenden Inhalt kommt wieder eine Fehlermeldung:
##############################################
# $Id: 99_Utils.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)


1;

Fehlermeldung: Illegal declaration of subroutine main::myUtils_Initialize at ./FHEM/99_myUtils.pm line 13.

Ergänzt man noch einen Eintrag wie in der Wiki:
##############################################
# $Id: 99_Utils.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;

use strict;
use warnings;
use POSIX;

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

1;
 
dann Fehlermeldung: Undefined subroutine &main::MyUtils_Initialize called at fhem.pl line 1591.

Führt man einen Reload aus "reload 99_myUtils.pm" kommt Fehler "Undefined subroutine &main::MyUtils_Initialize called at fhem.pl line 1591."

Im Log-File steht:
Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 11.

Irgendwie komme ich nicht weiter. Benötige nochmal eine Tipp wo ich suchen muss.

Gruss Udo
3x Raspi 2 / FHEM aktuelle Version (2x Echtsystem, 1x Testsystem)

HM-CFG-LAN, HM-CC-TC, HM-LC-Sw2-FM, HM-LC-Sw4-DR, HM-CC-VD

Puschel74

Hallo,

mit welchem Programm bearbeitest du deine Files?

Nicht das dir einen Programm einen Steuercode unterjubelt mit dem fhem nichts anfangen kann.
Nur weil man im Code nichts sieht heisst es nicht das nichts da ist ;-)

Grüße

Edith: Korrektur
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.

UdoG

Hallo,

gleich im Firefox in Edit Files.

Gruss udo
3x Raspi 2 / FHEM aktuelle Version (2x Echtsystem, 1x Testsystem)

HM-CFG-LAN, HM-CC-TC, HM-LC-Sw2-FM, HM-LC-Sw4-DR, HM-CC-VD

UdoG

Hallo,

ich habe noch etwas probiert. Jetzt kommt kein Fehler mehr. Die Ursache war mal wieder die Groß und Kleinschreibung scheinbar. Meine wenigen Unix-Kenntnisse sagten mir das dies ja bei Unix eine Rolle spielt wo es bei Windows nicht so drauf an kommt.

Also habe ich folgende Änderungen vorgenommen:

##############################################
# $Id: 99_Utils.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
sub
MyUtils_Initialize($$)
{
my ($hash)=@_;
}
1;

Das "M" bei MyUtils_Initialize($$) groß geschrieben und im Dateinamen 99_myUtils.pm jetzt in 99_MyUtils.pm geändert.
Jetz kommt keine Fehlermeldung beim Abspeichern.

Kann mir jemand bestätigen, dass dies absolut entscheidend ist. Falls dies so sei müsste die Wiki "http://www.fhemwiki.de/wiki/99_myUtils_anlegen#Eine_neue_Programmdatei_erzeugen" entsprechend angepasst werden, denn dort wird es klein geschrieben.

Gruss Udo

3x Raspi 2 / FHEM aktuelle Version (2x Echtsystem, 1x Testsystem)

HM-CFG-LAN, HM-CC-TC, HM-LC-Sw2-FM, HM-LC-Sw4-DR, HM-CC-VD

Puschel74

Hallo,

sorry. Kann ich nicht bestätigen.

Ich hab grad heute auf meinen RasPi die 99_myUtils.pm bearbeitet und diese ist ein kleines bischen umfangreicher als die "leere" 99_myUtils.pm
und das abspeichern verlief ohne Fehlermeldung und die Sub`s darin werden auch einwandfrei ausgeführt.

Ich kann meine 99_myUtils.pm gerne mal posten wenn gewünscht.

Grüße

Edith: Das m wurde absichtlich als m und nicht als M geschrieben.
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.

UdoG

Hallo Puschel74,

Ja bitte die 99_myUtils.pm mal posten.

Gruss Udo
3x Raspi 2 / FHEM aktuelle Version (2x Echtsystem, 1x Testsystem)

HM-CFG-LAN, HM-CC-TC, HM-LC-Sw2-FM, HM-LC-Sw4-DR, HM-CC-VD

Puschel74

Hallo und Guten morgen,

war gestern wohl doch schon etwas zu spät für meine müden Augen.
Ich hab grad gesehen das meine datei doch

99_MyUtils.pm heisst.

Also doch grosses M und kein m - Asche auf mein Haupt.
Wer lesen kann ist klar im Vorteil - wenn er das gelesene dann auch noch versteht.

Hier aber dennoch mal der Inhalt meiner 99_Mutils.pm

##############################################
# $Id: 99_Utils.pm 1099 2011-11-12 07:53:34Z rudolfkoenig $
package main;

use strict;
use warnings;
use POSIX;

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

######## DebianMail   Mail auf dem RPi versenden  ############

sub
DebianMail
{
  my $rcpt = shift;
  my $subject = shift;
  my $text = shift;
  my $ret = "";
  my $sender = "xxx.yyy\@zzz.de";
  my $konto = "aaa.bbb\@kabelbw.de";
  my $passwrd = "abcde";
  my $provider = "smtp.hhh.de";

  Log 1, "sendEmail RCP: $rcpt";
  Log 1, "sendEmail Subject: $subject";
  Log 1, "sendEmail Text: $text";
 
  $ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=no);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  Log 1, "sendEmail returned: $ret";
}

# sub fb_mail {
#   my $rcpt = $_[0];
#   my $subject = $_[1];
#   my $text = $_[2];
#   system("echo \"$text\" > fhem_nachricht.txt");
#   system("mailer send -i 'fhem_nachricht.txt' -s \"$subject\" -t \"$rcpt\"");
#   system("rm fhem_nachricht.txt");
# }

#### Log-abriss vermeiden
# called by
# define addLog notify addLog {addLog("ez_Aussensensor","state");addLog("ez_FHT","actuator");\
#                              addLog("MunichWeather","humidity");addLog("MunichWeather","pressure");\
#                              addLog("MunichWeather","temperature");addLog("MunichWeather","wind_chill");}
# define a_midnight1 at *23:59 trigger addLog
# define a_midnight2 at *00:01 trigger addLog

sub
addLog($$) {
    my ($logdevice, $reading) = @_;  # device and reading to be used
    my $logentry  = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
      # Log 1, "addLog: dev $logdevice, rdg $reading, log $logentry";
    if ($reading =~ m,state,i) {
        fhem "trigger $logdevice $logentry      << addLog";
    } else {
        fhem "trigger $logdevice $reading: $logentry      << addLog";
    }
}

###################################################################################
# Adapted WeatherOutput from FHEMWEB
# Store weathericons in new subdir FHEM/weathericons
# Check comment 10 lines below to switch between google icons and local icons
# Include into fhem using
# define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlLocal("MyWeatherName") }
sub WeatherAsHtmlLocal($) {
  my ($d) = @_;
  $d = "<none>" if(!$d);
  return "$d is not a Weather instance<br>"
        if(!$defs{$d} || $defs{$d}{TYPE} ne "Weather");
  my $imgHome="http://www.google.com";
##########################
# to use google icons, comment line below and reload this program
# $imgHome="/fhem/weathericons"; #turn this line into a comment to use google icons
##########################
  my $ret = "<table>";
  my $icon = ReadingsVal($d, "icon", "na.png");
  $icon =~ s,/ig/images/weather(.*)\.gif,$1\.png, if ($imgHome =~ m/fhem/);
  $ret .= sprintf('<tr><td><span id="weathericon"><img src="%s%s"></span></td><td><span id="weathertext">%s<br>temp %s, hum %s, %s</span></td></tr>',
        $imgHome, $icon,
        ReadingsVal($d, "condition", ""),
        ReadingsVal($d, "temp_c", ""), ReadingsVal($d, "humidity", ""),
        ReadingsVal($d, "wind_condition", ""));
  for(my $i=2; $i<=4; $i++) {
    my $icon = ReadingsVal($d, "fc${i}_icon", "na.png");
$icon =~ s,/ig/images/weather(.*)\.gif,$1\.png,  if ($imgHome =~ m/fhem/);
    $ret .= sprintf('<tr><td><span id="weathericon"><img src="%s%s"></span></td><td><span id="weathertext">%s: %s<br>min %s max %s</span></td></tr>',
        $imgHome, $icon,
        ReadingsVal($d, "fc${i}_day_of_week", ""),
        ReadingsVal($d, "fc${i}_condition", ""),
        ReadingsVal($d, "fc${i}_low_c", ""), ReadingsVal($d, "fc${i}_high_c", ""));
  }
  $ret .= "</table></div>";
  return $ret;
}

sub Untoggle($) {
 my ($obj) = @_;
 if (Value($obj) eq "toggle"){
   if (OldValue($obj) eq "off") {
     {fhem ("setstate ".$obj." on")}
   }
   else {
     {fhem ("setstate ".$obj." off")}
   }
 }
 else {
   {fhem "setstate ".$obj." ".Value($obj)}
 }  
}

1;


Ich vermute mal das ich das eine oder andere noch zu viel drin habe aber so funktioniert zumindest alles - soweit ich das sehe.

Grüße
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.

UdoG

Hallo Puschel74,

Danke für die Bereitstellung. Es scheint jetzt bei mir zu funktionieren. Ich habe in der Datei bei mir Zeitprofile für die Thermostaten hinterlegt, diese wurden auch übertragen. Somit scheint alles in Ordnung zu sein. Es kommt auch beim Abspeichern keine Fehlermeldung mehr. Wenn ich die Datei extern bearbeite benutze ich "Notepad++".

Gruss Udo
3x Raspi 2 / FHEM aktuelle Version (2x Echtsystem, 1x Testsystem)

HM-CFG-LAN, HM-CC-TC, HM-LC-Sw2-FM, HM-LC-Sw4-DR, HM-CC-VD

UliM

Zitat von: UdoG schrieb am Fr, 08 März 2013 23:08Das "M" bei MyUtils_Initialize($$) groß geschrieben und im Dateinamen 99_myUtils.pm jetzt in 99_MyUtils.pm geändert.
Jetz kommt keine Fehlermeldung beim Abspeichern.

Kann mir jemand bestätigen, dass dies absolut entscheidend ist. Falls dies so sei müsste die Wiki "http://www.fhemwiki.de/wiki/99_myUtils_anlegen#Eine_neue_Programmdatei_erzeugen" entsprechend angepasst werden, denn dort wird es klein geschrieben.

Hi Udo,
die Gross/Kleinschreibung ist in unix/linus relevant.
Daher muss die Schreibweise im Dateinamen extakt der Schreibweise des Namens der Initialize-Routine entsprechen, incl. Groß/Kleinschreibung.
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.