smiletolerantly

joined 2 years ago
[–] smiletolerantly@awful.systems 29 points 1 day ago (2 children)

Hab eine Geschichte die nur so halb zum Thema passt, aber egal:

Hatte eine OP anstehen, brauchte davor vom meiner HausΓ€rztin ein paar Labore und ein EKG. Also Termin gemacht, hin, Blut abgenommen, und dann an die Maschine angeschlossen. Dauerte nicht lange und ich war fertig, alles wieder ab. Maschine druckt langen Bogen Papier aus.

HausÀrztin wirft einen Blick drauf, zieht die Augenbrauen zusammen, starrt das Papier ein paar Sekunden lang mismutig an und macht ein misbilligendes "Hmmmmmmmmmmm". Steht auf, geht nach draußen. Ich sitze 10 Minuten in dem Zimmer und dreh' DÀumchen.

Sie kommt mit dem EKG-Ausdruck und ihrem Kollegen wieder rein, meint "Also Frau smiletolerantly, ich habe mich jetzt eingehend mit meinem Kollegen beraten und wir sind uns beide einig. Sind Sie sich bewusst, dass Sie irgendwann innerhalb der letzten paar Wochen einen Herzinfarkt hatten?" (Randnotiz: Ich bin zu diesem Zeitpunkt 22 und habe eine vΓΆllig durchschnittliche Figur und Fitness.)

Ich bisschen bedeppert "Γ€hhh.... Nein? Sind Sie sich sicher? Kann ich die OP trotzdem machen?", worauf mir versichert wurde, dass man sich sicher sein, nein definitiv keine OPs in meiner nΓ€heren und so-Gott-wolle mittelfristigen Zukunft, und stattdessen solle ich mir doch bitte vorne eine Kopie meiner Unterlagen abholen und in die Notaufnahme des Uniklinikums gefahren werden, pronto, keine Umwege, gehe nicht ΓΌber Los. ("Das ist ja nicht so weit, das Laufe ich" vs. "Sie sollten sich auf jeden Fall ein Taxi nehmen" wurde dann in den Kompromiss "ich nehm nen E-Scooter" runtergehandelt.)

Ich also ab in die Uniklinik DΓΌsseldorf, Anliegen vortragen, eingeordnet werden, dann 4h warten. Ich in der Zwischenzeit natΓΌrlich mittlerweile mit genug Panik, um das Herz wirklich zum Platzen zu bringen. Hab schon unter TrΓ€nen meine Partnerin kontaktiert, jetzt nicht im Glauben augenblicklich drauf zu gehen, aber hey, tolle Nachrichten sind das ja selbst im besten Fall nicht.

Kann endlich gesehen werden, erlΓ€utere nochmal die Situation, die Γ„rztin dort macht nochmal eine umfangreiche Anamnese. Schließlich neues EKG. Maschine druckt den Graphen aus. Γ„rztin sieht sich das an, wirkt nicht super happy, und stellt fest: "NΓΆ da ist nichts. War vermutlich einfach eine Elektrode locker".

Ich hab ne neue Hausarztpraxis.

[–] smiletolerantly@awful.systems 15 points 1 day ago (1 children)

Ja hallo bitte Story danke.

[–] smiletolerantly@awful.systems 61 points 1 day ago (3 children)

Also, hard disagree.

100% stabil die Aktion der 19-jΓ€hrigen.

[–] smiletolerantly@awful.systems 29 points 5 days ago (1 children)

"average 50-59 year old weighs 5000 pounds" factoid actually just statistical error. Average person weighs 150 pounds. Pounds Georg, who lives in a cave and weighs over 50000000000000000000000000 pounds, is an outlier adn should not have been counted.

So in highschool, I was one of those annoying kids that went "why do we have to learn how to analyze poems? We're never gonna need this in real life" in English (well... German, but doesn't matter) class.

I'm deeply grateful for my teachers back then to patiently get me to do these things anyways, because there came a point in my life years later where I suddenly understood that those "useless" lessons and hours "wasted" analyzing Goethe and Borchert and Fitzgerald handed me the tools to understand media (and not just literature!) instead of just consuming it.

I hope it's clear how that relates to the screenshot. More than that though, I sometimes feel like the slew of shit media over the past decade is at least in part to blame on writers/studios/... now assuming people do in fact merely consume. But that's a rant that's completely off-topic here, so I'll shut up now.

I don't know. I had never seen another magical girl anime before, and it still stood out to me.

[–] smiletolerantly@awful.systems 1 points 5 days ago (1 children)

The Dvorak symphony or the Yusuke Kishi novel?

If the former, how dare you.
If the latter, ... sorry I haven't read it. γŠγ™γ™γ‚γ§γ™γ‹γ€‚

[–] smiletolerantly@awful.systems 5 points 6 days ago* (last edited 6 days ago) (3 children)

Yeah, truly.

It's a beautiful encapsulation of "what the fuck".

[–] smiletolerantly@awful.systems 36 points 6 days ago* (last edited 6 days ago) (10 children)

"Madoka Magica" might as well be my trigger phase by now.

[–] smiletolerantly@awful.systems 15 points 1 week ago (1 children)

Add "linux" and enjoy the empty feed

[–] smiletolerantly@awful.systems 1 points 1 week ago* (last edited 1 week ago)

Awesome!! And thanks for actually letting me know! :D

Edit: anything for the wishlist?

 

cross-posted from: https://awful.systems/post/8238756

Basically, STT quality has kept me from switching to HomeAssistant's voice assistant features. The default matcher (Hassil) is waaaaaaay to strict, and LLMs are slow, constly, and/or a privacy nightmare, plus I don't like them.

I really thought there would be something available that just matches your STT output to the configured intents, but apparently not, so I've built in myself.

Finally convinced my GF to throw Alexa in the bin :)

