| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690 |
- ####################################################################################################
- #
- # 77_UWZ.pm
- #
- # (c) 2015-2016 Tobias D. Oestreicher
- #
- # Special thanks goes to comitters:
- # - Marko Oldenburg (leongaultier at gmail dot com)
- # - Hanjo (Forum) patch for sort by creation
- # - cb1 <kontakt@it-buchinger.de> patch Replace Iconv with native perl encode()
- #
- # Storm warnings from unwetterzentrale.de
- # inspired by 59_PROPLANTA.pm
- #
- # Copyright notice
- #
- # This script is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # The GNU General Public License can be found at
- # http://www.gnu.org/copyleft/gpl.html.
- # A copy is found in the text file GPL.txt and important notices to the license
- # from the author is found in LICENSE.txt distributed with these scripts.
- #
- # This script is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # This copyright notice MUST APPEAR in all copies of the script!
- #
- #
- #
- # $Id: 77_UWZ.pm 17646 2018-10-30 11:20:16Z CoolTux $
- #
- ####################################################################################################
- # also a thanks goes to hexenmeister
- ##############################################
- package main;
- use strict;
- use feature qw/say switch/;
- use warnings;
- no if $] >= 5.017011, warnings => 'experimental::lexical_subs','experimental::smartmatch';
- my $missingModul;
- eval "use LWP::UserAgent;1" or $missingModul .= "LWP::UserAgent ";
- eval "use LWP::Simple;1" or $missingModul .= "LWP::Simple ";
- eval "use HTTP::Request;1" or $missingModul .= "HTTP::Request ";
- eval "use HTML::Parser;1" or $missingModul .= "HTML::Parser ";
- eval "use JSON;1" or $missingModul .= "JSON ";
- eval "use Encode::Guess;1" or $missingModul .= "Encode::Guess ";
- require 'Blocking.pm';
- require 'HttpUtils.pm';
- use vars qw($readingFnAttributes);
- use vars qw(%defs);
- my @DEweekdays = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
- my @DEmonths = ( "Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
- my @NLweekdays = qw(zondag maandag dinsdag woensdag donderdag vrijdag zaterdag);
- my @NLmonths = ("januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december");
- my @FRweekdays = qw(dimanche lundi mardi mercredi jeudi vendredi samedi);
- my @FRmonths = ("janvier","février","mars","avril","mai","juin","juillet","août","september","octobre","novembre","decembre");
- my @ENweekdays = qw(sunday monday thuesday wednesday thursday friday saturday);
- my @ENmonths = ("January","February","March","April","Mäy","June","July","August","September","October","November","December");
- my $MODUL = "UWZ";
- my $version = "2.0.3";
- # Declare functions
- sub UWZ_Log($$$);
- sub UWZ_Map2Movie($$);
- sub UWZ_Map2Image($$);
- sub UWZ_Initialize($);
- sub UWZ_Define($$);
- sub UWZ_Undef($$);
- sub UWZ_Set($@);
- sub UWZ_Get($@);
- sub UWZ_GetCurrent($@);
- sub UWZ_GetCurrentHail($);
- sub UWZ_JSONAcquire($$);
- sub UWZ_Start($);
- sub UWZ_Aborted($);
- sub UWZ_Done($);
- sub UWZ_Run($);
- sub UWZAsHtml($;$);
- sub UWZAsHtmlLite($;$);
- sub UWZAsHtmlFP($;$);
- sub UWZAsHtmlMovie($$);
- sub UWZAsHtmlKarteLand($$);
- sub UWZ_GetSeverityColor($$);
- sub UWZ_GetUWZLevel($$);
- sub UWZSearchLatLon($$);
- sub UWZSearchAreaID($$);
- sub UWZ_IntervalAtWarnLevel($);
- my $countrycode = "DE";
- my $plz = "77777";
- my $uwz_alert_url = "http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=de&areaID=UWZ" . $countrycode . $plz;
- ########################################
- sub UWZ_Log($$$) {
- my ( $hash, $loglevel, $text ) = @_;
- my $xline = ( caller(0) )[2];
- my $xsubroutine = ( caller(1) )[3];
- my $sub = ( split( ':', $xsubroutine ) )[2];
- $sub =~ s/UWZ_//;
- my $instName = ( ref($hash) eq "HASH" ) ? $hash->{NAME} : $hash;
- Log3 $instName, $loglevel, "$MODUL $instName: $sub.$xline " . $text;
- }
- ########################################
- sub UWZ_Map2Movie($$) {
- my $uwz_movie_url = "http://www.meteocentrale.ch/uploads/media/";
- my ( $hash, $smap ) = @_;
- my $lmap;
- $smap=lc($smap);
- ## Euro
- $lmap->{'niederschlag-wolken'}=$uwz_movie_url.'UWZ_EUROPE_COMPLETE_niwofi.mp4';
- $lmap->{'stroemung'}=$uwz_movie_url.'UWZ_EUROPE_COMPLETE_stfi.mp4';
- $lmap->{'temperatur'}=$uwz_movie_url.'UWZ_EUROPE_COMPLETE_theta_E.mp4';
- ## DE
- $lmap->{'niederschlag-wolken-de'}=$uwz_movie_url.'UWZ_EUROPE_GERMANY_COMPLETE_niwofi.mp4';
- $lmap->{'stroemung-de'}=$uwz_movie_url.'UWZ_EUROPE_GERMANY_COMPLETE_stfi.mp4';
- ## CH
- $lmap->{'niederschlag-wolken-ch'}=$uwz_movie_url.'UWZ_EUROPE_SWITZERLAND_COMPLETE_niwofi.mp4';
- $lmap->{'stroemung-ch'}=$uwz_movie_url.'UWZ_EUROPE_SWITZERLAND_COMPLETE_stfi.mp4';
- ## AT
- $lmap->{'niederschlag-wolken-at'}=$uwz_movie_url.'UWZ_EUROPE_AUSTRIA_COMPLETE_niwofi.mp4';
- $lmap->{'stroemung-at'}=$uwz_movie_url.'UWZ_EUROPE_AUSTRIA_COMPLETE_stfi.mp4';
- ## NL
- $lmap->{'neerslag-wolken-nl'}=$uwz_movie_url.'UWZ_EUROPE_BENELUX_COMPLETE_niwofi.mp4';
- $lmap->{'stroming-nl'}=$uwz_movie_url.'UWZ_EUROPE_BENELUX_COMPLETE_stfi.mp4';
- ## FR
- $lmap->{'nuages-precipitations-fr'}=$uwz_movie_url.'UWZ_EUROPE_FRANCE_COMPLETE_niwofi.mp4';
- $lmap->{'courants-fr'}=$uwz_movie_url.'UWZ_EUROPE_FRANCE_COMPLETE_stfi.mp4';
- ## UK
- $lmap->{'clouds-precipitation-uk'}=$uwz_movie_url.'UWZ_EUROPE_GREATBRITAIN_COMPLETE_niwofi.mp4';
- $lmap->{'currents-uk'}=$uwz_movie_url.'UWZ_EUROPE_GREATBRITAIN_COMPLETE_stfi.mp4';
-
- ## IT
- $lmap->{'niederschlag-wolken-it'}=$uwz_movie_url.'UWZ_EUROPE_ITALY_COMPLETE_niwofi.mp4';
- $lmap->{'stroemung-it'}=$uwz_movie_url.'UWZ_EUROPE_ITALY_COMPLETE_stfi.mp4';
- return $lmap->{$smap};
- }
- ########################################
- sub UWZ_Map2Image($$) {
- my $uwz_de_url = "http://www.unwetterzentrale.de/images/map/";
- my $uwz_at_url = "http://unwetter.wetteralarm.at/images/map/";
- my $uwz_ch_url = "http://alarm.meteocentrale.ch/images/map/";
- my $uwz_en_url = "http://warnings.severe-weather-centre.co.uk/images/map/";
- my $uwz_li_url = "http://alarm.meteocentrale.li/images/map/";
- my $uwz_be_url = "http://alarm.meteo-info.be/images/map/";
- my $uwz_dk_url = "http://alarm.vejrcentral.dk/images/map/";
- my $uwz_fi_url = "http://vaaratasot.saa-varoitukset.fi/images/map/";
- my $uwz_fr_url = "http://alerte.vigilance-meteo.fr/images/map/";
- my $uwz_lu_url = "http://alarm.meteozentral.lu/images/map/";
- my $uwz_nl_url = "http://alarm.noodweercentrale.nl/images/map/";
- my $uwz_no_url = "http://advarsler.vaer-sentral.no/images/map/";
- my $uwz_pt_url = "http://avisos.centrometeo.pt/images/map/";
- my $uwz_se_url = "http://varningar.vader-alarm.se/images/map/";
- my $uwz_es_url = "http://avisos.alertas-tiempo.es/images/map/";
- my $uwz_it_url = "http://allarmi.meteo-allerta.it/images/map/";
- my ( $hash, $smap ) = @_;
- my $lmap;
-
- $smap=lc($smap);
- ## Euro
- $lmap->{'europa'}=$uwz_de_url.'europe_index.png';
- ## DE
- $lmap->{'deutschland'}=$uwz_de_url.'deutschland_index.png';
- $lmap->{'deutschland-small'}=$uwz_de_url.'deutschland_preview.png';
- $lmap->{'niedersachsen'}=$uwz_de_url.'niedersachsen_index.png';
- $lmap->{'bremen'}=$uwz_de_url.'niedersachsen_index.png';
- $lmap->{'bayern'}=$uwz_de_url.'bayern_index.png';
- $lmap->{'schleswig-holstein'}=$uwz_de_url.'schleswig_index.png';
- $lmap->{'hamburg'}=$uwz_de_url.'schleswig_index.png';
- $lmap->{'mecklenburg-vorpommern'}=$uwz_de_url.'meckpom_index.png';
- $lmap->{'sachsen'}=$uwz_de_url.'sachsen_index.png';
- $lmap->{'sachsen-anhalt'}=$uwz_de_url.'sachsenanhalt_index.png';
- $lmap->{'nordrhein-westfalen'}=$uwz_de_url.'nrw_index.png';
- $lmap->{'thueringen'}=$uwz_de_url.'thueringen_index.png';
- $lmap->{'rheinland-pfalz'}=$uwz_de_url.'rlp_index.png';
- $lmap->{'saarland'}=$uwz_de_url.'rlp_index.png';
- $lmap->{'baden-wuerttemberg'}=$uwz_de_url.'badenwuerttemberg_index.png';
- $lmap->{'hessen'}=$uwz_de_url.'hessen_index.png';
- $lmap->{'brandenburg'}=$uwz_de_url.'brandenburg_index.png';
- $lmap->{'berlin'}=$uwz_de_url.'brandenburg_index.png';
- ## AT
- $lmap->{'oesterreich'}=$uwz_at_url.'oesterreich_index.png';
- $lmap->{'burgenland'}=$uwz_at_url.'burgenland_index.png';
- $lmap->{'kaernten'}=$uwz_at_url.'kaernten_index.png';
- $lmap->{'niederoesterreich'}=$uwz_at_url.'niederoesterreich_index.png';
- $lmap->{'oberoesterreich'}=$uwz_at_url.'oberoesterreich_index.png';
- $lmap->{'salzburg'}=$uwz_at_url.'salzburg_index.png';
- $lmap->{'steiermark'}=$uwz_at_url.'steiermark_index.png';
- $lmap->{'tirol'}=$uwz_at_url.'tirol_index.png';
- $lmap->{'vorarlberg'}=$uwz_at_url.'vorarlberg_index.png';
- $lmap->{'wien'}=$uwz_at_url.'wien_index.png';
- ## CH
- $lmap->{'schweiz'}=$uwz_ch_url.'schweiz_index.png';
- $lmap->{'aargau'}=$uwz_ch_url.'aargau_index.png';
- $lmap->{'appenzell_ausserrhoden'}=$uwz_ch_url.'appenzell_ausserrhoden_index.png';
- $lmap->{'appenzell_innerrhoden'}=$uwz_ch_url.'appenzell_innerrhoden_index.png';
- $lmap->{'basel_landschaft'}=$uwz_ch_url.'basel_landschaft_index.png';
- $lmap->{'basel_stadt'}=$uwz_ch_url.'basel_stadt_index.png';
- $lmap->{'bern'}=$uwz_ch_url.'bern_index.png';
- $lmap->{'fribourg'}=$uwz_ch_url.'fribourg_index.png';
- $lmap->{'geneve'}=$uwz_ch_url.'geneve_index.png';
- $lmap->{'glarus'}=$uwz_ch_url.'glarus_index.png';
- $lmap->{'graubuenden'}=$uwz_ch_url.'graubuenden_index.png';
- $lmap->{'jura'}=$uwz_ch_url.'jura_index.png';
- $lmap->{'luzern'}=$uwz_ch_url.'luzern_index.png';
- $lmap->{'neuchatel'}=$uwz_ch_url.'neuchatel_index.png';
- $lmap->{'nidwalden'}=$uwz_ch_url.'nidwalden_index.png';
- $lmap->{'obwalden'}=$uwz_ch_url.'obwalden_index.png';
- $lmap->{'schaffhausen'}=$uwz_ch_url.'schaffhausen_index.png';
- $lmap->{'schwyz'}=$uwz_ch_url.'schwyz_index.png';
- $lmap->{'solothurn'}=$uwz_ch_url.'solothurn_index.png';
- $lmap->{'stgallen'}=$uwz_ch_url.'stgallen_index.png';
- $lmap->{'ticino'}=$uwz_ch_url.'ticino_index.png';
- $lmap->{'thurgau'}=$uwz_ch_url.'thurgau_index.png';
- $lmap->{'uri'}=$uwz_ch_url.'uri_index.png';
- $lmap->{'waadt'}=$uwz_ch_url.'waadt_index.png';
- $lmap->{'wallis'}=$uwz_ch_url.'wallis_index.png';
- $lmap->{'zug'}=$uwz_ch_url.'zug_index.png';
- $lmap->{'zuerich'}=$uwz_ch_url.'zuerich_index.png';
- ## LI
- $lmap->{'liechtenstein'}=$uwz_li_url.'liechtenstein_index.png';
- ## UK
- $lmap->{'unitedkingdom'}=$uwz_en_url.'unitedkingdom_index.png';
- $lmap->{'eastofengland'}=$uwz_en_url.'eastofengland_index.png';
- $lmap->{'eastmidlands'}=$uwz_en_url.'eastmidlands-index.png';
- $lmap->{'london'}=$uwz_en_url.'london-index.png';
- $lmap->{'northeastengland'}=$uwz_en_url.'northeastengland-index.png';
- $lmap->{'northernireland'}=$uwz_en_url.'northernireland-index.png';
- $lmap->{'northwestengland'}=$uwz_en_url.'northwestengland-index.png';
- $lmap->{'scotland'}=$uwz_en_url.'scotland-index.png';
- $lmap->{'southeastengland'}=$uwz_en_url.'southeastengland-index.png';
- $lmap->{'southwestengland'}=$uwz_en_url.'southwestengland-index.png';
- $lmap->{'wales'}=$uwz_en_url.'wales-index.png';
- $lmap->{'westmidlands'}=$uwz_en_url.'westmidlands-index.png';
- $lmap->{'yorkshireandthehumber'}=$uwz_en_url.'yorkshireandthehumber-index.png';
- ## BE
- $lmap->{'belgique'}=$uwz_be_url.'belgique_index.png';
- ## DK
- $lmap->{'denmark'}=$uwz_dk_url.'denmark_index.png';
- ## FI
- $lmap->{'finnland'}=$uwz_fi_url.'finnland_index.png';
- ## FR
- $lmap->{'france'}=$uwz_fr_url.'france_index.png';
- $lmap->{'alsace'}=$uwz_fr_url.'alsace_index.png';
- $lmap->{'aquitaine'}=$uwz_fr_url.'aquitaine_index.png';
- $lmap->{'basse-normandie'}=$uwz_fr_url.'basse-normandie_index.png';
- $lmap->{'bretagne'}=$uwz_fr_url.'bretagne_index.png';
- $lmap->{'champagne-ardenne'}=$uwz_fr_url.'champagne-ardenne_index.png';
- $lmap->{'franche-comte'}=$uwz_fr_url.'franche-comte_index.png';
- $lmap->{'haute-normandie'}=$uwz_fr_url.'haute-normandie_index.png';
- $lmap->{'ile-de-france'}=$uwz_fr_url.'ile-de-france_index.png';
- $lmap->{'languedoc-roussillon'}=$uwz_fr_url.'languedoc-roussillon_index.png';
- $lmap->{'limousin'}=$uwz_fr_url.'limousin_index.png';
- $lmap->{'lorraine'}=$uwz_fr_url.'lorraine_index.png';
- $lmap->{'bourgogne'}=$uwz_fr_url.'bourgogne_index.png';
- $lmap->{'centre'}=$uwz_fr_url.'centre_index.png';
- $lmap->{'midi-pyrenees'}=$uwz_fr_url.'midi-pyrenees_index.png';
- $lmap->{'nord-pas-de-calais'}=$uwz_fr_url.'nord-pas-de-calais_index.png';
- $lmap->{'pays-de-la-loire'}=$uwz_fr_url.'pays-de-la-loire_index.png';
- $lmap->{'picardie'}=$uwz_fr_url.'picardie_index.png';
- $lmap->{'poitou-charentes'}=$uwz_fr_url.'poitou-charentes_index.png';
- $lmap->{'provence-alpes-cote-dazur'}=$uwz_fr_url.'provence-alpes-cote-dazur_index.png';
- $lmap->{'rhone-alpes'}=$uwz_fr_url.'rhone-alpes_index.png';
- ## LU
- $lmap->{'letzebuerg'}=$uwz_lu_url.'letzebuerg_index.png';
- ## NL
- $lmap->{'nederland'}=$uwz_nl_url.'nederland_index.png';
- $lmap->{'drenthe'}=$uwz_nl_url.'drenthe_index.png';
- $lmap->{'flevoland'}=$uwz_nl_url.'flevoland_index.png';
- $lmap->{'friesland'}=$uwz_nl_url.'friesland_index.png';
- $lmap->{'gelderland'}=$uwz_nl_url.'gelderland_index.png';
- $lmap->{'groningen'}=$uwz_nl_url.'groningen_index.png';
- $lmap->{'limburg'}=$uwz_nl_url.'limburg_index.png';
- $lmap->{'noordbrabant'}=$uwz_nl_url.'noordbrabant_index.png';
- $lmap->{'noordholland'}=$uwz_nl_url.'noordholland_index.png';
- $lmap->{'overijssel'}=$uwz_nl_url.'overijssel_index.png';
- $lmap->{'utrecht'}=$uwz_nl_url.'utrecht_index.png';
- $lmap->{'zeeland'}=$uwz_nl_url.'zeeland_index.png';
- $lmap->{'zuidholland'}=$uwz_nl_url.'zuidholland_index.png';
- ## NO
- $lmap->{'norwegen'}=$uwz_no_url.'norwegen_index.png';
- ## PT
- $lmap->{'portugal'}=$uwz_pt_url.'portugal_index.png';
- ## SE
- $lmap->{'sverige'}=$uwz_se_url.'sverige_index.png';
- ## ES
- $lmap->{'espana'}=$uwz_es_url.'espana_index.png';
-
- ## IT
- $lmap->{'italia'}=$uwz_it_url.'italia_index.png';
- $lmap->{'valledaosta'}=$uwz_it_url.'valledaosta_index.png';
- $lmap->{'piemonte'}=$uwz_it_url.'piemonte_index.png';
- $lmap->{'lombardia'}=$uwz_it_url.'lombardia_index.png';
- $lmap->{'trentinoaltoadige'}=$uwz_it_url.'trentinoaltoadige_index.png';
- $lmap->{'friuliveneziagiulia'}=$uwz_it_url.'friuliveneziagiulia_index.png';
- $lmap->{'veneto'}=$uwz_it_url.'veneto_index.png';
- $lmap->{'liguria'}=$uwz_it_url.'liguria_index.png';
- $lmap->{'emiliaromagna'}=$uwz_it_url.'emiliaromagna_index.png';
- $lmap->{'toscana'}=$uwz_it_url.'toscana_index.png';
- $lmap->{'marche'}=$uwz_it_url.'marche_index.png';
- $lmap->{'umbria'}=$uwz_it_url.'umbria_index.png';
- $lmap->{'lazio'}=$uwz_it_url.'lazio_index.png';
- $lmap->{'molise'}=$uwz_it_url.'molise_index.png';
- $lmap->{'abruzzo'}=$uwz_it_url.'abruzzo_index.png';
- $lmap->{'campania'}=$uwz_it_url.'campania_index.png';
- $lmap->{'puglia'}=$uwz_it_url.'puglia_index.png';
- $lmap->{'basilicata'}=$uwz_it_url.'basilicata_index.png';
- $lmap->{'calabria'}=$uwz_it_url.'calabria_index.png';
- $lmap->{'sicilia'}=$uwz_it_url.'sicilia_index.png';
- $lmap->{'sardegna'}=$uwz_it_url.'sardegna_index.png';
- ## Isobaren
- $lmap->{'isobaren1'}="http://www.unwetterzentrale.de/images/icons/UWZ_ISO_00.jpg";
- $lmap->{'isobaren2'}="http://www.wetteralarm.at/uploads/pics/UWZ_EURO_ISO_GER_00.jpg";
- $lmap->{'isobaren3'}="http://www.severe-weather-centre.co.uk/uploads/pics/UWZ_EURO_ISO_ENG_00.jpg";
- return $lmap->{$smap};
- }
- ###################################
- sub UWZ_Initialize($) {
- my ($hash) = @_;
- $hash->{DefFn} = "UWZ_Define";
- $hash->{UndefFn} = "UWZ_Undef";
- $hash->{SetFn} = "UWZ_Set";
- $hash->{GetFn} = "UWZ_Get";
- $hash->{AttrList} = "download:0,1 ".
- "savepath ".
- "maps ".
- "humanreadable:0,1 ".
- "htmlattr ".
- "htmltitle ".
- "htmltitleclass ".
- "htmlsequence:ascending,descending ".
- "lang ".
- "sort_readings_by:severity,start,creation ".
- "localiconbase ".
- "intervalAtWarnLevel ".
- "disable:1 ".
- $readingFnAttributes;
-
- foreach my $d(sort keys %{$modules{UWZ}{defptr}}) {
- my $hash = $modules{UWZ}{defptr}{$d};
- $hash->{VERSION} = $version;
- }
- }
- ###################################
- sub UWZ_Define($$) {
- my ( $hash, $def ) = @_;
- my $name = $hash->{NAME};
- my $lang = "";
- my @a = split( "[ \t][ \t]*", $def );
-
- return "Error: Perl moduls ".$missingModul."are missing on this system" if( $missingModul );
- return "Wrong syntax: use define <name> UWZ <CountryCode> <PLZ> <Interval> " if (int(@a) != 5 and ((lc $a[2]) ne "search"));
- if ((lc $a[2]) ne "search") {
- $hash->{STATE} = "Initializing";
- $hash->{CountryCode} = $a[2];
- $hash->{PLZ} = $a[3];
-
- ## URL by CountryCode
- my $URL_language="en";
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $URL_language="de";
- }
- if ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $URL_language="nl";
- }
- if ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $URL_language="fr";
- }
-
- $hash->{URL} = "http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=" . $URL_language . "&areaID=UWZ" . $a[2] . $a[3];
-
-
- $hash->{fhem}{LOCAL} = 0;
- $hash->{INTERVAL} = $a[4];
- $hash->{INTERVALWARN} = 0;
- $hash->{VERSION} = $version;
-
- RemoveInternalTimer($hash);
-
- #Get first data after 12 seconds
- InternalTimer( gettimeofday() + 12, "UWZ_Start", $hash, 0 ) if ((lc $hash->{CountryCode}) ne "search");
-
- } else {
- $hash->{STATE} = "Search-Mode";
- $hash->{CountryCode} = uc $a[2];
- $hash->{VERSION} = $version;
- }
-
- $modules{UWZ}{defptr}{$hash->{PLZ}} = $hash;
-
- return undef;
- }
- #####################################
- sub UWZ_Undef($$) {
- my ( $hash, $arg ) = @_;
- RemoveInternalTimer( $hash );
- BlockingKill( $hash->{helper}{RUNNING_PID} ) if ( defined( $hash->{helper}{RUNNING_PID} ) );
-
- delete($modules{UWZ}{defptr}{$hash->{PLZ}});
-
- return undef;
- }
- #####################################
- sub UWZ_Set($@) {
- my ( $hash, @a ) = @_;
- my $name = $hash->{NAME};
- my $reUINT = '^([\\+]?\\d+)$';
- my $usage = "Unknown argument $a[1], choose one of update:noArg " if ( (lc $hash->{CountryCode}) ne "search" );
- return $usage if ( @a < 2 );
- my $cmd = lc( $a[1] );
-
- given ($cmd)
- {
- when ("?")
- {
- return $usage;
- }
-
- when ("update")
- {
- UWZ_Log $hash, 4, "set command: " . $a[1];
- $hash->{fhem}{LOCAL} = 1;
- UWZ_Start($hash);
- $hash->{fhem}{LOCAL} = 0;
- }
-
- default
- {
- return $usage;
- }
- }
-
- return;
- }
- sub UWZ_Get($@) {
- my ( $hash, @a ) = @_;
- my $name = $hash->{NAME};
-
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- my $usage = "Unknown argument $a[1], choose one of Sturm:noArg Schneefall:noArg Regen:noArg Extremfrost:noArg Waldbrand:noArg Gewitter:noArg Glaette:noArg Hitze:noArg Glatteisregen:noArg Bodenfrost:noArg Hagel:noArg ";
-
- return $usage if ( @a < 2 );
-
- if ($a[1] =~ /^Sturm/) { UWZ_GetCurrent($hash,2); }
- elsif ($a[1] =~ /^Schneefall/) { UWZ_GetCurrent($hash,3); }
- elsif ($a[1] =~ /^Regen/) { UWZ_GetCurrent($hash,4); }
- elsif ($a[1] =~ /^Extremfrost/) { UWZ_GetCurrent($hash,5); }
- elsif ($a[1] =~ /^Waldbrand/) { UWZ_GetCurrent($hash,6); }
- elsif ($a[1] =~ /^Gewitter/) { UWZ_GetCurrent($hash,7); }
- elsif ($a[1] =~ /^Glaette/) { UWZ_GetCurrent($hash,8); }
- elsif ($a[1] =~ /^Hitze/) { UWZ_GetCurrent($hash,9); }
- elsif ($a[1] =~ /^Glatteisregen/) { UWZ_GetCurrent($hash,10); }
- elsif ($a[1] =~ /^Bodenfrost/) { UWZ_GetCurrent($hash,11); }
- elsif ($a[1] =~ /^Hagel/) { UWZ_GetCurrentHail($hash); }
- else { return $usage; }
- }
- elsif ($hash->{CountryCode} ~~ [ 'NL' ] ) {
- my $usage = "Unknown argument $a[1], choose one of storm:noArg sneeuw:noArg regen:noArg strenge-vorst:noArg bosbrand:noArg onweer:noArg gladheid:noArg hitte:noArg ijzel:noArg grondvorst:noArg hagel:noArg ";
- return $usage if ( @a < 2 );
- if ($a[1] =~/^storm/) { UWZ_GetCurrent($hash,2); }
- elsif ($a[1] =~/^sneeuw/) { UWZ_GetCurrent($hash,3); }
- elsif ($a[1] =~/^regen/) { UWZ_GetCurrent($hash,4); }
- elsif ($a[1] =~/^strenge-vorst/) { UWZ_GetCurrent($hash,5); }
- elsif ($a[1] =~/^bosbrand/) { UWZ_GetCurrent($hash,6); }
- elsif ($a[1] =~/^onweer/) { UWZ_GetCurrent($hash,7); }
- elsif ($a[1] =~/^gladheid/) { UWZ_GetCurrent($hash,8); }
- elsif ($a[1] =~/^hitte/) { UWZ_GetCurrent($hash,9); }
- elsif ($a[1] =~/^ijzel/) { UWZ_GetCurrent($hash,10); }
- elsif ($a[1] =~/^grondvorst/) { UWZ_GetCurrent($hash,11); }
- elsif ($a[1] =~/^hagel/) { UWZ_GetCurrentHail($hash); }
- else { return $usage; }
- }
- elsif ($hash->{CountryCode} ~~ [ 'FR' ] ) {
- my $usage = "Unknown argument $a[1], choose one of tempete:noArg neige:noArg pluie:noArg strenge-vorst:noArg incendie-de-foret:noArg orage:noArg glissange:noArg canicule:noArg verglas:noArg grondvorst:noArg grele:noArg ";
- return $usage if ( @a < 2 );
- if ($a[1] =~/^tempete/) { UWZ_GetCurrent($hash,2); }
- elsif ($a[1] =~/^neige/) { UWZ_GetCurrent($hash,3); }
- elsif ($a[1] =~/^pluie/) { UWZ_GetCurrent($hash,4); }
- elsif ($a[1] =~/^température/) { UWZ_GetCurrent($hash,5); }
- elsif ($a[1] =~/^feu-de-forêt/) { UWZ_GetCurrent($hash,6); }
- elsif ($a[1] =~/^orage/) { UWZ_GetCurrent($hash,7); }
- elsif ($a[1] =~/^route-glissante/) { UWZ_GetCurrent($hash,8); }
- elsif ($a[1] =~/^chaleur/) { UWZ_GetCurrent($hash,9); }
- elsif ($a[1] =~/^pluie-de-verglas/) { UWZ_GetCurrent($hash,10); }
- elsif ($a[1] =~/^gelée/) { UWZ_GetCurrent($hash,11); }
- elsif ($a[1] =~/^grêle/) { UWZ_GetCurrentHail($hash); }
- else { return $usage; }
- }
-
- elsif ( (lc $hash->{CountryCode}) eq 'search' ) {
- my $usage = "Unknown argument $a[1], choose one of SearchAreaID ";
-
- return $usage if ( @a < 3 );
-
- if ($a[1] =~ /^SearchAreaID/) { UWZSearchLatLon($name, $a[2]); }
- elsif ($a[1] =~ /^AreaID/) { my @splitparam = split(/,/,$a[2]); UWZSearchAreaID($splitparam[0],$splitparam[1]); }
- else { return $usage; }
-
- } else {
- my $usage = "Unknown argument $a[1], choose one of storm:noArg snow:noArg rain:noArg extremfrost:noArg forest-fire:noArg thunderstorms:noArg glaze:noArg heat:noArg glazed-rain:noArg soil-frost:noArg hail:noArg ";
-
- return $usage if ( @a < 2 );
-
- if ($a[1] =~ /^storm/) { UWZ_GetCurrent($hash,2); }
- elsif ($a[1] =~ /^snow/) { UWZ_GetCurrent($hash,3); }
- elsif ($a[1] =~ /^rain/) { UWZ_GetCurrent($hash,4); }
- elsif ($a[1] =~ /^extremfrost/) { UWZ_GetCurrent($hash,5); }
- elsif ($a[1] =~ /^forest-fire/) { UWZ_GetCurrent($hash,6); }
- elsif ($a[1] =~ /^thunderstorms/) { UWZ_GetCurrent($hash,7); }
- elsif ($a[1] =~ /^glaze/) { UWZ_GetCurrent($hash,8); }
- elsif ($a[1] =~ /^heat/) { UWZ_GetCurrent($hash,9); }
- elsif ($a[1] =~ /^glazed-rain/) { UWZ_GetCurrent($hash,10); }
- elsif ($a[1] =~ /^soil-frost/) { UWZ_GetCurrent($hash,11); }
- elsif ($a[1] =~ /^hail/) { UWZ_GetCurrentHail($hash); }
- else { return $usage; }
- }
- }
- #####################################
- sub UWZ_GetCurrent($@) {
- my ( $hash, @a ) = @_;
- my $name = $hash->{NAME};
- my $out;
- my $curTimestamp = time();
- if ( ReadingsVal($name,"WarnCount", 0) eq 0 ) {
- $out = "inactive";
- } else {
- for(my $i= 0;$i < ReadingsVal($name,"WarnCount", 0);$i++) {
- if ( (ReadingsVal($name,"Warn_".$i."_Start","") le $curTimestamp) && (ReadingsVal($name,"Warn_".$i."_End","") ge $curTimestamp) && (ReadingsVal($name,"Warn_".$i."_Type","") eq $a[0]) ) {
- $out= "active";
- last;
- } else {
- $out = "inactive";
- }
- }
- }
-
- return $out;
- }
- #####################################
- sub UWZ_GetCurrentHail($) {
- my ( $hash ) = @_;
- my $name = $hash->{NAME};
- my $out;
- my $curTimestamp = time();
-
- if ( ReadingsVal($name,"WarnCount", 0) eq 0 ) {
- $out = "inactive";
- } else {
- for(my $i= 0;$i < ReadingsVal($name,"WarnCount", 0);$i++) {
- if ( (ReadingsVal($name,"Warn_".$i."_Start","") le $curTimestamp) && (ReadingsVal($name,"Warn_".$i."_End","") ge $curTimestamp) && (ReadingsVal($name,"Warn_".$i."_Hail","") eq 1) ) {
- $out= "active";
- last;
- } else {
- $out= "inactive";
- }
- }
- }
- return $out;
- }
- #####################################
- sub UWZ_JSONAcquire($$) {
- my ($hash, $URL) = @_;
- my $name = $hash->{NAME};
-
- return unless (defined($hash->{NAME}));
-
- UWZ_Log $hash, 4, "Start capturing of $URL";
- my $err_log = "";
- my $agent = LWP::UserAgent->new( env_proxy => 1, keep_alive => 1, protocols_allowed => ['http'], timeout => 10 );
- my $request = HTTP::Request->new( GET => $URL );
- my $response = $agent->request($request);
- $err_log = "Can't get $URL -- " . $response->status_line unless( $response->is_success );
-
- if ( $err_log ne "" ) {
- readingsSingleUpdate($hash, "lastConnection", $response->status_line, 1);
- UWZ_Log $hash, 1, "Error: $err_log";
- return "Error|Error " . $response->status_line;
- }
- UWZ_Log $hash, 4, length($response->content)." characters captured";
- return $response->content;
- }
- #####################################
- sub UWZ_Start($) {
- my ($hash) = @_;
- my $name = $hash->{NAME};
-
- return unless (defined($hash->{NAME}));
-
- if(!$hash->{fhem}{LOCAL} && $hash->{INTERVAL} > 0) { # set up timer if automatically call
-
- RemoveInternalTimer( $hash );
- InternalTimer(gettimeofday() + $hash->{INTERVAL}, "UWZ_Start", $hash, 1 );
- return undef if( IsDisabled($name) );
- readingsSingleUpdate($hash,'currentIntervalMode','normal',0);
- }
- ## URL by CountryCode
- my $URL_language="en";
- if (AttrVal($hash->{NAME}, "lang", undef) ) {
- $URL_language=AttrVal($hash->{NAME}, "lang", "");
- } else {
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $URL_language="de";
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $URL_language="nl";
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $URL_language="fr";
- }
- }
- $hash->{URL} = "http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=" . $URL_language . "&areaID=UWZ" . $hash->{CountryCode} . $hash->{PLZ};
-
-
- if ( not defined( $hash->{URL} ) ) {
- UWZ_Log $hash, 3, "missing URL";
- return;
- }
-
- $hash->{helper}{RUNNING_PID} =
- BlockingCall(
- "UWZ_Run", # callback worker task
- $name, # name of the device
- "UWZ_Done", # callback result method
- 120, # timeout seconds
- "UWZ_Aborted", # callback for abortion
- $hash ); # parameter for abortion
- }
- #####################################
- sub UWZ_Aborted($) {
- my ($hash) = @_;
- delete( $hash->{helper}{RUNNING_PID} );
- }
- #####################################
- # asyncronous callback by blocking
- sub UWZ_Done($) {
- my ($string) = @_;
- return unless ( defined($string) );
-
- # all term are separated by "|" , the first is the name of the instance
- my ( $name, %values ) = split( "\\|", $string );
- my $hash = $defs{$name};
- return unless ( defined($hash->{NAME}) );
-
- # delete the marker for RUNNING_PID process
- delete( $hash->{helper}{RUNNING_PID} );
-
- # UnWetterdaten speichern
- readingsBeginUpdate($hash);
- if ( defined $values{Error} ) {
-
- readingsBulkUpdate( $hash, "lastConnection", $values{Error} );
-
- } else {
- while (my ($rName, $rValue) = each(%values) ) {
- readingsBulkUpdate( $hash, $rName, $rValue );
- UWZ_Log $hash, 5, "reading:$rName value:$rValue";
- }
-
- if (keys %values > 0) {
- my $newState;
- UWZ_Log $hash, 4, "Delete old Readings";
- for my $Counter ($values{WarnCount} .. 9) {
- CommandDeleteReading(undef, "$hash->{NAME} Warn_${Counter}_.*");
- }
- if (defined $values{WarnCount}) {
- # Message by CountryCode
-
- $newState = "Warnings: " . $values{WarnCount};
- $newState = "Warnungen: " . $values{WarnCount} if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] );
- $newState = "Aantal waarschuwingen: " . $values{WarnCount} if ( $hash->{CountryCode} ~~ [ 'NL' ] );
- $newState = "Avertissements: " . $values{WarnCount} if ( $hash->{CountryCode} ~~ [ 'FR' ] );
- # end Message by CountryCode
- } else {
- $newState = "Error: Could not capture all data. Please check CountryCode and PLZ.";
- }
- readingsBulkUpdate($hash, "state", $newState);
- readingsBulkUpdate( $hash, "lastConnection", keys( %values )." values captured in ".$values{durationFetchReadings}." s" );
- UWZ_Log $hash, 4, keys( %values )." values captured";
-
- } else {
-
- readingsBulkUpdate( $hash, "lastConnection", "no data found" );
- UWZ_Log $hash, 1, "No data found. Check city name or URL.";
-
- }
- }
-
- readingsEndUpdate( $hash, 1 );
-
- if( AttrVal($name,'intervalAtWarnLevel','') ne '' and ReadingsVal($name,'WarnUWZLevel',0) > 1 ) {
-
- UWZ_IntervalAtWarnLevel($hash);
- UWZ_Log $hash, 5, "run Sub IntervalAtWarnLevel";
- }
- }
- #####################################
- sub UWZ_Run($) {
- my ($name) = @_;
- my $ptext=$name;
- my $UWZ_download;
- my $UWZ_savepath;
- my $UWZ_humanreadable;
-
- return unless ( defined($name) );
-
- my $hash = $defs{$name};
- return unless (defined($hash->{NAME}));
-
- my $readingStartTime = time();
- my $attrdownload = AttrVal( $name, 'download','');
- my $attrsavepath = AttrVal( $name, 'savepath','');
- my $maps2fetch = AttrVal( $name, 'maps','');
-
- ## begin redundant Reading switch
- my $attrhumanreadable = AttrVal( $name, 'humanreadable','');
- ## end redundant Reading switch
-
- # preset download
- if ($attrdownload eq "") {
-
- $UWZ_download = 0;
- } else {
-
- $UWZ_download = $attrdownload;
- }
-
- # preset savepath
- if ($attrsavepath eq "") {
-
- $UWZ_savepath = "/tmp/";
- } else {
-
- $UWZ_savepath = $attrsavepath;
- }
-
- # preset humanreadable
- if ($attrhumanreadable eq "") {
-
- $UWZ_humanreadable = 0;
- } else {
-
- $UWZ_humanreadable = $attrhumanreadable;
- }
- if ( $UWZ_download == 1 ) {
- if ( ! defined($maps2fetch) ) { $maps2fetch = "deutschland"; }
- UWZ_Log $hash, 4, "Maps2Fetch : ".$maps2fetch;
- my @maps = split(' ', $maps2fetch);
- my $uwz_de_url = "http://www.unwetterzentrale.de/images/map/";
-
- foreach my $smap (@maps) {
- UWZ_Log $hash, 4, "Download map : ".$smap;
- my $img = UWZ_Map2Image($hash,$smap);
-
- if (!defined($img) ) { $img=$uwz_de_url.'deutschland_index.png'; }
- my $code = getstore($img, $UWZ_savepath.$smap.".png");
-
- if($code == 200) {
- UWZ_Log $hash, 4, "Successfully downloaded map ".$smap;
-
- } else {
-
- UWZ_Log $hash, 3, "Failed to download map (".$img.")";
- }
- }
- }
- # acquire the json-response
- my $response = UWZ_JSONAcquire($hash,$hash->{URL});
- UWZ_Log $hash, 5, length($response)." characters captured";
- my $uwz_warnings = JSON->new->ascii->decode($response);
- my $enc = guess_encoding($uwz_warnings);
- my $uwz_warncount = scalar(@{ $uwz_warnings->{'results'} });
- UWZ_Log $hash, 4, "There are ".$uwz_warncount." warnings active";
- my $sortby = AttrVal( $name, 'sort_readings_by',"" );
- my @sorted;
-
- if ( $sortby eq "creation" ) {
- UWZ_Log $hash, 4, "Sorting by creation";
- @sorted = sort { $b->{payload}{creation} <=> $a->{payload}{creation} } @{ $uwz_warnings->{'results'} };
-
- } elsif ( $sortby ne "severity" ) {
- UWZ_Log $hash, 4, "Sorting by dtgStart";
- @sorted = sort { $a->{dtgStart} <=> $b->{dtgStart} } @{ $uwz_warnings->{'results'} };
-
- } else {
- UWZ_Log $hash, 4, "Sorting by severity";
- @sorted = sort { $a->{severity} <=> $b->{severity} } @{ $uwz_warnings->{'results'} };
- }
- my $message;
- my $i=0;
-
- my %typenames = ( "1" => "unknown", # <===== FIX HERE
- "2" => "sturm",
- "3" => "schnee",
- "4" => "regen",
- "5" => "temperatur",
- "6" => "waldbrand",
- "7" => "gewitter",
- "8" => "strassenglaette",
- "9" => "temperatur", # 9 = hitzewarnung
- "10" => "glatteisregen",
- "11" => "temperatur" ); # 11 = bodenfrost
- my %typenames_de_str= ( "1" => "unknown", # <===== FIX HERE
- "2" => "Sturm",
- "3" => "Schnee",
- "4" => "Regen",
- "5" => "Temperatur",
- "6" => "Waldbrand",
- "7" => "Gewitter",
- "8" => "Strassenglaette",
- "9" => "Hitze", # 9 = hitzewarnung
- "10" => "Glatteisregen",
- "11" => "Bodenfrost" ); # 11 = bodenfrost
- my %typenames_nl_str= ( "1" => "unknown", # <===== FIX HERE
- "2" => "storm",
- "3" => "sneeuw",
- "4" => "regen",
- "5" => "temperatuur",
- "6" => "bosbrand",
- "7" => "onweer",
- "8" => "gladde wegen",
- "9" => "hitte", # 9 = hitzewarnung
- "10" => "ijzel",
- "11" => "grondvorst" ); # 11 = bodenfrost
- my %typenames_fr_str= ( "1" => "unknown", # <===== FIX HERE
- "2" => "tempete",
- "3" => "neige",
- "4" => "pluie",
- "5" => "températur",
- "6" => "feu de forêt",
- "7" => "orage",
- "8" => "route glissante",
- "9" => "chaleur", # 9 = hitzewarnung
- "10" => "pluie de verglas",
- "11" => "gelée" ); # 11 = bodenfrost
- my %typenames_en_str= ( "1" => "unknown", # <===== FIX HERE
- "2" => "storm",
- "3" => "snow",
- "4" => "rain",
- "5" => "temperatur",
- "6" => "forest fire",
- "7" => "thunderstorms",
- "8" => "slippery road",
- "9" => "heat", # 9 = hitzewarnung
- "10" => "black ice rain",
- "11" => "soil frost" ); # 11 = bodenfrost
-
- my %severitycolor = ( "0" => "green",
- "1" => "unknown", # <===== FIX HERE
- "2" => "unknown", # <===== FIX HERE
- "3" => "unknown", # <===== FIX HERE
- "4" => "orange",
- "5" => "unknown", # <===== FIX HERE
- "6" => "unknown", # <===== FIX HERE
- "7" => "orange",
- "8" => "gelb",
- "9" => "gelb", # <===== FIX HERE
- "10" => "orange",
- "11" => "rot",
- "12" => "violett" );
- my @uwzmaxlevel;
- foreach my $single_warning (@sorted) {
- push @uwzmaxlevel, UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'});
- UWZ_Log $hash, 4, "Warn_".$i."_EventID: ".$single_warning->{'payload'}{'id'};
- $message .= "Warn_".$i."_EventID|".$single_warning->{'payload'}{'id'}."|";
- my $chopcreation = substr($single_warning->{'payload'}{'creation'},0,10);
- $chopcreation = $chopcreation;
- UWZ_Log $hash, 4, "Warn_".$i."_Creation: ".$chopcreation;
- $message .= "Warn_".$i."_Creation|".$chopcreation."|";
- UWZ_Log $hash, 4, "Warn_".$i."_Type: ".$single_warning->{'type'};
- $message .= "Warn_".$i."_Type|".$single_warning->{'type'}."|";
-
- UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel: ".UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'});
- $message .= "Warn_".$i."_uwzLevel|".UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'})."|";
- UWZ_Log $hash, 4, "Warn_".$i."_Severity: ".$single_warning->{'severity'};
- $message .= "Warn_".$i."_Severity|".$single_warning->{'severity'}."|";
-
- UWZ_Log $hash, 4, "Warn_".$i."_Start: ".$single_warning->{'dtgStart'};
- $message .= "Warn_".$i."_Start|".$single_warning->{'dtgStart'}."|";
-
- UWZ_Log $hash, 4, "Warn_".$i."_End: ".$single_warning->{'dtgEnd'};
- $message .= "Warn_".$i."_End|".$single_warning->{'dtgEnd'}."|";
- ## Begin of redundant Reading
- if ( $UWZ_humanreadable eq 1 ) {
- UWZ_Log $hash, 4, "Warn_".$i."_Start_Date: ".strftime("%d.%m.%Y", localtime($single_warning->{'dtgStart'}));
- $message .= "Warn_".$i."_Start_Date|".strftime("%d.%m.%Y", localtime($single_warning->{'dtgStart'}))."|";
-
- UWZ_Log $hash, 4, "Warn_".$i."_Start_Time: ".strftime("%H:%M", localtime($single_warning->{'dtgStart'}));
- $message .= "Warn_".$i."_Start_Time|".strftime("%H:%M", localtime($single_warning->{'dtgStart'}))."|";
-
- UWZ_Log $hash, 4, "Warn_".$i."_End_Date: ".strftime("%d.%m.%Y", localtime($single_warning->{'dtgEnd'}));
- $message .= "Warn_".$i."_End_Date|".strftime("%d.%m.%Y", localtime($single_warning->{'dtgEnd'}))."|";
-
- UWZ_Log $hash, 4, "Warn_".$i."_End_Time: ".strftime("%H:%M", localtime($single_warning->{'dtgEnd'}));
- $message .= "Warn_".$i."_End_Time|".strftime("%H:%M", localtime($single_warning->{'dtgEnd'}))."|";
- UWZ_Log $hash, 4, "Warn_".$i."_Creation_Date: ".strftime("%d.%m.%Y", localtime($chopcreation));
- $message .= "Warn_".$i."_Creation_Date|".strftime("%d.%m.%Y", localtime($chopcreation))."|";
- UWZ_Log $hash, 4, "Warn_".$i."_Creation_Time: ".strftime("%H:%M", localtime($chopcreation));
- $message .= "Warn_".$i."_Creation_Time|".strftime("%H:%M", localtime($chopcreation))."|";
-
- # Begin Language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- UWZ_Log $hash, 4, "Warn_".$i."_Type_Str: ".$typenames_de_str{ $single_warning->{'type'} };
- $message .= "Warn_".$i."_Type_Str|".$typenames_de_str{ $single_warning->{'type'} }."|";
- my %uwzlevelname = ( "0" => "Stufe Grün (keine Warnung)",
- "1" => "Stufe Dunkelgrün (Wetterhinweise)",
- "2" => "Stufe Gelb (Vorwarnung für Unwetterwarnung)",
- "3" => "Warnstufe Orange (Unwetterwarnung)",
- "4" => "Warnstufe Rot (Unwetterwarnung)",
- "5" => "Warnstufe Violett (Unwetterwarnung)");
- UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel_Str: ".$uwzlevelname{ UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}) };
- $message .= "Warn_".$i."_uwzLevel_Str|".$uwzlevelname{ UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}) }."|";
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- UWZ_Log $hash, 4, "Warn_".$i."_Type_Str: ".$typenames_nl_str{ $single_warning->{'type'} };
- $message .= "Warn_".$i."_Type_Str|".$typenames_nl_str{ $single_warning->{'type'} }."|";
- my %uwzlevelname = ( "0" => "niveau groen (geen waarschuwingen)",
- "1" => "niveau donkergroen (weermelding)",
- "2" => "niveau geel (voorwaarschuwing)",
- "3" => "waarschuwingsniveau oranje (waarschuwing voor matig noodweer)",
- "4" => "waarschuwingsniveau rood (waarschuwing voor zwaar noodweer)",
- "5" => "waarschuwingsniveau violet (waarschuwing voor zeer zwaar noodweer)");
- UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel_Str: ".$uwzlevelname{ UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}) };
- $message .= "Warn_".$i."_uwzLevel_Str|".$uwzlevelname{ UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}) }."|";
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- UWZ_Log $hash, 4, "Warn_".$i."_Type_Str: ".$typenames_nl_str{ $single_warning->{'type'} };
- $message .= "Warn_".$i."_Type_Str|".$typenames_nl_str{ $single_warning->{'type'} }."|";
- my %uwzlevelname = ( "0" => "niveau vert (aucune alerte)",
- "1" => "niveau vert foncé (indication météo)",
- "2" => "niveau jaune (pré-alerte)",
- "3" => "niveau d' alerte orange (alerte météo)",
- "4" => "niveau d' alerte rouge (alerte météo)",
- "5" => "niveau d' alerte violet (alerte météo)");
- UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel_Str: ".$uwzlevelname{ UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}) };
- $message .= "Warn_".$i."_uwzLevel_Str|".$uwzlevelname{ UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}) }."|";
- } else {
- UWZ_Log $hash, 4, "Warn_".$i."_Type_Str: ".$typenames_en_str{ $single_warning->{'type'} };
- $message .= "Warn_".$i."_Type_Str|".$typenames_en_str{ $single_warning->{'type'} }."|";
- my %uwzlevelname = ( "0" => "level green (no warnings)",
- "1" => "level dark green (weather notice)",
- "2" => "level yellow (severe weather watch)",
- "3" => "Alert level Orange",
- "4" => "Alert level Red",
- "5" => "Alert level Violet");
- UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel_Str: ".$uwzlevelname{ UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}) };
- $message .= "Warn_".$i."_uwzLevel_Str|".$uwzlevelname{ UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}) }."|";
- }
- }
- ## End of redundant Reading
-
- UWZ_Log $hash, 4, "Warn_".$i."_levelName: ".$single_warning->{'payload'}{'levelName'};
- $message .= "Warn_".$i."_levelName|".$single_warning->{'payload'}{'levelName'}."|";
-
- UWZ_Log $hash, 4, "Warn_".$i."_AltitudeMin: ".$enc->decode($single_warning->{'payload'}{'altMin'});
-
- $message .= "Warn_".$i."_AltitudeMin|".encode("UTF-8", decode("iso-8859-1", $single_warning->{'payload'}{'altMin'}))."|";
- UWZ_Log $hash, 4, "Warn_".$i."_AltitudeMax: ".$enc->decode($single_warning->{'payload'}{'altMax'});
- $message .= "Warn_".$i."_AltitudeMax|".encode("UTF-8", decode("iso-8859-1", $single_warning->{'payload'}{'altMax'}))."|";
- my $uclang = "EN";
- if (AttrVal( $name, 'lang',undef) ) {
- $uclang = uc AttrVal( $name, 'lang','');
- } else {
- # Begin Language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $uclang = "DE";
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $uclang = "NL"
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $uclang = "FR"
- } else {
- $uclang = "EN";
- }
- }
- UWZ_Log $hash, 4, "Warn_".$i."_LongText: ".$enc->decode($single_warning->{'payload'}{'translationsLongText'}{$uclang});
- $message .= "Warn_".$i."_LongText|".encode("UTF-8", decode("iso-8859-1", $single_warning->{'payload'}{'translationsLongText'}{$uclang}))."|";
-
- UWZ_Log $hash, 4, "Warn_".$i."_ShortText: ".$enc->decode($single_warning->{'payload'}{'translationsShortText'}{$uclang});
- $message .= "Warn_".$i."_ShortText|".encode("UTF-8", decode("iso-8859-1", $single_warning->{'payload'}{'translationsShortText'}{$uclang}))."|";
- ###
- if (AttrVal( $name, 'localiconbase',undef) ) {
- UWZ_Log $hash, 4, "Warn_".$i."_IconURL: ".AttrVal( $name, 'localiconbase',undef).$typenames{ $single_warning->{'type'} }."-".$single_warning->{'severity'}.".png";
- $message .= "Warn_".$i."_IconURL|".AttrVal( $name, 'localiconbase',undef).$typenames{ $single_warning->{'type'} }."-".UWZ_GetSeverityColor($hash, UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'} )).".png|";
- } else {
- UWZ_Log $hash, 4, "Warn_".$i."_IconURL: http://www.unwetterzentrale.de/images/icons/".$typenames{ $single_warning->{'type'} }."-".$single_warning->{'severity'}.".gif";
- $message .= "Warn_".$i."_IconURL|http://www.unwetterzentrale.de/images/icons/".$typenames{ $single_warning->{'type'} }."-".UWZ_GetSeverityColor($hash, UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'} )).".gif|";
- }
- ###
-
- ## Hagel start
- my $hagelcount = 0;
- # Begin Language by AttrVal
-
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
-
- $hagelcount = my @hagelmatch = $single_warning->{'payload'}{'translationsLongText'}{'DE'} =~ /Hagel/g;
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $hagelcount = my @hagelmatch = $single_warning->{'payload'}{'translationsLongText'}{'NL'} =~ /hagel/g;
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $hagelcount = my @hagelmatch = $single_warning->{'payload'}{'translationsLongText'}{'FR'} =~ /grêle/g;
-
- } else {
-
- $hagelcount = my @hagelmatch = $single_warning->{'payload'}{'translationsLongText'}{'EN'} =~ /Hail/g;
- }
- # end language by AttrVal
- if ( $hagelcount ne 0 ) {
-
- UWZ_Log $hash, 4, "Warn_".$i."_Hail: 1";
- $message .= "Warn_".$i."_Hail|1|";
-
- } else {
-
- UWZ_Log $hash, 4, "Warn_".$i."_Hail: 0";
- $message .= "Warn_".$i."_Hail|0|";
- }
- ## Hagel end
- $i++;
- }
-
- my $max=0;
- for (@uwzmaxlevel) {
- $max = $_ if !$max || $_ > $max
- };
- $message .= "WarnUWZLevel|";
- $message .= $max."|";
- UWZ_Log $hash, 4, "WarnUWZLevel_Color: ".UWZ_GetSeverityColor($hash, $max);
- $message .= "WarnUWZLevel_Color|".UWZ_GetSeverityColor($hash, $max)."|";
- ## Begin of redundant Reading
- if ( $UWZ_humanreadable eq 1 ) {
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- my %uwzlevelname = ( "0" => "Stufe Grün (keine Warnung)",
- "1" => "Stufe Dunkelgrün (Wetterhinweise)",
- "2" => "Stufe Gelb (Vorwarnung für Unwetterwarnung)",
- "3" => "Warnstufe Orange (Unwetterwarnung)",
- "4" => "Warnstufe Rot (Unwetterwarnung)",
- "5" => "Warnstufe Violett (Unwetterwarnung)");
- UWZ_Log $hash, 4, "WarnUWZLevel_Str: ".$uwzlevelname{ $max };
- $message .= "WarnUWZLevel_Str|".$uwzlevelname{ $max }."|";
- } elsif ($hash->{CountryCode} ~~ [ 'NL' ] ) {
- my %uwzlevelname = ( "0" => "niveau groen (geen waarschuwingen)",
- "1" => "niveau donkergroen (voorwaarschuwing)",
- "2" => "niveau geel (voorwaarschuwing)",
- "3" => "waarschuwingsniveau oranje (waarschuwing voor matig noodweer)",
- "4" => "waarschuwingsniveau rood (waarschuwing voor zwaar noodweer)",
- "5" => "waarschuwingsniveau violet (waarschuwing voor zeer zwaar noodweer)");
- UWZ_Log $hash, 4, "WarnUWZLevel_Str: ".$uwzlevelname{ $max };
- $message .= "WarnUWZLevel_Str|".$uwzlevelname{ $max }."|";
- } elsif ($hash->{CountryCode} ~~ [ 'FR' ] ) {
- my %uwzlevelname = ( "0" => "niveau vert (aucune alerte)",
- "1" => "niveau vert foncé (indication météo)",
- "2" => "niveau jaune (pré-alerte)",
- "3" => "niveau d' alerte orange (alerte météo)",
- "4" => "niveau d' alerte rouge (alerte météo)",
- "5" => "niveau d' alerte violet (alerte météo)");
- UWZ_Log $hash, 4, "WarnUWZLevel_Str: ".$uwzlevelname{ $max };
- $message .= "WarnUWZLevel_Str|".$uwzlevelname{ $max }."|";
- } else {
- my %uwzlevelname = ( "0" => "level green (no warnings)",
- "1" => "level dark green (weather notice)",
- "2" => "level yellow (severe weather watch)",
- "3" => "Alert level Orange",
- "4" => "Alert level Red",
- "5" => "Alert level Violet");
- UWZ_Log $hash, 4, "WarnUWZLevel_Str: ".$uwzlevelname{ $max };
- $message .= "WarnUWZLevel_Str|".$uwzlevelname{ $max }."|";
- }
- }
- $message .= "durationFetchReadings|";
- $message .= sprintf "%.2f", time() - $readingStartTime;
-
- UWZ_Log $hash, 3, "Done fetching data";
- UWZ_Log $hash, 4, "Will return : "."$name|$message|WarnCount|$uwz_warncount" ;
-
- return "$name|$message|WarnCount|$uwz_warncount" ;
- }
- #####################################
- sub UWZAsHtml($;$) {
- my ($name,$items) = @_;
- my $ret = '';
- my $hash = $defs{$name};
- my $htmlsequence = AttrVal($name, "htmlsequence", "none");
- my $htmltitle = AttrVal($name, "htmltitle", "");
- my $htmltitleclass = AttrVal($name, "htmltitleclass", "");
- my $attr;
- if (AttrVal($name, "htmlattr", "none") ne "none") {
- $attr = AttrVal($name, "htmlattr", "");
- } else {
- $attr = 'width="100%"';
- }
- if (ReadingsVal($name, "WarnCount", 0) != 0 ) {
-
- $ret .= '<table><tr><td>';
- $ret .= '<table class="block" '.$attr.'><tr><th class="'.$htmltitleclass.'" colspan="2">'.$htmltitle.'</th></tr>';
- if ($htmlsequence eq "descending") {
- for ( my $i=ReadingsVal($name, "WarnCount", -1)-1; $i>=0; $i--){
-
- $ret .= '<tr><td class="uwzIcon" style="vertical-align:top;"><img src="'.ReadingsVal($name, "Warn_".$i."_IconURL", "").'"></td>';
- $ret .= '<td class="uwzValue"><b>'.ReadingsVal($name, "Warn_".$i."_ShortText", "").'</b><br><br>';
- $ret .= ReadingsVal($name, "Warn_".$i."_LongText", "").'<br><br>';
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(ReadingsVal($name, "Warn_".$i."_Start", ""));
- if (length($hour) == 1) {$hour = "0$hour";}
- if (length($min) == 1) {$min = "0$min";}
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Anfang:</b></td><td>'."$DEweekdays[$wday], $mday $DEmonths[$mon] ".(1900+$year)." $hour:$min ".'Uhr</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Begin:</b></td><td>'."$NLweekdays[$wday], $mday $NLmonths[$mon] ".(1900+$year)." $hour:$min ".'uur</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Valide à partir du:</b></td><td>'."$FRweekdays[$wday], $mday $FRmonths[$mon] ".(1900+$year)." $hour:$min ".'heure</td>';
- } else {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Start:</b></td><td>'."$ENweekdays[$wday], $mday $ENmonths[$mon] ".(1900+$year)." $hour:$min ".'hour</td>';
- }
- # end language by AttrVal
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = undef;
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(ReadingsVal($name, "Warn_".$i."_End", ""));
- if (length($hour) == 1) {$hour = "0$hour";}
- if (length($min) == 1) {$min = "0$min";}
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .= '<td><b>Ende:</b></td><td>'."$DEweekdays[$wday], $mday $DEmonths[$mon] ".(1900+$year)." $hour:$min ".'Uhr</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= '<td><b>Einde:</b></td><td>'."$NLweekdays[$wday], $mday $NLmonths[$mon] ".(1900+$year)." $hour:$min ".'uur</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= '<td><b>Jusqu\'au:</b></td><td>'."$FRweekdays[$wday], $mday $FRmonths[$mon] ".(1900+$year)." $hour:$min ".'heure</td>';
- } else {
- $ret .= '<td><b>End:</b></td><td>'."$ENweekdays[$wday], $mday $ENmonths[$mon] ".(1900+$year)." $hour:$min ".'hour</td>';
- }
- # end language by AttrVal
- $ret .= '</tr></table>';
- $ret .= '</td></tr>';
- }
- } else {
- ###
- for ( my $i=0; $i<ReadingsVal($name, "WarnCount", 0); $i++){
-
- $ret .= '<tr><td class="uwzIcon" style="vertical-align:top;"><img src="'.ReadingsVal($name, "Warn_".$i."_IconURL", "").'"></td>';
- $ret .= '<td class="uwzValue"><b>'.ReadingsVal($name, "Warn_".$i."_ShortText", "").'</b><br><br>';
- $ret .= ReadingsVal($name, "Warn_".$i."_LongText", "").'<br><br>';
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(ReadingsVal($name, "Warn_".$i."_Start", ""));
- if (length($hour) == 1) {$hour = "0$hour";}
- if (length($min) == 1) {$min = "0$min";}
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Anfang:</b></td><td>'."$DEweekdays[$wday], $mday $DEmonths[$mon] ".(1900+$year)." $hour:$min ".'Uhr</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Begin:</b></td><td>'."$NLweekdays[$wday], $mday $NLmonths[$mon] ".(1900+$year)." $hour:$min ".'uur</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Valide à partir du:</b></td><td>'."$FRweekdays[$wday], $mday $FRmonths[$mon] ".(1900+$year)." $hour:$min ".'heure</td>';
- } else {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Start:</b></td><td>'."$ENweekdays[$wday], $mday $ENmonths[$mon] ".(1900+$year)." $hour:$min ".'hour</td>';
- }
- # end language by AttrVal
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = undef;
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(ReadingsVal($name, "Warn_".$i."_End", ""));
- if (length($hour) == 1) {$hour = "0$hour";}
- if (length($min) == 1) {$min = "0$min";}
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .= '<td><b>Ende:</b></td><td>'."$DEweekdays[$wday], $mday $DEmonths[$mon] ".(1900+$year)." $hour:$min ".'Uhr</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= '<td><b>Einde:</b></td><td>'."$NLweekdays[$wday], $mday $NLmonths[$mon] ".(1900+$year)." $hour:$min ".'uur</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= '<td><b>Juzqu\'au:</b></td><td>'."$FRweekdays[$wday], $mday $FRmonths[$mon] ".(1900+$year)." $hour:$min ".'heure</td>';
- } else {
- $ret .= '<td><b>End:</b></td><td>'."$ENweekdays[$wday], $mday $ENmonths[$mon] ".(1900+$year)." $hour:$min ".'hour</td>';
- }
- # end language by AttrVal
- $ret .= '</tr></table>';
- $ret .= '</td></tr>';
- }
- }
- ###
-
- $ret .= '</table>';
- $ret .= '</td></tr>';
- $ret .= '</table>';
-
- } else {
-
- $ret .= '<table><tr><td>';
- $ret .= '<table class="block wide" width="600px"><tr><th class="'.$htmltitleclass.'" colspan="2">'.$htmltitle.'</th></tr>';
- $ret .= '<tr><td class="uwzIcon" style="vertical-align:top;">';
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .='<b>Keine Warnungen</b>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .='<b>Geen waarschuwingen</b>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .='<b>Aucune alerte</b>';
- } else {
- $ret .='<b>No Warnings</b>';
- }
- # end language by AttrVal
- $ret .= '</td></tr>';
- $ret .= '</table>';
- $ret .= '</td></tr>';
- $ret .= '</table>';
- }
- return $ret;
- }
- #####################################
- sub UWZAsHtmlLite($;$) {
- my ($name,$items) = @_;
- my $ret = '';
- my $hash = $defs{$name};
- my $htmlsequence = AttrVal($name, "htmlsequence", "none");
- my $htmltitle = AttrVal($name, "htmltitle", "");
- my $htmltitleclass = AttrVal($name, "htmltitleclass", "");
- my $attr;
-
- if (AttrVal($name, "htmlattr", "none") ne "none") {
- $attr = AttrVal($name, "htmlattr", "");
- } else {
- $attr = 'width="100%"';
- }
-
- if (ReadingsVal($name, "WarnCount", "") != 0 ) {
- $ret .= '<table><tr><td>';
- $ret .= '<table class="block" '.$attr.'><tr><th class="'.$htmltitleclass.'" colspan="2">'.$htmltitle.'</th></tr>';
-
- if ($htmlsequence eq "descending") {
- for ( my $i=ReadingsVal($name, "WarnCount", "")-1; $i>=0; $i--){
- $ret .= '<tr><td class="uwzIcon" style="vertical-align:top;"><img src="'.ReadingsVal($name, "Warn_".$i."_IconURL", "").'"></td>';
- $ret .= '<td class="uwzValue"><b>'.ReadingsVal($name, "Warn_".$i."_ShortText", "").'</b><br><br>';
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(ReadingsVal($name, "Warn_".$i."_Start", ""));
- if (length($hour) == 1) {$hour = "0$hour";}
- if (length($min) == 1) {$min = "0$min";}
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Anfang:</b></td><td>'."$DEweekdays[$wday], $mday $DEmonths[$mon] ".(1900+$year)." $hour:$min ".'Uhr</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Begin:</b></td><td>'."$NLweekdays[$wday], $mday $NLmonths[$mon] ".(1900+$year)." $hour:$min ".'uur</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Valide à partir du:</b></td><td>'."$FRweekdays[$wday], $mday $FRmonths[$mon] ".(1900+$year)." $hour:$min ".'heure</td>';
- } else {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Start:</b></td><td>'."$ENweekdays[$wday], $mday $ENmonths[$mon] ".(1900+$year)." $hour:$min ".'hour</td>';
- }
- # end language by AttrVal
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = undef;
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(ReadingsVal($name, "Warn_".$i."_End", ""));
- if (length($hour) == 1) {$hour = "0$hour";}
- if (length($min) == 1) {$min = "0$min";}
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .= '<td><b>Ende:</b></td><td>'."$DEweekdays[$wday], $mday $DEmonths[$mon] ".(1900+$year)." $hour:$min ".'Uhr</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= '<td><b>Einde:</b></td><td>'."$NLweekdays[$wday], $mday $NLmonths[$mon] ".(1900+$year)." $hour:$min ".'uur</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= '<td><b>Jusqu\'au:</b></td><td>'."$FRweekdays[$wday], $mday $FRmonths[$mon] ".(1900+$year)." $hour:$min ".'heure</td>';
- } else {
- $ret .= '<td><b>End:</b></td><td>'."$ENweekdays[$wday], $mday $ENmonths[$mon] ".(1900+$year)." $hour:$min ".'hour</td>';
- }
- # end language by AttrVal
- $ret .= '</tr></table>';
- $ret .= '</td></tr>';
- }
- } else {
- for ( my $i=0; $i<ReadingsVal($name, "WarnCount", ""); $i++){
- $ret .= '<tr><td class="uwzIcon" style="vertical-align:top;"><img src="'.ReadingsVal($name, "Warn_".$i."_IconURL", "").'"></td>';
- $ret .= '<td class="uwzValue"><b>'.ReadingsVal($name, "Warn_".$i."_ShortText", "").'</b><br><br>';
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(ReadingsVal($name, "Warn_".$i."_Start", ""));
- if (length($hour) == 1) {$hour = "0$hour";}
- if (length($min) == 1) {$min = "0$min";}
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Anfang:</b></td><td>'."$DEweekdays[$wday], $mday $DEmonths[$mon] ".(1900+$year)." $hour:$min ".'Uhr</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Begin:</b></td><td>'."$NLweekdays[$wday], $mday $NLmonths[$mon] ".(1900+$year)." $hour:$min ".'uur</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Valide à partir du:</b></td><td>'."$FRweekdays[$wday], $mday $FRmonths[$mon] ".(1900+$year)." $hour:$min ".'heure</td>';
- } else {
- $ret .= '<table '.$attr.'><tr><th></th><th></th></tr><tr><td><b>Start:</b></td><td>'."$ENweekdays[$wday], $mday $ENmonths[$mon] ".(1900+$year)." $hour:$min ".'hour</td>';
- }
- # end language by AttrVal
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = undef;
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(ReadingsVal($name, "Warn_".$i."_End", ""));
- if (length($hour) == 1) {$hour = "0$hour";}
- if (length($min) == 1) {$min = "0$min";}
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .= '<td><b>Ende:</b></td><td>'."$DEweekdays[$wday], $mday $DEmonths[$mon] ".(1900+$year)." $hour:$min ".'Uhr</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= '<td><b>Einde:</b></td><td>'."$NLweekdays[$wday], $mday $NLmonths[$mon] ".(1900+$year)." $hour:$min ".'uur</td>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= '<td><b>Jusqu\'au:</b></td><td>'."$FRweekdays[$wday], $mday $FRmonths[$mon] ".(1900+$year)." $hour:$min ".'heure</td>';
- } else {
- $ret .= '<td><b>End:</b></td><td>'."$ENweekdays[$wday], $mday $ENmonths[$mon] ".(1900+$year)." $hour:$min ".'hour</td>';
- }
- # end language by AttrVal
- $ret .= '</tr></table>';
- $ret .= '</td></tr>';
- }
- }
- $ret .= '</table>';
- $ret .= '</td></tr>';
- $ret .= '</table>';
-
- } else {
-
- $ret .= '<table><tr><td>';
- $ret .= '<table class="block wide" width="600px"><tr><th class="'.$htmltitleclass.'" colspan="2">'.$htmltitle.'</th></tr>';
- $ret .= '<tr><td class="uwzIcon" style="vertical-align:top;">';
-
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) {
- $ret .='<b>Keine Warnungen</b>';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .='<b>Geen waarschuwingen</b>';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .='<b>Aucune alerte</b>';
- } else {
- $ret .='<b>No Warnings</b>';
- }
-
- # end language by AttrVal
- $ret .= '</td></tr>';
- $ret .= '</table>';
- $ret .= '</td></tr>';
- $ret .= '</table>';
- }
- return $ret;
- }
- #####################################
- sub UWZAsHtmlFP($;$) {
- my ($name,$items) = @_;
- my $tablewidth = ReadingsVal($name, "WarnCount", "") * 80;
- my $htmlsequence = AttrVal($name, "htmlsequence", "none");
- my $htmltitle = AttrVal($name, "htmltitle", "");
- my $htmltitleclass = AttrVal($name, "htmltitleclass", "");
- my $ret = '';
-
- $ret .= '<table class="uwz-fp" style="width:'.$tablewidth.'px"><tr><th class="'.$htmltitleclass.'" colspan="'.ReadingsVal($name, "WarnCount", "none").'">'.$htmltitle.'</th></tr>';
- $ret .= "<tr>";
-
- if ($htmlsequence eq "descending") {
- for ( my $i=ReadingsVal($name, "WarnCount", "")-1; $i>=0; $i--){
- $ret .= '<td class="uwzIcon"><img width="80px" src="'.ReadingsVal($name, "Warn_".$i."_IconURL", "").'"></td>';
- }
- } else {
- for ( my $i=0; $i<ReadingsVal($name, "WarnCount", ""); $i++){
- $ret .= '<td class="uwzIcon"><img width="80px" src="'.ReadingsVal($name, "Warn_".$i."_IconURL", "").'"></td>';
- }
- }
- $ret .= "</tr>";
- $ret .= '</table>';
- return $ret;
- }
- #####################################
- sub UWZAsHtmlMovie($$) {
- my ($name,$land) = @_;
- my $url = UWZ_Map2Movie($name,$land);
- my $hash = $defs{$name};
- my $ret = '<table><tr><td>';
- $ret .= '<table class="block wide">';
- $ret .= '<tr class="even"><td>';
- if(defined($url)) {
- $ret .= '<video controls="controls">';
- $ret .= '<source src="'.$url.'" type="video/mp4">';
- $ret .= '</video>';
- } else {
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE' , 'AT' , 'CH' ] ) {
- $ret .= 'unbekannte Landbezeichnung';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= 'Onbekende landcode';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= 'code de pays inconnu';
- } else {
- $ret .='unknown movie setting';
- }
- # end language by AttrVal
- }
- $ret .= '</td></tr></table></td></tr>';
- $ret .= '</table>';
- return $ret;
- }
- #####################################
- sub UWZAsHtmlKarteLand($$) {
- my ($name,$land) = @_;
- my $url = UWZ_Map2Image($name,$land);
- my $hash = $defs{$name};
- my $ret = '<table><tr><td>';
-
- $ret .= '<table class="block wide">';
- $ret .= '<tr class="even"><td>';
-
- if(defined($url)) {
- $ret .= '<img src="'.$url.'">';
-
- } else {
- # language by AttrVal
- if ( $hash->{CountryCode} ~~ [ 'DE' , 'AT' , 'CH' ] ) {
- $ret .= 'unbekannte Landbezeichnung';
- } elsif ( $hash->{CountryCode} ~~ [ 'NL' ] ) {
- $ret .= 'onbekende landcode';
- } elsif ( $hash->{CountryCode} ~~ [ 'FR' ] ) {
- $ret .= 'code de pays inconnu';
- } else {
- $ret .='unknown map setting';
- }
- # end language by AttrVal
- }
-
- $ret .= '</td></tr></table></td></tr>';
- $ret .= '</table>';
-
- return $ret;
- }
- #####################################
- sub UWZ_GetSeverityColor($$) {
- my ($name,$uwzlevel) = @_;
- my $alertcolor = "";
- my %UWZSeverity = ( "0" => "gruen",
- "1" => "orange",
- "2" => "gelb",
- "3" => "orange",
- "4" => "rot",
- "5" => "violett");
- return $UWZSeverity{$uwzlevel};
- }
- #####################################
- sub UWZ_GetUWZLevel($$) {
- my ($name,$warnname) = @_;
- my @alert = split(/_/,$warnname);
- if ( $alert[0] eq "notice" ) {
- return "1";
- } elsif ( $alert[1] eq "forewarn" ) {
- return "2";
- } else {
- my %UWZSeverity = ( "green" => "0",
- "yellow" => "2",
- "orange" => "3",
- "red" => "4",
- "violet" => "5");
- return $UWZSeverity{$alert[2]};
- }
- }
- #####################################
- sub UWZ_IntervalAtWarnLevel($) {
- my $hash = shift;
-
- my $name = $hash->{NAME};
- my $warnLevel = ReadingsVal($name,'WarnUWZLevel',0);
- my @valuestring = split( ',', AttrVal($name,'intervalAtWarnLevel','') );
- my %warnLevelInterval;
-
-
- readingsSingleUpdate($hash,'currentIntervalMode','warn',0);
-
- foreach( @valuestring ) {
-
- my @values = split( '=' , $_ );
- $warnLevelInterval{$values[0]} = $values[1];
- }
-
- if( defined($warnLevelInterval{$warnLevel}) and $hash->{INTERVALWARN} != $warnLevelInterval{$warnLevel} ) {
-
- $hash->{INTERVALWARN} = $warnLevelInterval{$warnLevel};
-
- RemoveInternalTimer( $hash );
- InternalTimer(gettimeofday() + $hash->{INTERVALWARN}, "UWZ_Start", $hash, 1 );
-
- UWZ_Log $hash, 4, "restart internal timer with interval $hash->{INTERVALWARN}";
-
- } else {
-
- RemoveInternalTimer( $hash );
- InternalTimer(gettimeofday() + $hash->{INTERVALWARN}, "UWZ_Start", $hash, 1 );
-
- UWZ_Log $hash, 4, "restart internal timer with interval $hash->{INTERVALWARN}";
- }
- }
- #####################################
- ##
- ## UWZ Helper Functions
- ##
- #####################################
- sub UWZSearchLatLon($$) {
- my ($name,$loc) = @_;
- my $url = "http://alertspro.geoservice.meteogroup.de/weatherpro/SearchFeed.php?search=".$loc;
- my $agent = LWP::UserAgent->new( env_proxy => 1, keep_alive => 1, protocols_allowed => ['http'], timeout => 10 );
- my $request = HTTP::Request->new( GET => $url );
- my $response = $agent->request($request);
- my $err_log = "Can't get $url -- " . $response->status_line unless( $response->is_success );
- if ( $err_log ne "" ) {
- print "Error|Error " . $response->status_line;
- }
-
- use XML::Simple qw(:strict);
- use Data::Dumper;
- use Encode qw(decode encode);
- my $uwzxmlparser = XML::Simple->new();
- #my $xmlres = $parser->XMLin(
- my $search = $uwzxmlparser->XMLin($response->content, KeyAttr => { city => 'id' }, ForceArray => [ 'city' ]);
- my $ret = '<html><table><tr><td>';
- $ret .= '<table class="block wide">';
- $ret .= '<tr class="even">';
- $ret .= "<td><b>city</b></td>";
- $ret .= "<td><b>country</b></td>";
- $ret .= "<td><b>latitude</b></td>";
- $ret .= "<td><b>longitude</b></td>";
- $ret .= '</tr>';
- foreach my $locres ($search->{cities}->{city})
- {
- my $linecount=1;
- while ( my ($key, $value) = each(%$locres) ) {
- if ( $linecount % 2 == 0 ) {
- $ret .= '<tr class="even">';
- } else {
- $ret .= '<tr class="odd">';
- }
- $ret .= "<td>".encode('utf-8',$value->{'name'})."</td>";
- $ret .= "<td>$value->{'country-name'}</td>";
- $ret .= "<td>$value->{'latitude'}</td>";
- $ret .= "<td>$value->{'longitude'}</td>";
- my @headerHost = grep /Host/, @FW_httpheader;
- $headerHost[0] =~ s/Host: //g;
-
- my $aHref="<a href=\"http://".$headerHost[0]."/fhem?cmd=get+".$name."+AreaID+".$value->{'latitude'}.",".$value->{'longitude'}."\">Get AreaID</a>";
- $ret .= "<td>".$aHref."</td>";
- $ret .= '</tr>';
- $linecount++;
- }
- }
-
- $ret .= '</table></td></tr>';
- $ret .= '</table></html>';
- return $ret;
- }
- #####################################
- sub UWZSearchAreaID($$) {
- my ($lat,$lon) = @_;
- my $url = "http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=lookupCoord&lat=".$lat."&lon=".$lon;
-
- my $agent = LWP::UserAgent->new( env_proxy => 1, keep_alive => 1, protocols_allowed => ['http'], timeout => 10 );
- my $request = HTTP::Request->new( GET => $url );
- my $response = $agent->request($request);
- my $err_log = "Can't get $url -- " . $response->status_line unless( $response->is_success );
- if ( $err_log ne "" ) {
- print "Error|Error " . $response->status_line;
- }
- use JSON;
- my @perl_scalar = @{JSON->new->utf8->decode($response->content)};
- my $AreaType = $perl_scalar[0]->{'AREA_TYPE'};
- my $CC = substr $perl_scalar[0]->{'AREA_ID'}, 3, 2;
- my $AreaID = substr $perl_scalar[0]->{'AREA_ID'}, 5, 5;
- if ( $AreaType eq "UWZ" ) {
- my $ret = '<html>Please use the following statement to define Unwetterzentrale for your location:<br /><br />';
- $ret .= '<table width=100%><tr><td>';
- $ret .= '<table class="block wide">';
- $ret .= '<tr class="even">';
- $ret .= "<td height=100><center><b>define Unwetterzentrale UWZ $CC $AreaID 3600</b></center></td>";
- $ret .= '</tr>';
- $ret .= '</table>';
- $ret .= '</td></tr></table>';
-
- $ret .= '<br />';
- $ret .= 'You can also use weblinks to add weathermaps. For a list of possible Weblinks see Commandref. For example to add the Europe Map use:<br />';
-
- $ret .= '<table width=100%><tr><td>';
- $ret .= '<table class="block wide">';
- $ret .= '<tr class="even">';
- $ret .= "<td height=100><center>define UWZ_Map_Europe weblink htmlCode { UWZAsHtmlKarteLand('Unwetterzentrale','europa') }</center></td>";
- $ret .= '</tr>';
- $ret .= '</table>';
- $ret .= '</td></tr></table>';
-
- $ret .= '</html>';
-
- return $ret;
- } else {
- return "Sorry, nothing found or not implemented";
- }
- }
- #####################################
- 1;
- =pod
- =item device
- =item summary extracts thunderstorm warnings from unwetterzentrale.de
- =item summary_DE extrahiert Unwetterwarnungen von unwetterzentrale.de
- =begin html
- <a name="UWZ"></a>
- <h3>UWZ</h3>
- <ul>
- <a name="UWZdefine"></a>
- This modul extracts thunderstorm warnings from <a href="http://www.unwetterzentrale.de">www.unwetterzentrale.de</a>.
- <br/>
- Therefore the same interface is used as the Android App <a href="http://www.alertspro.com">Alerts Pro</a> does.
- A maximum of 10 thunderstorm warnings will be served.
- Additional the module provides a few functions to create HTML-Templates which can be used with weblink.
- <br>
- <i>The following Perl-Modules are used within this module: HTTP::Request, LWP::UserAgent, JSON, Encode::Guess und HTML::Parse</i>.
- <br/><br/>
- <b>Define</b>
- <ul>
- <br>
- <code>define <Name> UWZ [CountryCode] [AreaID] [INTERVAL]</code>
- <br><br><br>
- Example:
- <br>
- <code>
- define Unwetterzentrale UWZ UK 08357 1800<br>
- attr Unwetterzentrale download 1<br>
- attr Unwetterzentrale humanreadable 1<br>
- attr Unwetterzentrale maps eastofengland unitedkingdom<br><br>
- define UnwetterDetails weblink htmlCode {UWZAsHtml("Unwetterzentrale")}<br>
- define UnwetterMapE_UK weblink htmlCode {UWZAsHtmlKarteLand("Unwetterzentrale","eastofengland")}<br>
- define UnwetterLite weblink htmlCode {UWZAsHtmlLite("Unwetterzentrale")}
- define UnwetterMovie weblink htmlCode {UWZAsHtmlMovie("Unwetterzentrale","clouds-precipitation-uk")}
- </code>
- <br>
- <li><code>[CountryCode]</code>
- <br>
- Possible values: DE, AT, CH, UK, ...<br/>
- (for other countries than germany use SEARCH for CountryCode to start device in search mode)
- </li><br>
- <li><code>[AreaID]</code>
- <br>
- For Germany you can use the postalcode, other countries use SEARCH for CountryCode to start device in search mode.
- <br>
- </li><br>
- <li><code>[INTERVAL]</code>
- <br>
- Defines the refresh interval. The interval is defined in seconds, so an interval of 3600 means that every hour a refresh will be triggered onetimes.
- <br>
- </li><br>
- <br><br><br>
- Example Search-Mode:
- <br>
- <code>
- define Unwetterzentrale UWZ SEARCH<br>
- </code>
- <br>
- now get the AreaID for your location (example shows london):
- <br>
- <code>
- get Unwetterzentrale SearchAreaID London<br>
- </code>
- <br>
- now redefine your device with the outputted CountryCode and AreaID.
- <br>
- <br>
- </ul>
- <br>
- <a name="UWZget"></a>
- <b>Get</b>
- <ul>
- <br>
- <li><code>get <name> soil-frost</code>
- <br>
- give info about current soil frost (active|inactive).
- </li><br>
- <li><code>get <name> extremfrost</code>
- <br>
- give info about current frost (active|inactive).
- </li><br>
- <li><code>get <name> thunderstorm</code>
- <br>
- give info about current thunderstorm (active|inactive).
- </li><br>
- <li><code>get <name> glaze</code>
- <br>
- give info about current glaze (active|inactive).
- </li><br>
- <li><code>get <name> glazed-rain</code>
- <br>
- give info about current freezing rain (active|inactive).
- </li><br>
- <li><code>get <name> hail</code>
- <br>
- give info about current hail (active|inactive).
- </li><br>
- <li><code>get <name> heat</code>
- <br>
- give info about current heat (active|inactive).
- </li><br>
- <li><code>get <name> rain</code>
- <br>
- give info about current rain (active|inactive).
- </li><br>
- <li><code>get <name> snow</code>
- <br>
- give info about current snow (active|inactive).
- </li><br>
- <li><code>get <name> storm</code>
- <br>
- give info about current storm (active|inactive).
- </li><br>
- <li><code>get <name> forest-fire</code>
- <br>
- give info about current forest fire (active|inactive).
- </li><br>
- </ul>
-
- <br>
- <b>Get (Search-Mode)</b>
- <ul>
- <br>
- <li><code>get <name> SearchAreaID <city></code>
- <br>
- Get AreaID coresponnding to entered location.
- </li><br>
- </ul>
-
- <br>
- <a name="UWZset"></a>
- <b>Set</b>
- <ul>
- <br>
- <li><code>set <name> update</code>
- <br>
- Executes an imediate update of thunderstorm warnings.
- </li><br>
- </ul>
-
- <br>
- <a name="UWZattr"></a>
- <b>Attributes</b>
- <ul>
- <br>
- <li><code>download</code>
- <br>
- Download maps during update (0|1).
- <br>
- </li>
- <li><code>savepath</code>
- <br>
- Define where to store the map png files (default: /tmp/).
- <br>
- </li>
- <li><code>maps</code>
- <br>
- Define the maps to download space seperated. For possible values see <code>UWZAsHtmlKarteLand</code>.
- <br>
- </li>
- <li><code>humanreadable</code>
- <br>
- Add additional Readings Warn_?_Start_Date, Warn_?_Start_Time, Warn_?_End_Date and Warn_?_End_Time containing the coresponding timetamp in a human readable manner. Additionally Warn_?_uwzLevel_Str and Warn_?_Type_Str will be added to device readings (0|1).
- <br>
- </li>
- <li><code>lang</code>
- <br>
- Overwrite requested language for short and long warn text. (de|en|it|fr|es|..).
- <br>
- </li>
- <li><code>sort_readings_by</code>
- <br>
- define how readings will be sortet (start|severity|creation).
- <br>
- </li>
- <li><code>htmlsequence</code>
- <br>
- define warn order of html output (ascending|descending).
- <br>
- </li>
- <li><code>htmltitle</code>
- <br>
- title / header for the html ouput
- <br>
- </li>
- <li><code>htmltitleclass</code>
- <br>
- css-Class of title / header for the html ouput
- <br>
- </li>
- <li><code>localiconbase</code>
- <br>
- define baseurl to host your own thunderstorm warn pics (filetype is png).
- <br>
- </li>
- <li><code>intervalAtWarnLevel</code>
- <br>
- define the interval per warnLevel. Example: 2=1800,3=900,4=300
- <br>
- </li>
- <br>
- </ul>
- <br>
- <a name="UWZreading"></a>
- <b>Readings</b>
- <ul>
- <br>
- <li><b>Warn_</b><i>0|1|2|3...|9</i><b>_...</b> - active warnings</li>
- <li><b>WarnCount</b> - warnings count</li>
- <li><b>WarnUWZLevel</b> - total warn level </li>
- <li><b>WarnUWZLevel_Color</b> - total warn level color</li>
- <li><b>WarnUWZLevel_Str</b> - total warn level string</li>
- <li><b>Warn_</b><i>0</i><b>_AltitudeMin</b> - minimum altitude for warning </li>
- <li><b>Warn_</b><i>0</i><b>_AltitudeMax</b> - maximum altitude for warning </li>
- <li><b>Warn_</b><i>0</i><b>_EventID</b> - warning EventID </li>
- <li><b>Warn_</b><i>0</i><b>_Creation</b> - warning creation </li>
- <li><b>Warn_</b><i>0</i><b>_Creation_Date</b> - warning creation datum </li>
- <li><b>Warn_</b><i>0</i><b>_Creation_Time</b> - warning creation time </li>
- <li><b>currentIntervalMode</b> - default/warn, Interval is read from INTERVAL or INTERVALWARN Internal</li>
- <li><b>Warn_</b><i>0</i><b>_Start</b> - begin of warnperiod</li>
- <li><b>Warn_</b><i>0</i><b>_Start_Date</b> - start date of warnperiod</li>
- <li><b>Warn_</b><i>0</i><b>_Start_Time</b> - start time of warnperiod</li>
- <li><b>Warn_</b><i>0</i><b>_End</b> - end of warnperiod</li>
- <li><b>Warn_</b><i>0</i><b>_End_Date</b> - end date of warnperiod</li>
- <li><b>Warn_</b><i>0</i><b>_End_Time</b> - end time of warnperiod</li>
- <li><b>Warn_</b><i>0</i><b>_Severity</b> - Severity of thunderstorm (0 no thunderstorm, 4, 7, 11, .. heavy thunderstorm)</li>
- <li><b>Warn_</b><i>0</i><b>_Hail</b> - warning contains hail</li>
- <li><b>Warn_</b><i>0</i><b>_Type</b> - kind of thunderstorm</li>
- <li><b>Warn_</b><i>0</i><b>_Type_Str</b> - kind of thunderstorm (text)</li>
- <ul>
- <li><b>1</b> - unknown</li>
- <li><b>2</b> - storm</li>
- <li><b>3</b> - snow</li>
- <li><b>4</b> - rain</li>
- <li><b>5</b> - frost</li>
- <li><b>6</b> - forest fire</li>
- <li><b>7</b> - thunderstorm</li>
- <li><b>8</b> - glaze</li>
- <li><b>9</b> - heat</li>
- <li><b>10</b> - freezing rain</li>
- <li><b>11</b> - soil frost</li>
- </ul>
- <li><b>Warn_</b><i>0</i><b>_uwzLevel</b> - Severity of thunderstorm (0-5)</li>
- <li><b>Warn_</b><i>0</i><b>_uwzLevel_Str</b> - Severity of thunderstorm (text)</li>
- <li><b>Warn_</b><i>0</i><b>_levelName</b> - Level Warn Name</li>
- <li><b>Warn_</b><i>0</i><b>_ShortText</b> - short warn text</li>
- <li><b>Warn_</b><i>0</i><b>_LongText</b> - detailed warn text</li>
- <li><b>Warn_</b><i>0</i><b>_IconURL</b> - cumulated URL to display warn-icons from <a href="http://www.unwetterzentrale.de">www.unwetterzentrale.de</a></li>
- </ul>
- <br>
- <a name="UWZweblinks"></a>
- <b>Weblinks</b>
- <ul>
- <br>
- With the additional implemented functions <code>UWZAsHtml, UWZAsHtmlLite, UWZAsHtmlFP, UWZAsHtmlKarteLand and UWZAsHtmlMovie</code> HTML-Code will be created to display warnings and weathermovies, using weblinks.
- <br><br><br>
- Example:
- <br>
- <li><code>define UnwetterDetailiert weblink htmlCode {UWZAsHtml("Unwetterzentrale")}</code></li>
- <br>
- <li><code>define UnwetterLite weblink htmlCode {UWZAsHtmlLite("Unwetterzentrale")}</code></li>
- <br>
- <li><code>define UnwetterFloorplan weblink htmlCode {UWZAsHtmlFP("Unwetterzentrale")}</code></li>
- <br>
- <li><code>define UnwetterKarteLand weblink htmlCode {UWZAsHtmlKarteLand("Unwetterzentrale","Bayern")}</code></li>
- <ul>
- <li>The second parameter should be one of:
- <ul>
- <li>europa</li>
- <br/>
- <li>deutschland</li>
- <li>deutschland-small</li>
- <li>niedersachsen</li>
- <li>bremen</li>
- <li>bayern</li>
- <li>schleswig-holstein</li>
- <li>hamburg</li>
- <li>mecklenburg-vorpommern</li>
- <li>sachsen</li>
- <li>sachsen-anhalt</li>
- <li>nordrhein-westfalen</li>
- <li>thueringen</li>
- <li>rheinland-pfalz</li>
- <li>saarland</li>
- <li>baden-wuerttemberg</li>
- <li>hessen</li>
- <li>brandenburg</li>
- <li>berlin</li>
- <br/>
- <li>oesterreich</li>
- <li>burgenland</li>
- <li>kaernten</li>
- <li>niederoesterreich</li>
- <li>oberoesterreich</li>
- <li>salzburg</li>
- <li>steiermark</li>
- <li>tirol</li>
- <li>vorarlberg</li>
- <li>wien</li>
- <br/>
- <li>schweiz</li>
- <li>aargau</li>
- <li>appenzell_ausserrhoden</li>
- <li>appenzell_innerrhoden</li>
- <li>basel_landschaft</li>
- <li>basel_stadt</li>
- <li>bern</li>
- <li>fribourg</li>
- <li>geneve</li>
- <li>glarus</li>
- <li>graubuenden</li>
- <li>jura</li>
- <li>luzern</li>
- <li>neuchatel</li>
- <li>nidwalden</li>
- <li>obwalden</li>
- <li>schaffhausen</li>
- <li>schwyz</li>
- <li>solothurn</li>
- <li>stgallen</li>
- <li>ticino</li>
- <li>thurgau</li>
- <li>uri</li>
- <li>waadt</li>
- <li>wallis</li>
- <li>zug</li>
- <li>zuerich</li>
- <br/>
- <li>liechtenstein</li>
- <br/>
- <li>belgique</li>
- <br/>
- <li>denmark</li>
- <br/>
- <li>finnland</li>
- <br/>
- <li>france</li>
- <li>alsace</li>
- <li>aquitaine</li>
- <li>basse-normandie</li>
- <li>bretagne</li>
- <li>champagne-ardenne</li>
- <li>franche-comte</li>
- <li>haute-normandie</li>
- <li>ile-de-france</li>
- <li>languedoc-roussillon</li>
- <li>limousin</li>
- <li>lorraine</li>
- <li>bourgogne</li>
- <li>centre</li>
- <li>midi-pyrenees</li>
- <li>nord-pas-de-calais</li>
- <li>pays-de-la-loire</li>
- <li>picardie</li>
- <li>poitou-charentes</li>
- <li>provence-alpes-cote-dazur</li>
- <li>rhone-alpes</li>
- <br/>
- <li>letzebuerg</li>
- <br/>
- <li>nederland</li>
- <li>drenthe</li>
- <li>flevoland</li>
- <li>friesland</li>
- <li>gelderland</li>
- <li>groningen</li>
- <li>limburg</li>
- <li>noordbrabant</li>
- <li>noordholland</li>
- <li>overijssel</li>
- <li>utrecht</li>
- <li>zeeland</li>
- <li>zuidholland</li>
- <br/>
- <li>norwegen</li>
- <br/>
- <li>portugal</li>
- <br/>
- <li>sverige</li>
- <br/>
- <li>espana</li>
- <br/>
- <li>unitedkingdom</li>
- <li>eastofengland</li>
- <li>eastmidlands</li>
- <li>london</li>
- <li>northeastengland</li>
- <li>northernireland</li>
- <li>northwestengland</li>
- <li>scotland</li>
- <li>southeastengland</li>
- <li>southwestengland</li>
- <li>wales</li>
- <li>westmidlands</li>
- <li>yorkshireandthehumber</li>
- <br/>
- <li>isobaren1</li>
- <li>isobaren2</li>
- <li>isobaren3</li>
- </ul>
- </li>
- </ul>
- <li><code>define UnwetterKarteMovie weblink htmlCode {UWZAsHtmlMovie("Unwetterzentrale","currents")}</code></li>
- <ul>
- <li>The second parameter should be one of:
- <ul>
- <li>niederschlag-wolken</li>
- <li>stroemung</li>
- <li>temperatur</li>
- <br/>
- <li>niederschlag-wolken-de</li>
- <li>stroemung-de</li>
- <br/>
- <li>niederschlag-wolken-ch</li>
- <li>stroemung-ch</li>
- <br/>
- <li>niederschlag-wolken-at</li>
- <li>stroemung-at</li>
- <br/>
- <li>neerslag-wolken-nl</li>
- <li>stroming-nl</li>
- <br/>
- <li>nuages-precipitations-fr</li>
- <li>courants-fr</li>
- <br/>
- <li>clouds-precipitation-uk</li>
- <li>currents-uk</li>
- <br/>
- </ul>
- </li>
- </ul>
- <br/><br/>
- </ul>
- <br>
-
- </ul>
- =end html
- =begin html_DE
- <a name="UWZ"></a>
- <h3>UWZ</h3>
- <ul>
- <a name="UWZdefine"></a>
- Das Modul extrahiert Unwetterwarnungen von <a href="http://www.unwetterzentrale.de">www.unwetterzentrale.de</a>.
- <br/>
- Hierfür wird die selbe Schnittstelle verwendet die auch die Android App <a href="http://www.alertspro.com">Alerts Pro</a> nutzt.
- Es werden maximal 10 Standortbezogene Unwetterwarnungen zur Verfügung gestellt.
- Weiterhin verfügt das Modul über HTML-Templates welche als weblink verwendet werden können.
- <br>
- <i>Es nutzt die Perl-Module HTTP::Request, LWP::UserAgent, JSON, Encode::Guess und HTML::Parse</i>.
- <br/><br/>
- <b>Define</b>
- <ul>
- <br>
- <code>define <Name> UWZ [Ländercode] [Postleitzahl] [INTERVAL]</code>
- <br><br><br>
- Beispiel:
- <br>
- <code>define Unwetterzentrale UWZ DE 86405 3600</code>
- <br>
- <li><code>[Ländercode]</code>
- <br>
- Mögliche Werte: DE, AT, CH, SEARCH, ...<br/>
- (für ander Länder als Deutschland bitte den SEARCH Parameter nutzen um die AreaID zu ermitteln.)
- </li><br>
- <li><code>[Postleitzahl/AreaID]</code>
- <br>
- Die Postleitzahl/AreaID des Ortes für den Unwetterinformationen abgefragt werden sollen.
- <br>
- </li><br>
- <li><code>[INTERVAL]</code>
- <br>
- Definiert das Interval zur aktualisierung der Unwetterwarnungen. Das Interval wird in Sekunden angegeben, somit aktualisiert das Modul bei einem Interval von 3600 jede Stunde 1 mal.
- <br>
- </li><br>
- </ul>
- <br>
- <a name="UWZget"></a>
- <b>Get</b>
- <ul>
- <br>
- <li><code>get <name> Bodenfrost</code>
- <br>
- Gibt aus ob aktuell eine Bodenfrostwarnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Extremfrost</code>
- <br>
- Gibt aus ob aktuell eine Extremfrostwarnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Gewitter</code>
- <br>
- Gibt aus ob aktuell eine Gewitter Warnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Glaette</code>
- <br>
- Gibt aus ob aktuell eine Glaettewarnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Glatteisregen</code>
- <br>
- Gibt aus ob aktuell eine Glatteisregen Warnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Hagel</code>
- <br>
- Gibt aus ob aktuell eine Hagel Warnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Hitze</code>
- <br>
- Gibt aus ob aktuell eine Hitze Warnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Regen</code>
- <br>
- Gibt aus ob aktuell eine Regen Warnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Schneefall</code>
- <br>
- Gibt aus ob aktuell eine Schneefall Warnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Sturm</code>
- <br>
- Gibt aus ob aktuell eine Sturm Warnung besteht (active|inactive).
- </li><br>
- <li><code>get <name> Waldbrand</code>
- <br>
- Gibt aus ob aktuell eine Waldbrand Warnung besteht (active|inactive).
- </li><br>
- </ul>
-
- <br>
- <b>Get (Search-Mode)</b>
- <ul>
- <br>
- <li><code>get <name> SearchAreaID <gesuchte_stadt></code>
- <br>
- Gibt die AreaID zum eingegebenen Ort aus.
- </li><br>
- </ul>
-
- <br>
- <a name="UWZset"></a>
- <b>Set</b>
- <ul>
- <br>
- <li><code>set <name> update</code>
- <br>
- Startet sofort ein neues Auslesen der Unwetterinformationen.
- </li><br>
- </ul>
-
- <br>
- <a name="UWZattr"></a>
- <b>Attribute</b>
- <ul>
- <br>
- <li><code>download</code>
- <br>
- Download Unwetterkarten während des updates (0|1).
- <br>
- </li>
- <li><code>savepath</code>
- <br>
- Pfad zum speichern der Karten (default: /tmp/).
- <br>
- </li>
- <li><code>maps</code>
- <br>
- Leerzeichen separierte Liste der zu speichernden Karten. Für mögliche Karten siehe <code>UWZAsHtmlKarteLand</code>.
- <br>
- </li>
- <li><code>humanreadable</code>
- <br>
- Anzeige weiterer Readings Warn_?_Start_Date, Warn_?_Start_Time, Warn_?_End_Date, Warn_?_End_Time. Diese Readings enthalten aus dem Timestamp kalkulierte Datums/Zeit Angaben. Weiterhin werden folgende Readings aktivier: Warn_?_Type_Str und Warn_?_uwzLevel_Str welche den Unwettertyp als auch das Unwetter-Warn-Level als Text ausgeben. (0|1)
- <br>
- </li>
- <li><code>lang</code>
- <br>
- Umschalten der angeforderten Sprache für kurz und lange warn text. (de|en|it|fr|es|..).
- <br>
- </li>
- <li><code>sort_readings_by</code>
- <br>
- Sortierreihenfolge der Warnmeldungen. (start|severity|creation).
- <br>
- </li>
- <li><code>htmlsequence</code>
- <br>
- Anzeigereihenfolge der html warnungen. (ascending|descending).
- <br>
- </li>
- <li><code>htmltitle</code>
- <br>
- Titel / Ueberschrift der HTML Ausgabe
- <br>
- </li>
- <li><code>htmltitleclass</code>
- <br>
- css-Class des Titels der HTML Ausgabe
- <br>
- </li>
- <li><code>localiconbase</code>
- <br>
- BaseURL angeben um Warn Icons lokal zu hosten. (Dateityp ist png).
- <br>
- </li>
- <li><code>intervalAtWarnLevel</code>
- <br>
- konfiguriert den Interval je nach WarnLevel. Beispiel: 2=1800,3=900,4=300
- <br>
- </li>
- <br>
- </ul>
- <br>
- <a name="UWZreading"></a>
- <b>Readings</b>
- <ul>
- <br>
- <li><b>Warn_</b><i>0|1|2|3...|9</i><b>_...</b> - aktive Warnmeldungen</li>
- <li><b>WarnCount</b> - Anzahl der aktiven Warnmeldungen</li>
- <li><b>WarnUWZLevel</b> - Gesamt Warn Level </li>
- <li><b>WarnUWZLevel_Color</b> - Gesamt Warn Level Farbe</li>
- <li><b>WarnUWZLevel_Str</b> - Gesamt Warn Level Text</li>
- <li><b>Warn_</b><i>0</i><b>_AltitudeMin</b> - minimum Höhe für Warnung </li>
- <li><b>Warn_</b><i>0</i><b>_AltitudeMax</b> - maximum Höhe für Warnung </li>
- <li><b>Warn_</b><i>0</i><b>_EventID</b> - EventID der Warnung </li>
- <li><b>Warn_</b><i>0</i><b>_Creation</b> - Warnungs Erzeugung </li>
- <li><b>Warn_</b><i>0</i><b>_Creation_Date</b> - Warnungs Erzeugungs Datum </li>
- <li><b>Warn_</b><i>0</i><b>_Creation_Time</b> - Warnungs Erzeugungs Zeit </li>
- <li><b>currentIntervalMode</b> - default/warn, aktuell Verwendeter Interval. Internal INTERVAL oder INTERVALWARN</li>
- <li><b>Warn_</b><i>0</i><b>_Start</b> - Begin der Warnung</li>
- <li><b>Warn_</b><i>0</i><b>_Start_Date</b> - Startdatum der Warnung</li>
- <li><b>Warn_</b><i>0</i><b>_Start_Time</b> - Startzeit der Warnung</li>
- <li><b>Warn_</b><i>0</i><b>_End</b> - Warn Ende</li>
- <li><b>Warn_</b><i>0</i><b>_End_Date</b> - Enddatum der Warnung</li>
- <li><b>Warn_</b><i>0</i><b>_End_Time</b> - Endzeit der Warnung</li>
- <li><b>Warn_</b><i>0</i><b>_Severity</b> - Schwere des Unwetters (0 kein Unwetter, 12 massives Unwetter)</li>
- <li><b>Warn_</b><i>0</i><b>_Hail</b> - Hagelwarnung (1|0)</li>
- <li><b>Warn_</b><i>0</i><b>_Type</b> - Art des Unwetters</li>
- <li><b>Warn_</b><i>0</i><b>_Type_Str</b> - Art des Unwetters (text)</li>
- <ul>
- <li><b>1</b> - unbekannt</li>
- <li><b>2</b> - Sturm/Orkan</li>
- <li><b>3</b> - Schneefall</li>
- <li><b>4</b> - Regen</li>
- <li><b>5</b> - Extremfrost</li>
- <li><b>6</b> - Waldbrandgefahr</li>
- <li><b>7</b> - Gewitter</li>
- <li><b>8</b> - Glätte</li>
- <li><b>9</b> - Hitze</li>
- <li><b>10</b> - Glatteisregen</li>
- <li><b>11</b> - Bodenfrost</li>
- </ul>
- <li><b>Warn_</b><i>0</i><b>_uwzLevel</b> - Unwetterwarnstufe (0-5)</li>
- <li><b>Warn_</b><i>0</i><b>_uwzLevel_Str</b> - Unwetterwarnstufe (text)</li>
- <li><b>Warn_</b><i>0</i><b>_levelName</b> - Level Warn Name</li>
- <li><b>Warn_</b><i>0</i><b>_ShortText</b> - Kurzbeschreibung der Warnung</li>
- <li><b>Warn_</b><i>0</i><b>_LongText</b> - Ausführliche Unwetterbeschreibung</li>
- <li><b>Warn_</b><i>0</i><b>_IconURL</b> - Kumulierte URL um Warnungs-Icon von <a href="http://www.unwetterzentrale.de">www.unwetterzentrale.de</a> anzuzeigen</li>
- </ul>
- <br>
- <a name="UWZweblinks"></a>
- <b>Weblinks</b>
- <ul>
- <br>
- Über die Funktionen <code>UWZAsHtml, UWZAsHtmlLite, UWZAsHtmlFP, UWZAsHtmlKarteLand, UWZAsHtmlMovie</code> wird HTML-Code zur Warnanzeige und Wetterfilme über weblinks erzeugt.
- <br><br><br>
- Beispiele:
- <br>
- <li><code>define UnwetterDetailiert weblink htmlCode {UWZAsHtml("Unwetterzentrale")}</code></li>
- <br>
- <li><code>define UnwetterLite weblink htmlCode {UWZAsHtmlLite("Unwetterzentrale")}</code></li>
- <br>
- <li><code>define UnwetterFloorplan weblink htmlCode {UWZAsHtmlFP("Unwetterzentrale")}</code></li>
- <br>
- <li><code>define UnwetterKarteLand weblink htmlCode {UWZAsHtmlKarteLand("Unwetterzentrale","Bayern")}</code></li>
- <ul>
- <li>Der zweite Parameter kann einer der folgenden sein:
- <ul>
- <li>europa</li>
- <br/>
- <li>deutschland</li>
- <li>deutschland-small</li>
- <li>niedersachsen</li>
- <li>bremen</li>
- <li>bayern</li>
- <li>schleswig-holstein</li>
- <li>hamburg</li>
- <li>mecklenburg-vorpommern</li>
- <li>sachsen</li>
- <li>sachsen-anhalt</li>
- <li>nordrhein-westfalen</li>
- <li>thueringen</li>
- <li>rheinland-pfalz</li>
- <li>saarland</li>
- <li>baden-wuerttemberg</li>
- <li>hessen</li>
- <li>brandenburg</li>
- <li>berlin</li>
- <br/>
- <li>oesterreich</li>
- <li>burgenland</li>
- <li>kaernten</li>
- <li>niederoesterreich</li>
- <li>oberoesterreich</li>
- <li>salzburg</li>
- <li>steiermark</li>
- <li>tirol</li>
- <li>vorarlberg</li>
- <li>wien</li>
- <br/>
- <li>schweiz</li>
- <li>aargau</li>
- <li>appenzell_ausserrhoden</li>
- <li>appenzell_innerrhoden</li>
- <li>basel_landschaft</li>
- <li>basel_stadt</li>
- <li>bern</li>
- <li>fribourg</li>
- <li>geneve</li>
- <li>glarus</li>
- <li>graubuenden</li>
- <li>jura</li>
- <li>luzern</li>
- <li>neuchatel</li>
- <li>nidwalden</li>
- <li>obwalden</li>
- <li>schaffhausen</li>
- <li>schwyz</li>
- <li>solothurn</li>
- <li>stgallen</li>
- <li>ticino</li>
- <li>thurgau</li>
- <li>uri</li>
- <li>waadt</li>
- <li>wallis</li>
- <li>zug</li>
- <li>zuerich</li>
- <br/>
- <li>liechtenstein</li>
- <br/>
- <li>belgique</li>
- <br/>
- <li>denmark</li>
- <br/>
- <li>finnland</li>
- <br/>
- <li>france</li>
- <li>alsace</li>
- <li>aquitaine</li>
- <li>basse-normandie</li>
- <li>bretagne</li>
- <li>champagne-ardenne</li>
- <li>franche-comte</li>
- <li>haute-normandie</li>
- <li>ile-de-france</li>
- <li>languedoc-roussillon</li>
- <li>limousin</li>
- <li>lorraine</li>
- <li>bourgogne</li>
- <li>centre</li>
- <li>midi-pyrenees</li>
- <li>nord-pas-de-calais</li>
- <li>pays-de-la-loire</li>
- <li>picardie</li>
- <li>poitou-charentes</li>
- <li>provence-alpes-cote-dazur</li>
- <li>rhone-alpes</li>
- <br/>
- <li>letzebuerg</li>
- <br/>
- <li>nederland</li>
- <li>drenthe</li>
- <li>flevoland</li>
- <li>friesland</li>
- <li>gelderland</li>
- <li>groningen</li>
- <li>limburg</li>
- <li>noordbrabant</li>
- <li>noordholland</li>
- <li>overijssel</li>
- <li>utrecht</li>
- <li>zeeland</li>
- <li>zuidholland</li>
- <br/>
- <li>norwegen</li>
- <br/>
- <li>portugal</li>
- <br/>
- <li>sverige</li>
- <br/>
- <li>espana</li>
- <br/>
- <li>unitedkingdom</li>
- <li>eastofengland</li>
- <li>eastmidlands</li>
- <li>london</li>
- <li>northeastengland</li>
- <li>northernireland</li>
- <li>northwestengland</li>
- <li>scotland</li>
- <li>southeastengland</li>
- <li>southwestengland</li>
- <li>wales</li>
- <li>westmidlands</li>
- <li>yorkshireandthehumber</li>
- <br/>
- <li>isobaren1</li>
- <li>isobaren2</li>
- <li>isobaren3</li>
- </ul>
- </li>
- </ul>
- <li><code>define UnwetterKarteMovie weblink htmlCode {UWZAsHtmlMovie("Unwetterzentrale","niederschlag-wolken-de")}</code></li>
- <ul>
- <li>Der zweite Parameter kann einer der folgenden sein:
- <ul>
- <li>niederschlag-wolken</li>
- <li>stroemung</li>
- <li>temperatur</li>
- <br/>
- <li>niederschlag-wolken-de</li>
- <li>stroemung-de</li>
- <br/>
- <li>niederschlag-wolken-ch</li>
- <li>stroemung-ch</li>
- <br/>
- <li>niederschlag-wolken-at</li>
- <li>stroemung-at</li>
- <br/>
- <li>neerslag-wolken-nl</li>
- <li>stroming-nl</li>
- <br/>
- <li>nuages-precipitations-fr</li>
- <li>courants-fr</li>
- <br/>
- <li>clouds-precipitation-uk</li>
- <li>currents-uk</li>
- <br/>
- </ul>
- </li>
- </ul>
- <br/><br/>
- </ul>
- <br>
-
- </ul>
- =end html_DE
- =cut
|