feat(shelly): raise taupunktschwelle and add Terraform output for script status
This commit is contained in:
parent
4082a155a4
commit
db9ce2b538
|
|
@ -23,6 +23,27 @@ provider "registry.terraform.io/donrobo/shelly" {
|
|||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/external" {
|
||||
version = "2.4.0"
|
||||
constraints = "~> 2.3"
|
||||
hashes = [
|
||||
"h1:vvIsrZAD5eNoNtXvNcBUxkA9k2A4JcC8JTDFbM9d8gc=",
|
||||
"zh:0772afb42b658468ac5e15df33bf2080456f8f0b8ab163bfe9c50d2b2ea02135",
|
||||
"zh:0ac31a9aaa43dfcff5944b791596cdc94e153348e4bb4642282d034dff548134",
|
||||
"zh:32d8492b1bdcc956ca3c6d00c6392d0a83942ff11d4820c7ee63ca6796e06950",
|
||||
"zh:3c0482e894429f528ce6655a76ab0d8a9f7c0dacc6c828865e1515d4a7dbb852",
|
||||
"zh:61e68100b4db2f930b31491f23c602126382fd5e51252be1b551f0e17f8ddbee",
|
||||
"zh:6d60f615a0ad85eb962c9eb94f25e3eba7a72684ce276ba5dfb23f36b295a8f8",
|
||||
"zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
|
||||
"zh:9ced2745eb5f1346203027d2dd7bf856ad1d279a25730ff7dbc6eec187aaca0c",
|
||||
"zh:a8378558a177d43f55aa0d79d4fae91a704695122a1b109668c1daa8fb76f09d",
|
||||
"zh:aadd98086133d3ebea67437d56512fdcc6dfb3bd34dfc23f276c0db9272e27b4",
|
||||
"zh:beff701b653841e70441978137768f54e7dc6c27e7bf12a4589087f01f5bbcee",
|
||||
"zh:c91c2223b29fdbc0044d20e1936ccc051d010727a13f2ff1e75e51f09bff33a3",
|
||||
"zh:d491f9c2d32a39dc4031628469ae7c8aec0074312a7c1f0286b173cdcf854a54",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/local" {
|
||||
version = "2.9.0"
|
||||
constraints = "~> 2.4"
|
||||
|
|
|
|||
|
|
@ -39,3 +39,17 @@ resource "null_resource" "upload_script" {
|
|||
|
||||
depends_on = [shelly_script_config.taupi]
|
||||
}
|
||||
|
||||
data "external" "script_status" {
|
||||
program = ["python3", "${path.module}/scripts/get_status.py", var.shelly_ip, "1"]
|
||||
|
||||
# Trigger re-run whenever upload finishes
|
||||
query = {
|
||||
trigger = null_resource.upload_script.id
|
||||
}
|
||||
}
|
||||
|
||||
output "script_status" {
|
||||
value = data.external.script_status.result
|
||||
description = "The runtime status of the Shelly script"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,10 @@ terraform {
|
|||
source = "hashicorp/local"
|
||||
version = "~> 2.4"
|
||||
}
|
||||
external = {
|
||||
source = "hashicorp/external"
|
||||
version = "~> 2.3"
|
||||
}
|
||||
}
|
||||
required_version = ">= 1.0"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
import sys
|
||||
import json
|
||||
import urllib.request
|
||||
|
||||
def get_status(ip, script_id):
|
||||
url = f"http://{ip}/rpc"
|
||||
payload = {
|
||||
"id": 1,
|
||||
"method": "Script.GetStatus",
|
||||
"params": {"id": int(script_id)}
|
||||
}
|
||||
req = urllib.request.Request(
|
||||
url,
|
||||
data=json.dumps(payload).encode('utf-8'),
|
||||
headers={'Content-Type': 'application/json'}
|
||||
)
|
||||
try:
|
||||
with urllib.request.urlopen(req) as resp:
|
||||
res = json.loads(resp.read().decode('utf-8'))
|
||||
if "result" in res:
|
||||
status = res["result"]
|
||||
# Convert all values to strings as HashiCorp External Provider only accepts string properties
|
||||
return {k: str(v) for k, v in status.items() if v is not None}
|
||||
elif "error" in res:
|
||||
return {"error": str(res["error"])}
|
||||
except Exception as e:
|
||||
return {"error": str(e)}
|
||||
return {"error": "unknown"}
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 3:
|
||||
# Check stdin if arguments are missing (sometimes Terraform passes parameters to stdin)
|
||||
try:
|
||||
input_data = json.loads(sys.stdin.read())
|
||||
ip = input_data.get("ip")
|
||||
script_id = input_data.get("script_id")
|
||||
except:
|
||||
ip, script_id = None, None
|
||||
|
||||
if not ip or not script_id:
|
||||
print(json.dumps({"error": "Usage: get_status.py <ip> <script_id> or pass JSON via stdin"}))
|
||||
sys.exit(1)
|
||||
else:
|
||||
ip = sys.argv[1]
|
||||
script_id = sys.argv[2]
|
||||
|
||||
status = get_status(ip, script_id)
|
||||
print(json.dumps(status))
|
||||
|
|
@ -17,7 +17,7 @@ variable "sensor_innen_mac" {
|
|||
variable "taupunktschwelle" {
|
||||
type = number
|
||||
description = "Dew point difference threshold [°C] to trigger the fan (indoor_dp > outdoor_dp + threshold)"
|
||||
default = 2
|
||||
default = 4
|
||||
}
|
||||
|
||||
variable "mindesttemperatur" {
|
||||
|
|
|
|||
Loading…
Reference in New Issue