Here's an excerpt from the README, and feel free to AMA:

🌲 Problem statement and solution

Speech-To-Text (STT) output, especially fast and local STT output, is often simply bad. HomeAssistant's own Hassil is incredibly picky: your STT output must match exactly to one of the configured intents.

There's two paths forward from this: Upgrade your hardware to support better STT, or try to figure out what the speaker probably meant to say from the garbled output.

This project does the latter.

With this custom integration, "Lights on in live in room" will actually turn on the lights in your living room. So will, for that matter, "lighrts on inn livainriomm".

Short demo, first with closest-intent, then with bare Hassil:

demo gif

Β 

πŸ“œ Highlights

  • Pattern expansion. Expanding <expansion_rules>, (alternatives|to), and [optional|alternatives] all work, including on HASS-defined lists like your home's areas and entities!
  • Slot extraction. Both for wildcard slots (like for adding something to the shopping list, where the {item} is a wildcard), and against slots like {timer_hours:hours} with a fixed set of possibilities.
  • Fuzzy slot resolution. For list-like slots and expansion rules (including your areas and entities!), fuzzy match the slot values to the available options. Allows "livikroom" to be corrected to "living room".
  • Actual intent handling still done by Hassil. closest-intent simply corrects your STT output or typos to the closest matching intent, and then forwards a nice, canonical sentence to Hassil, who then deals with the intent just like if you had spoken/typed perfectly.
  • 100% LLM-free. Just uses relatively simple fuzzy matching of the input against your intents, plus some clever-ish (well... working, at least) tricks to improve the results.
  • Fallback agent support. OK, I said 100% LLM-free, but if you absolutely want to, you can use one as fallback. More on this below.
  • Is fast :) (as in: basically instant for a couple hundred configured custom intents).

Note: closest-intent is completely language-agnostic. All the examples in this README are in English, but you can use it with any language you like; personally, I use it in German.

Β 

πŸ“‹ Examples

Here's some examples of things I said, what my STT (wyoming-faster-whisper-base) understood, what HomeAssistant was able to do/answer after passing the STT output through closest-intent, and what the same STT output would have resulted in with just bare Hassil.

Note: These are actual results I got when speaking the "what was said" sentences in my phone. I'm a native German speaker, and so I do have an accent, but this pretty closely matches my experience when using the German-language version of whisper. The "bare Hassil" responses are what I got after 1:1 pasting the STT output into the voice assist chat window with closest-intent disabled.

| what was said | STT output | with Closest Intent | bare Hassil | |


|


|


|


|

