VD für alle Mondsüchtigen

Hi,

das VD ist mal aus einer Übung heraus entstanden (Danke an boomx für die Hilfe)…
Wer also Interesse an Mondwerten hat, die Seite
http://www.mondverlauf.de
bietet welche.
Mit dem VD bekommt Ihr die Infos ins HC2. Das VD dient bei mir aber nicht zur Steuerung, sondern lediglich zur Visualisierung.

Den APIKey holt Ihr Euch dann von
http://www.torsten-hoffmann.de/apis/suncalcmooncalc/api_en.html
APIKey, Latitude und Longitude Eures Standorttes noch im VD eingeben.

Die Globale Variable (GV) “Abendaemmerung” benötige ich für eine Rollosteuerung.
Nicht verwundern, ggf. einfach anpassen.

Da der Mainloop ja nicht zuverlässig funktioniert, habe ich dort keinen Code zum automatischen Updaten eingebaut.
Auch erlaubt die kostenfreie Version der API nur eine begrenzte Anzahl an Calls pro Tag.
Ich habe mir zum Aktualisieren eine (Block-)Szene angelegt und drücke damit regelmäßig den Update-Button (meiner VDs).

Da man das VD hier nicht als vfib hochladen kann, einfach nach dem Runterladen den Dateinamen anpassen (.txt kürzen).

VG Hoggle

Screenshot-Mond-VD.png

Hallo Hoggle

Funktioniert das noch bei Dir?

Bei mir ging es reibungslos bis zu irgendeinem Fibaro HC2 Versionswechsel in 2017. Seitdem bekomme ich nur den Statuscode 301 zurück.

Evtl. weisst Du etwas dazu?

Herzliche Grüsse, Frank

Hi,

das hat nichts mit der Fibaro-FW zu tun.
Die Mond-Seite wurde von http auf https umgestellt. Daher funktioniert der Abruf über das VD nicht mehr…

Ich bin daher auf ein Script umgestiegen, dass ein VD füttert.


--[[
%% properties
%% events
%% globals
%% autostart
--]]

local VDid = 268 --ID des Mond-VDs
local sourceTrigger = fibaro:getSourceTrigger()
--Datum = os.date("%d.%m.%Y %H:%M:%S", os.time())
Datum = os.date("%d.%m.%Y", os.time())

print("Script gestartet am "..Datum.."....")

if fibaro:countScenes() > 1 then
  fibaro:debug("stop scene");
  fibaro:abort();
end

function varTime() 

function setDevicePropertyValue(id, label, value)
  fibaro:call(id, "setProperty", "ui."..label..".value", value)
end

local url = "https://www.torsten-hoffmann.de/apis/suncalcmooncalc/xml/?key=xxxxx&lat=xx.xxxxxx&lon=xx.xxxxxx"
local selfhttp = net.HTTPClient()
selfhttp:request(url, {
  options={
    method = 'GET',
    },
  success = function(resp)
   --fibaro:debug("STATUS: "..resp.status)
   -- fibaro:debug("DATA: "..resp.data)

local s = resp.data
a, b = string.find(s, "<status>")
c, d = string.find(s, "</status>")
local status = s:sub(b + 1, c - 1)        
--print(status)        

--Befüllung Mond-VD (ID 268)
setDevicePropertyValue(VDid, "Label7", status)
        
if status ~= "Limit per Day exceeded!" then
	local s = resp.data
	local b = 0        
	a, b = string.find(s, "<MoonPhase>")
	c, d = string.find(s, "</MoonPhase>")
	local MoonPhase = s:sub(b + 1, c - 1)        
        
	a, b = string.find(s, "<MoonRise>")
	c, d = string.find(s, "</MoonRise>")
	local Mondaufgang_resp = s:sub(b + 1, c - 1)  
	local Mondaufgang = string.sub(Mondaufgang_resp, 1, 5)         

	a, b = string.find(s, "<MoonIllumination>")
	c, d = string.find(s, "</MoonIllumination>")
	local Sichtbarkeit_resp = s:sub(b + 1, c - 1)  
	local Sichtbarkeit = tonumber(string.format("%.0f", Sichtbarkeit_resp)) --Runded den Wert 
 
	a, b = string.find(s, "<MoonAz>")
	c, d = string.find(s, "</MoonAz>")
	local Mondstand_resp = s:sub(b + 1, c - 1)  
	local Mondstand = tonumber(string.format("%.0f", Mondstand_resp)) --Runded den Wert 

	a, b = string.find(s, "<MoonAgeDays>")
	c, d = string.find(s, "</MoonAgeDays>")
	local Mondalter_resp = s:sub(b + 1, c - 1)  
	local Mondalter = tonumber(string.format("%.1f", Mondalter_resp)) --Runded den Wert 

	-----------------------------------------------------
	--Setzt Globale Variable für andere Zwecke als diese Szene/VD
	a, b = string.find(s, "<SunCivilTwilightEvening>")
	c, d = string.find(s, "</SunCivilTwilightEvening>")
	local Abendaemmerung_resp = s:sub(b + 1, c - 1)  
	local Abendaemmerung = string.sub(Abendaemmerung_resp, 1, 5)
	fibaro:setGlobal("Abenddaemmerung", Abendaemmerung)  
	--print(Abendaemmerung)  
        
	------------------------------------------------
	--Befüllung Mond-VD (ID 268)
	setDevicePropertyValue(VDid, "Label1", Mondaufgang)
	setDevicePropertyValue(VDid, "Label2", MoonPhase)
	setDevicePropertyValue(VDid, "Label3", Sichtbarkeit.." %") 
	setDevicePropertyValue(VDid, "Label4", Mondalter.." Tage")
	setDevicePropertyValue(VDid, "Label5", Mondstand.." °")

	Date = os.date("%d.%m.%Y %H:%M:%S", os.time())
	setDevicePropertyValue(VDid, "Label6", Date)          
    
    --else print("Status: "..status)
	end --der if-Bedingung für Limit per Day exceeded!
          
  end,
  error = function(err)
    fibaro:debug("ERROR: "..err)
  end
})

--end
--process()

setTimeout(varTime, 900*1000)  --0,25 Stunde
end  
 
if (sourceTrigger["type"] == "autostart") 
	then varTime()
	--fibaro:debug("Type Autostart"); 
	end  
  


in Zeile 27 musst Du die xxx durch Deine individuellen Werte ersetzen.
UNd ab Zeile 83 auf Dein VD dazu anpassen.

Genial Hoggle - muss ich unbedingt ausprobieren. Vielen Dank!

Herzliche Grüsse, Frank

Hallo Hoogle,
das klingt echt interessant, hast Du das VD noch zum herunterladen ?
Irgendwie zeigt mir kein Browser einen Link mit dem VD an.

Danke und schönen Sonntag noch.

Gruß
Carsten

Hi,

Nein VD hatte ich nicht eingestellt, weil das Script (s.o.) der interessante Part ist.
Von da wird das VD befühlt.
Läuft das Script bei Dir und Du bekommst die Beiden Ngoako, die du benötigst?

Viele Grüße Hoggle

Hallo Hoggle,
leider nein - der Thorsten Hoffmann hat mir heute geschrieben, das er keinen Key mehr rausgeben kann, aufgrund von Ressourcenmangel.

Gruß
Carsten

Oh.
Sorry, aber dann nützt Dir weder das VD noch das Script etwas.
Das Script hat das VD ja nur bedient. Und ohne Key…

VG Hoggle