Hallo,
ich hab mich lange davor gedrückt aber ich versuche meine linknx logiken in Perl zu schreiben.
Also zuerst dass wo ich Probleme hab:
1.
das ist nur ein Testscript und soll meine Temperaturen in einen String verwandeln. Nur leider tut es das nicht. Die Frage ist Warum? sprintf geht auf 3 Nachkommastellen, ich brauch nur 2, aber dass änder ich erstmal wenn er das tut was ich will...
2.
Seit dieses Script läuft meine ich eine deutlich höhere Prozessorlast zu haben. Wenn jemand drüber schauen könnte, ob das der Auslöser ist, wäre das sehr nett:
Das ist das Script von ChrisM ein wenig umgebaut.
oder ist es das:
Da ich die Dateien mehr oder weniger on demand aus dem Internet lade, könnte es dieses Script sein, dass die Prozessorlast dauerhaft erhöht?
Die shell Befehle stehend deshalb in einer Zeile, da es "wichtig" ist, dass sie nacheinander ausgeführt werden. Gibts da noch eine saubere Lösung?
Die Scripte sind noch "Reste" von linknx, um die aktuellen mp3 Dateien zu erzeugen
Gruß Volker
Edit:
Oh Oh jetzt gehts gar nicht mehr.
apt-get und der wiregate update im Webmin spucken das aus:
help!
Edit2: wenn ich das Script auf 2 Scripte aufteile, dann geht es wieder. Wenn ich das Script dann unter einem anderen Namen Speicher (z.B Bad Radio) Den Port und die Sound Device Namen ändere, dann geht das 2.te Script nicht. darf ich namen wie "my IP = " nur einmal in allen Scripten gebrauchen, oder kann ich die jedes mal wieder anders definieren`?
ich hab mich lange davor gedrückt aber ich versuche meine linknx logiken in Perl zu schreiben.
Also zuerst dass wo ich Probleme hab:
1.
Code:
my $Sonneneinstrahlung = '11/3/0'; my $Aussentemp = '11/1/0'; my $St; my $At; my $berechnung; my $differenzSoll; my $St2; $plugin_info{$plugname.'_cycle'} = 0; $plugin_subscribe{$Sonneneinstrahlung, $Aussentemp}{$plugname} = 1; if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $Sonneneinstrahlung) { $St = sprintf ("%.3f", $msg{'value'}); #oder nur falls nicht importiert: $msg{'data'} ist dann leer/undef! #$St= decode_dpt9($msg{'data'}); return $St; } else { # zyklischer Aufruf # "9" (DPT) kann entfallen falls richtig importiert! $St= knx_read($Sonneneinstrahlung,300,9); my $St2 = sprintf ("%.3f", $msg{'value'}); return $St2; } if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $Aussentemp) { $At= $msg{'value'}; #der nur falls nicht importiert: $msg{'data'} ist dann leer/undef! #$At= decode_dpt9($msg{'data'}); } #else { # zyklischer Aufruf # "9" (DPT) kann entfallen falls richtig importiert! #$At= knx_read($Aussentemp,300,9); #} # my $berechnung = $St - $At; #if ($berechnung => $$differenzSoll) { #return "passt"; #} else { #return "mist"; #}
2.
Seit dieses Script läuft meine ich eine deutlich höhere Prozessorlast zu haben. Wenn jemand drüber schauen könnte, ob das der Auslöser ist, wäre das sehr nett:
Code:
# do all configs here: my $knx_addr = '13/1/7'; # knx_address for volume up/down my $knx_addr_vol = '13/1/8'; my $volumestep = 10; # The stepsize for volume my $alsa_chanel = 'Software2'; # other possibility: Master my $sound_device = "mpdvol2"; # The Name of the alsa Sounddevice (asound.conf) my $knx_addr_player2 = '13/1/0';# mpd Player on/off GA my $volume_anfang = 80; # This Volume will be set on start my $Port = "6601"; # Port of the mpd Instanz my $IP = "192.168.178.33"; # The IP where the mpd Instanz is running my $info_wz = '3/1/2'; # Info Switch wz ################################################################# # do not change anything below, all config stays above ################################################################# # subscribe plugin and call it only when necessary $plugin_subscribe{$knx_addr, $knx_addr_player2}{$plugname} = 1; $plugin_info{$plugname.'_cycle'} = 0; # Volume if ($msg{'dst'} eq ($knx_addr)) { if ($msg{'apci'} eq 'A_GroupValue_Write') # change volume { if ($msg{'value'} == 1) { my $debug = `amixer -D $sound_device set $alsa_chanel $volumestep+`; return; } if ($msg{'value'} == 0) { my $debug = `amixer -D $sound_device set $alsa_chanel $volumestep-`; return; } } } # Radio on/off if ($msg{'dst'} eq ($knx_addr_player2)) { if ($msg{'apci'} eq 'A_GroupValue_Write') # change volume { if ($msg{'value'} == 1) { my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc play` && `amixer -D $sound_device set $alsa_chanel $volume_anfang%`; return "Player 2 läuft"; } if ($msg{'value'} == 0) { my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc stop`; return "Player 2 aus"; } } } # Ansage if ($msg{'dst'} eq ($info_wz)) { #Küche Licht, Kaffee if ($msg{'apci'} eq 'A_GroupValue_Write') { my $debug = `/var/www/sprachansage/./aussentemp.sh && /var/www/sprachansage/./vorhersage.sh && /var/www/sprachansage/./wohntemp.sh && amixer -D $sound_device set $alsa_chanel $volumestep%- && mpg123 -a mixing /tmp/hallo.mp3 /tmp/aktuelleaussentemp.mp3 /tmp/vorhersage.mp3 /tmp/wohnzimmer.mp3 && amixer -D $sound_device set $alsa_chanel $volumestep%+`; return "Ansage"; } } if ($msg{'apci'} eq 'A_GroupValue_Read') # get volume { my $volume = `amixer -D $sound_device get $alsa_chanel | grep 'Left:' | sed 's/.*Playback \\([0-9]*\\) .*/\\1/'`; knx_write( $knx_addr_vol, $volume, 6 ); return $volume; #"Figured out volume of $volume and sent it to $knx_addr"; }
oder ist es das:
Code:
my $volumestep = 10; # The stepsize for volume my $alsa_chanel = 'Software2'; # other possibility: Master my $sound_device = "mpdvol2"; # The Name of the alsa Sounddevice (asound.conf) my $volume_anfang = 80; # This Volume will be set on start my $Port = "6601"; # Port of the mpd Instanz my $IP = "192.168.178.33"; # The IP where the mpd Instanz is running my $kueche_licht = '3/1/0'; my $kaffee = '3/3/0'; # Uhrzeit my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings); ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(); $plugin_subscribe{$kaffee, $kueche_licht}{$plugname} = 1; $plugin_info{$plugname.'_cycle'} = 0; # Ansage in der Früh if (($hour >= 4) && ($hour <= 10 )) { #Küche Licht, Kaffee my $debug = `/var/www/sprachansage/./aussentemp.sh && /var/www/sprachansage/./vorhersage.sh && /var/www/sprachansage/./wohntemp.sh && amixer -D $sound_device set $alsa_chanel $volumestep%- && mpg123 -a mixing /tmp/gutenmorgen.mp3 /tmp/aktuelleaussentemp.mp3 /tmp/vorhersage.mp3 /tmp/wohnzimmer.mp3 && amixer -D $sound_device set $alsa_chanel $volumestep%+`; return "Ansage in der Früh";} if (($hour >= 10) && ($hour <= 22 )) { #Küche Licht, Kaffee my $debug = `/var/www/sprachansage/./aussentemp.sh && /var/www/sprachansage/./vorhersage.sh && /var/www/sprachansage/./wohntemp.sh && amixer -D $sound_device set $alsa_chanel $volumestep%- && mpg123 -a mixing /tmp/hallo.mp3 /tmp/aktuelleaussentemp.mp3 /tmp/vorhersage.mp3 /tmp/wohnzimmer.mp3 && amixer -D $sound_device set $alsa_chanel $volumestep%+`; return "Ansage"; } if ($msg{'dst'} eq ($kaffee or $kueche_licht)) { if ($msg{'value'} == 0) { my $debug = `/var/www/sprachansage/./aussentemp.sh && /var/www/sprachansage/./vorhersage.sh && /var/www/sprachansage/./wohntemp.sh && amixer -D $sound_device set $alsa_chanel $volumestep%- && mpg123 -a mixing /tmp/hallo.mp3 /tmp/aktuelleaussentemp.mp3 /tmp/vorhersage.mp3 /tmp/wohnzimmer.mp3 && amixer -D $sound_device set $alsa_chanel $volumestep%+`; return "Ansage wg Telegram"; } }
Die shell Befehle stehend deshalb in einer Zeile, da es "wichtig" ist, dass sie nacheinander ausgeführt werden. Gibts da noch eine saubere Lösung?
Die Scripte sind noch "Reste" von linknx, um die aktuellen mp3 Dateien zu erzeugen
Gruß Volker
Edit:
Oh Oh jetzt gehts gar nicht mehr.
apt-get und der wiregate update im Webmin spucken das aus:
Code:
Die folgenden Pakete werden ENTFERNT: alsaplayer-common alsaplayer-gtk apache2-mpm-worker apache2-utils apache2.2-common avahi-daemon avahi-utils bind9-host binutils build-essential collectd cometvisu curl dnsutils dpkg-dev g++ g++-4.3 gcc gcc-4.3 gnome-icon-theme gstreamer0.10-pulseaudio hal language-env libapache2-mod-proxy-html libaprutil1 libatk1.0-0 libatk1.0-data libavahi-client-dev libavahi-glib1 libbind9-40 libbind9-50 libc-bin libc-dev-bin libc6-i686 libcanberra-gtk-module libcanberra-gtk0 libcroco3 libcups2 libcurl3 libcurl3-gnutls libdbus-1-dev libdbus-glib-1-2 libdns45 libdns58 libgconf2-4 libgconfmm-2.6-1c2 libglade2-0 libglademm-2.4-1c2a libglib2.0-0 libglib2.0-dev libglibmm-2.4-1c2a libgsf-1-114 libgssapi-krb5-2 libgstreamer-plugins-base0.10-0 libgstreamer-plugins-pulse0.10-0 libgstreamer0.10-0 libgtk2.0-0 libgtk2.0-bin libgtkmm-2.4-1c2a libidl0 libisccfg40 libisccfg50 libkrb5-3 libkrb53 libmms0 libneon27-gnutls libnss-mdns liborbit2 libpango1.0-0 libpangomm-1.4-1 libpq5 libpulse-dev libpulse-mainloop-glib0 librrd-cgi-image-perl librrd4 librrdp-perl librrds-perl librsvg2-2 librsvg2-common libsplashy1 libstdc++6-4.3-dev libsvn-perl libsvn1 linknx locales mc mpd mutt ncmpc nfs-common openssh-client openssh-server paman pavucontrol pavumeter php5 php5-cgi phpsysinfo pkg-config pulseaudio-module-hal python-rrd python-rrdtool python-subversion rrdtool samba samba-common setools shared-mime-info smbfs subversion subversion-tools syslog-ng uswsusp webmin-wiregate wg-patch wg-rootlock wiregated
Edit2: wenn ich das Script auf 2 Scripte aufteile, dann geht es wieder. Wenn ich das Script dann unter einem anderen Namen Speicher (z.B Bad Radio) Den Port und die Sound Device Namen ändere, dann geht das 2.te Script nicht. darf ich namen wie "my IP = " nur einmal in allen Scripten gebrauchen, oder kann ich die jedes mal wieder anders definieren`?
Kommentar