| start cleaning | Star cleaning. | βœ… Cleaning started. | ❌ Sorry, I couldn't understand that | | stop cleaning | Stop clenching! | βœ… Cleaning stopped. | ❌ Sorry, I am not aware of any device called clenching | | vacuum the living room | Vacuum Believing Room | βœ… Cleaning the living room. | ❌ Sorry, I am unaware of any floor called Believing Room | | clean the office | King the Office | βœ… Cleaning the office. | ❌ Sorry, there are multiple devices called Office (author's note: no there aren't, wtf?) | | vacuum the kitchen | Back here in the kitchen. | βœ… Cleaning the kitchen. | ❌ Sorry, I couldn't understand that | | how warm is it in the bedroom | Our all is in the best room. | βœ… In the bedroom, the temperature is currently.... | ❌ Sorry, I am not aware of any area called best room | | add milk to the shopping list | Add milk to the chauvinist. | βœ… "milk" added. | ❌ Sorry, I am not aware of any device called chauvinist | | put call dentist on my todo list | put call dentist on my tudu list | βœ… "call dentist" added. | ❌ Sorry, I am not aware of any device called tudu | | turn on the water pump | turn on the what her pump | βœ… Turned on the water pump. | ❌ Sorry, I am not aware of any device called what her pump | | play some music | Place on music | βœ… Playing music. | ❌ Sorry, I am not aware of any area called music | | resume the music | Renew Music | βœ… Resuming. | ❌ Sorry, I couldn't understand that | | pause the music | Post music | βœ… Paused. | ❌ Sorry, I couldn't understand that | | next track | next rack | βœ… Next track. | ❌ Sorry, I am not aware of any device called rack | | enable shuffle | an able shuffling | βœ… Shuffle enabled. | ❌ Sorry, I couldn't understand that | | disable shuffle | Disable to schaffen. | βœ… Shuffle disabled. | ❌ Sorry, I am not aware of any device called Disable | | restart the player | Reset the plan. | βœ… Restarting the player. | ❌ Sorry, I am not aware of any area called Reset | | play a random album | Player random album | βœ… Playing a random album. | ❌ Sorry, I couldn't understand that | | play a random artist | Player and Immartist. | βœ… Playing a random artist. | ❌ Sorry, I couldn't understand that | | play the latest tracks | Plan the ladder tracks. | βœ… Playing recently added tracks. | ❌ Sorry, I am not aware of any area called Plan | | play recently played songs | Player recently played so... | βœ… Playing recently heard tracks. | ❌ Sorry, I couldn't understand that | | play playlist NieR | Play playlist NEAR! | βœ… Playing the playlist NieR. | ❌ Sorry, I couldn't understand that | | play my daily briefing | and play my daily breathing | βœ… Here is your daily briefing: ... | ❌ Sorry, I am not aware of any area called and play | | what time is it | What the hell is it? | βœ… It is 16:36. | βœ… It is 16:36. (author's note: okay, know what? earned. did not expect that.) | | what day is it today | One day is today. | βœ… Today is Friday. | βœ…/❌ May 8th, 2026 (author's note: that's the output for "What date is it?", but, eh, close enough) | | make the tv brighter | Make that CV brighter. | βœ… Screen is now bright. | ❌ Sorry, I couldn't understand that | | set the screen darker | The screen doctor. | βœ… Screen is now dark. | ❌ Sorry, I am not aware of any device called screen doctor | | what's the weather today | What's the matter with you? | βœ… Today, the weather is... | ❌ It is 16:36. (author's note: wait, WHAT?) | | how's the weather tomorrow morning | How's the better tomorrow? | βœ… Tomorrow morning, it will be... | ❌ Sorry, I am not aware of any area called How's | | what's the weather this week | What's the matter this weak | βœ… Monday:..., Tuesday:..., | ❌ It is 16:36. (author's note: sigh...) | | how's the weather at 5 o'clock | cast the red there at 5 o'clock | βœ… At 5 o'clock, it will be... | ❌ Sorry, I am not aware of any area called cast | | how windy is it right now | how windy is IR low | βœ… The wind is currently blowing with... | ❌ No timers. | | how windy will it be tonight | How will you be tonight? | βœ… Tonight, the wind speed will be around... | ❌ Sorry, I couldn't understand that | | how hot will it get today | How hard will it get today? | βœ… Today, temperatures will reach up to... | ❌ Sorry, I couldn't understand that | | will it rain today | with it right today | βœ… No rain is expected today. | ❌ Sorry, I couldn't understand that |

...you get the idea.

Β 

πŸ’‘ How it works

closest-intent is registered in HomeAssistant as a conversation agent. On startup, it parses (by default) all user-defined intents (or optionally, also the builtins ones). In this process, it also expands all rules, like <expansion_rule>, (alternatives|to), and [optionals], and notes where {slots} are located, and whether they are wildcards or belong to some list (like areas, entities, or the numbers 1-100).

When a user request comes in (via voice command or the chat box), closest-intent fuzzy-matches that request against those expanded rules. If the rule does not contain a slot, it is picked immediately. If it does contain a slot, closest-intent performs a sequence of fancy magic steps to find the best-fitting slot value among a range of possible positions within the top-scoring matched sentences. In practice, this often means "smallest slot-value on a word-boundary", but the extraction is not limited to that.

With the best match found, we then reconstruct the "canonical form", i.e. a sentence that Hassil will actually understand. If in your configured intents, "Play some music." exists, and closest-intent got "Place on music" and matched that to the intent, it will simply forward "Play some music." to Hassil. If the intent contained a slot, the extracted value will be substituted.

This guarantees that the sentence passed to Hassil will actually be understood, and allows us to not have to worry at all about performing actions, running scripts,...

If no matching intent could be found, we pass the exact input we got to the configured fallback agent. By default, that is simply Hassil (which again allows us to be lazy and not worry about proper error responses), or another agent, like a LLM.

 

Basically, STT quality has kept me from switching to HomeAssistant's voice assistant features. The default matcher (Hassil) is waaaaaaay to strict, and LLMs are slow, constly, and/or a privacy nightmare, plus I don't like them.

I really thought there would be something available that just matches your STT output to the configured intents, but apparently not, so I've built in myself.

Finally convinced my GF to throw Alexa in the bin :)

Here's an excerpt from the README, and feel free to AMA:

🌲 Problem statement and solution

Speech-To-Text (STT) output, especially fast and local STT output, is often simply bad. HomeAssistant's own Hassil is incredibly picky: your STT output must match exactly to one of the configured intents.

There's two paths forward from this: Upgrade your hardware to support better STT, or try to figure out what the speaker probably meant to say from the garbled output.

This project does the latter.

With this custom integration, "Lights on in live in room" will actually turn on the lights in your living room. So will, for that matter, "lighrts on inn livainriomm".

Short demo, first with closest-intent, then with bare Hassil:

demo gif

Β 

πŸ“œ Highlights

  • Pattern expansion. Expanding <expansion_rules>, (alternatives|to), and [optional|alternatives] all work, including on HASS-defined lists like your home's areas and entities!
  • Slot extraction. Both for wildcard slots (like for adding something to the shopping list, where the {item} is a wildcard), and against slots like {timer_hours:hours} with a fixed set of possibilities.
  • Fuzzy slot resolution. For list-like slots and expansion rules (including your areas and entities!), fuzzy match the slot values to the available options. Allows "livikroom" to be corrected to "living room".
  • Actual intent handling still done by Hassil. closest-intent simply corrects your STT output or typos to the closest matching intent, and then forwards a nice, canonical sentence to Hassil, who then deals with the intent just like if you had spoken/typed perfectly.
  • 100% LLM-free. Just uses relatively simple fuzzy matching of the input against your intents, plus some clever-ish (well... working, at least) tricks to improve the results.
  • Fallback agent support. OK, I said 100% LLM-free, but if you absolutely want to, you can use one as fallback. More on this below.
  • Is fast :) (as in: basically instant for a couple hundred configured custom intents).

Note: closest-intent is completely language-agnostic. All the examples in this README are in English, but you can use it with any language you like; personally, I use it in German.

Β 

πŸ“‹ Examples

Here's some examples of things I said, what my STT (wyoming-faster-whisper-base) understood, what HomeAssistant was able to do/answer after passing the STT output through closest-intent, and what the same STT output would have resulted in with just bare Hassil.

Note: These are actual results I got when speaking the "what was said" sentences in my phone. I'm a native German speaker, and so I do have an accent, but this pretty closely matches my experience when using the German-language version of whisper. The "bare Hassil" responses are what I got after 1:1 pasting the STT output into the voice assist chat window with closest-intent disabled.

| what was said | STT output | with Closest Intent | bare Hassil | |


|


|


|


| | start cleaning | Star cleaning. | βœ… Cleaning started. | ❌ Sorry, I couldn't understand that | | stop cleaning | Stop clenching! | βœ… Cleaning stopped. | ❌ Sorry, I am not aware of any device called clenching | | vacuum the living room | Vacuum Believing Room | βœ… Cleaning the living room. | ❌ Sorry, I am unaware of any floor called Believing Room | | clean the office | King the Office | βœ… Cleaning the office. | ❌ Sorry, there are multiple devices called Office (author's note: no there aren't, wtf?) | | vacuum the kitchen | Back here in the kitchen. | βœ… Cleaning the kitchen. | ❌ Sorry, I couldn't understand that | | how warm is it in the bedroom | Our all is in the best room. | βœ… In the bedroom, the temperature is currently.... | ❌ Sorry, I am not aware of any area called best room | | add milk to the shopping list | Add milk to the chauvinist. | βœ… "milk" added. | ❌ Sorry, I am not aware of any device called chauvinist | | put call dentist on my todo list | put call dentist on my tudu list | βœ… "call dentist" added. | ❌ Sorry, I am not aware of any device called tudu | | turn on the water pump | turn on the what her pump | βœ… Turned on the water pump. | ❌ Sorry, I am not aware of any device called what her pump | | play some music | Place on music | βœ… Playing music. | ❌ Sorry, I am not aware of any area called music | | resume the music | Renew Music | βœ… Resuming. | ❌ Sorry, I couldn't understand that | | pause the music | Post music | βœ… Paused. | ❌ Sorry, I couldn't understand that | | next track | next rack | βœ… Next track. | ❌ Sorry, I am not aware of any device called rack | | enable shuffle | an able shuffling | βœ… Shuffle enabled. | ❌ Sorry, I couldn't understand that | | disable shuffle | Disable to schaffen. | βœ… Shuffle disabled. | ❌ Sorry, I am not aware of any device called Disable | | restart the player | Reset the plan. | βœ… Restarting the player. | ❌ Sorry, I am not aware of any area called Reset | | play a random album | Player random album | βœ… Playing a random album. | ❌ Sorry, I couldn't understand that | | play a random artist | Player and Immartist. | βœ… Playing a random artist. | ❌ Sorry, I couldn't understand that | | play the latest tracks | Plan the ladder tracks. | βœ… Playing recently added tracks. | ❌ Sorry, I am not aware of any area called Plan | | play recently played songs | Player recently played so... | βœ… Playing recently heard tracks. | ❌ Sorry, I couldn't understand that | | play playlist NieR | Play playlist NEAR! | βœ… Playing the playlist NieR. | ❌ Sorry, I couldn't understand that | | play my daily briefing | and play my daily breathing | βœ… Here is your daily briefing: ... | ❌ Sorry, I am not aware of any area called and play | | what time is it | What the hell is it? | βœ… It is 16:36. | βœ… It is 16:36. (author's note: okay, know what? earned. did not expect that.) | | what day is it today | One day is today. | βœ… Today is Friday. | βœ…/❌ May 8th, 2026 (author's note: that's the output for "What date is it?", but, eh, close enough) | | make the tv brighter | Make that CV brighter. | βœ… Screen is now bright. | ❌ Sorry, I couldn't understand that | | set the screen darker | The screen doctor. | βœ… Screen is now dark. | ❌ Sorry, I am not aware of any device called screen doctor | | what's the weather today | What's the matter with you? | βœ… Today, the weather is... | ❌ It is 16:36. (author's note: wait, WHAT?) | | how's the weather tomorrow morning | How's the better tomorrow? | βœ… Tomorrow morning, it will be... | ❌ Sorry, I am not aware of any area called How's | | what's the weather this week | What's the matter this weak | βœ… Monday:..., Tuesday:..., | ❌ It is 16:36. (author's note: sigh...) | | how's the weather at 5 o'clock | cast the red there at 5 o'clock | βœ… At 5 o'clock, it will be... | ❌ Sorry, I am not aware of any area called cast | | how windy is it right now | how windy is IR low | βœ… The wind is currently blowing with... | ❌ No timers. | | how windy will it be tonight | How will you be tonight? | βœ… Tonight, the wind speed will be around... | ❌ Sorry, I couldn't understand that | | how hot will it get today | How hard will it get today? | βœ… Today, temperatures will reach up to... | ❌ Sorry, I couldn't understand that | | will it rain today | with it right today | βœ… No rain is expected today. | ❌ Sorry, I couldn't understand that |

...you get the idea.

Β 

πŸ’‘ How it works

closest-intent is registered in HomeAssistant as a conversation agent. On startup, it parses (by default) all user-defined intents (or optionally, also the builtins ones). In this process, it also expands all rules, like <expansion_rule>, (alternatives|to), and [optionals], and notes where {slots} are located, and whether they are wildcards or belong to some list (like areas, entities, or the numbers 1-100).

When a user request comes in (via voice command or the chat box), closest-intent fuzzy-matches that request against those expanded rules. If the rule does not contain a slot, it is picked immediately. If it does contain a slot, closest-intent performs a sequence of fancy magic steps to find the best-fitting slot value among a range of possible positions within the top-scoring matched sentences. In practice, this often means "smallest slot-value on a word-boundary", but the extraction is not limited to that.

With the best match found, we then reconstruct the "canonical form", i.e. a sentence that Hassil will actually understand. If in your configured intents, "Play some music." exists, and closest-intent got "Place on music" and matched that to the intent, it will simply forward "Play some music." to Hassil. If the intent contained a slot, the extracted value will be substituted.

This guarantees that the sentence passed to Hassil will actually be understood, and allows us to not have to worry at all about performing actions, running scripts,...

If no matching intent could be found, we pass the exact input we got to the configured fallback agent. By default, that is simply Hassil (which again allows us to be lazy and not worry about proper error responses), or another agent, like a LLM.

 

cross-posted from: https://awful.systems/post/8068330

This is a 50sqm balcony/terrace on the 2nd (3rd American) floor of a rental apartment building. I immediately knew we had to take the apartment, because having a balcony garden was my number 1 wish. In that sense, we definitely got super lucky.

This is year 4 of the garden, and it feels like we've reached "routine" with it. In the first year, we lugged about 2.5 cubic meters of soil up there to fill all the pots. From June-October, this space is enough to fill 100% of our (two people) vegetable needs.

Unsurprisingly, this is way too much to water by hand every day, not to mention when we're not home for some days/weeks. The balcony is also south-facing, and it gets hot in the summer (seriously, I have burnt my feet on the stones before).

Unfortunately, there's also no water outlet on the terrace itself, and the landlord said "no" to putting one there (which was expected, the way the house/apartment is built is not really suitable for that).

Our solution has been to put two 300l rain tanks on the balcony (atop of load bearing walls). They get filled by a hose from the kitchen tap whenever required. The barrels are connected by a second hose. In the one in the greenhouse, a rain barrel pump sucks water out, into a watering computer and optionally to a hose for manual watering.

From the watering computer, two watering circuits start; originally the plan was to distinguish between plants that constantly needed a bit of water, and ones that preferred a lot of water occasionally (e.g. the citrus plants); in practice, it turned out to be easier to just always water everything a bit. Oh well.

The watering computer itself it pretty dumb / not connected to an app or the like; it just opens the valves every 8 hours for (in the summer) 3 minutes each time. That's mostly OK. On super hot days, I sometimes start a fourth round of watering in the early afternoon.

The pump is however plugged into a Zigbee-enabled smart socket, which is controlled by an automation via HomeAssistant (so, all-locally, thankfully). The main purpose of this is an automation that disables the pump when there has been a lot of rain in the past 24hrs, or a moderate amount of rain in the past 8 hours. Not that important when we are home, but usually extends the number of days we can be away from home by 2-3 days for a full filling of the tanks.

Finally, here's some pictures and a video from the past couple of years. I think this year is the first year where no new pots were added, and we needed to buy hardly any new soil (the compost bin has really been worth it in that regard, as well!)

Happy to answer any questions!!

 

This is a 50sqm balcony/terrace on the 2nd (3rd American) floor of a rental apartment building. I immediately knew we had to take the apartment, because having a balcony garden was my number 1 wish. In that sense, we definitely got super lucky.

This is year 4 of the garden, and it feels like we've reached "routine" with it. In the first year, we lugged about 2.5 cubic meters of soil up there to fill all the pots. From June-October, this space is enough to fill 100% of our (two people) vegetable needs.

Unsurprisingly, this is way too much to water by hand every day, not to mention when we're not home for some days/weeks. The balcony is also south-facing, and it gets hot in the summer (seriously, I have burnt my feet on the stones before).

Unfortunately, there's also no water outlet on the terrace itself, and the landlord said "no" to putting one there (which was expected, the way the house/apartment is built is not really suitable for that).

Our solution has been to put two 300l rain tanks on the balcony (atop of load bearing walls). They get filled by a hose from the kitchen tap whenever required. The barrels are connected by a second hose. In the one in the greenhouse, a rain barrel pump sucks water out, into a watering computer and optionally to a hose for manual watering.

From the watering computer, two watering circuits start; originally the plan was to distinguish between plants that constantly needed a bit of water, and ones that preferred a lot of water occasionally (e.g. the citrus plants); in practice, it turned out to be easier to just always water everything a bit. Oh well.

The watering computer itself it pretty dumb / not connected to an app or the like; it just opens the valves every 8 hours for (in the summer) 3 minutes each time. That's mostly OK. On super hot days, I sometimes start a fourth round of watering in the early afternoon.

The pump is however plugged into a Zigbee-enabled smart socket, which is controlled by an automation via HomeAssistant (so, all-locally, thankfully). The main purpose of this is an automation that disables the pump when there has been a lot of rain in the past 24hrs, or a moderate amount of rain in the past 8 hours. Not that important when we are home, but usually extends the number of days we can be away from home by 2-3 days for a full filling of the tanks.

Finally, here's some pictures and a video from the past couple of years. I think this year is the first year where no new pots were added, and we needed to buy hardly any new soil (the compost bin has really been worth it in that regard, as well!)

Happy to answer any questions!!

 

Not an ad, I'm not involved with Bento (or Stirling, for that matter). I've been unhappy with Stirling for a while (why do documents need to be uploaded to the server? That makes it really hard to safely host publicly. Why is it so slow? Plus, too many things are put behind a fucking paywall).

Learned about Bento this morning, tried it out, really liked it, spent an hour today packaging it for nixpkgs. It doesn't quite have feature parity with Stirling yet, but at least for me, everything I need is there, it's fast, and it keeps processing in the browser. Like, not even joking: the output of the build process/nixpkg are just a couple of static HTML files and some WASM. No server-side components at all. Really refreshing to see.

 

A while back I played a round with the HASS Voice Assistant, and pretty easily got to a point where STT and TTS were working really well on my local installation. Also got the hardware to build wyoming satellites with wakeword recognition.

However, what kept me from going through the effort of setting everything up properly (and finally getting fucking Alexa out of my house) was the "all or nothing" approach HASS seemingly has to intent recognition. You either:

  • use the build in Assistant conversation agent, which is a pain in the ass because it matches what your STT recognized 1:1, letter by letter, so it's almost impossible to actually get it to do something unless you spoke perfectly (and forget, for example, about putting something on your ToDo list; Todo, todo, To-Do,... are all not recognized, and have fun getting your STT to reliably generate the ToDo spelling!), or
  • you slap a full-blown LLM behind it, either forcing you to again rely on a shitty company, or host the LLM locally; but even in the latter case and on decent (not H100, of course, but with a GPU at least) hardware, the results were slow and shit, and due to context size limitations, you can just forget about exposing all your entities to the LLM Agent.
  • You also have the option of combining the two approaches; match exactly first, if no intent recognized, forward to LLM; but in practice, that just means that sometimes, you get what you wanted ("all lights off" with a 70% success rate, I'd say), and still a lot of the time you have to wait for ages for a response that may be correct, but often isn't from the LLM.

What I'd like is a third option, doing fuzzy matching on what the STT generated. Indeed, there seems to have been multiple options for that through rhasspy, but that project appears to be dead? The HASS integration has not been updated in over 4 years, and the rhasspy repos are archived as of earlier this month.

Besides, it was not entirely clear to me if you could just use the intent recognition part of the project, forgoing the rest in favor of what HASS already brings to the table.

At this point, I am willing to implement a custom conversation agent, but wanted to make sure first that I haven't simply missed an obvious setting/addon/... for HASS.

My questions are:

  • are you using the HASS Voice Assistant without an LLM?
  • if so, how do you get your intents to be recognized reliably?
  • do you know of any setting/project/addon helping with that?

Cheers! Have a good start into the working week...!

 

If you've been selfhosting conduit or conduwuit, you probabl are aware that the conduwuit project was discontinued a couple months back.

I've been holding out on updating my matrix homeserver until it becomes clear which fork(s) will survive long term.

I feel like I can't put off updating for much longer now, plus the tuwunel nixpkg and -module were merged yesterday, so now the two most promising forks are both options for me.

Still, I'm unsure what route to take. Here's my thoughts:

  • not going through another round of this in a couple of months from now would be great, so stability and long-term maintenance promises would be great
  • I assume incompatibility between the forks, if not now then very soon; this is a "pick an option, then stick with it and pray" situation
  • tuwunel apparently has a full-time paid dev working on it now, which is great; at the same time, that means features will follow the priorities of the (as of now unknown) sponsor of the project
  • it is, however, the officially endorsed successor
  • it also seems like few other people are actively involved, putting in question development practices, reviews, and what happens should the lead dev throw in the towel
  • lastly, while there's been a lot of apparently rapid progress (with releases 1.0.0, 1.1.0, and 1.2.0 at quite a fast pace), the repo itself seems... empty? Few issues, few PRs, commentlessly-deleted issues
  • on the other hand, continuwuity seems more active by commit/contributors count, but is seemingly 100% volunteer work
  • they do seem to backport tuwunel changes and features, which is great!
  • they are not officially endorsed

In short: I fucking hate community drama. What fork did you go with? Is there anything else to consider? I just want an up-to-date matrix homeserver, and not to have to tell my users "sorry, starting from scratch because we picked the wrong fork..."

Update: there's been some back and forth on the nixpkgs PR, esp. one user who posted a lot of receipts here:

@scvalex @queeek180 @Askhalion you wanted links, here's some links :)

claim legitimacy over or de legitimise other projects:

https://matrix.to/#/#ping:maunium.net/$V9aN1Wn0pId-JWbxH1WV5I8PAVMajooX7WMFKmDyh6E
https://matrix.to/#/#ping:maunium.net/$IsfOfe8anRYqbRAwj7OdlX_hS-kBbHUJTVhQW-32Etk
https://matrix.to/#/#ping:maunium.net/$-Bswk96jj3ns8xpSISKH0Y24pXZ2Xcd6Rwl8mRZQIaM (ironic)
https://matrix.to/#/#meowlnir:maunium.net/$zOmf7-NIHfQ_f_Ku9Q794GeKyu8n9v2MAvPtYjlGJIE (ironic that he asked https://matrix.to/#/#meowlnir:maunium.net/$nE57Bi_DmvodZJe7JDPS7NxUBlxeDLUBhYIWNzgNk0g despite having cherrypicked a bunch of fixes from continuwuity already)
https://matrix.to/#/#tuwunel:grin.hu/$svIUeuWfm2VWuHGSUMeT5VWWcZclraKcmUaDK3NiYEM ("June and I dealt with another "continuwuity" called "grapevine" last year")

threats against the project:

https://matrix.to/#/#ping:maunium.net/$o27P102ebbFa9U80e-FK-DxGTupy8IJ3TSWFYJm6hIs
https://matrix.to/#/#ping:maunium.net/$priRlTsBuH2YfTo_pb04xHUJpTeU2DKXdJ7tAVrR5w4

personal threats:

https://matrix.to/#/#ping:maunium.net/$5YefXN_uVR5WiGfj32j3Po9Q1JMKuTTfxve_8IHp1J8
https://matrix.to/#/#ping:maunium.net/$L-dXYMXucfJiLkyc5dvv4t7pQqUKMwnLEd9zzLjZlu0

attempting to get security details released early (knowing only he and three other servers have finished implementing):

https://matrix.to/#%2F%21NasysSDfxKxZBzJJoE%3Amatrix.org%2F%24_d2wJk45JtwblMHRVBdfeEV1cAU5flPuRebTAvfOr-s%3Fvia=nexy7574.co.uk&via=matrix.org&via=element.io
https://matrix.to/#/#tuwunel:grin.hu/$mgi2dDGnL-L9Jqjm_YZPhu4NoAx8q3OMF9KIfRiGwFs

other trivia:

Jason getting his server ACL'ed from all foundation rooms:
https://matrix.to/#/!WuBtumawCeOGEieRrp:matrix.org/$u8YRBq_s-OrOpl4IGt15iUHPBKubKa4A_n-u_WbgqAU` - zemos.net ban
https://matrix.to/#/!WuBtumawCeOGEieRrp:matrix.org/$l8pKC-mR0tjLFnbnmi_8xSXbHGA3vgew-QTRWAk-kCs - wildcard ban on his domain

if any of these events get redacted, feel free to reach out and I will provide the original events - unredacted. just as another layer of certainty, when i provide the events, you can verify the server signing keys yourself, fairly trivially, as well as calculate the event ID (which is a hash). fetching the event from your $CONDUWUIT_DESCENDANT homeserver is as simple as running @conduit debug get-pdu $id in your admin room, as well as checking validity with @conduit debug verify-json or @conduit debug verify-pdu.

UPDATE: i've just been informed json signing is based on the redacted event, not the full input.

Honestly, that first link is all the info I needed. Keep reading, <100 messages and it becomes clear that I do not want to put the continuation of my homeserver into Jasons/tuwunels hands. Going to migrate to continuwuity later today.

 

Danke!! Endlich sagt wer was!

 

Schadenfreude πŸ™‚

 

Five years ago, I bought a Supernote A5. It was (and mostly still is) a great device for reading and writing on an eInk display, and it runs plain old linux.

The deciding reason I went for this device instead of the competition is that I was "under the impression" that they were about to enable full SSH access to the device! Awesome!

"Why were you under that impression?", I hear the skeptics ask. Well, their spokesperson has stated that they would do so. Via mail, and on reddit, publicly, multiple times. I was still torn, so sent them a DM, asking if this was ineed factual. "Yes", they said, "the next quarterly update will enable SSH access!".

Great!

Well, it's been 5 years. They did not follow through. A couple updates were published, none contained the promised functionality, the spokesperson stopped answering questions about SSH. The last software update I received is from 2.5yrs ago. Mentions of the original Supernote A5 have largely been scrubbed from their website.

Let me be clear, the device still functions perfectly. But it is in danger of becoming e-waste because it is so needlessly complicated to get stuff on the device. I'm currently in need of an ebook reader with (ideally) OPDS capability, and I am pretty confident I'd be able to get something like koreader running on this, or at least just run a script to sync files over SSH. Also, I frankly feel wounded in my pride having a Linux device in my possession which refuses to do my bidding (I'm joking of course, but also I am 100% serious).

Here's all I know:

  • plugging it in via USB, the device reads as an MTP device, with access only to the documents/books/... stored on it
  • you can place an update.zip file (obtained from the SN website) into the root of that MTP directory, and upon reboot, the device will update. To me, this appears to be the most promising route of gaining access.
  • unfortunately, the zip file is encrypted. The decryption key clearly has to be known to the device, but since I have no access to it,...

I'm a software engineer, but I have zero knowledge of the "dark arts", so to speak. If anyone could help me (or point me into the right direction!), I would really be grateful. I don't want this (generally nice) product to turn into a paperweight instead of a paper replacement :(

 

Basically, the title. After years of inactivty, I'll be taking music (cello) lessons again, with my teacher of yesteryear, from whom I've moved half a country away.

She has suggested Zoom but is open to alternatives. I don't particularly like Zoom, plus I have a feeling better quality can be had through a custom solution - but I'm at a bit of a loss as to what exactly would be a good fit for this project.

Maybe Jitsi? Does someone here have experience with it and could tell me if it's possible to set something like a "target" audio quality?

For hardware, I basically have two options. Both are already in use, for different things, and have sufficient processing capabilities - albeit no GPU:

  • host everything at home. Plus: lowest possible latency from me to the server. Not sure how much that is worth though.
  • root server in the Hetzner cloud: much faster network speed. Again though, not sure how beneficial that is, the ultimate bottleneck will always be my upload speed (40Mbit)

OK, I realize that this post is a but of a random assortment of thoughts. I'd be really happy about suggestions and / or hearing about other's experiences with similar use-cases!

view more: next β€Ί